opencode-novel 0.0.1
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/README.md +110 -0
- package/assets/templates/bible-glossary.md +4 -0
- package/assets/templates/bible-rules.md +5 -0
- package/assets/templates/bible-world.md +8 -0
- package/assets/templates/chapter.md +21 -0
- package/assets/templates/character.md +27 -0
- package/assets/templates/faction.md +14 -0
- package/assets/templates/location.md +11 -0
- package/assets/templates/thread.md +16 -0
- package/dist/agents/editor.d.ts +2 -0
- package/dist/agents/experts.d.ts +13 -0
- package/dist/agents/index.d.ts +7 -0
- package/dist/agents/muse.d.ts +2 -0
- package/dist/agents/novel.d.ts +2 -0
- package/dist/agents/security.d.ts +1 -0
- package/dist/agents/sentinel.d.ts +2 -0
- package/dist/agents/types.d.ts +3 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +3716 -0
- package/dist/config/defaults.d.ts +2 -0
- package/dist/config/load.d.ts +16 -0
- package/dist/config/schema.d.ts +203 -0
- package/dist/config/types.d.ts +5 -0
- package/dist/features/builtin-commands/commands.d.ts +2 -0
- package/dist/features/builtin-commands/index.d.ts +2 -0
- package/dist/features/builtin-commands/templates/novel-apply-candidates.d.ts +1 -0
- package/dist/features/builtin-commands/templates/novel-bible.d.ts +1 -0
- package/dist/features/builtin-commands/templates/novel-bootstrap.d.ts +1 -0
- package/dist/features/builtin-commands/templates/novel-chapter-draft.d.ts +1 -0
- package/dist/features/builtin-commands/templates/novel-chapter-plan.d.ts +1 -0
- package/dist/features/builtin-commands/templates/novel-chapter-review.d.ts +1 -0
- package/dist/features/builtin-commands/templates/novel-character-report.d.ts +1 -0
- package/dist/features/builtin-commands/templates/novel-character.d.ts +1 -0
- package/dist/features/builtin-commands/templates/novel-config-check.d.ts +1 -0
- package/dist/features/builtin-commands/templates/novel-continuation.d.ts +1 -0
- package/dist/features/builtin-commands/templates/novel-continuity-check.d.ts +1 -0
- package/dist/features/builtin-commands/templates/novel-entities-audit.d.ts +1 -0
- package/dist/features/builtin-commands/templates/novel-export.d.ts +1 -0
- package/dist/features/builtin-commands/templates/novel-extract-entities.d.ts +1 -0
- package/dist/features/builtin-commands/templates/novel-faction.d.ts +1 -0
- package/dist/features/builtin-commands/templates/novel-foreshadowing-audit.d.ts +1 -0
- package/dist/features/builtin-commands/templates/novel-graph.d.ts +1 -0
- package/dist/features/builtin-commands/templates/novel-import.d.ts +1 -0
- package/dist/features/builtin-commands/templates/novel-index.d.ts +1 -0
- package/dist/features/builtin-commands/templates/novel-init.d.ts +1 -0
- package/dist/features/builtin-commands/templates/novel-outline.d.ts +1 -0
- package/dist/features/builtin-commands/templates/novel-polish.d.ts +1 -0
- package/dist/features/builtin-commands/templates/novel-rewrite.d.ts +1 -0
- package/dist/features/builtin-commands/templates/novel-snapshot.d.ts +1 -0
- package/dist/features/builtin-commands/templates/novel-style-check.d.ts +1 -0
- package/dist/features/builtin-commands/templates/novel-style-guide.d.ts +1 -0
- package/dist/features/builtin-commands/templates/novel-summary.d.ts +1 -0
- package/dist/features/builtin-commands/templates/novel-thread.d.ts +1 -0
- package/dist/features/builtin-commands/types.d.ts +11 -0
- package/dist/features/builtin-skills/artifacts.d.ts +16 -0
- package/dist/features/builtin-skills/index.d.ts +4 -0
- package/dist/features/builtin-skills/skills/audience-classifier.d.ts +1 -0
- package/dist/features/builtin-skills/skills/emotion-classifier.d.ts +1 -0
- package/dist/features/builtin-skills/skills/genre-classifier.d.ts +1 -0
- package/dist/features/builtin-skills/skills/market-tagger.d.ts +1 -0
- package/dist/features/builtin-skills/skills/novel-character-expert.d.ts +1 -0
- package/dist/features/builtin-skills/skills/novel-continuation-expert.d.ts +1 -0
- package/dist/features/builtin-skills/skills/novel-continuity-sentinel.d.ts +1 -0
- package/dist/features/builtin-skills/skills/novel-entity-extractor.d.ts +1 -0
- package/dist/features/builtin-skills/skills/novel-faction-relations.d.ts +1 -0
- package/dist/features/builtin-skills/skills/novel-flaw-finder.d.ts +1 -0
- package/dist/features/builtin-skills/skills/novel-foreshadowing-unresolved.d.ts +1 -0
- package/dist/features/builtin-skills/skills/novel-oracle.d.ts +1 -0
- package/dist/features/builtin-skills/skills/novel-polish-expert.d.ts +1 -0
- package/dist/features/builtin-skills/skills/novel-summary-expert.d.ts +1 -0
- package/dist/features/builtin-skills/skills/novel-timeline-keeper.d.ts +1 -0
- package/dist/features/builtin-skills/skills/novel-worldbible-keeper.d.ts +1 -0
- package/dist/features/builtin-skills/skills/profile-aggregator.d.ts +1 -0
- package/dist/features/builtin-skills/skills/structure-classifier.d.ts +1 -0
- package/dist/features/builtin-skills/skills/taxonomy-registry.d.ts +1 -0
- package/dist/features/builtin-skills/skills/trope-classifier.d.ts +1 -0
- package/dist/features/builtin-skills/skills.d.ts +2 -0
- package/dist/features/builtin-skills/taxonomy/index.d.ts +3 -0
- package/dist/features/builtin-skills/taxonomy/references.d.ts +8 -0
- package/dist/features/builtin-skills/taxonomy/registry.d.ts +2 -0
- package/dist/features/builtin-skills/taxonomy/types.d.ts +42 -0
- package/dist/features/builtin-skills/types.d.ts +11 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +61966 -0
- package/dist/novel.schema.json +904 -0
- package/dist/plugin-handlers/config-handler.d.ts +9 -0
- package/dist/plugin-handlers/index.d.ts +1 -0
- package/dist/shared/errors/diagnostics.d.ts +19 -0
- package/dist/shared/fs/paths.d.ts +3 -0
- package/dist/shared/fs/read.d.ts +5 -0
- package/dist/shared/fs/write.d.ts +8 -0
- package/dist/shared/hashing/hash8.d.ts +1 -0
- package/dist/shared/hashing/sha256.d.ts +2 -0
- package/dist/shared/markdown/frontmatter.d.ts +15 -0
- package/dist/shared/opencode/artifacts.d.ts +12 -0
- package/dist/shared/strings/chinese-number.d.ts +1 -0
- package/dist/shared/strings/slug.d.ts +1 -0
- package/dist/shared/strings/text-encoding.d.ts +2 -0
- package/dist/shared/tool-output.d.ts +6 -0
- package/dist/tools/novel-apply-candidates/index.d.ts +2 -0
- package/dist/tools/novel-apply-candidates/render.d.ts +2 -0
- package/dist/tools/novel-apply-candidates/tool.d.ts +6 -0
- package/dist/tools/novel-apply-candidates/types.d.ts +52 -0
- package/dist/tools/novel-bible/index.d.ts +2 -0
- package/dist/tools/novel-bible/render.d.ts +3 -0
- package/dist/tools/novel-bible/tool.d.ts +6 -0
- package/dist/tools/novel-bible/types.d.ts +26 -0
- package/dist/tools/novel-bootstrap/index.d.ts +2 -0
- package/dist/tools/novel-bootstrap/tool.d.ts +6 -0
- package/dist/tools/novel-bootstrap/types.d.ts +38 -0
- package/dist/tools/novel-candidates-write/index.d.ts +2 -0
- package/dist/tools/novel-candidates-write/tool.d.ts +6 -0
- package/dist/tools/novel-candidates-write/types.d.ts +13 -0
- package/dist/tools/novel-chapter-plan/index.d.ts +2 -0
- package/dist/tools/novel-chapter-plan/tool.d.ts +6 -0
- package/dist/tools/novel-chapter-plan/types.d.ts +32 -0
- package/dist/tools/novel-character-report/index.d.ts +2 -0
- package/dist/tools/novel-character-report/render.d.ts +2 -0
- package/dist/tools/novel-character-report/tool.d.ts +6 -0
- package/dist/tools/novel-character-report/types.d.ts +23 -0
- package/dist/tools/novel-config-check/index.d.ts +2 -0
- package/dist/tools/novel-config-check/tool.d.ts +4 -0
- package/dist/tools/novel-config-check/types.d.ts +15 -0
- package/dist/tools/novel-context-pack/index.d.ts +2 -0
- package/dist/tools/novel-context-pack/tool.d.ts +6 -0
- package/dist/tools/novel-context-pack/types.d.ts +37 -0
- package/dist/tools/novel-continuity-check/index.d.ts +2 -0
- package/dist/tools/novel-continuity-check/render.d.ts +9 -0
- package/dist/tools/novel-continuity-check/tool.d.ts +6 -0
- package/dist/tools/novel-continuity-check/types.d.ts +37 -0
- package/dist/tools/novel-entity-gaps/index.d.ts +2 -0
- package/dist/tools/novel-entity-gaps/render.d.ts +5 -0
- package/dist/tools/novel-entity-gaps/tool.d.ts +6 -0
- package/dist/tools/novel-entity-gaps/types.d.ts +33 -0
- package/dist/tools/novel-export/docx.d.ts +5 -0
- package/dist/tools/novel-export/epub.d.ts +10 -0
- package/dist/tools/novel-export/index.d.ts +2 -0
- package/dist/tools/novel-export/preflight.d.ts +19 -0
- package/dist/tools/novel-export/render.d.ts +6 -0
- package/dist/tools/novel-export/tool.d.ts +6 -0
- package/dist/tools/novel-export/types.d.ts +109 -0
- package/dist/tools/novel-foreshadowing-audit/index.d.ts +2 -0
- package/dist/tools/novel-foreshadowing-audit/render.d.ts +5 -0
- package/dist/tools/novel-foreshadowing-audit/tool.d.ts +6 -0
- package/dist/tools/novel-foreshadowing-audit/types.d.ts +40 -0
- package/dist/tools/novel-graph/index.d.ts +2 -0
- package/dist/tools/novel-graph/render.d.ts +5 -0
- package/dist/tools/novel-graph/tool.d.ts +6 -0
- package/dist/tools/novel-graph/types.d.ts +21 -0
- package/dist/tools/novel-import/index.d.ts +2 -0
- package/dist/tools/novel-import/tool.d.ts +7 -0
- package/dist/tools/novel-import/types.d.ts +47 -0
- package/dist/tools/novel-index/index.d.ts +2 -0
- package/dist/tools/novel-index/render.d.ts +35 -0
- package/dist/tools/novel-index/tool.d.ts +6 -0
- package/dist/tools/novel-index/types.d.ts +41 -0
- package/dist/tools/novel-outline/index.d.ts +2 -0
- package/dist/tools/novel-outline/tool.d.ts +6 -0
- package/dist/tools/novel-outline/types.d.ts +37 -0
- package/dist/tools/novel-scaffold/index.d.ts +2 -0
- package/dist/tools/novel-scaffold/scaffold.d.ts +18 -0
- package/dist/tools/novel-scaffold/templates.d.ts +5 -0
- package/dist/tools/novel-scaffold/tool.d.ts +6 -0
- package/dist/tools/novel-scaffold/types.d.ts +19 -0
- package/dist/tools/novel-scan/helpers.d.ts +88 -0
- package/dist/tools/novel-scan/index.d.ts +3 -0
- package/dist/tools/novel-scan/scan.d.ts +17 -0
- package/dist/tools/novel-scan/tool.d.ts +6 -0
- package/dist/tools/novel-scan/types.d.ts +106 -0
- package/dist/tools/novel-scene-check/index.d.ts +2 -0
- package/dist/tools/novel-scene-check/render.d.ts +11 -0
- package/dist/tools/novel-scene-check/tool.d.ts +6 -0
- package/dist/tools/novel-scene-check/types.d.ts +38 -0
- package/dist/tools/novel-setup/index.d.ts +2 -0
- package/dist/tools/novel-setup/tool.d.ts +6 -0
- package/dist/tools/novel-setup/types.d.ts +35 -0
- package/dist/tools/novel-snapshot/index.d.ts +2 -0
- package/dist/tools/novel-snapshot/tool.d.ts +6 -0
- package/dist/tools/novel-snapshot/types.d.ts +26 -0
- package/dist/tools/novel-structure-check/index.d.ts +2 -0
- package/dist/tools/novel-structure-check/render.d.ts +14 -0
- package/dist/tools/novel-structure-check/tool.d.ts +6 -0
- package/dist/tools/novel-structure-check/types.d.ts +42 -0
- package/dist/tools/novel-style-check/index.d.ts +2 -0
- package/dist/tools/novel-style-check/render.d.ts +8 -0
- package/dist/tools/novel-style-check/tool.d.ts +6 -0
- package/dist/tools/novel-style-check/types.d.ts +39 -0
- package/dist/tools/skill/index.d.ts +3 -0
- package/dist/tools/skill/loader.d.ts +5 -0
- package/dist/tools/skill/tool.d.ts +5 -0
- package/dist/tools/skill/types.d.ts +14 -0
- package/dist/tools/slashcommand/index.d.ts +3 -0
- package/dist/tools/slashcommand/loader.d.ts +5 -0
- package/dist/tools/slashcommand/tool.d.ts +6 -0
- package/dist/tools/slashcommand/types.d.ts +14 -0
- package/package.json +55 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { NovelConfig } from "./schema";
|
|
2
|
+
export type ConfigSource = "defaults" | "user" | "project";
|
|
3
|
+
export type ConfigLoadError = {
|
|
4
|
+
source: ConfigSource;
|
|
5
|
+
path?: string;
|
|
6
|
+
message: string;
|
|
7
|
+
};
|
|
8
|
+
export declare function getProjectConfigPath(projectRoot: string): string;
|
|
9
|
+
export declare function loadNovelConfig(projectRoot: string): {
|
|
10
|
+
config: NovelConfig;
|
|
11
|
+
errors: ConfigLoadError[];
|
|
12
|
+
sources: {
|
|
13
|
+
user?: string;
|
|
14
|
+
project?: string;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const NovelConfigSchema: z.ZodObject<{
|
|
3
|
+
projectRoot: z.ZodOptional<z.ZodString>;
|
|
4
|
+
manuscriptDir: z.ZodDefault<z.ZodString>;
|
|
5
|
+
language: z.ZodDefault<z.ZodEnum<{
|
|
6
|
+
zh: "zh";
|
|
7
|
+
en: "en";
|
|
8
|
+
}>>;
|
|
9
|
+
encoding: z.ZodDefault<z.ZodEnum<{
|
|
10
|
+
utf8: "utf8";
|
|
11
|
+
utf16le: "utf16le";
|
|
12
|
+
auto: "auto";
|
|
13
|
+
"utf8-bom": "utf8-bom";
|
|
14
|
+
utf16be: "utf16be";
|
|
15
|
+
gbk: "gbk";
|
|
16
|
+
gb18030: "gb18030";
|
|
17
|
+
}>>;
|
|
18
|
+
styleGuide: z.ZodDefault<z.ZodObject<{
|
|
19
|
+
pov: z.ZodOptional<z.ZodEnum<{
|
|
20
|
+
first: "first";
|
|
21
|
+
third_limited: "third_limited";
|
|
22
|
+
third_omniscient: "third_omniscient";
|
|
23
|
+
multi: "multi";
|
|
24
|
+
}>>;
|
|
25
|
+
tense: z.ZodOptional<z.ZodEnum<{
|
|
26
|
+
past: "past";
|
|
27
|
+
present: "present";
|
|
28
|
+
mixed: "mixed";
|
|
29
|
+
}>>;
|
|
30
|
+
tone: z.ZodOptional<z.ZodString>;
|
|
31
|
+
taboos: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
32
|
+
rating: z.ZodDefault<z.ZodString>;
|
|
33
|
+
lexicon: z.ZodDefault<z.ZodObject<{
|
|
34
|
+
preferred: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
35
|
+
avoid: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
36
|
+
}, z.core.$strip>>;
|
|
37
|
+
checks: z.ZodDefault<z.ZodObject<{
|
|
38
|
+
catchphrase: z.ZodDefault<z.ZodObject<{
|
|
39
|
+
maxCount: z.ZodDefault<z.ZodNumber>;
|
|
40
|
+
reportMissing: z.ZodDefault<z.ZodBoolean>;
|
|
41
|
+
}, z.core.$strip>>;
|
|
42
|
+
}, z.core.$strip>>;
|
|
43
|
+
}, z.core.$strip>>;
|
|
44
|
+
naming: z.ZodDefault<z.ZodObject<{
|
|
45
|
+
chapterIdPattern: z.ZodDefault<z.ZodString>;
|
|
46
|
+
threadIdPattern: z.ZodDefault<z.ZodString>;
|
|
47
|
+
characterIdPattern: z.ZodDefault<z.ZodString>;
|
|
48
|
+
factionIdPattern: z.ZodDefault<z.ZodString>;
|
|
49
|
+
locationIdPattern: z.ZodDefault<z.ZodString>;
|
|
50
|
+
dateFormat: z.ZodDefault<z.ZodString>;
|
|
51
|
+
}, z.core.$strip>>;
|
|
52
|
+
frontmatter: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
53
|
+
index: z.ZodDefault<z.ZodObject<{
|
|
54
|
+
outputDir: z.ZodDefault<z.ZodString>;
|
|
55
|
+
cacheDir: z.ZodDefault<z.ZodString>;
|
|
56
|
+
stableSortLocale: z.ZodDefault<z.ZodString>;
|
|
57
|
+
writeDerivedFiles: z.ZodDefault<z.ZodBoolean>;
|
|
58
|
+
}, z.core.$strip>>;
|
|
59
|
+
continuity: z.ZodDefault<z.ZodObject<{
|
|
60
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
61
|
+
rules: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
62
|
+
id: z.ZodString;
|
|
63
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
64
|
+
severity: z.ZodDefault<z.ZodEnum<{
|
|
65
|
+
error: "error";
|
|
66
|
+
warn: "warn";
|
|
67
|
+
info: "info";
|
|
68
|
+
}>>;
|
|
69
|
+
params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
70
|
+
}, z.core.$strip>>>;
|
|
71
|
+
strictMode: z.ZodDefault<z.ZodBoolean>;
|
|
72
|
+
}, z.core.$strip>>;
|
|
73
|
+
threads: z.ZodDefault<z.ZodObject<{
|
|
74
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
75
|
+
requireClosePlan: z.ZodDefault<z.ZodBoolean>;
|
|
76
|
+
staleDaysWarn: z.ZodDefault<z.ZodNumber>;
|
|
77
|
+
}, z.core.$strip>>;
|
|
78
|
+
structure: z.ZodDefault<z.ZodObject<{
|
|
79
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
80
|
+
required_beats: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
81
|
+
min_coverage: z.ZodDefault<z.ZodNumber>;
|
|
82
|
+
}, z.core.$strip>>;
|
|
83
|
+
scene: z.ZodDefault<z.ZodObject<{
|
|
84
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
85
|
+
required_fields: z.ZodDefault<z.ZodArray<z.ZodEnum<{
|
|
86
|
+
scene_id: "scene_id";
|
|
87
|
+
objective: "objective";
|
|
88
|
+
conflict: "conflict";
|
|
89
|
+
outcome: "outcome";
|
|
90
|
+
hook: "hook";
|
|
91
|
+
}>>>;
|
|
92
|
+
}, z.core.$strip>>;
|
|
93
|
+
export: z.ZodDefault<z.ZodObject<{
|
|
94
|
+
formats: z.ZodDefault<z.ZodArray<z.ZodEnum<{
|
|
95
|
+
md: "md";
|
|
96
|
+
html: "html";
|
|
97
|
+
epub: "epub";
|
|
98
|
+
docx: "docx";
|
|
99
|
+
}>>>;
|
|
100
|
+
chapterOrder: z.ZodDefault<z.ZodEnum<{
|
|
101
|
+
custom: "custom";
|
|
102
|
+
by_id: "by_id";
|
|
103
|
+
by_timeline: "by_timeline";
|
|
104
|
+
}>>;
|
|
105
|
+
includeFrontmatter: z.ZodDefault<z.ZodBoolean>;
|
|
106
|
+
outputDir: z.ZodDefault<z.ZodString>;
|
|
107
|
+
docx: z.ZodDefault<z.ZodObject<{
|
|
108
|
+
template: z.ZodDefault<z.ZodEnum<{
|
|
109
|
+
default: "default";
|
|
110
|
+
manuscript: "manuscript";
|
|
111
|
+
}>>;
|
|
112
|
+
}, z.core.$strip>>;
|
|
113
|
+
preflight: z.ZodDefault<z.ZodObject<{
|
|
114
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
115
|
+
checks: z.ZodDefault<z.ZodArray<z.ZodEnum<{
|
|
116
|
+
structure: "structure";
|
|
117
|
+
index: "index";
|
|
118
|
+
continuity: "continuity";
|
|
119
|
+
foreshadowing: "foreshadowing";
|
|
120
|
+
style: "style";
|
|
121
|
+
scene: "scene";
|
|
122
|
+
arc: "arc";
|
|
123
|
+
pacing: "pacing";
|
|
124
|
+
}>>>;
|
|
125
|
+
failOn: z.ZodDefault<z.ZodEnum<{
|
|
126
|
+
error: "error";
|
|
127
|
+
warn: "warn";
|
|
128
|
+
}>>;
|
|
129
|
+
}, z.core.$strip>>;
|
|
130
|
+
}, z.core.$strip>>;
|
|
131
|
+
contextPack: z.ZodDefault<z.ZodObject<{
|
|
132
|
+
maxChars: z.ZodDefault<z.ZodNumber>;
|
|
133
|
+
include: z.ZodDefault<z.ZodObject<{
|
|
134
|
+
bible: z.ZodDefault<z.ZodBoolean>;
|
|
135
|
+
characters: z.ZodDefault<z.ZodBoolean>;
|
|
136
|
+
openThreads: z.ZodDefault<z.ZodBoolean>;
|
|
137
|
+
lastChapters: z.ZodDefault<z.ZodNumber>;
|
|
138
|
+
}, z.core.$strip>>;
|
|
139
|
+
redaction: z.ZodDefault<z.ZodObject<{
|
|
140
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
141
|
+
patterns: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
142
|
+
}, z.core.$strip>>;
|
|
143
|
+
}, z.core.$strip>>;
|
|
144
|
+
agents_enabled: z.ZodDefault<z.ZodBoolean>;
|
|
145
|
+
agent_name_prefix: z.ZodDefault<z.ZodString>;
|
|
146
|
+
agents_preset: z.ZodDefault<z.ZodEnum<{
|
|
147
|
+
full: "full";
|
|
148
|
+
core: "core";
|
|
149
|
+
}>>;
|
|
150
|
+
agents_primary: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
151
|
+
disabled_agents: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
152
|
+
agents_force_override: z.ZodDefault<z.ZodBoolean>;
|
|
153
|
+
agents: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
154
|
+
model: z.ZodOptional<z.ZodString>;
|
|
155
|
+
variant: z.ZodOptional<z.ZodString>;
|
|
156
|
+
temperature: z.ZodOptional<z.ZodNumber>;
|
|
157
|
+
top_p: z.ZodOptional<z.ZodNumber>;
|
|
158
|
+
maxTokens: z.ZodOptional<z.ZodNumber>;
|
|
159
|
+
category: z.ZodOptional<z.ZodString>;
|
|
160
|
+
prompt: z.ZodOptional<z.ZodString>;
|
|
161
|
+
prompt_append: z.ZodOptional<z.ZodString>;
|
|
162
|
+
tools: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodBoolean>>;
|
|
163
|
+
permission: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
164
|
+
}, z.core.$loose>>>;
|
|
165
|
+
customTemplatesDir: z.ZodOptional<z.ZodString>;
|
|
166
|
+
customRulesDir: z.ZodOptional<z.ZodString>;
|
|
167
|
+
skills: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
168
|
+
import: z.ZodDefault<z.ZodObject<{
|
|
169
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
170
|
+
defaultMode: z.ZodDefault<z.ZodEnum<{
|
|
171
|
+
copy: "copy";
|
|
172
|
+
analyze: "analyze";
|
|
173
|
+
}>>;
|
|
174
|
+
includeGlobs: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
175
|
+
excludeGlobs: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
176
|
+
chapterDetection: z.ZodDefault<z.ZodObject<{
|
|
177
|
+
mode: z.ZodDefault<z.ZodLiteral<"heading_heuristic">>;
|
|
178
|
+
patterns: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
179
|
+
id: z.ZodString;
|
|
180
|
+
regex: z.ZodString;
|
|
181
|
+
flags: z.ZodOptional<z.ZodString>;
|
|
182
|
+
}, z.core.$strip>>>;
|
|
183
|
+
enableLooseH1AfterFirstMatch: z.ZodDefault<z.ZodBoolean>;
|
|
184
|
+
}, z.core.$strip>>;
|
|
185
|
+
chapterId: z.ZodDefault<z.ZodObject<{
|
|
186
|
+
scheme: z.ZodDefault<z.ZodLiteral<"from_heading">>;
|
|
187
|
+
prefix: z.ZodDefault<z.ZodString>;
|
|
188
|
+
pad: z.ZodDefault<z.ZodNumber>;
|
|
189
|
+
specialPrefix: z.ZodDefault<z.ZodString>;
|
|
190
|
+
}, z.core.$strip>>;
|
|
191
|
+
multiChapterFiles: z.ZodDefault<z.ZodLiteral<"split">>;
|
|
192
|
+
manuscriptExistsPolicy: z.ZodDefault<z.ZodLiteral<"merge">>;
|
|
193
|
+
}, z.core.$strip>>;
|
|
194
|
+
compat: z.ZodDefault<z.ZodObject<{
|
|
195
|
+
export_slashcommand_tool: z.ZodDefault<z.ZodBoolean>;
|
|
196
|
+
export_skill_tool: z.ZodDefault<z.ZodBoolean>;
|
|
197
|
+
export_skill_mcp_tool: z.ZodDefault<z.ZodBoolean>;
|
|
198
|
+
}, z.core.$strip>>;
|
|
199
|
+
disabled_commands: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
200
|
+
disabled_skills: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
201
|
+
disabled_rules: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
202
|
+
}, z.core.$loose>;
|
|
203
|
+
export type NovelConfig = z.infer<typeof NovelConfigSchema>;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { createDefaultNovelConfig } from "./defaults";
|
|
2
|
+
export type { ConfigLoadError, ConfigSource } from "./load";
|
|
3
|
+
export { getProjectConfigPath, loadNovelConfig } from "./load";
|
|
4
|
+
export type { NovelConfig } from "./schema";
|
|
5
|
+
export { NovelConfigSchema } from "./schema";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_APPLY_CANDIDATES_TEMPLATE = "\u76EE\u6807\uFF1A\u628A candidates \u4EE5\u53D7\u63A7\u65B9\u5F0F\u5E94\u7528\u5230 manuscript/\uFF08\u4EC5 frontmatter/\u65B0\u5EFA\u5B9E\u4F53\u6587\u4EF6\uFF1B\u4E0D\u6539\u6B63\u6587\uFF09\u3002\n\n\u6B65\u9AA4\uFF1A\n1) \u8C03\u7528 tool: novel_apply_candidates\uFF08\u9ED8\u8BA4 dryRun=true\uFF09\n2) \u5C55\u793A APPLY_REPORT \u6458\u8981\uFF0C\u5E76\u8BE2\u95EE\u7528\u6237\u662F\u5426\u6267\u884C dryRun=false\n3) \u7528\u6237\u786E\u8BA4\u540E\u518D\u6B21\u8C03\u7528 novel_apply_candidates { dryRun:false, snapshot:true, snapshotTag:\"before-apply\" }\uFF08\u63A8\u8350\u5148\u5FEB\u7167\uFF0C\u4FBF\u4E8E\u56DE\u6EDA\uFF09\n4) \u6700\u540E\u5EFA\u8BAE\uFF1A/novel-index \u4E0E /novel-continuity-check \u590D\u6838\u3002";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_BIBLE_TEMPLATE = "\u76EE\u6807\uFF1A\u751F\u6210/\u66F4\u65B0 bible\uFF08\u4E16\u754C\u89C2/\u540D\u8BCD\u8868/\u89C4\u5219\u6761\u6B3E\uFF09\u3002\n\n\u6B65\u9AA4\uFF1A\n1) \u8C03\u7528 tool: novel_context_pack\uFF08task=foreshadowing \u6216 review\uFF1B\u5305\u542B bible\uFF09\n2) \u8C03\u7528 skill: novel-worldbible-keeper\n3) \u5C06\u8F93\u51FA\u843D\u76D8\u5230\uFF1A\n - manuscript/bible/world.md\n - manuscript/bible/rules.md\n - manuscript/bible/glossary.md\n4) \u8C03\u7528 tool: novel_bible \u751F\u6210\u6D3E\u751F BIBLE_SUMMARY/GLOSSARY\n\n\u7EA6\u675F\uFF1A\u4E0D\u6539\u7AE0\u8282\u6B63\u6587\u3002";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_BOOTSTRAP_TEMPLATE = "\u76EE\u6807\uFF1A\u4E00\u952E\u8FC1\u79FB\u5E76\u751F\u6210\u6D3E\u751F\u4EA7\u7269\uFF08deterministic\uFF09\u3002\n\n\u6B65\u9AA4\uFF1A\n1) \u89E3\u6790\u53C2\u6570\uFF1A\n - \u53EF\u9009\uFF1A--from=<path> \u4F5C\u4E3A fromDir\n - \u53EF\u9009\uFF1A--stubs \u4F5C\u4E3A createStubs=true\n2) \u8C03\u7528 tool: novel_bootstrap\uFF08\u4E00\u6B21\u6027\u7F16\u6392\uFF0C\u4E0D\u8981\u624B\u5DE5\u4E32\u8054\u591A\u4E2A tool\uFF09\uFF1A\n - args: { fromDir?, createStubs? }\n3) \u8F93\u51FA\uFF1A\n - \u672C\u6B21 writtenFiles / durationMs\n - \u4E0B\u4E00\u6B65\uFF1A/novel-extract-entities \u2192 /novel-apply-candidates \u2192 /novel-continuity-check\n\n\u7EA6\u675F\uFF1A\n- \u4E25\u7981\u4FEE\u6539 fromDir \u4E0B\u539F\u59CB\u6587\u4EF6\uFF08\u53EA\u8BFB\uFF09\u3002\u53EA\u5141\u8BB8\u5199\u5165 manuscript/ \u4E0E .opencode/novel/ \u7B49\u6D3E\u751F\u76EE\u5F55\u3002";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_CHAPTER_DRAFT_TEMPLATE = "\u76EE\u6807\uFF1A\u57FA\u4E8E\u7AE0\u8282\u8BA1\u5212\u751F\u6210\u8349\u7A3F\uFF0C\u9ED8\u8BA4\u8F93\u51FA\u65B0\u6587\u4EF6\uFF0C\u4E0D\u8986\u76D6\u539F\u7AE0\u3002\n\u786C\u7EA6\u675F\uFF1A\n- \u672A\u663E\u5F0F\u4F20\u5165 --apply \u65F6\uFF0C\u7981\u6B62\u8986\u76D6 manuscript/chapters/<chapter_id>.md\u3002\n- \u9ED8\u8BA4\u8F93\u51FA\uFF1Amanuscript/chapters/<chapter_id>.draft.md\u3002\n\n\u6B65\u9AA4\uFF1A\n1) \u8BFB\u53D6 .opencode/novel/profile.md\uFF08\u7F3A\u5931\u5219\u81EA\u52A8\u8865\u8DD1 compact \u753B\u50CF\uFF09\u3002\n2) \u8C03\u7528 tool: novel_context_pack\uFF08task=draft\uFF0Cchapter_id=\u76EE\u6807\u7AE0\u8282\uFF09\u3002\n3) \u8C03\u7528 skill: novel-continuation-expert \u6216 novel-polish-expert\uFF08\u4EE5\u8349\u7A3F\u4E3A\u76EE\u6807\uFF0C\u9700\u5F15\u7528 profile\uFF09\u3002\n4) \u5C06\u8349\u7A3F\u5199\u5165 .draft.md\uFF08\u9ED8\u8BA4\uFF09\u3002\n5) \u82E5\u7528\u6237\u8981\u6C42\u8986\u76D6\uFF0C\u5FC5\u987B\u4E8C\u6B21\u786E\u8BA4\u5E76\u5EFA\u8BAE\u5148\u6267\u884C /novel-snapshot\u3002";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_CHAPTER_PLAN_TEMPLATE = "\u76EE\u6807\uFF1A\u751F\u6210\u7AE0\u8282\u8BA1\u5212\uFF08\u573A\u666F\u5217\u8868\u3001\u4FE1\u606F\u5206\u914D\u3001\u4F0F\u7B14\u63A8\u8FDB\u70B9\uFF09\uFF0C\u9ED8\u8BA4\u5199\u5165\u65B0\u6587\u4EF6\uFF0C\u4E0D\u8986\u76D6\u539F\u7AE0\u3002\n\u786C\u7EA6\u675F\uFF1A\n- \u672A\u663E\u5F0F\u4F20\u5165 --apply \u65F6\uFF0C\u7981\u6B62\u8986\u76D6 manuscript/chapters/<chapter_id>.md\u3002\n- \u9ED8\u8BA4\u8F93\u51FA\uFF1Amanuscript/chapters/<chapter_id>.plan.md\u3002\n\n\u6B65\u9AA4\uFF1A\n1) \u89E3\u6790\u53C2\u6570\uFF1Achapter_id\uFF08\u5982 ch0001\uFF09\u3002\n2) \u9ED8\u8BA4\u6267\u884C\u7C7B\u578B\u753B\u50CF\u6D41\u7A0B\uFF08\u9664\u975E\u663E\u5F0F --skip-profile\uFF09\uFF1A\n - \u82E5 .opencode/novel/profile.md \u7F3A\u5931\u6216\u8FC7\u65E7\uFF0C\u6267\u884C\u516D\u7EF4\u5206\u7C7B + profile-aggregator\uFF08compact\uFF09\u3002\n - \u82E5\u663E\u5F0F --skip-profile\uFF0C\u5FC5\u987B\u5728\u8F93\u51FA\u4E2D\u8BB0\u5F55 profile=none\u3002\n3) \u8C03\u7528 tool: novel_context_pack\uFF08task=draft\uFF0Cchapter_id=\u76EE\u6807\u7AE0\u8282\uFF09\u3002\n4) \u8C03\u7528 skill: novel-oracle \u6216 novel-timeline-keeper\uFF08\u4F18\u5148\u6D88\u8D39 profile\uFF09\u3002\n5) \u8F93\u51FA\u7AE0\u8282\u8BA1\u5212\u5230 .plan.md\uFF1B\u82E5\u7528\u6237\u8981\u6C42\u8986\u76D6\uFF0C\u5148\u63D0\u793A\u98CE\u9669\u5E76\u5EFA\u8BAE\u5148 /novel-snapshot\u3002";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_CHAPTER_REVIEW_TEMPLATE = "\u76EE\u6807\uFF1A\u8F93\u51FA\u5BA1\u7A3F\u95EE\u9898\u6E05\u5355 + \u4FEE\u6539\u65B9\u6848\uFF08\u5F15\u7528\u5B9A\u4F4D\u3001\u6700\u5C0F\u6539\u52A8\uFF09\u3002\n\u786C\u7EA6\u675F\uFF1A\n- \u672C\u547D\u4EE4\u9ED8\u8BA4\u53EA\u8F93\u51FA\u5EFA\u8BAE\uFF0C\u4E0D\u76F4\u63A5\u6539\u5199\u6B63\u6587\u6587\u4EF6\u3002\n\n\u6B65\u9AA4\uFF1A\n1) \u4F18\u5148\u8BFB\u53D6 .opencode/novel/profile.md \u4F5C\u4E3A\u504F\u79BB\u57FA\u7EBF\uFF1B\u4E0D\u5B58\u5728\u65F6\u81EA\u52A8\u8865\u8DD1 compact \u753B\u50CF\u3002\n2) \u8C03\u7528 tool: novel_context_pack\uFF08task=review\uFF0Cchapter_id=\u76EE\u6807\uFF09\u3002\n3) \u8C03\u7528 skill: novel-flaw-finder\uFF08\u5FC5\u987B\u5F15\u7528 profile.version \u6216\u58F0\u660E profile=none\uFF09\u3002\n4) \u5982\u9700\u4E00\u81F4\u6027\u7EF4\u5EA6\uFF1A\u518D\u8C03\u7528 tool: novel_continuity_check\uFF08scope=chapter\uFF09\u3002\n5) \u8F93\u51FA\uFF1A\u95EE\u9898\u6E05\u5355\uFF08P0/P1/P2\uFF09+ \u5EFA\u8BAE\u4FEE\u6539\u70B9\u4F4D\u3002";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_CHARACTER_REPORT_TEMPLATE = "\u76EE\u6807\uFF1A\u751F\u6210\u4EBA\u7269\u66F2\u7EBF/\u51FA\u573A\u7EDF\u8BA1\uFF08CHARACTER_REPORT.md\uFF09\u3002\n\n\u539F\u5219\uFF1A\n- \u672C\u547D\u4EE4\u9ED8\u8BA4\u201C\u81EA\u9A71\u95ED\u73AF\u201D\uFF1A\u62A5\u544A\u4E3A\u7A7A\u4F1A\u81EA\u52A8\u5C1D\u8BD5\u8865\u9F50\u4E8B\u5B9E\u6E90\uFF0C\u518D\u590D\u8DD1\u9A8C\u8BC1\u3002\n- \u53EA\u6709\u5728\u771F\u6B63\u5199\u5165 manuscript/\uFF08dryRun=false\uFF09\u524D\u624D\u9700\u8981\u7528\u6237\u786E\u8BA4\u3002\n\n\u6B65\u9AA4\uFF1A\n1) \u8C03\u7528 tool: novel_character_report\n2) \u82E5 resultJson.characters \u4E3A\u7A7A\uFF1A\n 2.1) \u8C03\u7528 tool: novel_entity_gaps { createStubs:true }\uFF08\u4EC5\u57FA\u4E8E\u5DF2\u6709\u5F15\u7528\u8865 stub\uFF1B\u4E0D\u6539\u6B63\u6587\uFF09\n 2.2) \u590D\u8DD1 tool: novel_character_report\n3) \u82E5\u4ECD\u4E3A\u7A7A\uFF08\u901A\u5E38\u662F\u7AE0\u8282 frontmatter \u672A\u6807\u6CE8 characters/threads \u7B49\u7ED3\u6784\u5316\u4FE1\u606F\uFF09\uFF1A\n 3.1) \u8C03\u7528 tool: novel_context_pack\uFF08task=continuity\uFF1B\u82E5 scope=all \u5185\u5BB9\u8FC7\u957F\u5219\u6309 chapter_id \u5206\u6279\uFF09\n 3.2) \u8C03\u7528 skill: novel-entity-extractor\uFF08\u5FC5\u987B\u8F93\u51FA NovelCandidatesV1\uFF09\n 3.3) \u8C03\u7528 tool: novel_candidates_write\uFF08\u628A Result(JSON) \u5199\u5165 candidates.json\uFF09\n 3.4) \u8C03\u7528 tool: novel_apply_candidates\uFF08dryRun=true\uFF09\n 3.5) \u5C55\u793A APPLY_REPORT \u6458\u8981\u4E0E\u5C06\u5199\u5165\u7684\u6587\u4EF6\u5217\u8868\uFF0C\u5E76\u8BE2\u95EE\u662F\u5426\u6267\u884C dryRun=false\n 3.6) \u7528\u6237\u786E\u8BA4\u540E\u518D\u6B21\u8C03\u7528 novel_apply_candidates { dryRun:false }\n 3.7) \u8C03\u7528 tool: novel_index\uFF08\u5237\u65B0 INDEX/TIMELINE \u7B49\u6D3E\u751F\uFF09\n 3.8) \u6700\u540E\u590D\u8DD1 tool: novel_character_report\n4) \u8F93\u51FA reportPath + \u7F3A\u5931\u5B57\u6BB5\u63D0\u9192\uFF08\u4E25\u683C\u4EE5 tool \u8F93\u51FA\u4E3A\u51C6\uFF0C\u4E0D\u8981\u81C6\u9020\u5B57\u6BB5\uFF09\u3002";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_CHARACTER_TEMPLATE = "\u76EE\u6807\uFF1A\u751F\u6210/\u66F4\u65B0\u89D2\u8272\u5361\uFF08manuscript/characters/<id>.md\uFF09\u3002\n\n\u6B65\u9AA4\uFF1A\n1) \u89E3\u6790\u53C2\u6570\uFF1A\u89D2\u8272 id\uFF08\u5982 char-zhangsan\uFF09\n2) \u8C03\u7528 tool: novel_context_pack\uFF08task=review\uFF1Bchapter_id \u53EF\u9009\uFF09\n3) \u8C03\u7528 skill: novel-character-expert\n4) \u5C06\u5EFA\u8BAE\u5199\u5165\u5BF9\u5E94\u89D2\u8272\u5361\uFF08\u4E0D\u6539\u7AE0\u8282\u6B63\u6587\uFF09\n5) \u8FD0\u884C /novel-index \u66F4\u65B0\u7D22\u5F15\uFF08\u53EF\u9009\uFF09\u3002";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_CONFIG_CHECK_TEMPLATE = "\u76EE\u6807\uFF1A\u68C0\u67E5\u914D\u7F6E\u6765\u6E90\u5408\u5E76\u7ED3\u679C\u5E76\u8F93\u51FA\u7ED3\u6784\u5316\u8BCA\u65AD\u3002\n\u6B65\u9AA4\uFF1A\n1) \u8C03\u7528 tool: novel_config_check\uFF08rootDir=\u5F53\u524D\u9879\u76EE\uFF09\u3002\n2) \u82E5\u5B58\u5728\u9519\u8BEF\uFF0C\u6309 source/path/message \u4FEE\u590D\u914D\u7F6E\u540E\u91CD\u8BD5\u3002\n3) \u914D\u7F6E\u901A\u8FC7\u540E\u518D\u7EE7\u7EED\u6267\u884C /novel-index \u4E0E /novel-export\u3002";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_CONTINUATION_TEMPLATE = "\u76EE\u6807\uFF1A\u7EED\u5199\u4E0B\u4E00\u6BB5/\u4E0B\u4E00\u7AE0\uFF08\u4F7F\u7528 context pack\uFF09\uFF0C\u9ED8\u8BA4\u8F93\u51FA\u65B0\u6587\u4EF6\u3002\n\u786C\u7EA6\u675F\uFF1A\n- \u672A\u663E\u5F0F\u4F20\u5165 --apply \u65F6\uFF0C\u7981\u6B62\u8986\u76D6 manuscript/chapters/<chapter_id>.md\u3002\n- \u9ED8\u8BA4\u8F93\u51FA\uFF1Amanuscript/chapters/<chapter_id>.continue.md\u3002\n\n\u6B65\u9AA4\uFF1A\n1) \u8BFB\u53D6 .opencode/novel/profile.md\uFF08\u7F3A\u5931\u5219\u81EA\u52A8\u8865\u8DD1 compact \u753B\u50CF\uFF09\u3002\n2) \u8C03\u7528 tool: novel_context_pack\uFF08task=rewrite \u6216 draft\uFF0Cchapter_id=\u76EE\u6807\u7AE0\u8282\uFF09\u3002\n3) \u8C03\u7528 skill: novel-continuation-expert\uFF08\u53EF\u7ED9 A/B \u5206\u652F\uFF0C\u9700\u5F15\u7528 profile\uFF09\u3002\n4) \u5199\u5165 .continue.md\uFF08\u9ED8\u8BA4\uFF09\uFF1B\u5982\u9700\u8986\u76D6\uFF0C\u5148\u98CE\u9669\u63D0\u793A\u5E76\u5EFA\u8BAE /novel-snapshot\u3002";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_CONTINUITY_CHECK_TEMPLATE = "\u76EE\u6807\uFF1A\u4E00\u81F4\u6027\u62A5\u544A\uFF08CONTINUITY_REPORT.md\uFF09\u3002\n\n\u6B65\u9AA4\uFF1A\n1) \u8C03\u7528 tool: novel_continuity_check\uFF08scope=all \u6216 chapter\uFF09\n2) \u82E5 errors>0\uFF1A\u5EFA\u8BAE\u4F7F\u7528 novel-continuity-sentinel skill \u7ED9\u6700\u5C0F\u4FEE\u590D\u8DEF\u5F84\u3002";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_ENTITIES_AUDIT_TEMPLATE = "\u76EE\u6807\uFF1A\u5B9E\u4F53\u7F3A\u53E3\u76D8\u70B9\uFF08\u53EF\u9009\u8865 stub\uFF09\uFF0C\u5199\u5165 ENTITY_GAPS.md\u3002\n\n\u6B65\u9AA4\uFF1A\n1) \u8C03\u7528 tool: novel_entity_gaps\uFF08\u9ED8\u8BA4\u53EA\u62A5\u544A\uFF1B\u5982\u7528\u6237\u5E26 --stubs \u5219 createStubs=true\uFF09\n2) \u8F93\u51FA\uFF1Amissing/orphans \u6458\u8981 + \u4E0B\u4E00\u6B65\u5EFA\u8BAE\uFF08/novel-index\u3001/novel-continuity-check\uFF09\u3002";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_EXPORT_TEMPLATE = "\u76EE\u6807\uFF1A\u5BFC\u51FA\u7F16\u8BD1\uFF08md/html/epub/docx\uFF09\u3002\n\u6B65\u9AA4\uFF1A\n1) \u5982\u679C\u7528\u6237\u63D0\u4F9B format\uFF08md|html|epub|docx\uFF09\uFF0C\u5C31\u4F7F\u7528\u8BE5\u683C\u5F0F\uFF1B\u5426\u5219\u7701\u7565 format\uFF0C\u8BA9 tool \u6309 config.export.formats \u5BFC\u51FA\u3002\n2) \u5982\u679C\u7528\u6237\u6307\u5B9A\u4E86 DOCX \u6A21\u677F\uFF08default|manuscript\uFF09\uFF0C\u4E14\u5BFC\u51FA\u683C\u5F0F\u5305\u542B docx\uFF0C\u5219\u4F20 docxTemplate\u3002\n3) \u8C03\u7528 tool: novel_export { format?, docxTemplate? }\n4) \u8F93\u51FA outputPath / outputs\u3001docxTemplate\uFF08\u82E5\u5B58\u5728\uFF09\u4E0E\u7EDF\u8BA1\u3002";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_EXTRACT_ENTITIES_TEMPLATE = "\u76EE\u6807\uFF1A\u7528 LLM \u4ECE\u6B63\u6587/\u6458\u8981/\u7D22\u5F15\u63D0\u51FA candidates\uFF08\u4E0D\u76F4\u63A5\u5199\u56DE\u4E8B\u5B9E\u6E90\uFF09\u3002\n\n\u6B65\u9AA4\uFF08\u5199\u6B7B\uFF09\uFF1A\n1) \u8C03\u7528 tool: novel_context_pack\uFF08scope=chapter \u65F6\u56F4\u7ED5\u8BE5\u7AE0\uFF1Bscope=all \u65F6\u5206\u6279\u5904\u7406\uFF09\n2) \u8C03\u7528 skill: novel-entity-extractor\uFF08\u5FC5\u987B\u8F93\u51FA NovelCandidatesV1\uFF09\n3) \u8C03\u7528 tool: novel_candidates_write\uFF08\u628A Result(JSON) \u5199\u5165 .opencode/novel/cache/candidates.json\uFF09\n4) \u63D0\u9192\u4E0B\u4E00\u6B65\uFF1A\u8FD0\u884C /novel-apply-candidates\uFF08\u9ED8\u8BA4 dryRun=true\uFF09\u3002";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_FACTION_TEMPLATE = "\u76EE\u6807\uFF1A\u751F\u6210/\u66F4\u65B0\u52BF\u529B\u5361\uFF08manuscript/factions/<id>.md\uFF09\u3002\n\n\u6B65\u9AA4\uFF1A\n1) \u89E3\u6790\u53C2\u6570\uFF1A\u52BF\u529B id\uFF08\u5982 fac-blackhand\uFF09\n2) \u8C03\u7528 tool: novel_context_pack\uFF08task=review\uFF09\n3) \u8C03\u7528 skill: novel-faction-relations\n4) \u5199\u5165\u52BF\u529B\u5361\uFF08\u4E0D\u6539\u7AE0\u8282\u6B63\u6587\uFF09\n5) \u53EF\u9009\uFF1A\u8FD0\u884C /novel-graph factions\u3002";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_FORESHADOWING_AUDIT_TEMPLATE = "\u76EE\u6807\uFF1A\u4F0F\u7B14/\u627F\u8BFA\u5BF9\u8D26\uFF08FORESHADOWING_AUDIT.md + THREADS_REPORT.md\uFF09\u3002\n\n\u6B65\u9AA4\uFF1A\n1) \u8C03\u7528 tool: novel_foreshadowing_audit\n2) \u82E5\u5B58\u5728 open \u4E14\u65E0 close_plan\uFF1A\u5EFA\u8BAE\u8C03\u7528 skill: novel-foreshadowing-unresolved\u3002";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_GRAPH_TEMPLATE = "\u76EE\u6807\uFF1A\u751F\u6210 Mermaid \u56FE\uFF08relationships \u6216 factions\uFF09\u3002\n\n\u6B65\u9AA4\uFF1A\n1) \u89E3\u6790\u7528\u6237\u53C2\u6570 kind\uFF08relationships|factions\uFF09\n2) \u8C03\u7528 tool: novel_graph { kind }\n3) \u8F93\u51FA graphPath \u4E0E\u7EDF\u8BA1\u3002";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_IMPORT_TEMPLATE = "\u76EE\u6807\uFF1A\u4E0D\u6539\u539F\u6587\uFF0C\u628A\u5DF2\u6709\u76EE\u5F55\u5BFC\u5165\u4E3A manuscript/ \u6807\u51C6\u7ED3\u6784\u3002\n\n\u6B65\u9AA4\uFF1A\n1) \u8C03\u7528 tool: novel_import\uFF08\u9ED8\u8BA4 mode=copy\uFF1BfromDir \u9ED8\u8BA4\u5F53\u524D\u76EE\u5F55\uFF09\n2) \u5982 diagnostics \u6709 error\uFF1A\u63D0\u793A\u7528\u6237\u4FEE\u590D\u6216\u6539\u7528 mode=analyze\n3) \u6210\u529F\u540E\u63D0\u793A\u4E0B\u4E00\u6B65\uFF1A\n - /novel-index\n - /novel-entities-audit --stubs\n\n\u7EA6\u675F\uFF1A\n- \u4E25\u7981\u4FEE\u6539 fromDir \u4E0B\u539F\u59CB\u6587\u4EF6\uFF08\u53EA\u8BFB\uFF09\u3002";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_INDEX_TEMPLATE = "\u76EE\u6807\uFF1A\u751F\u6210 INDEX/TIMELINE/THREADS_REPORT\uFF08\u6D3E\u751F\u6587\u4EF6\uFF09\u3002\n\n\u6B65\u9AA4\uFF1A\n1) \u8C03\u7528 tool: novel_index\uFF08writeDerivedFiles=true\uFF1B\u9ED8\u8BA4 scanMode=incremental\uFF0C\u4F1A\u8F93\u51FA cache hits/misses\uFF09\n - \u53EF\u9009\uFF1A\u7528 scanMode=full \u5BF9\u6BD4\u5168\u91CF\u8017\u65F6\uFF08\u7528\u4E8E\u8BBE\u5B9A\u6027\u80FD SLA\uFF09\n2) \u8F93\u51FA\u7ED3\u679C\u6458\u8981\u4E0E\u4E0B\u4E00\u6B65\u5EFA\u8BAE\uFF1A\n - /novel-continuity-check\n - /novel-foreshadowing-audit";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_INIT_TEMPLATE = "\u76EE\u6807\uFF1A\u4ECE 0 \u521B\u5EFA\u53EF\u8FD0\u884C\u5C0F\u8BF4\u5DE5\u7A0B\uFF0C\u5E76\u5F3A\u5236\u751F\u6210\u9996\u7248\u7C7B\u578B\u753B\u50CF\uFF08profile\uFF09\u3002\n\n\u6B65\u9AA4\uFF08\u5FC5\u987B\u6309\u987A\u5E8F\u6267\u884C\uFF09\uFF1A\n1) \u8C03\u7528 tool: novel_scaffold\n - args: { bookTitle: $ARGUMENTS, writeConfigJsonc: true, writeTemplates: true }\n2) \u6267\u884C\u516D\u7EF4\u6807\u7B7E\u5224\u5B9A\uFF08\u9ED8\u8BA4 compact\uFF09\uFF1A\n - \u4F9D\u6B21\u8C03\u7528 skill\uFF1Agenre-classifier / trope-classifier / audience-classifier / emotion-classifier / structure-classifier / market-tagger\n - \u8F93\u5165\u6765\u6E90\u4F18\u5148\u7EA7\uFF1A\u7528\u6237\u53C2\u6570 > \u5DF2\u6709\u4E66\u8BBE/\u5927\u7EB2 > \u7AE0\u8282\u6458\u8981 > \u6807\u9898\u515C\u5E95\u63A8\u65AD\n3) \u8C03\u7528 skill: profile-aggregator\n - \u8F93\u51FA\u5199\u5165\uFF1A.opencode/novel/profile.md\n - \u82E5\u4F4E\u7F6E\u4FE1\u5EA6\u7EF4\u5EA6\u4E0D\u8DB3\uFF0C\u5199\u5165 missingDomains\uFF0C\u4E0D\u5F97\u963B\u65AD\u521D\u59CB\u5316\n4) \u8F93\u51FA\u4E0B\u4E00\u6B65\u5EFA\u8BAE\uFF08\u81EA\u52A8\u7ED9\u51FA\u6700\u77ED\u94FE\u8DEF\uFF09\uFF1A\n - /novel-index\n - /novel-chapter-plan ch0001\n\n\u7EA6\u675F\uFF1A\n- \u4E0D\u8981\u4FEE\u6539\u4EFB\u4F55\u65E2\u6709\u6B63\u6587\uFF08\u5982\u679C\u5DF2\u7ECF\u5B58\u5728 manuscript/\uFF09\u3002\n- \u975E\u9AD8\u5371\u64CD\u4F5C\u4E0D\u9700\u8981\u7528\u6237\u989D\u5916\u4EA4\u4E92\uFF1B\u4EC5\u8986\u76D6\u539F\u7AE0/\u5220\u6539\u4E8B\u5B9E\u6E90\u65F6\u4E8C\u6B21\u786E\u8BA4\u3002";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_OUTLINE_TEMPLATE = "\u76EE\u6807\uFF1A\u4EA7\u51FA\u5927\u7EB2\uFF08\u8282\u62CD/\u51B2\u7A81\u5347\u7EA7/\u4E09\u5E55\u7ED3\u6784\uFF09\u3002\n\n\u5EFA\u8BAE\u6D41\u7A0B\uFF1A\n1) \u8BFB\u53D6 .opencode/novel/profile.md\uFF1A\n - \u82E5\u5B58\u5728\uFF0C\u4F18\u5148\u6309\u5DF2\u8986\u76D6\u7EF4\u5EA6\u7EA6\u675F\u5927\u7EB2\u65B9\u5411\u3002\n - \u82E5\u4E0D\u5B58\u5728\uFF0C\u81EA\u52A8\u8865\u8DD1\u516D\u7EF4\u5206\u7C7B + profile-aggregator\uFF08compact\uFF09\uFF0C\u5931\u8D25\u65F6\u964D\u7EA7\u5E76\u63D0\u793A\u98CE\u9669\u3002\n2) \u8C03\u7528 tool: novel_context_pack\uFF08task=draft\uFF1BlastChapters=3\uFF09\n3) \u8C03\u7528 skill: novel-oracle\n3) \u8F93\u51FA\uFF1A\n - \u4E09\u5E55/\u8282\u62CD\u8868\n - \u5173\u952E\u7EBF\u7A0B\uFF08th-xxx\uFF09\u63D0\u51FA\u4E0E\u56DE\u6536\u843D\u70B9\u5EFA\u8BAE\n - Files To Update\uFF08\u5EFA\u8BAE\u843D\u76D8\u5230 manuscript/bible/world.md \u6216\u5355\u72EC outline.md\uFF09\n4) \u82E5 profile \u4E3A compact\uFF0C\u5FC5\u987B\u663E\u5F0F\u5217\u51FA\u201C\u672A\u8986\u76D6\u7EF4\u5EA6\u98CE\u9669\u201D\u3002";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_POLISH_TEMPLATE = "\u76EE\u6807\uFF1A\u6DA6\u8272\u7AE0\u8282\u8F93\u51FA\uFF0C\u9ED8\u8BA4\u5199\u5165\u65B0\u6587\u4EF6\uFF0C\u4E0D\u8986\u76D6\u539F\u7AE0\u3002\n\u786C\u7EA6\u675F\uFF1A\n- \u672A\u663E\u5F0F\u4F20\u5165 --apply \u65F6\uFF0C\u7981\u6B62\u8986\u76D6 manuscript/chapters/<chapter_id>.md\u3002\n- \u9ED8\u8BA4\u8F93\u51FA\uFF1Amanuscript/chapters/<chapter_id>.polish.md\u3002\n\n\u6B65\u9AA4\uFF1A\n1) \u8BFB\u53D6 .opencode/novel/profile.md\uFF08\u7F3A\u5931\u5219\u81EA\u52A8\u8865\u8DD1 compact \u753B\u50CF\uFF09\u3002\n2) \u8C03\u7528 tool: novel_context_pack\uFF08task=rewrite\uFF0Cchapter_id=\u76EE\u6807\u7AE0\u8282\uFF09\u3002\n3) \u8C03\u7528 skill: novel-polish-expert\uFF08conservative/rewrite\uFF0C\u9700\u5F15\u7528 profile\uFF09\u3002\n4) \u5199\u5165 .polish.md\uFF08\u9ED8\u8BA4\uFF09\u3002\n5) \u4EC5\u5F53 --apply=true \u4E14\u7528\u6237\u518D\u6B21\u786E\u8BA4\u65F6\uFF0C\u624D\u5141\u8BB8\u8986\u76D6\u539F\u7AE0\u3002";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_REWRITE_TEMPLATE = "\u76EE\u6807\uFF1A\u6309\u76EE\u6807\u91CD\u5199\u7AE0\u8282\uFF08\u4E0D\u7834\u574F\u8BBE\u5B9A/\u4EBA\u8BBE\uFF09\uFF0C\u9ED8\u8BA4\u8F93\u51FA\u65B0\u6587\u4EF6\u3002\n\u786C\u7EA6\u675F\uFF1A\n- \u672A\u663E\u5F0F\u4F20\u5165 --apply \u65F6\uFF0C\u7981\u6B62\u8986\u76D6 manuscript/chapters/<chapter_id>.md\u3002\n- \u9ED8\u8BA4\u8F93\u51FA\uFF1Amanuscript/chapters/<chapter_id>.rewrite.md\u3002\n\n\u6B65\u9AA4\uFF1A\n1) \u8C03\u7528 tool: novel_context_pack\uFF08task=rewrite\uFF0Cchapter_id=\u76EE\u6807\u7AE0\u8282\uFF09\u3002\n2) \u8C03\u7528 skill: novel-polish-expert\uFF08mode=rewrite\uFF09\u6216 novel-flaw-finder\u3002\n3) \u5199\u5165 .rewrite.md\uFF08\u9ED8\u8BA4\uFF09\uFF1B\u5982\u9700\u8986\u76D6\uFF0C\u5FC5\u987B\u663E\u5F0F\u786E\u8BA4\u5E76\u5EFA\u8BAE\u5148 /novel-snapshot\u3002";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_SNAPSHOT_TEMPLATE = "\u76EE\u6807\uFF1A\u51BB\u7ED3\u9636\u6BB5\uFF08\u5FEB\u7167\uFF09\uFF0C\u5199\u5165 manuscript/snapshots/\uFF08deterministic\uFF09\u3002\n\n\u6B65\u9AA4\uFF1A\n1) \u5EFA\u8BAE\u5148\u8FD0\u884C\uFF1A/novel-index\u3001/novel-continuity-check\uFF08\u53EF\u9009\uFF1A/novel-foreshadowing-audit\uFF09\n2) \u8C03\u7528 tool: novel_snapshot\n - args: { tag: $ARGUMENTS }\n3) \u8F93\u51FA snapshotDir / savedFiles \u6458\u8981\u4E0E\u4E0B\u4E00\u6B65\u5EFA\u8BAE\u3002";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_STYLE_CHECK_TEMPLATE = "\u76EE\u6807\uFF1A\u98CE\u683C\u4E00\u81F4\u6027\u62A5\u544A\uFF08STYLE_REPORT.md\uFF09\u3002\n\u6B65\u9AA4\uFF1A\n1) \u8BC6\u522B scope\uFF08all/chapter/character\uFF09\uFF0C\u5E76\u6309\u9700\u8BBE\u7F6E\u53E3\u7656\u9608\u503C\u53C2\u6570\u3002\n2) \u8C03\u7528 tool: novel_style_check { scope?, catchphraseMaxCount?, catchphraseReportMissing? }\n3) \u8F93\u51FA\u504F\u5DEE\u6761\u76EE\u3001\u7EDF\u8BA1\u4E0E\u4FEE\u590D\u5EFA\u8BAE\u3002";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_STYLE_GUIDE_TEMPLATE = "\u76EE\u6807\uFF1A\u751F\u6210/\u66F4\u65B0\u5168\u5C40\u5199\u4F5C\u7EA6\u675F\uFF08styleGuide\uFF09\u3002\n\n\u5EFA\u8BAE\u6D41\u7A0B\uFF1A\n1) \u8C03\u7528 tool: novel_context_pack\uFF08task=review\uFF1Bbudget \u4F7F\u7528 config.contextPack.maxChars\uFF09\n2) \u8C03\u7528 skill: novel-oracle \u6216 novel-flaw-finder\uFF0C\u4EA7\u51FA\u201C\u5168\u5C40\u98CE\u683C\u7EA6\u675F\u5EFA\u8BAE\u201D\n3) \u5C06\u5EFA\u8BAE\u5199\u5165\u9879\u76EE\u7EA7 .opencode/novel.jsonc \u7684 styleGuide \u5B57\u6BB5\uFF08\u53EA\u6539\u914D\u7F6E\uFF0C\u4E0D\u6539\u6B63\u6587\uFF09\n\n\u8F93\u51FA\u8981\u6C42\uFF1A\n- \u7ED9\u51FA\u53EF\u76F4\u63A5\u590D\u5236\u7684 JSONC \u7247\u6BB5\uFF08styleGuide\uFF09\u3002";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_SUMMARY_TEMPLATE = "\u76EE\u6807\uFF1A\u751F\u6210\u7AE0\u8282\u6458\u8981/\u56DE\u987E\uFF08\u5199\u5165 frontmatter.summary \u6216\u72EC\u7ACB\u6587\u4EF6\uFF09\u3002\n\n\u6B65\u9AA4\uFF1A\n1) \u8BFB\u53D6 .opencode/novel/profile.md\uFF08\u7F3A\u5931\u5219\u81EA\u52A8\u8865\u8DD1 compact \u753B\u50CF\uFF09\u3002\n2) \u8C03\u7528 tool: novel_context_pack\uFF08task=review\uFF1Bchapter_id=\u76EE\u6807\uFF09\n3) \u8C03\u7528 skill: novel-summary-expert\uFF08\u9700\u5F15\u7528 profile\uFF09\n4) \u5C06\u6458\u8981\u5199\u5165\u7AE0\u8282 frontmatter.summary\uFF08\u53EF\u9009\uFF09\u6216 manuscript/chapters/<chapter_id>.summary.md\u3002";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_THREAD_TEMPLATE = "\u76EE\u6807\uFF1A\u521B\u5EFA/\u66F4\u65B0\u7EBF\u7A0B\u5361\uFF08manuscript/threads/<thread_id>.md\uFF09\uFF0C\u5305\u542B close_plan\u3002\n\n\u6B65\u9AA4\uFF1A\n1) \u89E3\u6790\u53C2\u6570\uFF1Athread_id\uFF08\u5982 th-001\uFF09\n2) \u8C03\u7528 tool: novel_context_pack\uFF08task=foreshadowing\uFF09\n3) \u8C03\u7528 skill: novel-foreshadowing-unresolved\n4) \u5199\u5165\u7EBF\u7A0B\u5361\uFF08\u8865\u9F50 opened_in/expected_close_by/close_plan\uFF09\n5) \u8FD0\u884C /novel-foreshadowing-audit\uFF08\u53EF\u9009\uFF09\u3002";
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type BuiltinCommandName = "novel-init" | "novel-import" | "novel-bootstrap" | "novel-style-guide" | "novel-bible" | "novel-index" | "novel-config-check" | "novel-entities-audit" | "novel-graph" | "novel-character-report" | "novel-outline" | "novel-character" | "novel-faction" | "novel-thread" | "novel-chapter-plan" | "novel-extract-entities" | "novel-apply-candidates" | "novel-chapter-draft" | "novel-continuation" | "novel-rewrite" | "novel-polish" | "novel-summary" | "novel-chapter-review" | "novel-continuity-check" | "novel-foreshadowing-audit" | "novel-style-check" | "novel-export" | "novel-snapshot";
|
|
2
|
+
export type CommandDefinition = {
|
|
3
|
+
name: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
template: string;
|
|
6
|
+
agent?: string;
|
|
7
|
+
model?: string;
|
|
8
|
+
subtask?: boolean;
|
|
9
|
+
argumentHint?: string;
|
|
10
|
+
};
|
|
11
|
+
export type BuiltinCommands = Record<BuiltinCommandName, CommandDefinition>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { SkillDefinition } from "./types";
|
|
2
|
+
type SkillExtraFile = {
|
|
3
|
+
relativePath: string;
|
|
4
|
+
content: string;
|
|
5
|
+
};
|
|
6
|
+
export type SkillInstallFile = {
|
|
7
|
+
relativePath: string;
|
|
8
|
+
content: string;
|
|
9
|
+
};
|
|
10
|
+
export declare function getBuiltinSkillExtraFiles(skillName: string): SkillExtraFile[];
|
|
11
|
+
export declare function getBuiltinSkillInstallFiles(definition: SkillDefinition): SkillInstallFile[];
|
|
12
|
+
export declare function getBuiltinTaxonomyDocs(): Array<{
|
|
13
|
+
path: string;
|
|
14
|
+
content: string;
|
|
15
|
+
}>;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { getBuiltinSkillExtraFiles, getBuiltinSkillInstallFiles, getBuiltinTaxonomyDocs, } from "./artifacts";
|
|
2
|
+
export { loadBuiltinSkills } from "./skills";
|
|
3
|
+
export { TAXONOMY_REGISTRY_V1 } from "./taxonomy";
|
|
4
|
+
export type { BuiltinSkillName, BuiltinSkills, SkillDefinition } from "./types";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const AUDIENCE_CLASSIFIER_SKILL = "<skill-instruction>\n\u4F60\u662F\u201Caudience-classifier\uFF08\u53D7\u4F17\u5224\u5B9A\u5668\uFF09\u201D\u3002\n\u76EE\u6807\uFF1A\u6839\u636E\u6587\u6848\u5B9A\u4F4D\u3001\u53D9\u4E8B\u7279\u5F81\u4E0E\u9650\u5236\u7EA7\u4FE1\u606F\uFF0C\u8F93\u51FA\u53D7\u4F17\u6807\u7B7E\u3002\n\n## Inputs\n- \u6587\u6848\u5B9A\u4F4D\u3001\u76EE\u6807\u5E73\u53F0\u3001\u7AE0\u8282\u8BED\u8A00\u98CE\u683C\u3002\n- taxonomy-registry \u7684 references/taxonomy-v1.md \u4E0E references/conflicts-v1.md\u3002\n\n## Output Protocol\n```json\n{\n \"domain\": \"audience\",\n \"labels\": [\n { \"id\": \"female-oriented\", \"name\": \"\u5973\u9891\u5411\", \"confidence\": 0.82, \"evidence\": [\"\u60C5\u611F\u4E3B\u7EBF\u4E0E\u5173\u7CFB\u63CF\u5199\u5360\u6BD4\u9AD8\"] }\n ],\n \"unmatched\": [],\n \"notes\": []\n}\n```\n\n## Rules\n- \u4EC5\u8F93\u51FA audience \u57DF\u6807\u7B7E\u3002\n- \u5BF9 all-ages / adult-18-plus \u51B2\u7A81\u8981\u9AD8\u654F\u611F\uFF0C\u8BC1\u636E\u4E0D\u8DB3\u5219\u964D\u7F6E\u4FE1\u5EA6\u5E76\u5728 notes \u8BF4\u660E\u3002\n- \u6807\u7B7E\u5E94\u53EF\u7528\u4E8E\u540E\u7EED\u8BED\u6C14/\u8282\u594F\u63A7\u5236\uFF0C\u907F\u514D\u8F93\u51FA\u8FC7\u6CDB\u6807\u7B7E\u3002\n</skill-instruction>";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const EMOTION_CLASSIFIER_SKILL = "<skill-instruction>\n\u4F60\u662F\u201Cemotion-classifier\uFF08\u60C5\u7EEA\u627F\u8BFA\u5224\u5B9A\u5668\uFF09\u201D\u3002\n\u76EE\u6807\uFF1A\u8BC6\u522B\u4F5C\u54C1\u5411\u8BFB\u8005\u627F\u8BFA\u7684\u6838\u5FC3\u60C5\u7EEA\u4F53\u9A8C\uFF0C\u5E76\u8F93\u51FA\u60C5\u7EEA\u6807\u7B7E\u3002\n\n## Inputs\n- \u5356\u70B9\u6587\u6848\u3001\u51B2\u7A81\u7ED3\u6784\u3001\u9AD8\u6F6E\u6BB5\u6458\u8981\u3002\n- taxonomy-registry \u7684 references/taxonomy-v1.md\u3002\n\n## Output Protocol\n```json\n{\n \"domain\": \"emotion\",\n \"labels\": [\n { \"id\": \"hot-blooded\", \"name\": \"\u70ED\u8840\u723D\u71C3\", \"confidence\": 0.9, \"evidence\": [\"\u8FDE\u7EED\u5347\u7EA7\u80DC\u5229\u4E0E\u9AD8\u538B\u5BF9\u6297\"] }\n ],\n \"unmatched\": [],\n \"notes\": []\n}\n```\n\n## Rules\n- \u4EC5\u8F93\u51FA emotion \u57DF\u6807\u7B7E\u3002\n- \u5BF9\u4E92\u65A5\u60C5\u7EEA\uFF08\u5982\u201C\u6CBB\u6108\u6E29\u6696\u201D\u4E0E\u201C\u538B\u6291\u9ED1\u6697\u201D\uFF09\u5FC5\u987B\u7ED9\u51FA\u8BC1\u636E\u6743\u91CD\u89E3\u91CA\u3002\n- \u4E0D\u8981\u5C06\u201C\u5267\u60C5\u7C7B\u578B\u201D\u8BEF\u5224\u4E3A\u201C\u60C5\u7EEA\u627F\u8BFA\u201D\u3002\n</skill-instruction>";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const GENRE_CLASSIFIER_SKILL = "<skill-instruction>\n\u4F60\u662F\u201Cgenre-classifier\uFF08\u9898\u6750\u5224\u5B9A\u5668\uFF09\u201D\u3002\n\u76EE\u6807\uFF1A\u6839\u636E\u4E66\u8BBE/\u5927\u7EB2/\u7AE0\u8282\u6458\u8981\uFF0C\u8F93\u51FA\u9898\u6750\u6807\u7B7E\u547D\u4E2D\u7ED3\u679C\u3002\n\n## Inputs\n- \u5F85\u5224\u5B9A\u6587\u672C\uFF08\u4E66\u8BBE\u3001\u5927\u7EB2\u3001\u7AE0\u8282\u6458\u8981\uFF09\u3002\n- taxonomy-registry \u7684 references/taxonomy-v1.md\u3002\n\n## Output Protocol\n\u8FD4\u56DE\u4E14\u4EC5\u8FD4\u56DE\u4E00\u4E2A Result (Structured) JSON\uFF1A\n```json\n{\n \"domain\": \"genre\",\n \"labels\": [\n { \"id\": \"xuanhuan\", \"name\": \"\u7384\u5E7B\", \"confidence\": 0.93, \"evidence\": [\"\u4FEE\u70BC\u4F53\u7CFB\u660E\u786E\"] }\n ],\n \"unmatched\": [],\n \"notes\": []\n}\n```\n\n## Rules\n- \u4EC5\u8F93\u51FA genre \u57DF\u6807\u7B7E\uFF0C\u7981\u6B62\u8DE8\u57DF\u8F93\u51FA\u3002\n- labels \u6309 confidence \u964D\u5E8F\u3002\n- \u6BCF\u4E2A labels[*].evidence \u81F3\u5C11 1 \u6761\uFF0C\u9700\u6765\u81EA\u8F93\u5165\u6587\u672C\u3002\n- \u4E0D\u786E\u5B9A\u65F6\u5199\u5165 unmatched \u4E0E notes\uFF0C\u4E0D\u8981\u81C6\u65AD\u8865\u6807\u7B7E\u3002\n</skill-instruction>";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const MARKET_TAGGER_SKILL = "<skill-instruction>\n\u4F60\u662F\u201Cmarket-tagger\uFF08\u5546\u4E1A\u6807\u7B7E\u5224\u5B9A\u5668\uFF09\u201D\u3002\n\u76EE\u6807\uFF1A\u6839\u636E\u94A9\u5B50\u3001\u8282\u594F\u3001\u8FDE\u8F7D\u6F5C\u529B\u4E0E\u6539\u7F16\u6F5C\u529B\u8F93\u51FA\u5546\u4E1A\u6807\u7B7E\u3002\n\n## Inputs\n- \u5F00\u7BC7\u94A9\u5B50\u3001\u7AE0\u8282\u8282\u594F\u3001\u5E73\u53F0\u7B56\u7565\u3001\u66F4\u65B0\u9891\u7387\u76EE\u6807\u3002\n- taxonomy-registry \u7684 references/taxonomy-v1.md\u3002\n\n## Output Protocol\n```json\n{\n \"domain\": \"market\",\n \"labels\": [\n { \"id\": \"high-hook\", \"name\": \"\u5F3A\u94A9\u5B50\u5F00\u7BC7\", \"confidence\": 0.89, \"evidence\": [\"\u9996\u7AE0 800 \u5B57\u5185\u51FA\u73B0\u5173\u952E\u53CD\u8F6C\"] }\n ],\n \"unmatched\": [],\n \"notes\": []\n}\n```\n\n## Rules\n- \u4EC5\u8F93\u51FA market \u57DF\u6807\u7B7E\u3002\n- \u5FEB\u8282\u594F\u4E0E\u6162\u70ED\u547D\u4E2D\u65F6\u5FC5\u987B\u7ED9\u51FA\u51B2\u7A81\u8BF4\u660E\uFF0C\u7981\u6B62\u9759\u9ED8\u5E76\u5B58\u3002\n- \u8BC1\u636E\u5C3D\u91CF\u91CF\u5316\uFF08\u4F8B\u5982\u201C\u7AE0\u5C3E\u94A9\u5B50\u9891\u6B21\u201D\u201C\u53CD\u8F6C\u5BC6\u5EA6\u201D\uFF09\u3002\n</skill-instruction>";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_CHARACTER_EXPERT_SKILL = "<skill-instruction>\n\u4F60\u662F\u201C\u4EBA\u7269\u753B\u50CF\u4E0E\u5173\u7CFB\u68B3\u7406\u4E13\u5BB6\u201D\u3002\u76EE\u6807\uFF1A\u8F93\u51FA\u89D2\u8272\u753B\u50CF\u3001\u52A8\u673A\u4E0E\u6B32\u671B\u3001\u5F27\u5149\u3001\u5173\u7CFB\u7F51\u5EFA\u8BAE\uFF0C\u5E76\u7ED9\u51FA\u53F0\u8BCD\u98CE\u683C\u4E00\u81F4\u6027\u5EFA\u8BAE\u3002\n\n## Output Protocol\n1) ## Assumptions\n2) ## Findings\n3) ## Recommendations\uFF08P0/P1/P2\uFF09\n4) ## Questions\uFF08\u6700\u591A 3 \u4E2A\uFF09\n5) ## Files To Update\uFF08\u89D2\u8272\u5361\uFF1Amanuscript/characters/<id>.md\uFF09\n\n## Constraints\n- \u4E0D\u8981\u6539\u7AE0\u8282\u6B63\u6587\uFF1B\u5982\u9700\u4FEE\u6539\uFF0C\u53EA\u7ED9\u201C\u6700\u5C0F\u6539\u52A8\u5EFA\u8BAE\u201D\u3002\n- \u4F18\u5148\u8BFB\u53D6 .opencode/novel/profile.md \u7684 audience/emotion \u5B57\u6BB5\u7EA6\u675F\u89D2\u8272\u5F27\u7EBF\u4E0E\u53F0\u8BCD\u98CE\u683C\u3002\n- \u82E5\u753B\u50CF\u7F3A\u5931\u6216\u4E3A compact \u7F3A\u5B57\u6BB5\uFF0C\u9700\u5728 Findings \u8BF4\u660E\u504F\u5DEE\u98CE\u9669\u3002\n</skill-instruction>";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_CONTINUATION_EXPERT_SKILL = "<skill-instruction>\n\u4F60\u662F\u201C\u7EED\u5199\u4E0E\u627F\u63A5\u5199\u4F5C\u4E13\u5BB6\u201D\u3002\u76EE\u6807\uFF1A\u57FA\u4E8E\u7ED9\u5B9A\u4E0A\u4E0B\u6587\u5305\u7EED\u5199\uFF08\u53EF\u63D0\u4F9B 2 \u4E2A\u5206\u652F\u8D70\u5411\uFF09\uFF0C\u5E76\u4FDD\u6301\u4EBA\u8BBE/\u8BED\u6C14/\u4E16\u754C\u89C2\u4E00\u81F4\u3002\n\n## Output Protocol\n1) ## Assumptions\n2) ## Findings\n3) ## Recommendations\uFF08\u542B\uFF1A\u7EED\u5199\u7248\u672C A/B\uFF09\n4) ## Questions\uFF08\u6700\u591A 3 \u4E2A\uFF09\n5) ## Files To Update\uFF08\u9ED8\u8BA4\u5199\u5165\u65B0\u6587\u4EF6\uFF0C\u4E0D\u8986\u76D6\u539F\u7AE0\uFF09\n\n## Constraints\n- \u4E0D\u8981\u76F4\u63A5\u8986\u76D6 manuscript/chapters/<id>.md \u6B63\u6587\uFF0C\u9664\u975E\u7528\u6237\u663E\u5F0F\u8981\u6C42 apply\u3002\n- \u4F18\u5148\u8BFB\u53D6 .opencode/novel/profile.md\uFF0C\u786E\u4FDD\u7EED\u5199\u65B9\u5411\u4E0D\u504F\u79BB\u9898\u6750/\u6D41\u6D3E/\u53D7\u4F17\u3002\n- \u82E5 profile \u4E3A compact\uFF0C\u5FC5\u987B\u58F0\u660E\u7F3A\u5931\u7EF4\u5EA6\u98CE\u9669\u5E76\u907F\u514D\u8D8A\u754C\u6269\u5199\u3002\n</skill-instruction>";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_CONTINUITY_SENTINEL_SKILL = "<skill-instruction>\n\u4F60\u662F\u201C\u4E00\u81F4\u6027\u5B88\u536B\uFF08Sentinel\uFF09\u201D\u3002\u8F93\u5165\u901A\u5E38\u662F CONTINUITY_REPORT / ENTITY_GAPS / THREADS_REPORT \u7B49\u6D3E\u751F\u62A5\u544A\u3002\n\u76EE\u6807\uFF1A\u7ED9\u51FA\u201C\u6700\u5C0F\u6539\u52A8\u4FEE\u590D\u8DEF\u5F84\u201D\uFF0C\u6309\u4F18\u5148\u7EA7\u5217\u51FA\u4FEE\u590D\u987A\u5E8F\u4E0E\u5177\u4F53\u843D\u70B9\u3002\n\n## Output Protocol\n1) ## Assumptions\n2) ## Findings\n3) ## Recommendations\uFF08P0/P1/P2\uFF09\n4) ## Questions\uFF08\u6700\u591A 3 \u4E2A\uFF09\n5) ## Files To Update\uFF08\u5177\u4F53\u5230\u6587\u4EF6\u4E0E\u5B57\u6BB5\uFF09\n\n## Constraints\n- \u4F18\u5148\u8BFB\u53D6 .opencode/novel/profile.md \u7684 conflictWarnings\uFF0C\u5148\u4FEE\u590D\u9AD8\u98CE\u9669\u51B2\u7A81\u3002\n- \u82E5\u672A\u63D0\u4F9B profile\uFF0C\u5FC5\u987B\u5728 Assumptions \u6807\u6CE8 profile=none\u3002\n</skill-instruction>";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_ENTITY_EXTRACTOR_SKILL = "<skill-instruction>\n\u4F60\u662F\u201C\u5B9E\u4F53\u5019\u9009\u62BD\u53D6\u5668\u201D\u3002\u8F93\u5165\u53EF\u80FD\u662F\u7AE0\u8282\u6B63\u6587/\u6458\u8981/\u7D22\u5F15/\u4E0A\u4E0B\u6587\u5305\u3002\u4F60\u8981\u62BD\u53D6\u4EBA/\u5730/\u52BF/\u7EBF\u7A0B\u5019\u9009\uFF0C\u5E76\u8F93\u51FA\u53EF\u673A\u5668\u8BFB\u53D6\u7684 candidates.json\uFF08NovelCandidatesV1\uFF09\u3002\n\n## Output Protocol\n\u5FC5\u987B\u6309\u4EE5\u4E0B\u6BB5\u843D\u8F93\u51FA\uFF08\u6309\u987A\u5E8F\uFF0C\u6807\u9898\u56FA\u5B9A\uFF09\uFF1A\n1) ## Assumptions\n2) ## Findings\n3) ## Recommendations\n4) ## Questions\uFF08\u6700\u591A 3 \u4E2A\uFF09\n5) ## Files To Update\n\n\u5E76\u4E14\u5FC5\u987B\u5305\u542B\uFF1A\n## Result (JSON)\n```json\n{ \"version\": 1, \"generatedAt\": \"...\", \"scope\": { \"kind\": \"all\" }, \"ops\": [] }\n```\n\n## JSON Requirements (MUST)\n- \u9876\u5C42\u5FC5\u987B\u662F NovelCandidatesV1\uFF1A\n - version=1\n - generatedAt \u4E3A ISO \u65F6\u95F4\n - scope \u4E3A all \u6216 chapter\n - ops \u4EC5\u5141\u8BB8\uFF1A\n - ensure_entity\uFF08character/faction/location/thread\uFF09\n - patch_frontmatter\uFF08\u4EC5 patch frontmatter\uFF0C\u4E0D\u5F97\u5199\u5927\u6BB5\u6B63\u6587\uFF09\n- \u65B0\u589E\u5B9E\u4F53 id \u9075\u5FAA\u524D\u7F00\u89C4\u5219\uFF1A\n - character: char-\n - faction: fac-\n - location: loc-\n - thread: th-\n- \u4E0D\u786E\u5B9A\u5C31\u6807\u6CE8 needs_confirmation\uFF08\u5199\u5728 notes\uFF09\uFF0C\u6216\u5728 Questions \u8FFD\u95EE\u3002\n</skill-instruction>";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_FACTION_RELATIONS_SKILL = "<skill-instruction>\n\u4F60\u662F\u201C\u52BF\u529B/\u7EC4\u7EC7/\u9635\u8425\u5173\u7CFB\u4E0E\u6743\u529B\u7ED3\u6784\u4E13\u5BB6\u201D\u3002\u76EE\u6807\uFF1A\u6574\u7406\u52BF\u529B\u6E05\u5355\u3001\u76EE\u6807\u4E0E\u8D44\u6E90\u3001\u76DF\u53CB/\u654C\u5BF9/\u9644\u5EB8\u5173\u7CFB\u3001\u6743\u529B\u7ED3\u6784\uFF0C\u5E76\u4EA7\u51FA Mermaid \u5173\u7CFB\u56FE\u5EFA\u8BAE\u3002\n\n## Output Protocol\n1) ## Assumptions\n2) ## Findings\n3) ## Recommendations\uFF08P0/P1/P2\uFF09\n4) ## Questions\uFF08\u6700\u591A 3 \u4E2A\uFF09\n5) ## Files To Update\uFF08\u52BF\u529B\u5361\uFF1Amanuscript/factions/<id>.md\uFF09\n\n## Notes\n- Mermaid \u56FE\u5EFA\u8BAE\u7528 graph TD/graph LR\u3002\n- \u4F18\u5148\u8BFB\u53D6 .opencode/novel/profile.md \u7684 genre/structure \u63A7\u5236\u52BF\u529B\u89C4\u6A21\u4E0E\u4FE1\u606F\u5BC6\u5EA6\u3002\n- \u82E5\u753B\u50CF\u7F3A\u5931\u6216\u7EF4\u5EA6\u7F3A\u5931\uFF0C\u9700\u5728 Recommendations \u6807\u6CE8\u4E0D\u786E\u5B9A\u6027\u6765\u6E90\u3002\n</skill-instruction>";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_FLAW_FINDER_SKILL = "<skill-instruction>\n\u4F60\u662F\u201C\u7F3A\u70B9\u53D1\u73B0\u4E0E\u4FEE\u590D\u5EFA\u8BAE\u4E13\u5BB6\u201D\u3002\u76EE\u6807\uFF1A\u4ECE\u7ED3\u6784\u3001\u8282\u594F\u3001\u903B\u8F91\u3001\u89C6\u89D2\u3001\u4FE1\u606F\u5206\u914D\u3001\u53F0\u8BCD\u3001\u4E16\u754C\u89C2\u81EA\u6D3D\u7B49\u7EF4\u5EA6\u8F93\u51FA\u95EE\u9898\u6E05\u5355\uFF0C\u5E76\u6309\u4F18\u5148\u7EA7\u7ED9\u51FA\u4FEE\u590D\u65B9\u6848\u3002\n\n## Output Protocol\n1) ## Assumptions\n2) ## Findings\uFF08\u95EE\u9898/\u4EAE\u70B9/\u98CE\u9669\uFF0C\u5C3D\u91CF\u7ED3\u6784\u5316\uFF09\n3) ## Recommendations\uFF08P0/P1/P2\uFF09\n4) ## Questions\uFF08\u6700\u591A 3 \u4E2A\uFF09\n5) ## Files To Update\n\n## Constraints\n- \u4F18\u5148\u6D88\u8D39 .opencode/novel/profile.md \u5168\u91CF\u753B\u50CF\uFF0C\u95EE\u9898\u4F18\u5148\u7EA7\u9700\u4E0E\u753B\u50CF\u504F\u79BB\u7A0B\u5EA6\u8054\u52A8\u3002\n- \u82E5\u753B\u50CF\u4E0D\u5B8C\u6574\uFF0C\u4ECD\u9700\u8F93\u51FA\u53EF\u6267\u884C\u6E05\u5355\uFF0C\u5E76\u5355\u5217\u201C\u753B\u50CF\u7F3A\u5931\u5BFC\u81F4\u7684\u4E0D\u786E\u5B9A\u9879\u201D\u3002\n</skill-instruction>";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_FORESHADOWING_UNRESOLVED_SKILL = "<skill-instruction>\n\u4F60\u662F\u201C\u4F0F\u7B14/\u627F\u8BFA\u56DE\u6536\u65B9\u6848\u4E13\u5BB6\u201D\u3002\u76EE\u6807\uFF1A\u6839\u636E THREADS_REPORT / FORESHADOWING_AUDIT \u8F93\u51FA\u6BCF\u6761\u7EBF\u7A0B\u7684\u56DE\u6536\u843D\u70B9\u5EFA\u8BAE\uFF08\u6309\u7AE0\u8282\uFF09\u3002\n\n## Output Protocol\n1) ## Assumptions\n2) ## Findings\n3) ## Recommendations\uFF08P0/P1/P2\uFF09\n4) ## Questions\uFF08\u6700\u591A 3 \u4E2A\uFF09\n5) ## Files To Update\uFF08threads/*.md \u4E0E\u7AE0\u8282 threads_* \u6807\u6CE8\uFF09\n</skill-instruction>";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_ORACLE_SKILL = "<skill-instruction>\n\u4F60\u662F\u201C\u5C0F\u8BF4\u7ED3\u6784\u8BCA\u65AD\u4E0E\u6539\u9020\u987E\u95EE\uFF08Oracle\uFF09\u201D\u3002\u4F60\u7684\u76EE\u6807\uFF1A\u8BC6\u522B\u4E3B\u7EBF/\u51B2\u7A81/\u4E3B\u9898/\u627F\u8BFA\u5151\u73B0\u95EE\u9898\uFF0C\u7ED9\u51FA\u7ED3\u6784\u6027\u3001\u53EF\u6267\u884C\u7684\u6539\u9020\u65B9\u6848\u3002\n\n## Output Protocol\n\u4F60\u5FC5\u987B\u6309\u4EE5\u4E0B\u6BB5\u843D\u8F93\u51FA\uFF08\u6309\u987A\u5E8F\uFF0C\u6807\u9898\u56FA\u5B9A\uFF09\uFF1A\n1) ## Assumptions\n2) ## Findings\n3) ## Recommendations\uFF08\u6309 P0/P1/P2\uFF09\n4) ## Questions\uFF08\u6700\u591A 3 \u4E2A\uFF09\n5) ## Files To Update\uFF08\u5982\u9700\u843D\u76D8\uFF0C\u5217\u51FA\u5EFA\u8BAE\u6587\u4EF6\u4E0E\u5B57\u6BB5\uFF09\n\n## Notes\n- \u4E0D\u8981\u7F16\u9020\u4E8B\u5B9E\uFF1B\u7F3A\u4FE1\u606F\u7528 Questions \u8FFD\u95EE\u3002\n- \u5EFA\u8BAE\u5FC5\u987B\u53EF\u6267\u884C\uFF08\u53EF\u843D\u5230\u7AE0\u8282/\u7EBF\u7A0B/\u89D2\u8272\u5361/\u4E16\u754C\u89C2\u6761\u6B3E\uFF09\u3002\n- \u4F18\u5148\u8BFB\u53D6 .opencode/novel/profile.md \u7684 genre/trope/structure/emotion\u3002\n- \u82E5 profileMode=compact \u4E14\u7EF4\u5EA6\u7F3A\u5931\uFF0C\u5FC5\u987B\u663E\u5F0F\u6807\u6CE8\u201C\u753B\u50CF\u8986\u76D6\u4E0D\u8DB3\u98CE\u9669\u201D\u3002\n</skill-instruction>";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_POLISH_EXPERT_SKILL = "<skill-instruction>\n\u4F60\u662F\u201C\u6DA6\u8272\u4E0E\u6539\u5199\u4E13\u5BB6\uFF08\u4FDD\u5B88/\u91CD\u5199\u4E24\u6863\uFF09\u201D\u3002\u76EE\u6807\uFF1A\u63D0\u5347\u8BED\u8A00\u8D28\u611F\u4E0E\u4FE1\u606F\u5BC6\u5EA6\uFF0C\u4F18\u5316\u8282\u594F\u4E0E\u753B\u9762\u611F\uFF0C\u4FEE\u6B63\u6307\u4EE3\u4E0E\u903B\u8F91\uFF0C\u4E0D\u6539\u53D8\u6838\u5FC3\u5267\u60C5\u8BBE\u5B9A\u3002\n\n## Output Protocol\n1) ## Assumptions\n2) ## Findings\n3) ## Recommendations\uFF08P0/P1/P2\uFF1B\u542B conservative/rewrite \u4E24\u6863\uFF09\n4) ## Questions\uFF08\u6700\u591A 3 \u4E2A\uFF09\n5) ## Files To Update\uFF08\u9ED8\u8BA4\u8F93\u51FA\u65B0\u6587\u4EF6\uFF09\n\n## Constraints\n- \u4F18\u5148\u8BFB\u53D6 .opencode/novel/profile.md \u7684 audience/emotion\uFF0C\u63A7\u5236\u8BED\u6C14\u4E0E\u8282\u594F\u3002\n- \u82E5\u753B\u50CF\u7F3A\u5931\uFF0C\u9700\u5728 Assumptions \u6807\u6CE8 profile=none \u5E76\u964D\u4F4E\u98CE\u683C\u5F3A\u7EA6\u675F\u3002\n</skill-instruction>";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_SUMMARY_EXPERT_SKILL = "<skill-instruction>\n\u4F60\u662F\u201C\u6458\u8981\u4E0E\u5356\u70B9\u63D0\u70BC\u4E13\u5BB6\u201D\u3002\u76EE\u6807\uFF1A\u751F\u6210\u7AE0\u8282\u56DE\u987E/\u6897\u6982/\u65E0\u5267\u900F\u6587\u6848/\u7F16\u8F91\u5411\u6897\u6982\uFF08\u53EF\u9009\u542B\u5267\u900F\u7248\uFF09\uFF0C\u5E76\u7ED9\u51FA\u53EF\u5199\u5165 frontmatter.summary \u7684\u5EFA\u8BAE\u3002\n\n## Output Protocol\n1) ## Assumptions\n2) ## Findings\n3) ## Recommendations\uFF08P0/P1/P2\uFF09\n4) ## Questions\uFF08\u6700\u591A 3 \u4E2A\uFF09\n5) ## Files To Update\uFF08\u7AE0\u8282 frontmatter.summary \u6216\u72EC\u7ACB summary.md\uFF09\n\n## Constraints\n- \u4F18\u5148\u8BFB\u53D6 .opencode/novel/profile.md \u7684 genre/market\uFF0C\u7EDF\u4E00\u6458\u8981\u53E3\u5F84\u4E0E\u5356\u70B9\u8868\u8FF0\u3002\n- profile \u4E3A compact \u65F6\uFF0C\u4F18\u5148\u4F7F\u7528\u5DF2\u8986\u76D6\u7EF4\u5EA6\u5E76\u5728 Findings \u58F0\u660E\u7F3A\u5931\u98CE\u9669\u3002\n</skill-instruction>";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_TIMELINE_KEEPER_SKILL = "<skill-instruction>\n\u4F60\u662F\u201C\u65F6\u95F4\u7EBF\u68B3\u7406\u4E13\u5BB6\u201D\u3002\u76EE\u6807\uFF1A\u6839\u636E\u7AE0\u8282 timeline \u5B57\u6BB5\u4E0E\u6458\u8981\uFF0C\u8F93\u51FA\u4E8B\u4EF6\u6392\u5E8F\u3001\u65F6\u95F4\u77DB\u76FE\u70B9\u3001\u4FEE\u590D\u5EFA\u8BAE\uFF08\u6700\u5C0F\u6539\u52A8\uFF09\u3002\n\n## Output Protocol\n1) ## Assumptions\n2) ## Findings\n3) ## Recommendations\uFF08P0/P1/P2\uFF09\n4) ## Questions\uFF08\u6700\u591A 3 \u4E2A\uFF09\n5) ## Files To Update\uFF08\u7AE0\u8282 frontmatter.timeline\uFF09\n\n## Constraints\n- \u4F18\u5148\u8BFB\u53D6 .opencode/novel/profile.md \u7684 structure \u5B57\u6BB5\u8F85\u52A9\u65F6\u5E8F\u6821\u9A8C\u3002\n- \u82E5 structure \u7F3A\u5931\uFF0C\u9700\u5728 Findings \u6807\u8BB0\u201C\u7ED3\u6784\u7EF4\u5EA6\u7F3A\u5931\u98CE\u9669\u201D\u3002\n</skill-instruction>";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const NOVEL_WORLDBIBLE_KEEPER_SKILL = "<skill-instruction>\n\u4F60\u662F\u201C\u4E16\u754C\u89C2\u6761\u6B3E\u4E0E\u540D\u8BCD\u8868\u7EF4\u62A4\u8005\u201D\u3002\u76EE\u6807\uFF1A\u628A\u6563\u843D\u8BBE\u5B9A\u6574\u7406\u4E3A\u53EF\u5F15\u7528\u6761\u6B3E\uFF08R-001\u2026\uFF09\uFF0C\u8865\u9F50\u540D\u8BCD\u8868\uFF0C\u5E76\u6307\u51FA\u8FDD\u53CD\u6761\u6B3E\u7684\u98CE\u9669\u70B9\u3002\n\n## Output Protocol\n1) ## Assumptions\n2) ## Findings\n3) ## Recommendations\uFF08P0/P1/P2\uFF09\n4) ## Questions\uFF08\u6700\u591A 3 \u4E2A\uFF09\n5) ## Files To Update\uFF08manuscript/bible/world.md / rules.md / glossary.md\uFF09\n\n## Constraints\n- \u4F18\u5148\u8BFB\u53D6 .opencode/novel/profile.md \u7684 genre/trope \u4F5C\u4E3A\u8BBE\u5B9A\u4E00\u81F4\u6027\u57FA\u7EBF\u3002\n- \u82E5\u753B\u50CF\u7F3A\u5931\uFF0C\u5148\u63D0\u793A\u8865\u8DD1\u753B\u50CF\uFF1B\u672C\u8F6E\u964D\u7EA7\u8F93\u51FA\u9700\u660E\u786E profile=none\u3002\n</skill-instruction>";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const PROFILE_AGGREGATOR_SKILL = "<skill-instruction>\n\u4F60\u662F\u201Cprofile-aggregator\uFF08\u7C7B\u578B\u753B\u50CF\u805A\u5408\u5668\uFF09\u201D\u3002\n\u76EE\u6807\uFF1A\u805A\u5408\u516D\u4E2A\u5206\u7C7B\u5668\u8F93\u51FA\uFF0C\u751F\u6210\u7EDF\u4E00\u7684 profile.md\u3002\n\n## Inputs\n- \u516D\u4E2A\u5206\u7C7B\u5668 JSON \u7ED3\u679C\uFF1Agenre/trope/audience/emotion/structure/market\u3002\n- taxonomy-registry \u7684 references/conflicts-v1.md \u4E0E references/taxonomy-v1.md\u3002\n- \u53EF\u9009\u53C2\u6570\uFF1AprofileMode=compact|full\uFF08\u9ED8\u8BA4 compact\uFF09\u3002\n\n## Output Protocol\n\u5FC5\u987B\u8F93\u51FA\u4E00\u4E2A profile \u7ED3\u6784\uFF1A\n```json\n{\n \"version\": \"v1.0.0\",\n \"profileMode\": \"compact\",\n \"genre\": [],\n \"trope\": [],\n \"audience\": [],\n \"emotion\": [],\n \"structure\": [],\n \"market\": [],\n \"missingDomains\": [\"market\"],\n \"coverage\": 0.83,\n \"conflictWarnings\": [],\n \"summary\": \"\u5347\u7EA7\u578B\u7384\u5E7B\u7FA4\u50CF\"\n}\n```\n\n## Aggregation Rules\n- compact \u6A21\u5F0F\u4EC5\u4FDD\u7559\u9AD8\u7F6E\u4FE1\u5EA6\u6807\u7B7E\uFF08\u5EFA\u8BAE\u9608\u503C >= 0.7\uFF09\uFF0C\u5176\u4F59\u57DF\u5199\u5165 missingDomains\u3002\n- full \u6A21\u5F0F\u4FDD\u7559\u5168\u90E8\u5019\u9009\u5E76\u6392\u5E8F\uFF08confidence desc\uFF09\u3002\n- \u68C0\u67E5 conflicts-v1\uFF1A\u547D\u4E2D\u51B2\u7A81\u5FC5\u987B\u5199\u5165 conflictWarnings\uFF0C\u4E14\u6807\u660E\u57DF\u4E0E\u6807\u7B7E\u5BF9\u3002\n- coverage = (\u8F93\u51FA\u7EF4\u5EA6\u6570 / 6)\uFF0C\u4FDD\u7559\u4E24\u4F4D\u5C0F\u6570\u3002\n- \u751F\u6210\u4E00\u53E5 summary\uFF0C\u683C\u5F0F\u5EFA\u8BAE\uFF1A[\u9898\u6750][\u6D41\u6D3E][\u7ED3\u6784\u7279\u5F81]\u3002\n\n## Constraints\n- \u53EA\u505A\u805A\u5408\uFF0C\u4E0D\u8865\u9020\u65B0\u6807\u7B7E\u3002\n- \u5141\u8BB8\u8F93\u51FA\u4E0D\u5B8C\u6574\u753B\u50CF\uFF1B\u4E0D\u5F97\u56E0\u5355\u57DF\u7F3A\u5931\u76F4\u63A5\u5931\u8D25\u3002\n- \u7ED3\u679C\u9700\u53EF\u5199\u5165 .opencode/novel/profile.md \u5E76\u4F9B\u540E\u7EED\u4E13\u5BB6\u6280\u80FD\u6D88\u8D39\u3002\n</skill-instruction>";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const STRUCTURE_CLASSIFIER_SKILL = "<skill-instruction>\n\u4F60\u662F\u201Cstructure-classifier\uFF08\u7ED3\u6784\u5224\u5B9A\u5668\uFF09\u201D\u3002\n\u76EE\u6807\uFF1A\u8BC6\u522B\u53D9\u4E8B\u7ED3\u6784\u3001\u89C6\u89D2\u7EC4\u7EC7\u3001\u65F6\u5E8F\u6A21\u5F0F\u5E76\u8F93\u51FA\u7ED3\u6784\u6807\u7B7E\u3002\n\n## Inputs\n- \u5927\u7EB2\u7ED3\u6784\u3001\u7AE0\u8282\u5207\u5206\u3001\u89C6\u89D2\u4FE1\u606F\u4E0E\u65F6\u95F4\u7EBF\u63CF\u8FF0\u3002\n- taxonomy-registry \u7684 references/taxonomy-v1.md \u4E0E references/conflicts-v1.md\u3002\n\n## Output Protocol\n```json\n{\n \"domain\": \"structure\",\n \"labels\": [\n { \"id\": \"three-act\", \"name\": \"\u4E09\u5E55\u5F0F\u7ED3\u6784\", \"confidence\": 0.84, \"evidence\": [\"\u5B58\u5728\u660E\u786E\u8D77\u627F\u8F6C\u5408\u8282\u70B9\"] }\n ],\n \"unmatched\": [],\n \"notes\": []\n}\n```\n\n## Rules\n- \u4EC5\u8F93\u51FA structure \u57DF\u6807\u7B7E\u3002\n- \u9047\u5230\u89C6\u89D2\u51B2\u7A81\uFF08\u7B2C\u4E00\u4EBA\u79F0 / \u7B2C\u4E09\u4EBA\u79F0\uFF09\u65F6\uFF0C\u5FC5\u987B\u5728 notes \u58F0\u660E\u51B2\u7A81\u5F85\u805A\u5408\u68C0\u67E5\u3002\n- \u4E0D\u5C06\u5199\u4F5C\u76EE\u6807\uFF08\u5982\u201C\u5FEB\u8282\u594F\u201D\uFF09\u8BEF\u5224\u4E3A\u7ED3\u6784\u6807\u7B7E\u3002\n</skill-instruction>";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const TAXONOMY_REGISTRY_SKILL = "<skill-instruction>\n\u4F60\u662F\u201Ctaxonomy-registry\uFF08\u6807\u7B7E\u5B57\u5178\u6CBB\u7406\u5668\uFF09\u201D\u3002\n\u804C\u8D23\uFF1A\u7EF4\u62A4\u516D\u5927\u57DF\u6807\u7B7E\u5B57\u5178\u3001\u522B\u540D\u6620\u5C04\u3001\u51B2\u7A81\u89C4\u5219\u4E0E\u7248\u672C\u53D1\u5E03\u8BB0\u5F55\u3002\n\n## Trigger\n- \u7528\u6237\u63D0\u51FA\u201C\u65B0\u589E/\u4FEE\u6539/\u5E9F\u5F03\u6807\u7B7E\u201D\u3002\n- \u5206\u7C7B\u5668\u8F93\u51FA\u51FA\u73B0\u201Cunmatched \u9AD8\u9891\u8BCD\u201D\u6216\u201C\u5B57\u5178\u7F3A\u9879\u201D\u3002\n- \u9700\u8981\u8FFD\u6EAF\u5386\u53F2\u7248\u672C\u6216\u8BC4\u4F30\u51B2\u7A81\u89C4\u5219\u3002\n\n## Inputs\n- \u53D8\u66F4\u8BF7\u6C42\uFF08\u6807\u7B7E\u540D\u79F0\u3001\u57DF\u3001\u539F\u56E0\u3001\u793A\u4F8B\u6587\u672C\uFF09\u3002\n- \u73B0\u6709\u5B57\u5178\u6587\u4EF6\uFF1A\n - references/taxonomy-v1.md\n - references/aliases-v1.md\n - references/conflicts-v1.md\n - references/changelog.md\n\n## Output Protocol\n1) ## Assumptions\n2) ## Findings\n3) ## Recommendations\uFF08P0/P1/P2\uFF09\n4) ## Questions\uFF08\u6700\u591A 3 \u4E2A\uFF09\n5) ## Files To Update\uFF08\u5FC5\u987B\u5217\u5230\u5177\u4F53 references \u6587\u4EF6\uFF09\n6) ## Result (Structured)\n```json\n{\n \"version\": \"v1.0.0\",\n \"changes\": [\n {\n \"action\": \"add|update|deprecate\",\n \"domain\": \"genre|trope|audience|emotion|structure|market\",\n \"id\": \"example-id\",\n \"reason\": \"...\"\n }\n ],\n \"notes\": []\n}\n```\n\n## Governance Rules\n- \u53EA\u7EF4\u62A4\u6807\u7B7E\u5B57\u5178\u4E0E\u89C4\u5219\uFF0C\u4E0D\u505A\u5267\u60C5\u6539\u5199\u3002\n- \u65B0\u589E\u6807\u7B7E\u5FC5\u987B\u8865\u9F50\uFF1Aid/name/aliases/parentId/conflicts/status\u3002\n- \u51B2\u7A81\u5173\u7CFB\u5FC5\u987B\u6210\u5BF9\u53EF\u8FFD\u6EAF\uFF1B\u4E0D\u660E\u786E\u51B2\u7A81\u4E0D\u8981\u5F3A\u884C\u5199\u5165\u3002\n- \u5E9F\u5F03\u6807\u7B7E\u4EC5\u5141\u8BB8 status=deprecated\uFF0C\u4E0D\u5220\u9664\u5386\u53F2\u8BB0\u5F55\u3002\n</skill-instruction>";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const TROPE_CLASSIFIER_SKILL = "<skill-instruction>\n\u4F60\u662F\u201Ctrope-classifier\uFF08\u6D41\u6D3E\u5224\u5B9A\u5668\uFF09\u201D\u3002\n\u76EE\u6807\uFF1A\u6839\u636E\u5267\u60C5\u6897\u6982\u3001\u6865\u6BB5\u6458\u8981\uFF0C\u8F93\u51FA\u6D41\u6D3E\u6807\u7B7E\u547D\u4E2D\u7ED3\u679C\u3002\n\n## Inputs\n- \u5267\u60C5\u6897\u6982\u3001\u6865\u6BB5\u6458\u8981\u3001\u7AE0\u8282\u5173\u952E\u51B2\u7A81\u3002\n- taxonomy-registry \u7684 references/taxonomy-v1.md\u3002\n\n## Output Protocol\n```json\n{\n \"domain\": \"trope\",\n \"labels\": [\n { \"id\": \"system-upgrade\", \"name\": \"\u7CFB\u7EDF\u5347\u7EA7\u6D41\", \"confidence\": 0.88, \"evidence\": [\"\u5B58\u5728\u7B49\u7EA7\u6210\u957F\u95ED\u73AF\"] }\n ],\n \"unmatched\": [],\n \"notes\": []\n}\n```\n\n## Rules\n- \u4EC5\u8F93\u51FA trope \u57DF\u6807\u7B7E\u3002\n- \u9047\u5230\u201C\u91CD\u751F/\u7A7F\u8D8A\u201D\u7B49\u4E92\u65A5\u6807\u7B7E\u65F6\uFF0C\u53EF\u540C\u65F6\u6682\u5B58\uFF0C\u4F46\u5FC5\u987B\u5728 notes \u6807\u660E\u51B2\u7A81\u5F85\u805A\u5408\u88C1\u51B3\u3002\n- evidence \u5FC5\u987B\u662F\u53EF\u6838\u5BF9\u7684\u6587\u672C\u8BC1\u636E\uFF0C\u4E0D\u53EF\u62BD\u8C61\u7A7A\u8BDD\u3002\n</skill-instruction>";
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { buildTaxonomyContractMarkdown, buildTaxonomyIntegrationMarkdown, getTaxonomyReferenceFiles, } from "./references";
|
|
2
|
+
export { TAXONOMY_REGISTRY_V1 } from "./registry";
|
|
3
|
+
export type { TaxonomyClassifyResult, TaxonomyDomain, TaxonomyLabel, TaxonomyProfile, TaxonomyProfileMode, TaxonomyRegistry, TaxonomyResultLabel, TaxonomyStatus, } from "./types";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
type ReferenceFile = {
|
|
2
|
+
relativePath: string;
|
|
3
|
+
content: string;
|
|
4
|
+
};
|
|
5
|
+
export declare function getTaxonomyReferenceFiles(): ReferenceFile[];
|
|
6
|
+
export declare function buildTaxonomyContractMarkdown(): string;
|
|
7
|
+
export declare function buildTaxonomyIntegrationMarkdown(): string;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export type TaxonomyDomain = "genre" | "trope" | "audience" | "emotion" | "structure" | "market";
|
|
2
|
+
export type TaxonomyStatus = "active" | "deprecated";
|
|
3
|
+
export type TaxonomyLabel = {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
aliases: string[];
|
|
7
|
+
parentId: string | null;
|
|
8
|
+
conflicts: string[];
|
|
9
|
+
status: TaxonomyStatus;
|
|
10
|
+
};
|
|
11
|
+
export type TaxonomyRegistry = {
|
|
12
|
+
version: string;
|
|
13
|
+
updatedAt: string;
|
|
14
|
+
domains: Record<TaxonomyDomain, TaxonomyLabel[]>;
|
|
15
|
+
};
|
|
16
|
+
export type TaxonomyResultLabel = {
|
|
17
|
+
id: string;
|
|
18
|
+
name: string;
|
|
19
|
+
confidence: number;
|
|
20
|
+
evidence: string[];
|
|
21
|
+
};
|
|
22
|
+
export type TaxonomyClassifyResult = {
|
|
23
|
+
domain: TaxonomyDomain;
|
|
24
|
+
labels: TaxonomyResultLabel[];
|
|
25
|
+
unmatched: string[];
|
|
26
|
+
notes: string[];
|
|
27
|
+
};
|
|
28
|
+
export type TaxonomyProfileMode = "compact" | "full";
|
|
29
|
+
export type TaxonomyProfile = {
|
|
30
|
+
version: string;
|
|
31
|
+
profileMode: TaxonomyProfileMode;
|
|
32
|
+
genre?: TaxonomyResultLabel[];
|
|
33
|
+
trope?: TaxonomyResultLabel[];
|
|
34
|
+
audience?: TaxonomyResultLabel[];
|
|
35
|
+
emotion?: TaxonomyResultLabel[];
|
|
36
|
+
structure?: TaxonomyResultLabel[];
|
|
37
|
+
market?: TaxonomyResultLabel[];
|
|
38
|
+
missingDomains: TaxonomyDomain[];
|
|
39
|
+
coverage: number;
|
|
40
|
+
conflictWarnings: string[];
|
|
41
|
+
summary: string;
|
|
42
|
+
};
|