novelws 3.0.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. package/CHANGELOG.md +131 -0
  2. package/README.md +94 -66
  3. package/dist/commands/init.d.ts.map +1 -1
  4. package/dist/commands/init.js +35 -33
  5. package/dist/commands/init.js.map +1 -1
  6. package/dist/commands/upgrade.d.ts.map +1 -1
  7. package/dist/commands/upgrade.js +63 -6
  8. package/dist/commands/upgrade.js.map +1 -1
  9. package/dist/core/config.d.ts +22 -15
  10. package/dist/core/config.d.ts.map +1 -1
  11. package/dist/core/config.js +28 -16
  12. package/dist/core/config.js.map +1 -1
  13. package/dist/core/errors.d.ts +16 -0
  14. package/dist/core/errors.d.ts.map +1 -1
  15. package/dist/core/errors.js +26 -0
  16. package/dist/core/errors.js.map +1 -1
  17. package/dist/utils/diagnostics.d.ts +64 -0
  18. package/dist/utils/diagnostics.d.ts.map +1 -0
  19. package/dist/utils/diagnostics.js +227 -0
  20. package/dist/utils/diagnostics.js.map +1 -0
  21. package/package.json +1 -1
  22. package/templates/commands/analyze.md +27 -110
  23. package/templates/commands/character.md +32 -180
  24. package/templates/commands/checklist.md +27 -27
  25. package/templates/commands/clarify.md +2 -2
  26. package/templates/commands/constitution.md +8 -8
  27. package/templates/commands/expert.md +3 -3
  28. package/templates/commands/facts.md +9 -9
  29. package/templates/commands/guide.md +129 -19
  30. package/templates/commands/help-me.md +221 -0
  31. package/templates/commands/plan.md +27 -26
  32. package/templates/commands/recap.md +16 -16
  33. package/templates/commands/relations.md +13 -13
  34. package/templates/commands/revise.md +16 -15
  35. package/templates/commands/search.md +11 -10
  36. package/templates/commands/specify.md +4 -4
  37. package/templates/commands/tasks.md +9 -9
  38. package/templates/commands/timeline.md +13 -13
  39. package/templates/commands/track-init.md +8 -8
  40. package/templates/commands/track.md +177 -552
  41. package/templates/commands/volume-summary.md +6 -6
  42. package/templates/commands/write.md +148 -38
  43. package/templates/dot-claude/CLAUDE.md +5 -5
  44. package/templates/{config → resources/config}/keyword-mappings.json +19 -19
  45. package/templates/resources/genres/horror.md +211 -0
  46. package/templates/resources/genres/military.md +209 -0
  47. package/templates/resources/genres/sports.md +216 -0
  48. package/templates/resources/genres/workplace.md +214 -0
  49. package/templates/resources/genres/youth.md +219 -0
  50. package/templates/{knowledge-base/requirements/anti-ai-v4.md → resources/requirements/anti-ai-v4-deprecated.md} +13 -1
  51. package/templates/resources/requirements/anti-ai-v5-balanced.md +203 -0
  52. package/templates/{scripts → resources/scripts}/README.md +8 -8
  53. package/templates/{scripts → resources/scripts}/bash/analyze-story.sh +1 -1
  54. package/templates/resources/scripts/bash/check-analyze-stage.sh +108 -0
  55. package/templates/{scripts → resources/scripts}/bash/check-consistency.sh +7 -7
  56. package/templates/{scripts → resources/scripts}/bash/check-facts.sh +1 -1
  57. package/templates/{scripts → resources/scripts}/bash/check-plot.sh +2 -2
  58. package/templates/{scripts → resources/scripts}/bash/check-timeline.sh +3 -3
  59. package/templates/{scripts → resources/scripts}/bash/check-world.sh +5 -5
  60. package/templates/{scripts → resources/scripts}/bash/check-writing-state.sh +26 -26
  61. package/templates/{scripts → resources/scripts}/bash/common.sh +3 -3
  62. package/templates/{scripts → resources/scripts}/bash/constitution.sh +1 -1
  63. package/templates/{scripts → resources/scripts}/bash/init-tracking.sh +13 -13
  64. package/templates/{scripts → resources/scripts}/bash/manage-relations.sh +10 -10
  65. package/templates/resources/scripts/bash/migrate-tracking.sh +183 -0
  66. package/templates/{scripts → resources/scripts}/bash/plan-story.sh +2 -2
  67. package/templates/{scripts → resources/scripts}/bash/specify-story.sh +1 -1
  68. package/templates/{scripts → resources/scripts}/bash/tasks-story.sh +2 -2
  69. package/templates/{scripts → resources/scripts}/bash/tests/bench-preload-cache.sh +3 -3
  70. package/templates/{scripts → resources/scripts}/bash/tests/test-cross-platform.sh +1 -1
  71. package/templates/{scripts → resources/scripts}/bash/tests/test-preload-cache.sh +1 -1
  72. package/templates/{scripts → resources/scripts}/bash/tests/test-regex-precompile.sh +4 -4
  73. package/templates/{scripts → resources/scripts}/bash/text-audit.sh +3 -3
  74. package/templates/{scripts → resources/scripts}/bash/track-progress.sh +5 -5
  75. package/templates/{scripts → resources/scripts}/powershell/analyze-story.ps1 +1 -1
  76. package/templates/{scripts → resources/scripts}/powershell/check-consistency.ps1 +8 -8
  77. package/templates/{scripts → resources/scripts}/powershell/check-plot.ps1 +2 -2
  78. package/templates/{scripts → resources/scripts}/powershell/check-timeline.ps1 +2 -2
  79. package/templates/{scripts → resources/scripts}/powershell/check-writing-state.ps1 +31 -31
  80. package/templates/{scripts → resources/scripts}/powershell/common.ps1 +2 -2
  81. package/templates/{scripts → resources/scripts}/powershell/constitution.ps1 +1 -1
  82. package/templates/{scripts → resources/scripts}/powershell/init-tracking.ps1 +5 -5
  83. package/templates/{scripts → resources/scripts}/powershell/manage-relations.ps1 +6 -6
  84. package/templates/{scripts → resources/scripts}/powershell/migrate-tracking.ps1 +1 -1
  85. package/templates/{scripts → resources/scripts}/powershell/plan-story.ps1 +2 -2
  86. package/templates/{scripts → resources/scripts}/powershell/specify-story.ps1 +1 -1
  87. package/templates/{scripts → resources/scripts}/powershell/tests/bench-ps-cache.ps1 +10 -10
  88. package/templates/{scripts → resources/scripts}/powershell/tests/test-ps-cache.ps1 +4 -4
  89. package/templates/{scripts → resources/scripts}/powershell/text-audit.ps1 +2 -2
  90. package/templates/{scripts → resources/scripts}/powershell/track-progress.ps1 +2 -2
  91. package/templates/skills/analysis/character-analysis/SKILL.md +1 -1
  92. package/templates/skills/analysis/foreshadow-analysis/SKILL.md +1 -1
  93. package/templates/skills/analysis/hook-analysis/SKILL.md +2 -2
  94. package/templates/skills/analysis/logic-analysis/SKILL.md +2 -2
  95. package/templates/skills/analysis/opening-analysis/SKILL.md +1 -1
  96. package/templates/skills/analysis/pacing-analysis/SKILL.md +1 -1
  97. package/templates/skills/analysis/power-analysis/SKILL.md +3 -3
  98. package/templates/skills/analysis/reader-analysis/SKILL.md +1 -1
  99. package/templates/skills/analysis/style-analysis/SKILL.md +1 -1
  100. package/templates/skills/analysis/voice-analysis/SKILL.md +1 -1
  101. package/templates/skills/auto-tracking/SKILL.md +1 -1
  102. package/templates/skills/quality-assurance/consistency-checker/SKILL.md +1 -1
  103. package/templates/skills/quality-assurance/facts-checker/SKILL.md +2 -2
  104. package/templates/skills/quality-assurance/hook-checker/SKILL.md +2 -2
  105. package/templates/skills/quality-assurance/long-series-continuity/SKILL.md +7 -7
  106. package/templates/skills/quality-assurance/pre-write-checklist/SKILL.md +22 -22
  107. package/templates/skills/quality-assurance/setting-detector/SKILL.md +15 -15
  108. package/templates/skills/quality-assurance/voice-consistency-checker/SKILL.md +1 -1
  109. package/templates/skills/writing-techniques/character-arc/SKILL.md +1 -1
  110. package/templates/skills/writing-techniques/multi-thread-narrative/SKILL.md +1 -1
  111. package/templates/skills/writing-techniques/reader-expectation/SKILL.md +1 -1
  112. package/templates/skills/writing-techniques/revision-polish/SKILL.md +1 -1
  113. package/templates/skills/writing-techniques/style-learning/SKILL.md +2 -2
  114. package/templates/skills/writing-techniques/writing-balance/.gitkeep +0 -0
  115. package/templates/skills/writing-techniques/writing-balance/SKILL.md +460 -0
  116. package/templates/skills/writing-techniques/writing-techniques/SKILL.md +727 -0
  117. package/templates/knowledge-base/README.md +0 -285
  118. package/templates/scripts/powershell/check-writing-state.ps1.backup +0 -135
  119. /package/templates/{knowledge-base → resources}/character-archetypes/01-hero.md +0 -0
  120. /package/templates/{knowledge-base → resources}/character-archetypes/02-mentor.md +0 -0
  121. /package/templates/{knowledge-base → resources}/character-archetypes/03-shadow.md +0 -0
  122. /package/templates/{knowledge-base → resources}/character-archetypes/04-ally.md +0 -0
  123. /package/templates/{knowledge-base → resources}/character-archetypes/05-shapeshifter.md +0 -0
  124. /package/templates/{knowledge-base → resources}/character-archetypes/06-trickster.md +0 -0
  125. /package/templates/{knowledge-base → resources}/character-archetypes/07-threshold-guardian.md +0 -0
  126. /package/templates/{knowledge-base → resources}/character-archetypes/08-herald.md +0 -0
  127. /package/templates/{knowledge-base → resources}/character-archetypes/09-father.md +0 -0
  128. /package/templates/{knowledge-base → resources}/character-archetypes/10-mother.md +0 -0
  129. /package/templates/{knowledge-base → resources}/character-archetypes/11-child.md +0 -0
  130. /package/templates/{knowledge-base → resources}/character-archetypes/12-sage.md +0 -0
  131. /package/templates/{knowledge-base → resources}/character-archetypes/README.md +0 -0
  132. /package/templates/{knowledge-base → resources}/character-archetypes/application-guide.md +0 -0
  133. /package/templates/{knowledge-base → resources}/character-archetypes/archetype-combinations.md +0 -0
  134. /package/templates/{knowledge-base → resources}/character-archetypes/config.yaml +0 -0
  135. /package/templates/{knowledge-base → resources}/character-archetypes/examples-analysis.md +0 -0
  136. /package/templates/{specification-example.md → resources/config/specification-example.md} +0 -0
  137. /package/templates/{knowledge-base → resources}/craft/character-arc.md +0 -0
  138. /package/templates/{knowledge-base → resources}/craft/dialogue.md +0 -0
  139. /package/templates/{knowledge-base → resources}/craft/hook-design.md +0 -0
  140. /package/templates/{knowledge-base → resources}/craft/pacing.md +0 -0
  141. /package/templates/{knowledge-base → resources}/craft/power-system.md +0 -0
  142. /package/templates/{knowledge-base → resources}/craft/scene-structure.md +0 -0
  143. /package/templates/{knowledge-base → resources}/craft/show-not-tell.md +0 -0
  144. /package/templates/{knowledge-base → resources}/craft/story-structures.md +0 -0
  145. /package/templates/{knowledge-base → resources}/craft/tension-management.md +0 -0
  146. /package/templates/{knowledge-base → resources}/emotional-beats/01-first-meeting.md +0 -0
  147. /package/templates/{knowledge-base → resources}/emotional-beats/02-bonding-moment.md +0 -0
  148. /package/templates/{knowledge-base → resources}/emotional-beats/03-declaration.md +0 -0
  149. /package/templates/{knowledge-base → resources}/emotional-beats/04-triumph.md +0 -0
  150. /package/templates/{knowledge-base → resources}/emotional-beats/05-reunion.md +0 -0
  151. /package/templates/{knowledge-base → resources}/emotional-beats/06-forgiveness.md +0 -0
  152. /package/templates/{knowledge-base → resources}/emotional-beats/07-betrayal.md +0 -0
  153. /package/templates/{knowledge-base → resources}/emotional-beats/08-loss.md +0 -0
  154. /package/templates/{knowledge-base → resources}/emotional-beats/09-rejection.md +0 -0
  155. /package/templates/{knowledge-base → resources}/emotional-beats/10-failure.md +0 -0
  156. /package/templates/{knowledge-base → resources}/emotional-beats/11-misunderstanding.md +0 -0
  157. /package/templates/{knowledge-base → resources}/emotional-beats/12-farewell.md +0 -0
  158. /package/templates/{knowledge-base → resources}/emotional-beats/13-revelation.md +0 -0
  159. /package/templates/{knowledge-base → resources}/emotional-beats/14-point-of-no-return.md +0 -0
  160. /package/templates/{knowledge-base → resources}/emotional-beats/15-dark-night.md +0 -0
  161. /package/templates/{knowledge-base → resources}/emotional-beats/16-sacrifice.md +0 -0
  162. /package/templates/{knowledge-base → resources}/emotional-beats/17-awakening.md +0 -0
  163. /package/templates/{knowledge-base → resources}/emotional-beats/18-confrontation.md +0 -0
  164. /package/templates/{knowledge-base → resources}/emotional-beats/19-bittersweet-goodbye.md +0 -0
  165. /package/templates/{knowledge-base → resources}/emotional-beats/20-moral-dilemma.md +0 -0
  166. /package/templates/{knowledge-base → resources}/emotional-beats/21-temptation.md +0 -0
  167. /package/templates/{knowledge-base → resources}/emotional-beats/22-redemption.md +0 -0
  168. /package/templates/{knowledge-base → resources}/emotional-beats/README.md +0 -0
  169. /package/templates/{knowledge-base → resources}/emotional-beats/beat-sequences.md +0 -0
  170. /package/templates/{knowledge-base → resources}/emotional-beats/config.yaml +0 -0
  171. /package/templates/{knowledge-base → resources}/emotional-beats/pacing-guide.md +0 -0
  172. /package/templates/{knowledge-base → resources}/genres/game-lit.md +0 -0
  173. /package/templates/{knowledge-base → resources}/genres/historical.md +0 -0
  174. /package/templates/{knowledge-base → resources}/genres/mystery.md +0 -0
  175. /package/templates/{knowledge-base → resources}/genres/rebirth.md +0 -0
  176. /package/templates/{knowledge-base → resources}/genres/revenge.md +0 -0
  177. /package/templates/{knowledge-base → resources}/genres/romance.md +0 -0
  178. /package/templates/{knowledge-base → resources}/genres/sci-fi.md +0 -0
  179. /package/templates/{knowledge-base → resources}/genres/thriller.md +0 -0
  180. /package/templates/{knowledge-base → resources}/genres/urban.md +0 -0
  181. /package/templates/{knowledge-base → resources}/genres/wuxia.md +0 -0
  182. /package/templates/{knowledge-base → resources}/genres/xuanhuan.md +0 -0
  183. /package/templates/{memory → resources/memory}/constitution.md +0 -0
  184. /package/templates/{memory → resources/memory}/personal-voice.md +0 -0
  185. /package/templates/{knowledge-base → resources}/references/README.md +0 -0
  186. /package/templates/{knowledge-base → resources}/references/china-1920s/culture.md +0 -0
  187. /package/templates/{knowledge-base → resources}/references/china-1920s/daily-life.md +0 -0
  188. /package/templates/{knowledge-base → resources}/references/china-1920s/overview.md +0 -0
  189. /package/templates/{knowledge-base → resources}/references/china-1920s/society.md +0 -0
  190. /package/templates/{knowledge-base → resources}/references/china-1920s/warlords.md +0 -0
  191. /package/templates/{knowledge-base → resources}/references/cultivation-world/daily-life.md +0 -0
  192. /package/templates/{knowledge-base → resources}/references/cultivation-world/overview.md +0 -0
  193. /package/templates/{knowledge-base → resources}/references/cultivation-world/power-system.md +0 -0
  194. /package/templates/{knowledge-base → resources}/references/cultivation-world/sects.md +0 -0
  195. /package/templates/{knowledge-base → resources}/references/cultivation-world/world-setting.md +0 -0
  196. /package/templates/{knowledge-base → resources}/references/modern-workplace/corporate.md +0 -0
  197. /package/templates/{knowledge-base → resources}/references/modern-workplace/daily-life.md +0 -0
  198. /package/templates/{knowledge-base → resources}/references/modern-workplace/overview.md +0 -0
  199. /package/templates/{knowledge-base → resources}/references/modern-workplace/relationships.md +0 -0
  200. /package/templates/{knowledge-base → resources}/references/modern-workplace/tech-industry.md +0 -0
  201. /package/templates/{knowledge-base → resources}/references/tang-dynasty/culture.md +0 -0
  202. /package/templates/{knowledge-base → resources}/references/tang-dynasty/daily-life.md +0 -0
  203. /package/templates/{knowledge-base → resources}/references/tang-dynasty/overview.md +0 -0
  204. /package/templates/{knowledge-base → resources}/references/tang-dynasty/politics.md +0 -0
  205. /package/templates/{knowledge-base → resources}/references/tang-dynasty/society.md +0 -0
  206. /package/templates/{knowledge-base → resources}/requirements/README.md +0 -0
  207. /package/templates/{knowledge-base → resources}/requirements/anti-ai-v3.md +0 -0
  208. /package/templates/{knowledge-base → resources}/requirements/concretization.md +0 -0
  209. /package/templates/{knowledge-base → resources}/requirements/fast-paced.md +0 -0
  210. /package/templates/{knowledge-base → resources}/requirements/no-poison.md +0 -0
  211. /package/templates/{knowledge-base → resources}/requirements/romance-angst.md +0 -0
  212. /package/templates/{knowledge-base → resources}/requirements/romance-sweet.md +0 -0
  213. /package/templates/{knowledge-base → resources}/requirements/serious-literature.md +0 -0
  214. /package/templates/{knowledge-base → resources}/requirements/strong-emotion.md +0 -0
  215. /package/templates/{scripts → resources/scripts}/bash/clarify-story.sh +0 -0
  216. /package/templates/{scripts → resources/scripts}/bash/generate-tasks.sh +0 -0
  217. /package/templates/{scripts → resources/scripts}/bash/test-word-count.sh +0 -0
  218. /package/templates/{scripts → resources/scripts}/bash/tests/run-all-benchmarks.sh +0 -0
  219. /package/templates/{scripts → resources/scripts}/bash/tests/test-cache-semantics.sh +0 -0
  220. /package/templates/{scripts → resources/scripts}/bash/tests/test-edge-cases-bash.sh +0 -0
  221. /package/templates/{scripts → resources/scripts}/bash/tests/test-phase1-bash.sh +0 -0
  222. /package/templates/{scripts → resources/scripts}/bash/tests/test-regression-bash.sh +0 -0
  223. /package/templates/{scripts → resources/scripts}/bash/tests/test-task6-verification.sh +0 -0
  224. /package/templates/{scripts → resources/scripts}/powershell/check-analyze-stage.ps1 +0 -0
  225. /package/templates/{scripts → resources/scripts}/powershell/check-facts.ps1 +0 -0
  226. /package/templates/{scripts → resources/scripts}/powershell/clarify-story.ps1 +0 -0
  227. /package/templates/{scripts → resources/scripts}/powershell/generate-tasks.ps1 +0 -0
  228. /package/templates/{scripts → resources/scripts}/powershell/tests/test-cross-platform.ps1 +0 -0
  229. /package/templates/{scripts → resources/scripts}/powershell/tests/test-edge-cases-ps.ps1 +0 -0
  230. /package/templates/{scripts → resources/scripts}/powershell/tests/test-phase1-ps.ps1 +0 -0
  231. /package/templates/{scripts → resources/scripts}/powershell/tests/test-regression-ps.ps1 +0 -0
  232. /package/templates/{knowledge-base → resources}/styles/README.md +0 -0
  233. /package/templates/{knowledge-base → resources}/styles/ancient-style.md +0 -0
  234. /package/templates/{knowledge-base → resources}/styles/literary.md +0 -0
  235. /package/templates/{knowledge-base → resources}/styles/minimal.md +0 -0
  236. /package/templates/{knowledge-base → resources}/styles/natural-voice.md +0 -0
  237. /package/templates/{knowledge-base → resources}/styles/web-novel.md +0 -0
