novelws 4.0.0 → 5.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.
- package/CHANGELOG.md +100 -623
- package/README.md +79 -594
- package/dist/cli.js +1 -3
- package/dist/cli.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +12 -99
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/upgrade.d.ts.map +1 -1
- package/dist/commands/upgrade.js +17 -108
- package/dist/commands/upgrade.js.map +1 -1
- package/dist/core/config.d.ts +1 -37
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +6 -45
- package/dist/core/config.js.map +1 -1
- package/dist/core/errors.d.ts +0 -31
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +0 -58
- package/dist/core/errors.js.map +1 -1
- package/dist/utils/diagnostics.d.ts +2 -16
- package/dist/utils/diagnostics.d.ts.map +1 -1
- package/dist/utils/diagnostics.js +5 -72
- package/dist/utils/diagnostics.js.map +1 -1
- package/dist/utils/project.d.ts +1 -1
- package/dist/utils/project.d.ts.map +1 -1
- package/dist/utils/project.js +3 -3
- package/dist/utils/project.js.map +1 -1
- package/package.json +1 -2
- package/templates/commands/analyze.md +65 -265
- package/templates/commands/expand.md +70 -0
- package/templates/commands/plan.md +47 -452
- package/templates/commands/specify.md +43 -869
- package/templates/commands/write.md +49 -643
- package/templates/dot-claude/CLAUDE.md +38 -202
- package/templates/resources/anti-ai.md +16 -0
- package/templates/resources/style-reference.md +19 -0
- package/templates/tracking/character-state.json +1 -76
- package/templates/tracking/plot-tracker.json +3 -60
- package/templates/tracking/relationships.json +1 -68
- package/templates/tracking/timeline.json +1 -47
- package/dist/commands/plugin.d.ts +0 -6
- package/dist/commands/plugin.d.ts.map +0 -1
- package/dist/commands/plugin.js +0 -135
- package/dist/commands/plugin.js.map +0 -1
- package/dist/plugins/identifier.d.ts +0 -13
- package/dist/plugins/identifier.d.ts.map +0 -1
- package/dist/plugins/identifier.js +0 -72
- package/dist/plugins/identifier.js.map +0 -1
- package/dist/plugins/installers/base.d.ts +0 -27
- package/dist/plugins/installers/base.d.ts.map +0 -1
- package/dist/plugins/installers/base.js +0 -30
- package/dist/plugins/installers/base.js.map +0 -1
- package/dist/plugins/installers/github.d.ts +0 -22
- package/dist/plugins/installers/github.d.ts.map +0 -1
- package/dist/plugins/installers/github.js +0 -133
- package/dist/plugins/installers/github.js.map +0 -1
- package/dist/plugins/installers/local.d.ts +0 -16
- package/dist/plugins/installers/local.d.ts.map +0 -1
- package/dist/plugins/installers/local.js +0 -69
- package/dist/plugins/installers/local.js.map +0 -1
- package/dist/plugins/installers/npm.d.ts +0 -20
- package/dist/plugins/installers/npm.d.ts.map +0 -1
- package/dist/plugins/installers/npm.js +0 -99
- package/dist/plugins/installers/npm.js.map +0 -1
- package/dist/plugins/manager.d.ts +0 -77
- package/dist/plugins/manager.d.ts.map +0 -1
- package/dist/plugins/manager.js +0 -349
- package/dist/plugins/manager.js.map +0 -1
- package/dist/plugins/registry.d.ts +0 -48
- package/dist/plugins/registry.d.ts.map +0 -1
- package/dist/plugins/registry.js +0 -111
- package/dist/plugins/registry.js.map +0 -1
- package/dist/plugins/types.d.ts +0 -66
- package/dist/plugins/types.d.ts.map +0 -1
- package/dist/plugins/types.js +0 -2
- package/dist/plugins/types.js.map +0 -1
- package/dist/plugins/validator.d.ts +0 -19
- package/dist/plugins/validator.d.ts.map +0 -1
- package/dist/plugins/validator.js +0 -164
- package/dist/plugins/validator.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -13
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -48
- package/dist/utils/logger.js.map +0 -1
- package/plugins/authentic-voice/README.md +0 -31
- package/plugins/authentic-voice/commands/authentic-voice.md +0 -73
- package/plugins/authentic-voice/commands/authenticity-audit.md +0 -37
- package/plugins/authentic-voice/config.yaml +0 -30
- package/plugins/authentic-voice/experts/authentic-editor.md +0 -27
- package/plugins/export/README.md +0 -319
- package/plugins/export/commands/export.md +0 -460
- package/plugins/export/commands/generate-cover.md +0 -256
- package/plugins/export/commands/metadata.md +0 -309
- package/plugins/export/config.yaml +0 -47
- package/plugins/export/experts/publishing-expert.md +0 -171
- package/plugins/export/templates/epub/chapter-template.html +0 -13
- package/plugins/export/templates/epub/cover-template.html +0 -14
- package/plugins/export/templates/epub/stylesheet.css +0 -200
- package/plugins/export/templates/pdf/ebook-style.css +0 -137
- package/plugins/export/templates/pdf/print-style.css +0 -179
- package/plugins/export/templates/platforms/jinjiang-format.md +0 -101
- package/plugins/export/templates/platforms/qidian-format.md +0 -108
- package/plugins/export/templates/platforms/tomato-format.md +0 -95
- package/plugins/translate/README.md +0 -265
- package/plugins/translate/commands/glossary.md +0 -731
- package/plugins/translate/commands/translate-preview.md +0 -543
- package/plugins/translate/commands/translate.md +0 -649
- package/plugins/translate/config.yaml +0 -43
- package/plugins/translate/experts/literary-translator.md +0 -605
- package/templates/commands/character.md +0 -287
- package/templates/commands/checklist.md +0 -744
- package/templates/commands/clarify.md +0 -269
- package/templates/commands/constitution.md +0 -269
- package/templates/commands/expert.md +0 -188
- package/templates/commands/facts.md +0 -552
- package/templates/commands/guide.md +0 -900
- package/templates/commands/help-me.md +0 -221
- package/templates/commands/recap.md +0 -748
- package/templates/commands/relations.md +0 -385
- package/templates/commands/revise.md +0 -450
- package/templates/commands/search.md +0 -531
- package/templates/commands/tasks.md +0 -396
- package/templates/commands/timeline.md +0 -309
- package/templates/commands/track-init.md +0 -149
- package/templates/commands/track.md +0 -704
- package/templates/commands/volume-summary.md +0 -471
- package/templates/knowledge/audit-config.json +0 -26
- package/templates/knowledge/character-profiles.md +0 -152
- package/templates/knowledge/character-voices.md +0 -137
- package/templates/knowledge/locations.md +0 -184
- package/templates/knowledge/world-setting.md +0 -121
- package/templates/resources/character-archetypes/01-hero.md +0 -233
- package/templates/resources/character-archetypes/02-mentor.md +0 -177
- package/templates/resources/character-archetypes/03-shadow.md +0 -221
- package/templates/resources/character-archetypes/04-ally.md +0 -178
- package/templates/resources/character-archetypes/05-shapeshifter.md +0 -177
- package/templates/resources/character-archetypes/06-trickster.md +0 -181
- package/templates/resources/character-archetypes/07-threshold-guardian.md +0 -177
- package/templates/resources/character-archetypes/08-herald.md +0 -180
- package/templates/resources/character-archetypes/09-father.md +0 -249
- package/templates/resources/character-archetypes/10-mother.md +0 -202
- package/templates/resources/character-archetypes/11-child.md +0 -183
- package/templates/resources/character-archetypes/12-sage.md +0 -202
- package/templates/resources/character-archetypes/README.md +0 -60
- package/templates/resources/character-archetypes/application-guide.md +0 -222
- package/templates/resources/character-archetypes/archetype-combinations.md +0 -242
- package/templates/resources/character-archetypes/config.yaml +0 -28
- package/templates/resources/character-archetypes/examples-analysis.md +0 -223
- package/templates/resources/config/keyword-mappings.json +0 -226
- package/templates/resources/config/specification-example.md +0 -146
- package/templates/resources/craft/character-arc.md +0 -1153
- package/templates/resources/craft/dialogue.md +0 -1170
- package/templates/resources/craft/hook-design.md +0 -345
- package/templates/resources/craft/pacing.md +0 -1200
- package/templates/resources/craft/power-system.md +0 -254
- package/templates/resources/craft/scene-structure.md +0 -1136
- package/templates/resources/craft/show-not-tell.md +0 -1012
- package/templates/resources/craft/story-structures.md +0 -134
- package/templates/resources/craft/tension-management.md +0 -168
- package/templates/resources/emotional-beats/01-first-meeting.md +0 -145
- package/templates/resources/emotional-beats/02-bonding-moment.md +0 -226
- package/templates/resources/emotional-beats/03-declaration.md +0 -284
- package/templates/resources/emotional-beats/04-triumph.md +0 -240
- package/templates/resources/emotional-beats/05-reunion.md +0 -396
- package/templates/resources/emotional-beats/06-forgiveness.md +0 -204
- package/templates/resources/emotional-beats/07-betrayal.md +0 -204
- package/templates/resources/emotional-beats/08-loss.md +0 -214
- package/templates/resources/emotional-beats/09-rejection.md +0 -254
- package/templates/resources/emotional-beats/10-failure.md +0 -244
- package/templates/resources/emotional-beats/11-misunderstanding.md +0 -205
- package/templates/resources/emotional-beats/12-farewell.md +0 -283
- package/templates/resources/emotional-beats/13-revelation.md +0 -242
- package/templates/resources/emotional-beats/14-point-of-no-return.md +0 -215
- package/templates/resources/emotional-beats/15-dark-night.md +0 -244
- package/templates/resources/emotional-beats/16-sacrifice.md +0 -246
- package/templates/resources/emotional-beats/17-awakening.md +0 -246
- package/templates/resources/emotional-beats/18-confrontation.md +0 -217
- package/templates/resources/emotional-beats/19-bittersweet-goodbye.md +0 -368
- package/templates/resources/emotional-beats/20-moral-dilemma.md +0 -248
- package/templates/resources/emotional-beats/21-temptation.md +0 -240
- package/templates/resources/emotional-beats/22-redemption.md +0 -210
- package/templates/resources/emotional-beats/README.md +0 -104
- package/templates/resources/emotional-beats/beat-sequences.md +0 -276
- package/templates/resources/emotional-beats/config.yaml +0 -30
- package/templates/resources/emotional-beats/pacing-guide.md +0 -390
- package/templates/resources/genres/game-lit.md +0 -174
- package/templates/resources/genres/historical.md +0 -1127
- package/templates/resources/genres/horror.md +0 -211
- package/templates/resources/genres/military.md +0 -209
- package/templates/resources/genres/mystery.md +0 -1123
- package/templates/resources/genres/rebirth.md +0 -177
- package/templates/resources/genres/revenge.md +0 -846
- package/templates/resources/genres/romance.md +0 -948
- package/templates/resources/genres/sci-fi.md +0 -156
- package/templates/resources/genres/sports.md +0 -216
- package/templates/resources/genres/thriller.md +0 -166
- package/templates/resources/genres/urban.md +0 -170
- package/templates/resources/genres/workplace.md +0 -214
- package/templates/resources/genres/wuxia.md +0 -143
- package/templates/resources/genres/xuanhuan.md +0 -234
- package/templates/resources/genres/youth.md +0 -219
- package/templates/resources/memory/personal-voice.md +0 -113
- package/templates/resources/references/README.md +0 -96
- package/templates/resources/references/china-1920s/culture.md +0 -423
- package/templates/resources/references/china-1920s/daily-life.md +0 -616
- package/templates/resources/references/china-1920s/overview.md +0 -298
- package/templates/resources/references/china-1920s/society.md +0 -703
- package/templates/resources/references/china-1920s/warlords.md +0 -427
- package/templates/resources/references/cultivation-world/daily-life.md +0 -108
- package/templates/resources/references/cultivation-world/overview.md +0 -64
- package/templates/resources/references/cultivation-world/power-system.md +0 -108
- package/templates/resources/references/cultivation-world/sects.md +0 -104
- package/templates/resources/references/cultivation-world/world-setting.md +0 -108
- package/templates/resources/references/modern-workplace/corporate.md +0 -115
- package/templates/resources/references/modern-workplace/daily-life.md +0 -129
- package/templates/resources/references/modern-workplace/overview.md +0 -73
- package/templates/resources/references/modern-workplace/relationships.md +0 -107
- package/templates/resources/references/modern-workplace/tech-industry.md +0 -131
- package/templates/resources/references/tang-dynasty/culture.md +0 -135
- package/templates/resources/references/tang-dynasty/daily-life.md +0 -139
- package/templates/resources/references/tang-dynasty/overview.md +0 -76
- package/templates/resources/references/tang-dynasty/politics.md +0 -121
- package/templates/resources/references/tang-dynasty/society.md +0 -126
- package/templates/resources/requirements/README.md +0 -240
- package/templates/resources/requirements/anti-ai-v3.md +0 -46
- package/templates/resources/requirements/anti-ai-v4-deprecated.md +0 -442
- package/templates/resources/requirements/anti-ai-v5-balanced.md +0 -203
- package/templates/resources/requirements/concretization.md +0 -90
- package/templates/resources/requirements/fast-paced.md +0 -552
- package/templates/resources/requirements/no-poison.md +0 -60
- package/templates/resources/requirements/romance-angst.md +0 -102
- package/templates/resources/requirements/romance-sweet.md +0 -63
- package/templates/resources/requirements/serious-literature.md +0 -45
- package/templates/resources/requirements/strong-emotion.md +0 -60
- package/templates/resources/scripts/README.md +0 -187
- package/templates/resources/scripts/bash/analyze-story.sh +0 -170
- package/templates/resources/scripts/bash/check-analyze-stage.sh +0 -108
- package/templates/resources/scripts/bash/check-consistency.sh +0 -463
- package/templates/resources/scripts/bash/check-facts.sh +0 -214
- package/templates/resources/scripts/bash/check-plot.sh +0 -374
- package/templates/resources/scripts/bash/check-timeline.sh +0 -346
- package/templates/resources/scripts/bash/check-world.sh +0 -395
- package/templates/resources/scripts/bash/check-writing-state.sh +0 -854
- package/templates/resources/scripts/bash/clarify-story.sh +0 -117
- package/templates/resources/scripts/bash/common.sh +0 -151
- package/templates/resources/scripts/bash/constitution.sh +0 -114
- package/templates/resources/scripts/bash/generate-tasks.sh +0 -65
- package/templates/resources/scripts/bash/init-tracking.sh +0 -183
- package/templates/resources/scripts/bash/manage-relations.sh +0 -174
- package/templates/resources/scripts/bash/migrate-tracking.sh +0 -183
- package/templates/resources/scripts/bash/plan-story.sh +0 -100
- package/templates/resources/scripts/bash/specify-story.sh +0 -93
- package/templates/resources/scripts/bash/tasks-story.sh +0 -96
- package/templates/resources/scripts/bash/test-word-count.sh +0 -182
- package/templates/resources/scripts/bash/tests/bench-preload-cache.sh +0 -100
- package/templates/resources/scripts/bash/tests/run-all-benchmarks.sh +0 -16
- package/templates/resources/scripts/bash/tests/test-cache-semantics.sh +0 -199
- package/templates/resources/scripts/bash/tests/test-cross-platform.sh +0 -35
- package/templates/resources/scripts/bash/tests/test-edge-cases-bash.sh +0 -60
- package/templates/resources/scripts/bash/tests/test-phase1-bash.sh +0 -28
- package/templates/resources/scripts/bash/tests/test-preload-cache.sh +0 -123
- package/templates/resources/scripts/bash/tests/test-regex-precompile.sh +0 -89
- package/templates/resources/scripts/bash/tests/test-regression-bash.sh +0 -42
- package/templates/resources/scripts/bash/tests/test-task6-verification.sh +0 -200
- package/templates/resources/scripts/bash/text-audit.sh +0 -144
- package/templates/resources/scripts/bash/track-progress.sh +0 -194
- package/templates/resources/scripts/powershell/analyze-story.ps1 +0 -174
- package/templates/resources/scripts/powershell/check-analyze-stage.ps1 +0 -110
- package/templates/resources/scripts/powershell/check-consistency.ps1 +0 -138
- package/templates/resources/scripts/powershell/check-facts.ps1 +0 -195
- package/templates/resources/scripts/powershell/check-plot.ps1 +0 -139
- package/templates/resources/scripts/powershell/check-timeline.ps1 +0 -112
- package/templates/resources/scripts/powershell/check-writing-state.ps1 +0 -486
- package/templates/resources/scripts/powershell/clarify-story.ps1 +0 -107
- package/templates/resources/scripts/powershell/common.ps1 +0 -36
- package/templates/resources/scripts/powershell/constitution.ps1 +0 -145
- package/templates/resources/scripts/powershell/generate-tasks.ps1 +0 -70
- package/templates/resources/scripts/powershell/init-tracking.ps1 +0 -98
- package/templates/resources/scripts/powershell/manage-relations.ps1 +0 -134
- package/templates/resources/scripts/powershell/migrate-tracking.ps1 +0 -145
- package/templates/resources/scripts/powershell/plan-story.ps1 +0 -99
- package/templates/resources/scripts/powershell/specify-story.ps1 +0 -85
- package/templates/resources/scripts/powershell/tests/bench-ps-cache.ps1 +0 -80
- package/templates/resources/scripts/powershell/tests/test-cross-platform.ps1 +0 -27
- package/templates/resources/scripts/powershell/tests/test-edge-cases-ps.ps1 +0 -29
- package/templates/resources/scripts/powershell/tests/test-phase1-ps.ps1 +0 -28
- package/templates/resources/scripts/powershell/tests/test-ps-cache.ps1 +0 -73
- package/templates/resources/scripts/powershell/tests/test-regression-ps.ps1 +0 -40
- package/templates/resources/scripts/powershell/text-audit.ps1 +0 -102
- package/templates/resources/scripts/powershell/track-progress.ps1 +0 -105
- package/templates/resources/styles/README.md +0 -302
- package/templates/resources/styles/ancient-style.md +0 -579
- package/templates/resources/styles/literary.md +0 -439
- package/templates/resources/styles/minimal.md +0 -472
- package/templates/resources/styles/natural-voice.md +0 -930
- package/templates/resources/styles/web-novel.md +0 -525
- package/templates/skills/analysis/character-analysis/SKILL.md +0 -71
- package/templates/skills/analysis/foreshadow-analysis/SKILL.md +0 -45
- package/templates/skills/analysis/hook-analysis/SKILL.md +0 -111
- package/templates/skills/analysis/logic-analysis/SKILL.md +0 -58
- package/templates/skills/analysis/opening-analysis/SKILL.md +0 -59
- package/templates/skills/analysis/pacing-analysis/SKILL.md +0 -55
- package/templates/skills/analysis/power-analysis/SKILL.md +0 -148
- package/templates/skills/analysis/reader-analysis/SKILL.md +0 -117
- package/templates/skills/analysis/style-analysis/SKILL.md +0 -60
- package/templates/skills/analysis/voice-analysis/SKILL.md +0 -42
- package/templates/skills/auto-tracking/SKILL.md +0 -280
- package/templates/skills/genre-knowledge/fantasy/SKILL.md +0 -355
- package/templates/skills/genre-knowledge/mystery/SKILL.md +0 -337
- package/templates/skills/genre-knowledge/romance/SKILL.md +0 -228
- package/templates/skills/genre-knowledge/sci-fi/SKILL.md +0 -65
- package/templates/skills/genre-knowledge/thriller/SKILL.md +0 -95
- package/templates/skills/planning/volume-detail/SKILL.md +0 -219
- package/templates/skills/quality-assurance/consistency-checker/SKILL.md +0 -412
- package/templates/skills/quality-assurance/continuity-tracker/SKILL.md +0 -157
- package/templates/skills/quality-assurance/facts-checker/SKILL.md +0 -405
- package/templates/skills/quality-assurance/forgotten-elements/SKILL.md +0 -147
- package/templates/skills/quality-assurance/getting-started/SKILL.md +0 -224
- package/templates/skills/quality-assurance/hook-checker/SKILL.md +0 -164
- package/templates/skills/quality-assurance/hook-checker/experts/hook-analyst.md +0 -33
- package/templates/skills/quality-assurance/long-series-continuity/SKILL.md +0 -570
- package/templates/skills/quality-assurance/pacing-monitor/SKILL.md +0 -143
- package/templates/skills/quality-assurance/pov-validator/SKILL.md +0 -135
- package/templates/skills/quality-assurance/pre-write-checklist/SKILL.md +0 -583
- package/templates/skills/quality-assurance/requirement-detector/CONFLICT_RESOLUTION.md +0 -119
- package/templates/skills/quality-assurance/requirement-detector/EXAMPLES.md +0 -146
- package/templates/skills/quality-assurance/requirement-detector/KEYWORDS.md +0 -160
- package/templates/skills/quality-assurance/requirement-detector/SKILL.md +0 -149
- package/templates/skills/quality-assurance/setting-detector/SKILL.md +0 -611
- package/templates/skills/quality-assurance/style-detector/CONFLICT_RESOLUTION.md +0 -126
- package/templates/skills/quality-assurance/style-detector/EXAMPLES.md +0 -206
- package/templates/skills/quality-assurance/style-detector/KEYWORDS.md +0 -207
- package/templates/skills/quality-assurance/style-detector/SKILL.md +0 -264
- package/templates/skills/quality-assurance/voice-consistency-checker/SKILL.md +0 -103
- package/templates/skills/quality-assurance/voice-consistency-checker/experts/voice-analyst.md +0 -21
- package/templates/skills/quality-assurance/workflow-guide/SKILL.md +0 -381
- package/templates/skills/writing-techniques/character-arc/SKILL.md +0 -267
- package/templates/skills/writing-techniques/dialogue-techniques/SKILL.md +0 -366
- package/templates/skills/writing-techniques/multi-thread-narrative/SKILL.md +0 -708
- package/templates/skills/writing-techniques/multi-thread-narrative/experts/thread-analyst.md +0 -226
- package/templates/skills/writing-techniques/pacing-control/SKILL.md +0 -480
- package/templates/skills/writing-techniques/reader-expectation/SKILL.md +0 -1026
- package/templates/skills/writing-techniques/reader-expectation/experts/expectation-analyst.md +0 -209
- package/templates/skills/writing-techniques/revision-polish/SKILL.md +0 -496
- package/templates/skills/writing-techniques/revision-polish/experts/revision-editor.md +0 -221
- package/templates/skills/writing-techniques/scene-structure/SKILL.md +0 -361
- package/templates/skills/writing-techniques/style-learning/SKILL.md +0 -436
- package/templates/skills/writing-techniques/writing-balance/.gitkeep +0 -0
- package/templates/skills/writing-techniques/writing-balance/SKILL.md +0 -460
- package/templates/skills/writing-techniques/writing-techniques/SKILL.md +0 -727
- package/templates/tracking/story-facts.json +0 -5
- package/templates/tracking/summary/characters-summary.json +0 -7
- package/templates/tracking/summary/plot-summary.json +0 -13
- package/templates/tracking/summary/timeline-summary.json +0 -8
- package/templates/tracking/summary/volume-summaries.json +0 -5
- package/templates/tracking/tracking-log.md +0 -110
- package/templates/tracking/validation-rules.json +0 -128
- /package/templates/resources/{memory/constitution.md → constitution.md} +0 -0
package/dist/cli.js
CHANGED
|
@@ -5,7 +5,6 @@ import { getVersion, getVersionInfo } from './version.js';
|
|
|
5
5
|
import { registerInitCommand } from './commands/init.js';
|
|
6
6
|
import { registerCheckCommand } from './commands/check.js';
|
|
7
7
|
import { registerUpgradeCommand } from './commands/upgrade.js';
|
|
8
|
-
import { registerPluginCommands } from './commands/plugin.js';
|
|
9
8
|
// 显示欢迎横幅
|
|
10
9
|
function displayBanner() {
|
|
11
10
|
const banner = `
|
|
@@ -28,7 +27,6 @@ program
|
|
|
28
27
|
registerInitCommand(program);
|
|
29
28
|
registerCheckCommand(program);
|
|
30
29
|
registerUpgradeCommand(program);
|
|
31
|
-
registerPluginCommands(program);
|
|
32
30
|
// 自定义帮助信息
|
|
33
31
|
program.on('--help', () => {
|
|
34
32
|
console.log('');
|
|
@@ -37,7 +35,7 @@ program.on('--help', () => {
|
|
|
37
35
|
console.log(' $ novelws init my-story # 创建新项目');
|
|
38
36
|
console.log(' $ novelws init --here # 在当前目录初始化');
|
|
39
37
|
console.log(' $ novelws check # 检查环境');
|
|
40
|
-
console.log(' $ novelws
|
|
38
|
+
console.log(' $ novelws upgrade # 升级项目');
|
|
41
39
|
console.log('');
|
|
42
40
|
console.log(chalk.gray('更多信息: https://github.com/binlee1990/novel-writer-skills'));
|
|
43
41
|
});
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,SAAS;AACT,SAAS,aAAa;IACpB,MAAM,MAAM,GAAG;;;;;CAKhB,CAAC;IACA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,aAAa,EAAE,CAAC;AAEhB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;KACrE,OAAO,CAAC,UAAU,EAAE,EAAE,eAAe,EAAE,OAAO,CAAC;KAC/C,UAAU,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;AAEtC,QAAQ;AACR,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAEhC,UAAU;AACV,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC,CAAC;AACrF,CAAC,CAAC,CAAC;AAEH,UAAU;AACV,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,oBAAoB;AACpB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAetD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6H1D"}
|
package/dist/commands/init.js
CHANGED
|
@@ -7,8 +7,7 @@ import fs from 'fs-extra';
|
|
|
7
7
|
import ora from 'ora';
|
|
8
8
|
import { execSync } from 'child_process';
|
|
9
9
|
import { getVersion } from '../version.js';
|
|
10
|
-
import {
|
|
11
|
-
import { getPackageRoot, getTemplateSourcePaths, getProjectPaths, DEFAULT_GITIGNORE, } from '../core/config.js';
|
|
10
|
+
import { getTemplateSourcePaths, getProjectPaths, DEFAULT_GITIGNORE, } from '../core/config.js';
|
|
12
11
|
import { injectModelToCommands } from '../utils/project.js';
|
|
13
12
|
export function registerInitCommand(program) {
|
|
14
13
|
program
|
|
@@ -16,18 +15,11 @@ export function registerInitCommand(program) {
|
|
|
16
15
|
.argument('[name]', '小说项目名称')
|
|
17
16
|
.option('--here', '在当前目录初始化')
|
|
18
17
|
.option('--model <name>', '指定命令使用的 AI 模型')
|
|
19
|
-
.option('--plugins <names>', '预装插件,逗号分隔')
|
|
20
|
-
.option('--scale <size>', '项目规模预设 (large: 启用分片存储)')
|
|
21
|
-
.option('--with-mcp', '启用 MCP + SQLite 数据中枢(隐含 --scale large)')
|
|
22
18
|
.option('--no-git', '跳过 Git 初始化')
|
|
23
19
|
.description('初始化一个新的小说项目')
|
|
24
20
|
.action(async (name, options) => {
|
|
25
21
|
const spinner = ora('正在初始化小说项目...').start();
|
|
26
22
|
try {
|
|
27
|
-
// --with-mcp 隐含 --scale large
|
|
28
|
-
if (options.withMcp && !options.scale) {
|
|
29
|
-
options.scale = 'large';
|
|
30
|
-
}
|
|
31
23
|
// 确定项目路径
|
|
32
24
|
let projectPath;
|
|
33
25
|
if (options.here) {
|
|
@@ -51,12 +43,7 @@ export function registerInitCommand(program) {
|
|
|
51
43
|
const baseDirs = [
|
|
52
44
|
paths.claude,
|
|
53
45
|
paths.commands,
|
|
54
|
-
paths.skills,
|
|
55
|
-
paths.cache,
|
|
56
46
|
paths.resources,
|
|
57
|
-
path.join(paths.resources, 'config'),
|
|
58
|
-
paths.resourcesMemory,
|
|
59
|
-
paths.resourcesScripts,
|
|
60
47
|
paths.tracking,
|
|
61
48
|
paths.stories,
|
|
62
49
|
];
|
|
@@ -67,11 +54,8 @@ export function registerInitCommand(program) {
|
|
|
67
54
|
const config = {
|
|
68
55
|
name,
|
|
69
56
|
type: 'novel',
|
|
70
|
-
ai: 'claude',
|
|
71
|
-
created: new Date().toISOString(),
|
|
72
57
|
version: getVersion(),
|
|
73
|
-
|
|
74
|
-
...(options.withMcp && { mcp: true }),
|
|
58
|
+
created: new Date().toISOString(),
|
|
75
59
|
};
|
|
76
60
|
await fs.writeJson(paths.resourcesConfig, config, { spaces: 2 });
|
|
77
61
|
// 从 novel-writer-skills 包复制模板文件
|
|
@@ -79,17 +63,11 @@ export function registerInitCommand(program) {
|
|
|
79
63
|
// 复制命令文件
|
|
80
64
|
if (await fs.pathExists(templates.commands)) {
|
|
81
65
|
await fs.copy(templates.commands, paths.commands);
|
|
82
|
-
// 如果指定了 --model,注入到命令文件 frontmatter
|
|
83
66
|
if (options.model) {
|
|
84
67
|
await injectModelToCommands(paths.commands, options.model);
|
|
85
68
|
}
|
|
86
69
|
spinner.text = '已安装 Slash Commands...';
|
|
87
70
|
}
|
|
88
|
-
// 复制 Skills 文件
|
|
89
|
-
if (await fs.pathExists(templates.skills)) {
|
|
90
|
-
await fs.copy(templates.skills, paths.skills);
|
|
91
|
-
spinner.text = '已安装 Agent Skills...';
|
|
92
|
-
}
|
|
93
71
|
// 复制 CLAUDE.md 到 .claude/
|
|
94
72
|
if (await fs.pathExists(templates.dotClaude)) {
|
|
95
73
|
const claudeMdSrc = path.join(templates.dotClaude, 'CLAUDE.md');
|
|
@@ -98,71 +76,14 @@ export function registerInitCommand(program) {
|
|
|
98
76
|
spinner.text = '已安装 CLAUDE.md 核心规范...';
|
|
99
77
|
}
|
|
100
78
|
}
|
|
101
|
-
// 复制 resources/
|
|
79
|
+
// 复制 resources/ 模板(constitution.md, style-reference.md, anti-ai.md)
|
|
102
80
|
if (await fs.pathExists(templates.resources)) {
|
|
103
81
|
await fs.copy(templates.resources, paths.resources);
|
|
104
82
|
spinner.text = '已安装资源文件...';
|
|
105
83
|
}
|
|
106
|
-
//
|
|
84
|
+
// 复制 tracking/ 模板(4 个 JSON 文件)
|
|
107
85
|
if (await fs.pathExists(templates.tracking)) {
|
|
108
|
-
|
|
109
|
-
if (options.scale === 'large') {
|
|
110
|
-
await fs.copy(templates.tracking, paths.tracking);
|
|
111
|
-
}
|
|
112
|
-
else {
|
|
113
|
-
await fs.copy(templates.tracking, paths.tracking, {
|
|
114
|
-
filter: (src) => !path.normalize(src).startsWith(summaryDir),
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
// 大型项目:创建分片目录结构
|
|
119
|
-
if (options.scale === 'large') {
|
|
120
|
-
await fs.ensureDir(paths.trackingSummary);
|
|
121
|
-
await fs.ensureDir(path.join(paths.trackingVolumes, 'vol-01'));
|
|
122
|
-
// 复制 tracking 模板到 vol-01 作为初始卷
|
|
123
|
-
const trackingFiles = ['character-state.json', 'plot-tracker.json', 'timeline.json', 'relationships.json'];
|
|
124
|
-
for (const file of trackingFiles) {
|
|
125
|
-
const src = path.join(templates.tracking, file);
|
|
126
|
-
const dest = path.join(paths.trackingVolumes, 'vol-01', file);
|
|
127
|
-
if (await fs.pathExists(src)) {
|
|
128
|
-
await fs.copy(src, dest);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
spinner.text = '已创建大型项目分片结构...';
|
|
132
|
-
}
|
|
133
|
-
// 复制知识库模板(项目特定)→ resources/knowledge/
|
|
134
|
-
if (await fs.pathExists(templates.knowledge)) {
|
|
135
|
-
await fs.copy(templates.knowledge, paths.resourcesKnowledge);
|
|
136
|
-
}
|
|
137
|
-
// MCP 配置生成
|
|
138
|
-
if (options.withMcp) {
|
|
139
|
-
const mcpConfig = {
|
|
140
|
-
mcpServers: {
|
|
141
|
-
novelws: {
|
|
142
|
-
command: 'npx',
|
|
143
|
-
args: ['novelws-mcp', '.'],
|
|
144
|
-
env: {},
|
|
145
|
-
},
|
|
146
|
-
},
|
|
147
|
-
};
|
|
148
|
-
await fs.writeJson(paths.mcpServers, mcpConfig, { spaces: 2 });
|
|
149
|
-
spinner.text = '已生成 MCP 服务器配置...';
|
|
150
|
-
}
|
|
151
|
-
// 如果指定了 --plugins,安装插件
|
|
152
|
-
if (options.plugins) {
|
|
153
|
-
spinner.text = '安装插件...';
|
|
154
|
-
const pluginNames = options.plugins.split(',').map((p) => p.trim());
|
|
155
|
-
const pluginManager = new PluginManager(projectPath);
|
|
156
|
-
const packageRoot = getPackageRoot();
|
|
157
|
-
for (const pluginName of pluginNames) {
|
|
158
|
-
const builtinPluginPath = path.join(packageRoot, 'plugins', pluginName);
|
|
159
|
-
if (await fs.pathExists(builtinPluginPath)) {
|
|
160
|
-
await pluginManager.installPlugin(pluginName, builtinPluginPath);
|
|
161
|
-
}
|
|
162
|
-
else {
|
|
163
|
-
console.log(chalk.yellow(`\n警告: 插件 "${pluginName}" 未找到`));
|
|
164
|
-
}
|
|
165
|
-
}
|
|
86
|
+
await fs.copy(templates.tracking, paths.tracking);
|
|
166
87
|
}
|
|
167
88
|
// Git 初始化
|
|
168
89
|
if (options.git !== false) {
|
|
@@ -185,21 +106,13 @@ export function registerInitCommand(program) {
|
|
|
185
106
|
}
|
|
186
107
|
console.log(` 2. ${chalk.white('在 Claude Code 中打开项目')}`);
|
|
187
108
|
console.log(` 3. 使用以下斜杠命令开始创作:`);
|
|
188
|
-
console.log('\n' + chalk.yellow(' 📝
|
|
189
|
-
console.log(` ${chalk.cyan('/
|
|
190
|
-
console.log(` ${chalk.cyan('/
|
|
191
|
-
console.log(` ${chalk.cyan('/
|
|
192
|
-
console.log(` ${chalk.cyan('/
|
|
193
|
-
console.log(` ${chalk.cyan('/
|
|
194
|
-
console.log(
|
|
195
|
-
console.log(` ${chalk.cyan('/analyze')} - 综合验证分析,确保质量一致`);
|
|
196
|
-
console.log('\n' + chalk.yellow(' 📊 追踪管理命令:'));
|
|
197
|
-
console.log(` ${chalk.cyan('/track-init')} - 初始化追踪系统`);
|
|
198
|
-
console.log(` ${chalk.cyan('/track')} - 综合追踪更新`);
|
|
199
|
-
console.log(` ${chalk.cyan('/checklist')} - 质量检查清单`);
|
|
200
|
-
console.log(` ${chalk.cyan('/timeline')} - 管理故事时间线`);
|
|
201
|
-
console.log('\n' + chalk.gray('Agent Skills 会自动激活,无需手动调用'));
|
|
202
|
-
console.log(chalk.dim('提示: 斜杠命令在 Claude Code 内部使用,不是在终端中'));
|
|
109
|
+
console.log('\n' + chalk.yellow(' 📝 五命令流水线:'));
|
|
110
|
+
console.log(` ${chalk.cyan('/specify')} - 定义故事设定、角色、世界观`);
|
|
111
|
+
console.log(` ${chalk.cyan('/plan')} - 生成卷级大纲`);
|
|
112
|
+
console.log(` ${chalk.cyan('/write')} - 逐章生成剧情概要`);
|
|
113
|
+
console.log(` ${chalk.cyan('/expand')} - 将概要扩写为正文`);
|
|
114
|
+
console.log(` ${chalk.cyan('/analyze')} - 质量检查`);
|
|
115
|
+
console.log('\n' + chalk.dim('提示: 斜杠命令在 Claude Code 内部使用,不是在终端中'));
|
|
203
116
|
}
|
|
204
117
|
catch (error) {
|
|
205
118
|
spinner.fail(chalk.red('项目初始化失败'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAYtD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAYtD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyF7D"}
|
package/dist/commands/upgrade.js
CHANGED
|
@@ -12,8 +12,6 @@ export function registerUpgradeCommand(program) {
|
|
|
12
12
|
program
|
|
13
13
|
.command('upgrade')
|
|
14
14
|
.option('--commands', '更新命令文件')
|
|
15
|
-
.option('--skills', '更新 Skills 文件')
|
|
16
|
-
.option('--scripts', '更新脚本文件')
|
|
17
15
|
.option('--model <name>', '指定命令使用的 AI 模型')
|
|
18
16
|
.option('--all', '更新所有内容')
|
|
19
17
|
.option('-y, --yes', '跳过确认提示')
|
|
@@ -23,29 +21,17 @@ export function registerUpgradeCommand(program) {
|
|
|
23
21
|
const paths = getProjectPaths(projectPath);
|
|
24
22
|
const templates = getTemplateSourcePaths();
|
|
25
23
|
try {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const isLegacy = !isNewStructure && await fs.pathExists(paths._legacy_specify);
|
|
29
|
-
if (!isNewStructure && !isLegacy) {
|
|
24
|
+
const isProject = await fs.pathExists(paths.resourcesConfig);
|
|
25
|
+
if (!isProject) {
|
|
30
26
|
console.log(chalk.red('❌ 当前目录不是 novel-writer-skills 项目'));
|
|
31
27
|
process.exit(1);
|
|
32
28
|
}
|
|
33
|
-
const
|
|
34
|
-
? paths.resourcesConfig
|
|
35
|
-
: path.join(paths._legacy_specify, 'config.json');
|
|
36
|
-
const config = await fs.readJson(configPath);
|
|
29
|
+
const config = await fs.readJson(paths.resourcesConfig);
|
|
37
30
|
const projectVersion = config.version || '未知';
|
|
38
31
|
console.log(chalk.cyan('\n📦 NovelWrite 项目升级\n'));
|
|
39
32
|
console.log(chalk.gray(`当前版本: ${projectVersion}`));
|
|
40
33
|
console.log(chalk.gray(`目标版本: ${getVersion()}\n`));
|
|
41
|
-
|
|
42
|
-
let updateSkills = options.all || options.skills || false;
|
|
43
|
-
let updateScripts = options.all || options.scripts || false;
|
|
44
|
-
if (!updateCommands && !updateSkills && !updateScripts) {
|
|
45
|
-
updateCommands = true;
|
|
46
|
-
updateSkills = true;
|
|
47
|
-
updateScripts = true;
|
|
48
|
-
}
|
|
34
|
+
const updateCommands = options.all || options.commands || true;
|
|
49
35
|
if (!options.yes) {
|
|
50
36
|
const inquirer = (await import('inquirer')).default;
|
|
51
37
|
const answers = await inquirer.prompt([
|
|
@@ -71,103 +57,26 @@ export function registerUpgradeCommand(program) {
|
|
|
71
57
|
}
|
|
72
58
|
}
|
|
73
59
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
if (updateScripts) {
|
|
81
|
-
spinner.text = '更新脚本文件...';
|
|
82
|
-
if (await fs.pathExists(templates.resources)) {
|
|
83
|
-
const scriptsSource = path.join(templates.resources, 'scripts');
|
|
84
|
-
if (await fs.pathExists(scriptsSource)) {
|
|
85
|
-
await fs.ensureDir(paths.resourcesScripts);
|
|
86
|
-
await fs.copy(scriptsSource, paths.resourcesScripts, { overwrite: true });
|
|
87
|
-
}
|
|
60
|
+
// 更新 CLAUDE.md
|
|
61
|
+
spinner.text = '更新 CLAUDE.md...';
|
|
62
|
+
if (await fs.pathExists(templates.dotClaude)) {
|
|
63
|
+
const claudeMdSrc = path.join(templates.dotClaude, 'CLAUDE.md');
|
|
64
|
+
if (await fs.pathExists(claudeMdSrc)) {
|
|
65
|
+
await fs.copy(claudeMdSrc, paths.claudeMd, { overwrite: true });
|
|
88
66
|
}
|
|
89
67
|
}
|
|
90
|
-
//
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
await fs.ensureDir(paths.resources);
|
|
95
|
-
await fs.ensureDir(paths.tracking);
|
|
96
|
-
await fs.ensureDir(paths.cache);
|
|
97
|
-
await fs.ensureDir(path.join(paths.resources, 'config'));
|
|
98
|
-
// 移动文件(按设计文档映射表)
|
|
99
|
-
const migrations = [
|
|
100
|
-
{ from: path.join(paths._legacy_specify, 'memory'), to: paths.resourcesMemory },
|
|
101
|
-
{ from: path.join(paths._legacy_specify, 'templates', 'knowledge-base', 'craft'), to: path.join(paths.resources, 'craft') },
|
|
102
|
-
{ from: path.join(paths._legacy_specify, 'templates', 'knowledge-base', 'genres'), to: path.join(paths.resources, 'genres') },
|
|
103
|
-
{ from: path.join(paths._legacy_specify, 'templates', 'knowledge-base', 'styles'), to: path.join(paths.resources, 'styles') },
|
|
104
|
-
{ from: path.join(paths._legacy_specify, 'templates', 'knowledge-base', 'requirements'), to: path.join(paths.resources, 'requirements') },
|
|
105
|
-
{ from: path.join(paths._legacy_specify, 'templates', 'knowledge-base', 'emotional-beats'), to: path.join(paths.resources, 'emotional-beats') },
|
|
106
|
-
{ from: path.join(paths._legacy_specify, 'templates', 'knowledge-base', 'character-archetypes'), to: path.join(paths.resources, 'character-archetypes') },
|
|
107
|
-
{ from: path.join(paths._legacy_specify, 'templates', 'knowledge-base', 'references'), to: path.join(paths.resources, 'references') },
|
|
108
|
-
{ from: path.join(paths._legacy_specify, 'templates', 'config'), to: path.join(paths.resources, 'config') },
|
|
109
|
-
{ from: path.join(paths._legacy_specify, 'scripts'), to: paths.resourcesScripts },
|
|
110
|
-
{ from: path.join(paths._legacy_spec, 'tracking'), to: paths.tracking },
|
|
111
|
-
{ from: path.join(paths._legacy_spec, 'knowledge'), to: paths.resourcesKnowledge },
|
|
112
|
-
{ from: path.join(paths._legacy_spec, 'presets'), to: path.join(paths.resources, 'presets') },
|
|
113
|
-
];
|
|
114
|
-
for (const { from, to } of migrations) {
|
|
115
|
-
if (await fs.pathExists(from)) {
|
|
116
|
-
await fs.move(from, to, { overwrite: true });
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
// 迁移 config.json
|
|
120
|
-
const oldConfig = path.join(paths._legacy_specify, 'config.json');
|
|
121
|
-
if (await fs.pathExists(oldConfig)) {
|
|
122
|
-
await fs.ensureDir(path.dirname(paths.resourcesConfig));
|
|
123
|
-
await fs.move(oldConfig, paths.resourcesConfig, { overwrite: true });
|
|
124
|
-
}
|
|
125
|
-
// 清理空旧目录
|
|
126
|
-
for (const dir of [paths._legacy_specify, paths._legacy_spec]) {
|
|
127
|
-
if (await fs.pathExists(dir)) {
|
|
128
|
-
await fs.remove(dir);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
// 清除缓存
|
|
132
|
-
if (await fs.pathExists(paths.cache)) {
|
|
133
|
-
await fs.remove(paths.cache);
|
|
134
|
-
await fs.ensureDir(paths.cache);
|
|
135
|
-
}
|
|
136
|
-
spinner.text = 'v3→v4 迁移完成...';
|
|
68
|
+
// 更新 resources
|
|
69
|
+
spinner.text = '更新资源文件...';
|
|
70
|
+
if (await fs.pathExists(templates.resources)) {
|
|
71
|
+
await fs.copy(templates.resources, paths.resources, { overwrite: true });
|
|
137
72
|
}
|
|
138
73
|
config.version = getVersion();
|
|
139
74
|
await fs.writeJson(paths.resourcesConfig, config, { spaces: 2 });
|
|
140
|
-
// 检测 tracking 文件大小,提示迁移
|
|
141
|
-
const MIGRATION_THRESHOLD = 50 * 1024; // 50KB
|
|
142
|
-
const trackingFileNames = [
|
|
143
|
-
'character-state.json',
|
|
144
|
-
'plot-tracker.json',
|
|
145
|
-
'timeline.json',
|
|
146
|
-
'relationships.json',
|
|
147
|
-
];
|
|
148
|
-
let hasLargeFiles = false;
|
|
149
|
-
for (const file of trackingFileNames) {
|
|
150
|
-
const filePath = path.join(paths.tracking, file);
|
|
151
|
-
if (await fs.pathExists(filePath)) {
|
|
152
|
-
const stat = await fs.stat(filePath);
|
|
153
|
-
if (stat.size > MIGRATION_THRESHOLD) {
|
|
154
|
-
hasLargeFiles = true;
|
|
155
|
-
break;
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
75
|
spinner.succeed(chalk.green('升级完成!\n'));
|
|
160
|
-
if (hasLargeFiles) {
|
|
161
|
-
console.log(chalk.yellow('⚠️ 检测到 tracking 文件较大,建议执行分片迁移以提升性能'));
|
|
162
|
-
console.log(chalk.gray(' 运行 /track --migrate 将数据按卷分片存储\n'));
|
|
163
|
-
}
|
|
164
76
|
console.log(chalk.cyan('✨ 升级内容:'));
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
console.log(' • Agent Skills 已更新');
|
|
169
|
-
if (updateScripts)
|
|
170
|
-
console.log(' • 脚本文件已更新');
|
|
77
|
+
console.log(' • Slash Commands 已更新');
|
|
78
|
+
console.log(' • CLAUDE.md 已更新');
|
|
79
|
+
console.log(' • 资源文件已更新');
|
|
171
80
|
console.log(` • 版本号: ${projectVersion} → ${getVersion()}`);
|
|
172
81
|
}
|
|
173
82
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EACL,eAAe,EACf,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC;SAC9B,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"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"}
|
package/dist/core/config.d.ts
CHANGED
|
@@ -7,32 +7,16 @@
|
|
|
7
7
|
/** 目录名常量 */
|
|
8
8
|
export declare const DIRS: {
|
|
9
9
|
readonly CLAUDE: ".claude";
|
|
10
|
-
readonly SPECIFY: ".specify";
|
|
11
10
|
readonly STORIES: "stories";
|
|
12
|
-
readonly SPEC: "spec";
|
|
13
11
|
readonly COMMANDS: "commands";
|
|
14
|
-
readonly SKILLS: "skills";
|
|
15
|
-
readonly KNOWLEDGE_BASE: "knowledge-base";
|
|
16
|
-
readonly PLUGINS: "plugins";
|
|
17
|
-
readonly MEMORY: "memory";
|
|
18
12
|
readonly TEMPLATES: "templates";
|
|
19
13
|
readonly TRACKING: "tracking";
|
|
20
|
-
readonly KNOWLEDGE: "knowledge";
|
|
21
|
-
readonly SCRIPTS: "scripts";
|
|
22
|
-
readonly SUMMARY: "summary";
|
|
23
|
-
readonly VOLUMES: "volumes";
|
|
24
14
|
readonly RESOURCES: "resources";
|
|
25
|
-
readonly CACHE: ".cache";
|
|
26
15
|
};
|
|
27
16
|
/** 文件名常量 */
|
|
28
17
|
export declare const FILES: {
|
|
29
18
|
readonly CONFIG: "config.json";
|
|
30
|
-
readonly PLUGIN_REGISTRY: "plugins.json";
|
|
31
|
-
readonly PLUGIN_CONFIG: "config.yaml";
|
|
32
19
|
readonly GITIGNORE: ".gitignore";
|
|
33
|
-
readonly MCP_SERVERS: "mcp-servers.json";
|
|
34
|
-
readonly RESOURCE_DIGEST: "resource-digest.json";
|
|
35
|
-
readonly WRITE_CONTEXT: "write-context.json";
|
|
36
20
|
};
|
|
37
21
|
/** 默认 .gitignore 内容 */
|
|
38
22
|
export declare const DEFAULT_GITIGNORE = "# \u4E34\u65F6\u6587\u4EF6\n*.tmp\n*.swp\n.DS_Store\n\n# \u7F16\u8F91\u5668\u914D\u7F6E\n.vscode/\n.idea/\n\n# AI \u7F13\u5B58\n.ai-cache/\n\n# \u8282\u70B9\u6A21\u5757\nnode_modules/\n";
|
|
@@ -43,8 +27,6 @@ export declare const DEFAULT_GITIGNORE = "# \u4E34\u65F6\u6587\u4EF6\n*.tmp\n*.s
|
|
|
43
27
|
export declare function getPackageRoot(): string;
|
|
44
28
|
/** 获取模板目录路径 */
|
|
45
29
|
export declare function getTemplatesDir(): string;
|
|
46
|
-
/** 获取内置插件目录路径 */
|
|
47
|
-
export declare function getBuiltinPluginsDir(): string;
|
|
48
30
|
/**
|
|
49
31
|
* 获取项目内各目录的路径
|
|
50
32
|
*/
|
|
@@ -53,37 +35,19 @@ export declare function getProjectPaths(projectRoot: string): {
|
|
|
53
35
|
claude: string;
|
|
54
36
|
claudeMd: string;
|
|
55
37
|
commands: string;
|
|
56
|
-
skills: string;
|
|
57
|
-
mcpServers: string;
|
|
58
|
-
cache: string;
|
|
59
|
-
resourceDigest: string;
|
|
60
|
-
writeContext: string;
|
|
61
38
|
resources: string;
|
|
62
39
|
resourcesConfig: string;
|
|
63
|
-
resourcesMemory: string;
|
|
64
|
-
resourcesScripts: string;
|
|
65
|
-
resourcesKnowledge: string;
|
|
66
|
-
pluginRegistry: string;
|
|
67
40
|
tracking: string;
|
|
68
|
-
trackingSummary: string;
|
|
69
|
-
trackingVolumes: string;
|
|
70
|
-
trackingDb: string;
|
|
71
41
|
stories: string;
|
|
72
|
-
plugins: string;
|
|
73
|
-
_legacy_specify: string;
|
|
74
|
-
_legacy_spec: string;
|
|
75
42
|
};
|
|
76
43
|
/**
|
|
77
|
-
* 获取模板源路径映射(用于 init
|
|
44
|
+
* 获取模板源路径映射(用于 init)
|
|
78
45
|
*/
|
|
79
46
|
export declare function getTemplateSourcePaths(): {
|
|
80
47
|
commands: string;
|
|
81
|
-
skills: string;
|
|
82
48
|
dotClaude: string;
|
|
83
49
|
resources: string;
|
|
84
50
|
tracking: string;
|
|
85
|
-
knowledge: string;
|
|
86
|
-
trackingSummary: string;
|
|
87
51
|
all: string;
|
|
88
52
|
};
|
|
89
53
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6CH,YAAY;AACZ,eAAO,MAAM,IAAI
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6CH,YAAY;AACZ,eAAO,MAAM,IAAI;;;;;;;CAOP,CAAC;AAEX,YAAY;AACZ,eAAO,MAAM,KAAK;;;CAGR,CAAC;AAEX,uBAAuB;AACvB,eAAO,MAAM,iBAAiB,8LAc7B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,eAAe;AACf,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM;;;;;;;;;EAelD;AAED;;GAEG;AACH,wBAAgB,sBAAsB;;;;;;EASrC"}
|
package/dist/core/config.js
CHANGED
|
@@ -46,32 +46,16 @@ const _packageRoot = findPackageRoot(getCurrentDir());
|
|
|
46
46
|
/** 目录名常量 */
|
|
47
47
|
export const DIRS = {
|
|
48
48
|
CLAUDE: '.claude',
|
|
49
|
-
SPECIFY: '.specify',
|
|
50
49
|
STORIES: 'stories',
|
|
51
|
-
SPEC: 'spec',
|
|
52
50
|
COMMANDS: 'commands',
|
|
53
|
-
SKILLS: 'skills',
|
|
54
|
-
KNOWLEDGE_BASE: 'knowledge-base',
|
|
55
|
-
PLUGINS: 'plugins',
|
|
56
|
-
MEMORY: 'memory',
|
|
57
51
|
TEMPLATES: 'templates',
|
|
58
52
|
TRACKING: 'tracking',
|
|
59
|
-
KNOWLEDGE: 'knowledge',
|
|
60
|
-
SCRIPTS: 'scripts',
|
|
61
|
-
SUMMARY: 'summary',
|
|
62
|
-
VOLUMES: 'volumes',
|
|
63
53
|
RESOURCES: 'resources',
|
|
64
|
-
CACHE: '.cache',
|
|
65
54
|
};
|
|
66
55
|
/** 文件名常量 */
|
|
67
56
|
export const FILES = {
|
|
68
57
|
CONFIG: 'config.json',
|
|
69
|
-
PLUGIN_REGISTRY: 'plugins.json',
|
|
70
|
-
PLUGIN_CONFIG: 'config.yaml',
|
|
71
58
|
GITIGNORE: '.gitignore',
|
|
72
|
-
MCP_SERVERS: 'mcp-servers.json',
|
|
73
|
-
RESOURCE_DIGEST: 'resource-digest.json',
|
|
74
|
-
WRITE_CONTEXT: 'write-context.json',
|
|
75
59
|
};
|
|
76
60
|
/** 默认 .gitignore 内容 */
|
|
77
61
|
export const DEFAULT_GITIGNORE = `# 临时文件
|
|
@@ -100,58 +84,35 @@ export function getPackageRoot() {
|
|
|
100
84
|
export function getTemplatesDir() {
|
|
101
85
|
return path.join(getPackageRoot(), DIRS.TEMPLATES);
|
|
102
86
|
}
|
|
103
|
-
/** 获取内置插件目录路径 */
|
|
104
|
-
export function getBuiltinPluginsDir() {
|
|
105
|
-
return path.join(getPackageRoot(), DIRS.PLUGINS);
|
|
106
|
-
}
|
|
107
87
|
/**
|
|
108
88
|
* 获取项目内各目录的路径
|
|
109
89
|
*/
|
|
110
90
|
export function getProjectPaths(projectRoot) {
|
|
111
91
|
return {
|
|
112
92
|
root: projectRoot,
|
|
113
|
-
// .claude/
|
|
93
|
+
// .claude/
|
|
114
94
|
claude: path.join(projectRoot, DIRS.CLAUDE),
|
|
115
95
|
claudeMd: path.join(projectRoot, DIRS.CLAUDE, 'CLAUDE.md'),
|
|
116
96
|
commands: path.join(projectRoot, DIRS.CLAUDE, DIRS.COMMANDS),
|
|
117
|
-
|
|
118
|
-
mcpServers: path.join(projectRoot, DIRS.CLAUDE, FILES.MCP_SERVERS),
|
|
119
|
-
cache: path.join(projectRoot, DIRS.CLAUDE, DIRS.CACHE),
|
|
120
|
-
resourceDigest: path.join(projectRoot, DIRS.CLAUDE, DIRS.CACHE, FILES.RESOURCE_DIGEST),
|
|
121
|
-
writeContext: path.join(projectRoot, DIRS.CLAUDE, DIRS.CACHE, FILES.WRITE_CONTEXT),
|
|
122
|
-
// resources/ 区域
|
|
97
|
+
// resources/
|
|
123
98
|
resources: path.join(projectRoot, DIRS.RESOURCES),
|
|
124
|
-
resourcesConfig: path.join(projectRoot, DIRS.RESOURCES,
|
|
125
|
-
|
|
126
|
-
resourcesScripts: path.join(projectRoot, DIRS.RESOURCES, DIRS.SCRIPTS),
|
|
127
|
-
resourcesKnowledge: path.join(projectRoot, DIRS.RESOURCES, DIRS.KNOWLEDGE),
|
|
128
|
-
pluginRegistry: path.join(projectRoot, DIRS.RESOURCES, 'config', FILES.PLUGIN_REGISTRY),
|
|
129
|
-
// tracking/ 区域(顶层)
|
|
99
|
+
resourcesConfig: path.join(projectRoot, DIRS.RESOURCES, FILES.CONFIG),
|
|
100
|
+
// tracking/
|
|
130
101
|
tracking: path.join(projectRoot, DIRS.TRACKING),
|
|
131
|
-
|
|
132
|
-
trackingVolumes: path.join(projectRoot, DIRS.TRACKING, DIRS.VOLUMES),
|
|
133
|
-
trackingDb: path.join(projectRoot, DIRS.TRACKING, 'novel-tracking.db'),
|
|
134
|
-
// 不变
|
|
102
|
+
// stories/
|
|
135
103
|
stories: path.join(projectRoot, DIRS.STORIES),
|
|
136
|
-
plugins: path.join(projectRoot, DIRS.PLUGINS),
|
|
137
|
-
// 旧路径(保留用于 upgrade 迁移检测)
|
|
138
|
-
_legacy_specify: path.join(projectRoot, '.specify'),
|
|
139
|
-
_legacy_spec: path.join(projectRoot, 'spec'),
|
|
140
104
|
};
|
|
141
105
|
}
|
|
142
106
|
/**
|
|
143
|
-
* 获取模板源路径映射(用于 init
|
|
107
|
+
* 获取模板源路径映射(用于 init)
|
|
144
108
|
*/
|
|
145
109
|
export function getTemplateSourcePaths() {
|
|
146
110
|
const templatesDir = getTemplatesDir();
|
|
147
111
|
return {
|
|
148
112
|
commands: path.join(templatesDir, DIRS.COMMANDS),
|
|
149
|
-
skills: path.join(templatesDir, DIRS.SKILLS),
|
|
150
113
|
dotClaude: path.join(templatesDir, 'dot-claude'),
|
|
151
114
|
resources: path.join(templatesDir, DIRS.RESOURCES),
|
|
152
115
|
tracking: path.join(templatesDir, DIRS.TRACKING),
|
|
153
|
-
knowledge: path.join(templatesDir, DIRS.KNOWLEDGE),
|
|
154
|
-
trackingSummary: path.join(templatesDir, DIRS.TRACKING, DIRS.SUMMARY),
|
|
155
116
|
all: templatesDir,
|
|
156
117
|
};
|
|
157
118
|
}
|