@@ -29,7 +29,7 @@ check_story_files() {
29
29
  local missing_files=()
30
30
 
31
31
  # 检查基准文档
32
- [ ! -f ".specify/memory/constitution.md" ] && missing_files+=("宪法文件")
32
+ [ ! -f "resources/memory/constitution.md" ] && missing_files+=("宪法文件")
33
33
  [ ! -f "$STORY_DIR/specification.md" ] && missing_files+=("规格文件")
34
34
  [ ! -f "$STORY_DIR/creative-plan.md" ] && missing_files+=("计划文件")
35
35
 
@@ -0,0 +1,108 @@
1
+ #!/usr/bin/env bash
2
+ # 检测 analyze 命令应该执行的阶段
3
+ # 返回 JSON 格式的阶段信息
4
+
5
+ set -euo pipefail
6
+
7
+ # 解析参数
8
+ JSON_OUTPUT=false
9
+ while [[ $# -gt 0 ]]; do
10
+ case $1 in
11
+ --json|-j)
12
+ JSON_OUTPUT=true
13
+ shift
14
+ ;;
15
+ *)
16
+ echo "未知参数: $1" >&2
17
+ exit 1
18
+ ;;
19
+ esac
20
+ done
21
+
22
+ # 加载公共函数
23
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
24
+ source "${SCRIPT_DIR}/common.sh"
25
+
26
+ # 获取项目根目录和故事目录
27
+ if ! PROJECT_ROOT=$(get_project_root); then
28
+ echo "错误: 无法获取项目根目录" >&2
29
+ exit 1
30
+ fi
31
+
32
+ if ! STORY_DIR=$(get_current_story_dir); then
33
+ echo "错误: 未找到故事目录" >&2
34
+ exit 1
35
+ fi
36
+
37
+ # 默认返回值
38
+ ANALYZE_TYPE="content"
39
+ CHAPTER_COUNT=0
40
+ HAS_SPEC=false
41
+ HAS_PLAN=false
42
+ HAS_TASKS=false
43
+ REASON=""
44
+
45
+ # 检查规格文件
46
+ SPEC_PATH="${STORY_DIR}/specification.md"
47
+ if [[ -f "$SPEC_PATH" ]]; then
48
+ HAS_SPEC=true
49
+ fi
50
+
51
+ # 检查计划文件
52
+ PLAN_PATH="${STORY_DIR}/creative-plan.md"
53
+ if [[ -f "$PLAN_PATH" ]]; then
54
+ HAS_PLAN=true
55
+ fi
56
+
57
+ # 检查任务文件
58
+ TASKS_PATH="${STORY_DIR}/tasks.md"
59
+ if [[ -f "$TASKS_PATH" ]]; then
60
+ HAS_TASKS=true
61
+ fi
62
+
63
+ # 统计章节数量
64
+ CONTENT_DIR="${STORY_DIR}/content"
65
+ if [[ ! -d "$CONTENT_DIR" ]]; then
66
+ CONTENT_DIR="${STORY_DIR}/chapters"
67
+ fi
68
+
69
+ if [[ -d "$CONTENT_DIR" ]]; then
70
+ # 统计 .md 文件数量(排除索引文件)
71
+ CHAPTER_COUNT=$(find "$CONTENT_DIR" -maxdepth 1 -type f -name "*.md" \
72
+ ! -name "README.md" ! -name "index.md" 2>/dev/null | wc -l)
73
+ fi
74
+
75
+ # 决策逻辑
76
+ if [[ $CHAPTER_COUNT -eq 0 ]]; then
77
+ # 无章节内容 → 框架分析
78
+ ANALYZE_TYPE="framework"
79
+ REASON="无章节内容,建议进行框架一致性分析"
80
+ elif [[ $CHAPTER_COUNT -lt 3 ]]; then
81
+ # 章节数量不足 → 框架分析(但提示可以开始写作)
82
+ ANALYZE_TYPE="framework"
83
+ REASON="章节数量较少(${CHAPTER_COUNT} 章),建议继续写作或进行框架验证"
84
+ else
85
+ # 章节充足 → 内容分析
86
+ ANALYZE_TYPE="content"
87
+ REASON="已完成 ${CHAPTER_COUNT} 章,可进行内容质量分析"
88
+ fi
89
+
90
+ # 输出 JSON 或人类可读格式
91
+ if [[ "$JSON_OUTPUT" == true ]]; then
92
+ # JSON 格式输出
93
+ cat <<EOF
94
+ {"analyze_type":"${ANALYZE_TYPE}","chapter_count":${CHAPTER_COUNT},"has_spec":${HAS_SPEC},"has_plan":${HAS_PLAN},"has_tasks":${HAS_TASKS},"story_dir":"${STORY_DIR}","reason":"${REASON}"}
95
+ EOF
96
+ else
97
+ # 人类可读输出
98
+ echo "分析阶段检测结果"
99
+ echo "=================="
100
+ echo "故事目录: ${STORY_DIR}"
101
+ echo "章节数量: ${CHAPTER_COUNT}"
102
+ echo "规格文件: $(if [[ "$HAS_SPEC" == true ]]; then echo '✅'; else echo '❌'; fi)"
103
+ echo "计划文件: $(if [[ "$HAS_PLAN" == true ]]; then echo '✅'; else echo '❌'; fi)"
104
+ echo "任务文件: $(if [[ "$HAS_TASKS" == true ]]; then echo '✅'; else echo '❌'; fi)"
105
+ echo ""
106
+ echo "推荐模式: ${ANALYZE_TYPE}"
107
+ echo "原因: ${REASON}"
108
+ fi
@@ -23,10 +23,10 @@ fi
23
23
 
24
24
  # 文件路径
25
25
  PROGRESS="$STORY_DIR/progress.json"
26
- PLOT_TRACKER="$STORY_DIR/spec/tracking/plot-tracker.json"
27
- TIMELINE="$STORY_DIR/spec/tracking/timeline.json"
28
- RELATIONSHIPS="$STORY_DIR/spec/tracking/relationships.json"
29
- CHARACTER_STATE="$STORY_DIR/spec/tracking/character-state.json"
26
+ PLOT_TRACKER="$STORY_DIR/tracking/plot-tracker.json"
27
+ TIMELINE="$STORY_DIR/tracking/timeline.json"
28
+ RELATIONSHIPS="$STORY_DIR/tracking/relationships.json"
29
+ CHARACTER_STATE="$STORY_DIR/tracking/character-state.json"
30
30
 
31
31
  # ANSI颜色代码
32
32
  RED='\033[0;31m'
@@ -252,14 +252,14 @@ generate_report() {
252
252
  echo "检查时间: $(date '+%Y-%m-%d %H:%M:%S')"
253
253
 
254
254
  # 记录检查结果
255
- if [ -f "$STORY_DIR/spec/tracking" ]; then
255
+ if [ -f "$STORY_DIR/tracking" ]; then
256
256
  echo "{
257
257
  \"timestamp\": \"$(date -Iseconds)\",
258
258
  \"total\": $TOTAL_CHECKS,
259
259
  \"passed\": $PASSED_CHECKS,
260
260
  \"warnings\": $WARNINGS,
261
261
  \"errors\": $ERRORS
262
- }" > "$STORY_DIR/spec/tracking/.last-check.json"
262
+ }" > "$STORY_DIR/tracking/.last-check.json"
263
263
  fi
264
264
  }
265
265
 
@@ -308,7 +308,7 @@ output_checklist() {
308
308
  # 数据同步一致性检查 Checklist
309
309
 
310
310
  **检查时间**: $(date '+%Y-%m-%d %H:%M:%S')
311
- **检查对象**: spec/tracking/ 目录所有JSON文件
311
+ **检查对象**: tracking/ 目录所有JSON文件
312
312
  **检查范围**: 文件完整性、章节同步、时间线连续性、角色状态、伏笔管理
313
313
 
314
314
  ---
@@ -38,7 +38,7 @@ while [[ $# -gt 0 ]]; do
38
38
  done
39
39
 
40
40
  # 检查 story-facts.json 是否存在
41
- FACTS_FILE="$PROJECT_ROOT/spec/tracking/story-facts.json"
41
+ FACTS_FILE="$PROJECT_ROOT/tracking/story-facts.json"
42
42
  if [[ ! -f "$FACTS_FILE" ]]; then
43
43
  if [[ "$OUTPUT_JSON" == true ]]; then
44
44
  echo '{"error": "story-facts.json not found", "chapters": [], "unreferenced_facts": [], "unknown_ids": []}'
@@ -22,7 +22,7 @@ if [ -z "$STORY_DIR" ]; then
22
22
  fi
23
23
 
24
24
  # 文件路径
25
- PLOT_TRACKER="$STORY_DIR/spec/tracking/plot-tracker.json"
25
+ PLOT_TRACKER="$STORY_DIR/tracking/plot-tracker.json"
26
26
  OUTLINE="$STORY_DIR/creative-plan.md"
27
27
  PROGRESS="$STORY_DIR/progress.json"
28
28
 
@@ -32,7 +32,7 @@ check_required_files() {
32
32
 
33
33
  if [ ! -f "$PLOT_TRACKER" ]; then
34
34
  echo "⚠️ 未找到情节追踪文件,正在创建..." >&2
35
- mkdir -p "$STORY_DIR/spec/tracking"
35
+ mkdir -p "$STORY_DIR/tracking"
36
36
  # 复制模板
37
37
  if [ -f "$SCRIPT_DIR/../../templates/tracking/plot-tracker.json" ]; then
38
38
  cp "$SCRIPT_DIR/../../templates/tracking/plot-tracker.json" "$PLOT_TRACKER"
@@ -24,7 +24,7 @@ if [ -z "$STORY_DIR" ]; then
24
24
  fi
25
25
 
26
26
  # 文件路径
27
- TIMELINE="$STORY_DIR/spec/tracking/timeline.json"
27
+ TIMELINE="$STORY_DIR/tracking/timeline.json"
28
28
  PROGRESS="$STORY_DIR/progress.json"
29
29
 
30
30
  # 命令参数(已在上面处理 checklist 模式)
@@ -34,7 +34,7 @@ PARAM2="${2:-}"
34
34
  init_timeline() {
35
35
  if [ ! -f "$TIMELINE" ]; then
36
36
  echo "⚠️ 未找到时间线文件,正在创建..." >&2
37
- mkdir -p "$STORY_DIR/spec/tracking"
37
+ mkdir -p "$STORY_DIR/tracking"
38
38
 
39
39
  if [ -f "$SCRIPT_DIR/../../templates/tracking/timeline.json" ]; then
40
40
  cp "$SCRIPT_DIR/../../templates/tracking/timeline.json" "$TIMELINE"
@@ -241,7 +241,7 @@ output_checklist() {
241
241
  # 时间线检查 Checklist
242
242
 
243
243
  **检查时间**: $(date '+%Y-%m-%d %H:%M:%S')
244
- **检查对象**: spec/tracking/timeline.json
244
+ **检查对象**: tracking/timeline.json
245
245
  **记录事件数**: $event_count
246
246
 
247
247
  ---
@@ -22,10 +22,10 @@ if [ "$1" = "--checklist" ]; then
22
22
  fi
23
23
 
24
24
  # 文件路径
25
- WORLD_SETTING="$STORY_DIR/spec/knowledge/world-setting.md"
26
- LOCATIONS="$STORY_DIR/spec/knowledge/locations.md"
27
- CULTURE="$STORY_DIR/spec/knowledge/culture.md"
28
- RULES="$STORY_DIR/spec/knowledge/rules.md"
25
+ WORLD_SETTING="$STORY_DIR/resources/knowledge/world-setting.md"
26
+ LOCATIONS="$STORY_DIR/resources/knowledge/locations.md"
27
+ CULTURE="$STORY_DIR/resources/knowledge/culture.md"
28
+ RULES="$STORY_DIR/resources/knowledge/rules.md"
29
29
  CONTENT_DIR="$STORY_DIR/content"
30
30
 
31
31
  # ANSI颜色代码
@@ -268,7 +268,7 @@ output_checklist() {
268
268
  # 世界观一致性检查 Checklist
269
269
 
270
270
  **检查时间**: $(date '+%Y-%m-%d %H:%M:%S')
271
- **检查对象**: spec/knowledge/ 目录及已写章节内容
271
+ **检查对象**: resources/knowledge/ 目录及已写章节内容
272
272
  **检查范围**: 世界观设定、地理逻辑、文化风俗、特殊规则
273
273
 
274
274
  ---
@@ -99,7 +99,7 @@ mark_resource_loaded() {
99
99
  # 防御性设计:缓存目录不存在时直接返回
100
100
 
101
101
  cleanup_old_cache() {
102
- local cache_dir="$PROJECT_ROOT/.specify/.cache"
102
+ local cache_dir="$PROJECT_ROOT/.claude/.cache"
103
103
 
104
104
  # 缓存目录不存在,无需清理
105
105
  if [ ! -d "$cache_dir" ]; then
@@ -234,17 +234,17 @@ if [ "$PRELOAD_FILES_PENDING" = true ]; then
234
234
  # 构建待预加载的文件列表
235
235
  PRELOAD_FILE_LIST=(
236
236
  # 知识库文件
237
- "$PROJECT_ROOT/.specify/templates/knowledge-base/craft/dialogue.md"
238
- "$PROJECT_ROOT/.specify/templates/knowledge-base/craft/scene-structure.md"
239
- "$PROJECT_ROOT/.specify/templates/knowledge-base/craft/character-arc.md"
240
- "$PROJECT_ROOT/.specify/templates/knowledge-base/craft/pacing.md"
241
- "$PROJECT_ROOT/.specify/templates/knowledge-base/craft/show-not-tell.md"
237
+ "$PROJECT_ROOT/resources/craft/dialogue.md"
238
+ "$PROJECT_ROOT/resources/craft/scene-structure.md"
239
+ "$PROJECT_ROOT/resources/craft/character-arc.md"
240
+ "$PROJECT_ROOT/resources/craft/pacing.md"
241
+ "$PROJECT_ROOT/resources/craft/show-not-tell.md"
242
242
  # Skill 文件
243
- "$PROJECT_ROOT/.specify/templates/skills/writing-techniques/dialogue-techniques/SKILL.md"
244
- "$PROJECT_ROOT/.specify/templates/skills/writing-techniques/scene-structure/SKILL.md"
245
- "$PROJECT_ROOT/.specify/templates/skills/writing-techniques/character-arc/SKILL.md"
246
- "$PROJECT_ROOT/.specify/templates/skills/writing-techniques/pacing-control/SKILL.md"
247
- "$PROJECT_ROOT/.specify/templates/skills/quality-assurance/consistency-checker/SKILL.md"
243
+ "$PROJECT_ROOT/.claude/skills/writing-techniques/dialogue-techniques/SKILL.md"
244
+ "$PROJECT_ROOT/.claude/skills/writing-techniques/scene-structure/SKILL.md"
245
+ "$PROJECT_ROOT/.claude/skills/writing-techniques/character-arc/SKILL.md"
246
+ "$PROJECT_ROOT/.claude/skills/writing-techniques/pacing-control/SKILL.md"
247
+ "$PROJECT_ROOT/.claude/skills/quality-assurance/consistency-checker/SKILL.md"
248
248
  # 规格文件
249
249
  "$STORY_DIR/specification.md"
250
250
  )
@@ -261,7 +261,7 @@ cleanup_old_cache
261
261
  check_methodology_docs() {
262
262
  local missing=()
263
263
 
264
- [ ! -f ".specify/memory/constitution.md" ] && missing+=("宪法")
264
+ [ ! -f "resources/memory/constitution.md" ] && missing+=("宪法")
265
265
  [ ! -f "$STORY_DIR/specification.md" ] && missing+=("规格")
266
266
  [ ! -f "$STORY_DIR/creative-plan.md" ] && missing+=("计划")
267
267
  [ ! -f "$STORY_DIR/tasks.md" ] && missing+=("任务")
@@ -321,7 +321,7 @@ check_pending_tasks() {
321
321
  # 检查已完成内容
322
322
  check_completed_content() {
323
323
  local content_dir="$STORY_DIR/content"
324
- local validation_rules="$STORY_DIR/spec/tracking/validation-rules.json"
324
+ local validation_rules="$STORY_DIR/tracking/validation-rules.json"
325
325
  local min_words=2000
326
326
  local max_words=4000
327
327
 
@@ -376,7 +376,7 @@ output_checklist() {
376
376
  local max_words=4000
377
377
 
378
378
  # 检查文档
379
- [ -f ".specify/memory/constitution.md" ] && has_constitution=true
379
+ [ -f "resources/memory/constitution.md" ] && has_constitution=true
380
380
  [ -f "$STORY_DIR/specification.md" ] && has_specification=true
381
381
  [ -f "$STORY_DIR/creative-plan.md" ] && has_plan=true
382
382
  [ -f "$STORY_DIR/tasks.md" ] && has_tasks=true
@@ -389,7 +389,7 @@ output_checklist() {
389
389
  fi
390
390
 
391
391
  # 读取验证规则
392
- local validation_rules="$STORY_DIR/spec/tracking/validation-rules.json"
392
+ local validation_rules="$STORY_DIR/tracking/validation-rules.json"
393
393
  if [ -f "$validation_rules" ] && command -v jq >/dev/null 2>&1; then
394
394
  min_words=$(jq -r '.rules.chapterMinWords // 2000' "$validation_rules")
395
395
  max_words=$(jq -r '.rules.chapterMaxWords // 4000' "$validation_rules")
@@ -553,11 +553,11 @@ check_knowledge_base_available() {
553
553
 
554
554
  # 检查所有 craft knowledge-base
555
555
  local craft_files=(
556
- ".specify/templates/knowledge-base/craft/dialogue.md"
557
- ".specify/templates/knowledge-base/craft/scene-structure.md"
558
- ".specify/templates/knowledge-base/craft/character-arc.md"
559
- ".specify/templates/knowledge-base/craft/pacing.md"
560
- ".specify/templates/knowledge-base/craft/show-not-tell.md"
556
+ "resources/craft/dialogue.md"
557
+ "resources/craft/scene-structure.md"
558
+ "resources/craft/character-arc.md"
559
+ "resources/craft/pacing.md"
560
+ "resources/craft/show-not-tell.md"
561
561
  )
562
562
 
563
563
  for file in "${craft_files[@]}"; do
@@ -590,10 +590,10 @@ check_skills_available() {
590
590
 
591
591
  # 检查 writing-techniques skills
592
592
  local skill_dirs=(
593
- ".specify/templates/skills/writing-techniques/dialogue-techniques"
594
- ".specify/templates/skills/writing-techniques/scene-structure"
595
- ".specify/templates/skills/writing-techniques/character-arc"
596
- ".specify/templates/skills/writing-techniques/pacing-control"
593
+ ".claude/skills/writing-techniques/dialogue-techniques"
594
+ ".claude/skills/writing-techniques/scene-structure"
595
+ ".claude/skills/writing-techniques/character-arc"
596
+ ".claude/skills/writing-techniques/pacing-control"
597
597
  )
598
598
 
599
599
  for dir in "${skill_dirs[@]}"; do
@@ -667,7 +667,7 @@ generate_load_report() {
667
667
  # 检查文件是否存在,生成警告(使用缓存 + Phase 2 去重)
668
668
  local warnings=()
669
669
  for kb in "${knowledge_base_files[@]}"; do
670
- local kb_path=".specify/templates/knowledge-base/$kb"
670
+ local kb_path="resources/$kb"
671
671
 
672
672
  # Phase 2: 资源去重检查
673
673
  if is_resource_loaded "$kb_path"; then
@@ -685,7 +685,7 @@ generate_load_report() {
685
685
  done
686
686
 
687
687
  for skill in "${skills_files[@]}"; do
688
- local skill_path=".specify/templates/skills/$skill/SKILL.md"
688
+ local skill_path=".claude/skills/$skill/SKILL.md"
689
689
 
690
690
  # Phase 2: 资源去重检查
691
691
  if is_resource_loaded "$skill_path"; then
@@ -3,13 +3,13 @@
3
3
 
4
4
  # 获取项目根目录
5
5
  get_project_root() {
6
- if [ -f ".specify/config.json" ]; then
6
+ if [ -f "resources/config/config.json" ]; then
7
7
  pwd
8
8
  else
9
- # 向上查找包含 .specify 的目录
9
+ # 向上查找包含 resources 的目录
10
10
  current=$(pwd)
11
11
  while [ "$current" != "/" ]; do
12
- if [ -f "$current/.specify/config.json" ]; then
12
+ if [ -f "$current/resources/config/config.json" ]; then
13
13
  echo "$current"
14
14
  return 0
15
15
  fi
@@ -17,7 +17,7 @@ PROJECT_ROOT=$(get_project_root)
17
17
  cd "$PROJECT_ROOT"
18
18
 
19
19
  # 定义文件路径
20
- CONSTITUTION_FILE=".specify/memory/constitution.md"
20
+ CONSTITUTION_FILE="resources/memory/constitution.md"
21
21
 
22
22
  case "$COMMAND" in
23
23
  check)
@@ -25,7 +25,7 @@ if [ "$story_exists" = false ] || [ "$outline_exists" = false ]; then
25
25
  fi
26
26
 
27
27
  # 创建追踪目录
28
- mkdir -p spec/tracking
28
+ mkdir -p tracking
29
29
 
30
30
  # 获取故事名称
31
31
  story_dir=$(dirname "$story_file")
@@ -34,9 +34,9 @@ story_name=$(basename "$story_dir")
34
34
  echo "📖 为《${story_name}》初始化追踪系统..."
35
35
 
36
36
  # 初始化 plot-tracker.json
37
- if [ ! -f "spec/tracking/plot-tracker.json" ]; then
37
+ if [ ! -f "tracking/plot-tracker.json" ]; then
38
38
  echo "📝 创建 plot-tracker.json..."
39
- cat > spec/tracking/plot-tracker.json <<EOF
39
+ cat > tracking/plot-tracker.json <<EOF
40
40
  {
41
41
  "novel": "${story_name}",
42
42
  "lastUpdated": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")",
@@ -82,9 +82,9 @@ EOF
82
82
  fi
83
83
 
84
84
  # 初始化 timeline.json
85
- if [ ! -f "spec/tracking/timeline.json" ]; then
85
+ if [ ! -f "tracking/timeline.json" ]; then
86
86
  echo "⏰ 创建 timeline.json..."
87
- cat > spec/tracking/timeline.json <<EOF
87
+ cat > tracking/timeline.json <<EOF
88
88
  {
89
89
  "novel": "${story_name}",
90
90
  "lastUpdated": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")",
@@ -110,9 +110,9 @@ EOF
110
110
  fi
111
111
 
112
112
  # 初始化 relationships.json
113
- if [ ! -f "spec/tracking/relationships.json" ]; then
113
+ if [ ! -f "tracking/relationships.json" ]; then
114
114
  echo "👥 创建 relationships.json..."
115
- cat > spec/tracking/relationships.json <<EOF
115
+ cat > tracking/relationships.json <<EOF
116
116
  {
117
117
  "novel": "${story_name}",
118
118
  "lastUpdated": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")",
@@ -135,9 +135,9 @@ EOF
135
135
  fi
136
136
 
137
137
  # 初始化 character-state.json
138
- if [ ! -f "spec/tracking/character-state.json" ]; then
138
+ if [ ! -f "tracking/character-state.json" ]; then
139
139
  echo "📍 创建 character-state.json..."
140
- cat > spec/tracking/character-state.json <<EOF
140
+ cat > tracking/character-state.json <<EOF
141
141
  {
142
142
  "novel": "${story_name}",
143
143
  "lastUpdated": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")",
@@ -170,10 +170,10 @@ echo ""
170
170
  echo "✅ 追踪系统初始化完成!"
171
171
  echo ""
172
172
  echo "📊 已创建以下追踪文件:"
173
- echo " • spec/tracking/plot-tracker.json - 情节追踪"
174
- echo " • spec/tracking/timeline.json - 时间线管理"
175
- echo " • spec/tracking/relationships.json - 关系网络"
176
- echo " • spec/tracking/character-state.json - 角色状态"
173
+ echo " • tracking/plot-tracker.json - 情节追踪"
174
+ echo " • tracking/timeline.json - 时间线管理"
175
+ echo " • tracking/relationships.json - 关系网络"
176
+ echo " • tracking/character-state.json - 角色状态"
177
177
  echo ""
178
178
  echo "💡 下一步:"
179
179
  echo " 1. 使用 /write 开始创作(会自动更新追踪数据)"
@@ -10,19 +10,19 @@ PROJECT_ROOT=$(get_project_root)
10
10
  STORY_DIR=$(get_current_story)
11
11
 
12
12
  REL_FILE=""
13
- if [ -n "$STORY_DIR" ] && [ -f "$STORY_DIR/spec/tracking/relationships.json" ]; then
14
- REL_FILE="$STORY_DIR/spec/tracking/relationships.json"
15
- elif [ -f "$PROJECT_ROOT/spec/tracking/relationships.json" ]; then
16
- REL_FILE="$PROJECT_ROOT/spec/tracking/relationships.json"
13
+ if [ -n "$STORY_DIR" ] && [ -f "$STORY_DIR/tracking/relationships.json" ]; then
14
+ REL_FILE="$STORY_DIR/tracking/relationships.json"
15
+ elif [ -f "$PROJECT_ROOT/tracking/relationships.json" ]; then
16
+ REL_FILE="$PROJECT_ROOT/tracking/relationships.json"
17
17
  else
18
18
  # 尝试用模板初始化
19
- mkdir -p "$PROJECT_ROOT/spec/tracking"
20
- if [ -f "$PROJECT_ROOT/.specify/templates/tracking/relationships.json" ]; then
21
- cp "$PROJECT_ROOT/.specify/templates/tracking/relationships.json" "$PROJECT_ROOT/spec/tracking/relationships.json"
22
- REL_FILE="$PROJECT_ROOT/spec/tracking/relationships.json"
19
+ mkdir -p "$PROJECT_ROOT/tracking"
20
+ if [ -f "$PROJECT_ROOT/tracking/relationships.json" ]; then
21
+ cp "$PROJECT_ROOT/tracking/relationships.json" "$PROJECT_ROOT/tracking/relationships.json"
22
+ REL_FILE="$PROJECT_ROOT/tracking/relationships.json"
23
23
  elif [ -f "$SCRIPT_DIR/../../templates/tracking/relationships.json" ]; then
24
- cp "$SCRIPT_DIR/../../templates/tracking/relationships.json" "$PROJECT_ROOT/spec/tracking/relationships.json"
25
- REL_FILE="$PROJECT_ROOT/spec/tracking/relationships.json"
24
+ cp "$SCRIPT_DIR/../../templates/tracking/relationships.json" "$PROJECT_ROOT/tracking/relationships.json"
25
+ REL_FILE="$PROJECT_ROOT/tracking/relationships.json"
26
26
  else
27
27
  echo "❌ 未找到 relationships.json,且无法从模板创建" >&2
28
28
  exit 1