novel-writer-style-cn 0.20.0 → 0.21.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/.claude/commands/inspire.md +70 -0
- package/.claude/commands/write-styled.md +15 -8
- package/CHANGELOG.md +23 -0
- package/package.json +2 -2
- package/plugins/style-learning/experts/style-expert.md +2 -0
- package/dist/ai-interface.d.ts +0 -100
- package/dist/ai-interface.d.ts.map +0 -1
- package/dist/ai-interface.js +0 -337
- package/dist/ai-interface.js.map +0 -1
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/hybrid-method.d.ts +0 -109
- package/dist/hybrid-method.d.ts.map +0 -1
- package/dist/hybrid-method.js +0 -337
- package/dist/hybrid-method.js.map +0 -1
- package/dist/method-advisor.d.ts +0 -57
- package/dist/method-advisor.d.ts.map +0 -1
- package/dist/method-advisor.js +0 -293
- package/dist/method-advisor.js.map +0 -1
- package/dist/method-converter.d.ts +0 -83
- package/dist/method-converter.d.ts.map +0 -1
- package/dist/method-converter.js +0 -442
- package/dist/method-converter.js.map +0 -1
- package/dist/plugins/manager.d.ts +0 -88
- package/dist/plugins/manager.d.ts.map +0 -1
- package/dist/plugins/manager.js +0 -373
- package/dist/plugins/manager.js.map +0 -1
- package/dist/utils/interactive.d.ts +0 -41
- package/dist/utils/interactive.d.ts.map +0 -1
- package/dist/utils/interactive.js +0 -139
- package/dist/utils/interactive.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -8
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -21
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/project.d.ts +0 -27
- package/dist/utils/project.d.ts.map +0 -1
- package/dist/utils/project.js +0 -78
- package/dist/utils/project.js.map +0 -1
- package/dist/version.d.ts +0 -21
- package/dist/version.d.ts.map +0 -1
- package/dist/version.js +0 -52
- package/dist/version.js.map +0 -1
- package/plugins/stardust-dreams/lib/api-client.js +0 -120
- package/plugins/stardust-dreams/lib/decryptor.js +0 -175
- package/plugins/stardust-dreams/lib/prompt-manager.js +0 -319
- package/plugins/stardust-dreams/lib/secure-storage.js +0 -333
- package/plugins/stardust-dreams/lib/template-engine.js +0 -356
- package/plugins/style-learning/install.js +0 -298
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Inspire Command
|
|
2
|
+
|
|
3
|
+
你是一位文学创作的“缪斯”和灵感顾问,专门负责在作者陷入瓶颈或需要创意发散时提供启发。你的目标不是替代作者写作,而是通过风格化的建议和情节分叉,激发作者的创作欲望。
|
|
4
|
+
|
|
5
|
+
## 任务目标
|
|
6
|
+
|
|
7
|
+
根据当前的写作背景、人物设定和已学习的风格,提供 3-5 个具有冲击力和逻辑合理性的后续发展建议(Twists),并附带简单的风格化演示。
|
|
8
|
+
|
|
9
|
+
## 使用方法
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
/novel.inspire [当前困境/情境描述] --style=[风格名]
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
### 参数说明
|
|
16
|
+
- `情境描述`: 当前写到哪里了,或者遇到了什么卡点(必需)
|
|
17
|
+
- `--style`: 参考的风格模型,用于生成风格化的灵感片段(必需)
|
|
18
|
+
- `--focus`: 灵感焦点(可选:plot/character/dialogue/atmosphere,默认 plot)
|
|
19
|
+
- `--intensity`: 创意颠覆强度 (0.0-1.0,可选,默认 0.5)
|
|
20
|
+
|
|
21
|
+
### 使用示例
|
|
22
|
+
```
|
|
23
|
+
/novel.inspire 主角被围困在客栈 --style="古龙风格"
|
|
24
|
+
/novel.inspire 两人在雨中重逢 --style="琼瑶风格" --focus=dialogue
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## 处理流程
|
|
28
|
+
|
|
29
|
+
### 第一步:语境扫描
|
|
30
|
+
1. **读取上下文**:检索 `memory/` 文件夹,了解当前的人物关系、世界观设定和已发生的关键事件。
|
|
31
|
+
2. **分析当前困境**:识别作者提供的“情境描述”中的矛盾点。
|
|
32
|
+
|
|
33
|
+
### 第二步:多维灵感生成
|
|
34
|
+
针对每个灵感分支,提供以下内容:
|
|
35
|
+
1. **灵感核心 (The Twist)**:一句话描述剧情转折。
|
|
36
|
+
2. **逻辑支撑**:为什么这个转折是合理的(基于人物性格或伏笔)。
|
|
37
|
+
3. **风格化片段 (Flash Fiction)**:使用目标风格写一段 100-200 字的“预演”片段。
|
|
38
|
+
|
|
39
|
+
### 第三步:交互式发散
|
|
40
|
+
引导作者选择其中一个分支,或根据作者的反馈进行二次微调。
|
|
41
|
+
|
|
42
|
+
## 质量保证
|
|
43
|
+
|
|
44
|
+
- **非替代性**:灵感必须是启发式的,留出足够的创作空间。
|
|
45
|
+
- **风格适配**:灵感片段必须精准体现目标风格的叙述特色。
|
|
46
|
+
- **设定尊重**:绝对不能违反已有的全局设定(不吃书)。
|
|
47
|
+
|
|
48
|
+
## 响应示例
|
|
49
|
+
|
|
50
|
+
### 输入
|
|
51
|
+
```
|
|
52
|
+
/novel.inspire 主角在密室发现了一封信 --style="东野圭吾风格"
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 输出内容
|
|
56
|
+
```
|
|
57
|
+
💡 灵感涌现:
|
|
58
|
+
|
|
59
|
+
分支 A:[真相的重量]
|
|
60
|
+
- 灵感核心:信封是空的,但信纸的压痕揭示了上一封被销毁的信件内容。
|
|
61
|
+
- 逻辑支撑:基于主角细致的观察力。
|
|
62
|
+
- 风格化片段:他戴上手套,侧过台灯,让光线以近乎水平的角度扫过纸面。那些凹陷的线条像是在痛苦地呐喊,拼凑出了一组让他脊背发凉的数字。
|
|
63
|
+
|
|
64
|
+
分支 B:[恶意的延续]
|
|
65
|
+
- 灵感核心:信是主角多年前失踪的父亲写给“未来的主角”的,预言了此刻的发现。
|
|
66
|
+
- 逻辑支撑:世界观中潜伏的家族阴谋。
|
|
67
|
+
- 风格化片段:纸张泛着陈旧的蜡黄。字迹虽然潦草,却透着一种令人不安的笃定。那种冷彻骨髓的恶意,正通过指尖的触碰,跨越时空蔓延开来。
|
|
68
|
+
|
|
69
|
+
您更倾向于哪种走向?或者需要我针对“对话”进行更深度的发散?
|
|
70
|
+
```
|
|
@@ -14,9 +14,11 @@
|
|
|
14
14
|
|
|
15
15
|
### 参数说明
|
|
16
16
|
- `章节名`: 要创作的章节名称(必需)
|
|
17
|
-
- `--style`:
|
|
17
|
+
- `--style`: 使用的风格名称。支持单一风格(如 `金庸`)或复合比例(如 `金庸:0.7, 古龙:0.3`)。
|
|
18
18
|
- `--length`: 目标字数(可选,默认3000字)
|
|
19
19
|
- `--scene-type`: 场景类型(可选:dialogue/action/description/psychology)
|
|
20
|
+
- `--tension`: 情感张力 (0.0-1.0,可选,默认0.5)
|
|
21
|
+
- `--pov`: 指定视角 (可选,覆盖风格设定)
|
|
20
22
|
|
|
21
23
|
### 使用示例
|
|
22
24
|
```
|
|
@@ -29,15 +31,20 @@
|
|
|
29
31
|
|
|
30
32
|
### 第一步:风格配置加载
|
|
31
33
|
1. **验证风格存在**:检查指定的风格是否已学习并保存
|
|
32
|
-
2.
|
|
33
|
-
3.
|
|
34
|
-
4.
|
|
34
|
+
2. **解析复合风格**:如果使用了比例参数(如 `A:0.7, B:0.3`),则分别加载 A 和 B 的特征,并按权重计算最终的创作参数。
|
|
35
|
+
3. **加载风格参数**:读取完整的风格配置文件
|
|
36
|
+
4. **解析风格特征**:理解各维度的风格要求
|
|
37
|
+
5. **设置创作约束**:根据风格参数设定创作规则
|
|
35
38
|
|
|
36
39
|
### 第二步:创作准备
|
|
37
40
|
1. **理解创作需求**:分析章节名称和创作要求
|
|
38
|
-
2.
|
|
39
|
-
|
|
40
|
-
|
|
41
|
+
2. **加载全局上下文**:
|
|
42
|
+
- **读取世界观**:自动关联 `dist/spec/config.json` 或 `memory/world_rules.md` 中的设定。
|
|
43
|
+
- **读取人物志**:匹配章节中涉及的人物,从 `dist/spec/presets/` 或相关设定文件中加载性格、语言风格和背景。
|
|
44
|
+
- **检查伏笔与逻辑**:检索 `memory/` 目录下已发生的关键情节,确保不发生逻辑冲突。
|
|
45
|
+
3. **确定场景类型**:识别是对话、动作、描写还是心理场景
|
|
46
|
+
4. **选择适配策略**:根据场景类型调整风格应用强度
|
|
47
|
+
5. **准备风格词库**:激活目标风格的词汇和表达库
|
|
41
48
|
|
|
42
49
|
### 第三步:风格化创作
|
|
43
50
|
|
|
@@ -73,7 +80,7 @@
|
|
|
73
80
|
|
|
74
81
|
### 第四步:质量检查和优化
|
|
75
82
|
1. **风格一致性检查**:确保生成内容符合风格要求
|
|
76
|
-
2.
|
|
83
|
+
2. **逻辑连贯性验证**:对照全局上下文,检查人物行为是否 OOC(不符合人设),情节是否违反世界观。
|
|
77
84
|
3. **语言流畅性优化**:确保文字自然流畅
|
|
78
85
|
4. **风格强度调节**:根据需要微调风格表现强度
|
|
79
86
|
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# 更新日志
|
|
2
2
|
|
|
3
|
+
## [0.21.0] - 2026-01-12
|
|
4
|
+
|
|
5
|
+
### 🚀 增强功能:创作大师版 (Creative Master)
|
|
6
|
+
|
|
7
|
+
#### 🧠 深度上下文与逻辑一致性
|
|
8
|
+
- **全局上下文集成**:优化 `/write-styled` 指令,自动检索 `memory/` 下的人物志与世界观设定,确保创作内容不偏离核心人设。
|
|
9
|
+
- **逻辑自检机制**:在生成前增加历史情节对齐环节,减少“吃书”现象。
|
|
10
|
+
|
|
11
|
+
#### 🎨 风格混响 (Style Mixer)
|
|
12
|
+
- **多风格融合支持**:`/write-styled` 指令现在支持复合风格参数(如 `--style="金庸:0.7, 古龙:0.3"`),允许作者按比例调制独特的混合文风。
|
|
13
|
+
- **动态权重解析**:AI 将根据权重自动提取并融合不同风格的遣词造句特色。
|
|
14
|
+
|
|
15
|
+
#### 💡 灵感缪斯指令
|
|
16
|
+
- **新增 `/inspire` 指令**:专门解决创作瓶颈。
|
|
17
|
+
- **灵感发散**:提供 3-5 个具有冲击力的剧情走向(Twists)。
|
|
18
|
+
- **风格试写**:为每个灵感分支提供 100-200 字的风格化“预演”片段。
|
|
19
|
+
- **逻辑支撑**:解释每个转折点与已有设定的契合度。
|
|
20
|
+
|
|
21
|
+
#### 🛠️ 系统优化
|
|
22
|
+
- **跨平台兼容性修复**:全面重构 `package.json` 脚本,使用 Node.js 原生 API 替代 Unix 命令(如 `rm -rf`, `chmod`),确保在 Windows 环境下完美运行。
|
|
23
|
+
- **项目引用一致性**:更新 `bun.lock` 及各插件文档中的项目名称引用为 `novel-writer-style-cn`。
|
|
24
|
+
- **风格专家模型升级**:更新 `style-expert.md`,新增风格融合指导与人设一致性检查模块。
|
|
25
|
+
|
|
3
26
|
## [0.20.0] - 2026-01-12
|
|
4
27
|
|
|
5
28
|
### 🎨 重大更新:AI风格学习系统
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "novel-writer-style-cn",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.21.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "AI 驱动的中文小说创作工具 - 基于结构化工作流的智能写作助手",
|
|
6
6
|
"keywords": [
|
|
@@ -62,6 +62,6 @@
|
|
|
62
62
|
},
|
|
63
63
|
"novelWriter": {
|
|
64
64
|
"plugins": ["style-learning"],
|
|
65
|
-
"version": "0.
|
|
65
|
+
"version": "0.21.0"
|
|
66
66
|
}
|
|
67
67
|
}
|
|
@@ -19,7 +19,9 @@
|
|
|
19
19
|
|
|
20
20
|
### 风格化创作辅导
|
|
21
21
|
- **创作前指导**:帮助选择合适的风格和创作策略
|
|
22
|
+
- **风格混响 (Style Mixing)**:指导如何按比例融合多种风格(如 70% 鲁迅 + 30% 王小波),创造独特的混合文风。
|
|
22
23
|
- **创作中监督**:实时检查风格一致性和表现效果
|
|
24
|
+
- **逻辑与人设一致性检查**:在模仿风格的同时,确保人物行为符合其核心设定(Consistency over Imitation)。
|
|
23
25
|
- **创作后优化**:提供具体的修改建议和优化方案
|
|
24
26
|
- **个性化融合**:指导如何在模仿中保持个人特色
|
|
25
27
|
|
package/dist/ai-interface.d.ts
DELETED
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AI 接口层
|
|
3
|
-
* 为 AI 助手提供简化的功能调用接口
|
|
4
|
-
* 支持自然语言参数和引导式交互
|
|
5
|
-
*/
|
|
6
|
-
/**
|
|
7
|
-
* AI 友好的参数接口
|
|
8
|
-
*/
|
|
9
|
-
interface StoryContext {
|
|
10
|
-
genre?: string;
|
|
11
|
-
description?: string;
|
|
12
|
-
estimatedLength?: string;
|
|
13
|
-
targetAudience?: string;
|
|
14
|
-
tone?: string;
|
|
15
|
-
themes?: string[];
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* 方法选择结果
|
|
19
|
-
*/
|
|
20
|
-
interface MethodSelection {
|
|
21
|
-
method: string;
|
|
22
|
-
reason: string;
|
|
23
|
-
template: string;
|
|
24
|
-
tips: string[];
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* AI 接口主类
|
|
28
|
-
*/
|
|
29
|
-
export declare class AIInterface {
|
|
30
|
-
private advisor;
|
|
31
|
-
private converter;
|
|
32
|
-
private hybridManager;
|
|
33
|
-
constructor();
|
|
34
|
-
/**
|
|
35
|
-
* 智能引导选择写作方法
|
|
36
|
-
* AI 通过对话收集信息后调用
|
|
37
|
-
*/
|
|
38
|
-
guideMethodSelection(context: StoryContext): Promise<MethodSelection>;
|
|
39
|
-
/**
|
|
40
|
-
* 引导式问答收集信息
|
|
41
|
-
* 返回需要询问用户的问题
|
|
42
|
-
*/
|
|
43
|
-
getGuidingQuestions(): string[];
|
|
44
|
-
/**
|
|
45
|
-
* 解析上下文为特征参数
|
|
46
|
-
*/
|
|
47
|
-
private parseContext;
|
|
48
|
-
/**
|
|
49
|
-
* 解析创作重点
|
|
50
|
-
*/
|
|
51
|
-
private parseFocus;
|
|
52
|
-
/**
|
|
53
|
-
* 获取方法对应的模板路径
|
|
54
|
-
*/
|
|
55
|
-
private getMethodTemplate;
|
|
56
|
-
/**
|
|
57
|
-
* 获取方法使用提示
|
|
58
|
-
*/
|
|
59
|
-
private getMethodTips;
|
|
60
|
-
/**
|
|
61
|
-
* 智能转换建议
|
|
62
|
-
* 分析当前项目并建议是否需要转换
|
|
63
|
-
*/
|
|
64
|
-
suggestConversion(currentMethod: string, storyProgress: any): Promise<any>;
|
|
65
|
-
/**
|
|
66
|
-
* 分析内容特征
|
|
67
|
-
*/
|
|
68
|
-
private analyzeContent;
|
|
69
|
-
/**
|
|
70
|
-
* 评估转换影响
|
|
71
|
-
*/
|
|
72
|
-
private assessConversionImpact;
|
|
73
|
-
/**
|
|
74
|
-
* 智能混合方案生成
|
|
75
|
-
* 根据故事特点自动设计混合方案
|
|
76
|
-
*/
|
|
77
|
-
designHybridScheme(context: StoryContext): Promise<any>;
|
|
78
|
-
/**
|
|
79
|
-
* 获取使用混合方法的理由
|
|
80
|
-
*/
|
|
81
|
-
private getHybridReason;
|
|
82
|
-
/**
|
|
83
|
-
* 获取当前项目配置
|
|
84
|
-
*/
|
|
85
|
-
getCurrentConfig(): Promise<any>;
|
|
86
|
-
/**
|
|
87
|
-
* 更新项目方法配置
|
|
88
|
-
*/
|
|
89
|
-
updateProjectMethod(method: string | any): Promise<void>;
|
|
90
|
-
/**
|
|
91
|
-
* 获取方法的中文名称
|
|
92
|
-
*/
|
|
93
|
-
getMethodDisplayName(method: string): string;
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* 导出单例实例供 AI 直接使用
|
|
97
|
-
*/
|
|
98
|
-
export declare const aiInterface: AIInterface;
|
|
99
|
-
export {};
|
|
100
|
-
//# sourceMappingURL=ai-interface.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ai-interface.d.ts","sourceRoot":"","sources":["../src/ai-interface.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH;;GAEG;AACH,UAAU,YAAY;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,UAAU,eAAe;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,aAAa,CAAsB;;IAQ3C;;;OAGG;IACG,oBAAoB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC;IAmB3E;;;OAGG;IACH,mBAAmB,IAAI,MAAM,EAAE;IAU/B;;OAEG;IACH,OAAO,CAAC,YAAY;IA+CpB;;OAEG;IACH,OAAO,CAAC,UAAU;IAalB;;OAEG;YACW,iBAAiB;IAa/B;;OAEG;IACH,OAAO,CAAC,aAAa;IAgCrB;;;OAGG;IACG,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAoChF;;OAEG;IACH,OAAO,CAAC,cAAc;IAatB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAc9B;;;OAGG;IACG,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC;IA2C7D;;OAEG;IACH,OAAO,CAAC,eAAe;IAavB;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC;IAQtC;;OAEG;IACG,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB9D;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;CAW7C;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,aAAoB,CAAC"}
|
package/dist/ai-interface.js
DELETED
|
@@ -1,337 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AI 接口层
|
|
3
|
-
* 为 AI 助手提供简化的功能调用接口
|
|
4
|
-
* 支持自然语言参数和引导式交互
|
|
5
|
-
*/
|
|
6
|
-
import { MethodAdvisor } from './method-advisor.js';
|
|
7
|
-
import { MethodConverter } from './method-converter.js';
|
|
8
|
-
import { HybridMethodManager } from './hybrid-method.js';
|
|
9
|
-
import fs from 'fs-extra';
|
|
10
|
-
import path from 'path';
|
|
11
|
-
/**
|
|
12
|
-
* AI 接口主类
|
|
13
|
-
*/
|
|
14
|
-
export class AIInterface {
|
|
15
|
-
advisor;
|
|
16
|
-
converter;
|
|
17
|
-
hybridManager;
|
|
18
|
-
constructor() {
|
|
19
|
-
this.advisor = new MethodAdvisor();
|
|
20
|
-
this.converter = new MethodConverter();
|
|
21
|
-
this.hybridManager = new HybridMethodManager();
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* 智能引导选择写作方法
|
|
25
|
-
* AI 通过对话收集信息后调用
|
|
26
|
-
*/
|
|
27
|
-
async guideMethodSelection(context) {
|
|
28
|
-
// 解析自然语言参数
|
|
29
|
-
const features = this.parseContext(context);
|
|
30
|
-
// 获取推荐
|
|
31
|
-
const scores = this.advisor.recommend(features);
|
|
32
|
-
const top = scores[0];
|
|
33
|
-
// 加载对应模板
|
|
34
|
-
const templatePath = await this.getMethodTemplate(top.method);
|
|
35
|
-
return {
|
|
36
|
-
method: top.method,
|
|
37
|
-
reason: top.reasons.join(';'),
|
|
38
|
-
template: templatePath,
|
|
39
|
-
tips: this.getMethodTips(top.method)
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* 引导式问答收集信息
|
|
44
|
-
* 返回需要询问用户的问题
|
|
45
|
-
*/
|
|
46
|
-
getGuidingQuestions() {
|
|
47
|
-
return [
|
|
48
|
-
"这是一个什么类型的故事?(奇幻/科幻/爱情/悬疑/现实/其他)",
|
|
49
|
-
"预计写多少字?(短篇3万字以内/中篇10万字左右/长篇20万字以上)",
|
|
50
|
-
"目标读者是谁?(儿童/青少年/成人/大众)",
|
|
51
|
-
"你希望故事的节奏如何?(紧凑刺激/平稳推进/缓慢深入)",
|
|
52
|
-
"你更注重什么?(精彩的情节/丰富的人物/深刻的主题)"
|
|
53
|
-
];
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* 解析上下文为特征参数
|
|
57
|
-
*/
|
|
58
|
-
parseContext(context) {
|
|
59
|
-
// 智能解析长度
|
|
60
|
-
let length = 100000; // 默认10万字
|
|
61
|
-
if (context.estimatedLength) {
|
|
62
|
-
if (context.estimatedLength.includes('短'))
|
|
63
|
-
length = 30000;
|
|
64
|
-
else if (context.estimatedLength.includes('长'))
|
|
65
|
-
length = 200000;
|
|
66
|
-
else if (context.estimatedLength.includes('超长'))
|
|
67
|
-
length = 500000;
|
|
68
|
-
// 提取数字
|
|
69
|
-
const match = context.estimatedLength.match(/(\d+)/);
|
|
70
|
-
if (match) {
|
|
71
|
-
const num = parseInt(match[1]);
|
|
72
|
-
if (context.estimatedLength.includes('万')) {
|
|
73
|
-
length = num * 10000;
|
|
74
|
-
}
|
|
75
|
-
else if (context.estimatedLength.includes('千')) {
|
|
76
|
-
length = num * 1000;
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
length = num;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
// 智能解析节奏
|
|
84
|
-
let pace = '中';
|
|
85
|
-
if (context.tone?.includes('紧') || context.tone?.includes('刺激'))
|
|
86
|
-
pace = '快';
|
|
87
|
-
else if (context.tone?.includes('缓') || context.tone?.includes('深'))
|
|
88
|
-
pace = '慢';
|
|
89
|
-
// 智能解析复杂度
|
|
90
|
-
let complexity = '中等';
|
|
91
|
-
if (length > 200000 || context.description?.includes('复杂'))
|
|
92
|
-
complexity = '复杂';
|
|
93
|
-
else if (length < 50000 || context.description?.includes('简单'))
|
|
94
|
-
complexity = '简单';
|
|
95
|
-
// 智能解析经验(根据描述推测)
|
|
96
|
-
let experience = '初级';
|
|
97
|
-
if (context.description?.includes('系列') || complexity === '复杂')
|
|
98
|
-
experience = '中级';
|
|
99
|
-
return {
|
|
100
|
-
genre: context.genre || '通用',
|
|
101
|
-
length,
|
|
102
|
-
audience: context.targetAudience || '大众',
|
|
103
|
-
experience,
|
|
104
|
-
focus: this.parseFocus(context),
|
|
105
|
-
pace,
|
|
106
|
-
complexity
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* 解析创作重点
|
|
111
|
-
*/
|
|
112
|
-
parseFocus(context) {
|
|
113
|
-
if (context.description?.includes('人物') || context.description?.includes('角色')) {
|
|
114
|
-
return '角色';
|
|
115
|
-
}
|
|
116
|
-
if (context.description?.includes('情节') || context.description?.includes('剧情')) {
|
|
117
|
-
return '情节';
|
|
118
|
-
}
|
|
119
|
-
if (context.themes && context.themes.length > 0) {
|
|
120
|
-
return '主题';
|
|
121
|
-
}
|
|
122
|
-
return '平衡';
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* 获取方法对应的模板路径
|
|
126
|
-
*/
|
|
127
|
-
async getMethodTemplate(method) {
|
|
128
|
-
const methodMap = {
|
|
129
|
-
'three-act': 'three-act',
|
|
130
|
-
'hero-journey': 'hero-journey',
|
|
131
|
-
'story-circle': 'story-circle',
|
|
132
|
-
'seven-point': 'seven-point',
|
|
133
|
-
'pixar-formula': 'pixar-formula'
|
|
134
|
-
};
|
|
135
|
-
const methodDir = methodMap[method] || 'three-act';
|
|
136
|
-
return `spec/presets/${methodDir}/specification.md`;
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* 获取方法使用提示
|
|
140
|
-
*/
|
|
141
|
-
getMethodTips(method) {
|
|
142
|
-
const tips = {
|
|
143
|
-
'three-act': [
|
|
144
|
-
'第一幕要快速建立冲突',
|
|
145
|
-
'第二幕可设置多个小高潮避免拖沓',
|
|
146
|
-
'第三幕要紧凑有力'
|
|
147
|
-
],
|
|
148
|
-
'hero-journey': [
|
|
149
|
-
'不必严格遵循所有12个阶段',
|
|
150
|
-
'重点关注角色的内在转变',
|
|
151
|
-
'导师角色可以多样化'
|
|
152
|
-
],
|
|
153
|
-
'story-circle': [
|
|
154
|
-
'角色的需求必须足够强烈',
|
|
155
|
-
'每个步骤都要推进内在变化',
|
|
156
|
-
'可以嵌套小循环增加深度'
|
|
157
|
-
],
|
|
158
|
-
'seven-point': [
|
|
159
|
-
'确保每个节点都推进故事',
|
|
160
|
-
'中点必须是真正的转折',
|
|
161
|
-
'收紧点很重要,不要省略'
|
|
162
|
-
],
|
|
163
|
-
'pixar-formula': [
|
|
164
|
-
'保持简洁,不要过度描写',
|
|
165
|
-
'强调因果关系的清晰连接',
|
|
166
|
-
'结局要满意但可留有思考空间'
|
|
167
|
-
]
|
|
168
|
-
};
|
|
169
|
-
return tips[method] || ['遵循方法的基本结构', '保持故事的连贯性'];
|
|
170
|
-
}
|
|
171
|
-
/**
|
|
172
|
-
* 智能转换建议
|
|
173
|
-
* 分析当前项目并建议是否需要转换
|
|
174
|
-
*/
|
|
175
|
-
async suggestConversion(currentMethod, storyProgress) {
|
|
176
|
-
// 分析进度
|
|
177
|
-
const hasContent = storyProgress.chapters && storyProgress.chapters.length > 0;
|
|
178
|
-
if (!hasContent) {
|
|
179
|
-
return {
|
|
180
|
-
needConversion: false,
|
|
181
|
-
reason: '项目刚开始,可以直接切换方法'
|
|
182
|
-
};
|
|
183
|
-
}
|
|
184
|
-
// 分析内容特征
|
|
185
|
-
const contentFeatures = this.analyzeContent(storyProgress);
|
|
186
|
-
// 获取推荐方法
|
|
187
|
-
const recommended = this.advisor.recommend(contentFeatures)[0];
|
|
188
|
-
if (recommended.method === currentMethod) {
|
|
189
|
-
return {
|
|
190
|
-
needConversion: false,
|
|
191
|
-
reason: '当前方法已经最适合'
|
|
192
|
-
};
|
|
193
|
-
}
|
|
194
|
-
// 生成转换方案
|
|
195
|
-
const conversionMap = this.converter.convert(storyProgress, recommended.method);
|
|
196
|
-
return {
|
|
197
|
-
needConversion: true,
|
|
198
|
-
targetMethod: recommended.method,
|
|
199
|
-
reason: recommended.reasons[0],
|
|
200
|
-
conversionMap,
|
|
201
|
-
impact: this.assessConversionImpact(storyProgress, conversionMap)
|
|
202
|
-
};
|
|
203
|
-
}
|
|
204
|
-
/**
|
|
205
|
-
* 分析内容特征
|
|
206
|
-
*/
|
|
207
|
-
analyzeContent(progress) {
|
|
208
|
-
// 基于实际内容分析
|
|
209
|
-
return {
|
|
210
|
-
genre: progress.genre || '通用',
|
|
211
|
-
length: progress.plannedLength || 100000,
|
|
212
|
-
audience: progress.audience || '大众',
|
|
213
|
-
experience: '中级',
|
|
214
|
-
focus: progress.focus || '平衡',
|
|
215
|
-
pace: progress.pace || '中',
|
|
216
|
-
complexity: progress.complexity || '中等'
|
|
217
|
-
};
|
|
218
|
-
}
|
|
219
|
-
/**
|
|
220
|
-
* 评估转换影响
|
|
221
|
-
*/
|
|
222
|
-
assessConversionImpact(progress, conversionMap) {
|
|
223
|
-
const chaptersWritten = progress.chapters?.filter((c) => c.written).length || 0;
|
|
224
|
-
if (chaptersWritten === 0) {
|
|
225
|
-
return '无影响,还未开始写作';
|
|
226
|
-
}
|
|
227
|
-
else if (chaptersWritten < 5) {
|
|
228
|
-
return '影响较小,只需调整少量章节';
|
|
229
|
-
}
|
|
230
|
-
else if (chaptersWritten < 20) {
|
|
231
|
-
return '影响中等,需要重新组织部分内容';
|
|
232
|
-
}
|
|
233
|
-
else {
|
|
234
|
-
return '影响较大,建议保持当前方法完成作品';
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
/**
|
|
238
|
-
* 智能混合方案生成
|
|
239
|
-
* 根据故事特点自动设计混合方案
|
|
240
|
-
*/
|
|
241
|
-
async designHybridScheme(context) {
|
|
242
|
-
const features = this.parseContext(context);
|
|
243
|
-
// 判断是否需要混合
|
|
244
|
-
if (features.complexity === '简单' || features.length < 50000) {
|
|
245
|
-
return {
|
|
246
|
-
needHybrid: false,
|
|
247
|
-
reason: '简单故事使用单一方法即可',
|
|
248
|
-
recommendation: this.advisor.recommend(features)[0].method
|
|
249
|
-
};
|
|
250
|
-
}
|
|
251
|
-
// 推荐混合方案
|
|
252
|
-
const hybrid = this.hybridManager.recommendHybrid(features.genre, features.length, features.complexity);
|
|
253
|
-
if (!hybrid) {
|
|
254
|
-
return {
|
|
255
|
-
needHybrid: false,
|
|
256
|
-
reason: '此类型故事适合单一方法',
|
|
257
|
-
recommendation: this.advisor.recommend(features)[0].method
|
|
258
|
-
};
|
|
259
|
-
}
|
|
260
|
-
// 生成详细方案
|
|
261
|
-
const structure = this.hybridManager.createHybridStructure(hybrid, {
|
|
262
|
-
...features,
|
|
263
|
-
subPlots: context.description?.includes('支线') ? ['支线1'] : [],
|
|
264
|
-
characters: context.description?.includes('群像') ? ['角色1', '角色2'] : []
|
|
265
|
-
});
|
|
266
|
-
return {
|
|
267
|
-
needHybrid: true,
|
|
268
|
-
reason: this.getHybridReason(features),
|
|
269
|
-
scheme: hybrid,
|
|
270
|
-
structure,
|
|
271
|
-
guidelines: structure.guidelines
|
|
272
|
-
};
|
|
273
|
-
}
|
|
274
|
-
/**
|
|
275
|
-
* 获取使用混合方法的理由
|
|
276
|
-
*/
|
|
277
|
-
getHybridReason(features) {
|
|
278
|
-
if (features.genre === '奇幻' && features.length > 200000) {
|
|
279
|
-
return '长篇奇幻适合用英雄之旅构建主线,故事圈追踪角色成长';
|
|
280
|
-
}
|
|
281
|
-
if (features.genre === '悬疑' && features.complexity === '复杂') {
|
|
282
|
-
return '复杂悬疑适合七点结构控制节奏,章节用三幕组织';
|
|
283
|
-
}
|
|
284
|
-
if (features.focus === '角色' && features.length > 150000) {
|
|
285
|
-
return '角色驱动的长篇适合混合方法,主线和角色线分别处理';
|
|
286
|
-
}
|
|
287
|
-
return '故事较复杂,混合方法能更好地组织结构';
|
|
288
|
-
}
|
|
289
|
-
/**
|
|
290
|
-
* 获取当前项目配置
|
|
291
|
-
*/
|
|
292
|
-
async getCurrentConfig() {
|
|
293
|
-
const configPath = path.join(process.cwd(), '.specify', 'config.json');
|
|
294
|
-
if (await fs.pathExists(configPath)) {
|
|
295
|
-
return await fs.readJson(configPath);
|
|
296
|
-
}
|
|
297
|
-
return null;
|
|
298
|
-
}
|
|
299
|
-
/**
|
|
300
|
-
* 更新项目方法配置
|
|
301
|
-
*/
|
|
302
|
-
async updateProjectMethod(method) {
|
|
303
|
-
const configPath = path.join(process.cwd(), '.specify', 'config.json');
|
|
304
|
-
if (await fs.pathExists(configPath)) {
|
|
305
|
-
const config = await fs.readJson(configPath);
|
|
306
|
-
if (typeof method === 'string') {
|
|
307
|
-
config.method = method;
|
|
308
|
-
}
|
|
309
|
-
else {
|
|
310
|
-
// 混合方法配置
|
|
311
|
-
config.method = 'hybrid';
|
|
312
|
-
config.hybridScheme = method;
|
|
313
|
-
}
|
|
314
|
-
config.updatedAt = new Date().toISOString();
|
|
315
|
-
await fs.writeJson(configPath, config, { spaces: 2 });
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
/**
|
|
319
|
-
* 获取方法的中文名称
|
|
320
|
-
*/
|
|
321
|
-
getMethodDisplayName(method) {
|
|
322
|
-
const names = {
|
|
323
|
-
'three-act': '三幕结构',
|
|
324
|
-
'hero-journey': '英雄之旅',
|
|
325
|
-
'story-circle': '故事圈',
|
|
326
|
-
'seven-point': '七点结构',
|
|
327
|
-
'pixar-formula': '皮克斯公式',
|
|
328
|
-
'hybrid': '混合方法'
|
|
329
|
-
};
|
|
330
|
-
return names[method] || method;
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
/**
|
|
334
|
-
* 导出单例实例供 AI 直接使用
|
|
335
|
-
*/
|
|
336
|
-
export const aiInterface = new AIInterface();
|
|
337
|
-
//# sourceMappingURL=ai-interface.js.map
|
package/dist/ai-interface.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ai-interface.js","sourceRoot":"","sources":["../src/ai-interface.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAwBxB;;GAEG;AACH,MAAM,OAAO,WAAW;IACd,OAAO,CAAgB;IACvB,SAAS,CAAkB;IAC3B,aAAa,CAAsB;IAE3C;QACE,IAAI,CAAC,OAAO,GAAG,IAAI,aAAa,EAAE,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,EAAE,CAAC;QACvC,IAAI,CAAC,aAAa,GAAG,IAAI,mBAAmB,EAAE,CAAC;IACjD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,oBAAoB,CAAC,OAAqB;QAC9C,WAAW;QACX,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAE5C,OAAO;QACP,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAEtB,SAAS;QACT,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAE9D,OAAO;YACL,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;YAC7B,QAAQ,EAAE,YAAY;YACtB,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;SACrC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,mBAAmB;QACjB,OAAO;YACL,iCAAiC;YACjC,oCAAoC;YACpC,uBAAuB;YACvB,6BAA6B;YAC7B,4BAA4B;SAC7B,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,OAAqB;QACxC,SAAS;QACT,IAAI,MAAM,GAAG,MAAM,CAAC,CAAC,SAAS;QAC9B,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YAC5B,IAAI,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,MAAM,GAAG,KAAK,CAAC;iBACrD,IAAI,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,MAAM,GAAG,MAAM,CAAC;iBAC3D,IAAI,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,MAAM,GAAG,MAAM,CAAC;YAEjE,OAAO;YACP,MAAM,KAAK,GAAG,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACrD,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/B,IAAI,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC1C,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC;gBACvB,CAAC;qBAAM,IAAI,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACjD,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC;gBACtB,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,GAAG,CAAC;gBACf,CAAC;YACH,CAAC;QACH,CAAC;QAED,SAAS;QACT,IAAI,IAAI,GAAG,GAAG,CAAC;QACf,IAAI,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;YAAE,IAAI,GAAG,GAAG,CAAC;aACvE,IAAI,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC;YAAE,IAAI,GAAG,GAAG,CAAC;QAEhF,UAAU;QACV,IAAI,UAAU,GAAG,IAAI,CAAC;QACtB,IAAI,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC;YAAE,UAAU,GAAG,IAAI,CAAC;aACzE,IAAI,MAAM,GAAG,KAAK,IAAI,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC;YAAE,UAAU,GAAG,IAAI,CAAC;QAElF,iBAAiB;QACjB,IAAI,UAAU,GAAG,IAAI,CAAC;QACtB,IAAI,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,UAAU,KAAK,IAAI;YAAE,UAAU,GAAG,IAAI,CAAC;QAElF,OAAO;YACL,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI;YAC5B,MAAM;YACN,QAAQ,EAAE,OAAO,CAAC,cAAc,IAAI,IAAI;YACxC,UAAU;YACV,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAC/B,IAAI;YACJ,UAAU;SACX,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,UAAU,CAAC,OAAqB;QACtC,IAAI,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/E,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/E,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAAC,MAAc;QAC5C,MAAM,SAAS,GAA2B;YACxC,WAAW,EAAE,WAAW;YACxB,cAAc,EAAE,cAAc;YAC9B,cAAc,EAAE,cAAc;YAC9B,aAAa,EAAE,aAAa;YAC5B,eAAe,EAAE,eAAe;SACjC,CAAC;QAEF,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC;QACnD,OAAO,gBAAgB,SAAS,mBAAmB,CAAC;IACtD,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,MAAc;QAClC,MAAM,IAAI,GAA6B;YACrC,WAAW,EAAE;gBACX,YAAY;gBACZ,iBAAiB;gBACjB,UAAU;aACX;YACD,cAAc,EAAE;gBACd,eAAe;gBACf,aAAa;gBACb,WAAW;aACZ;YACD,cAAc,EAAE;gBACd,aAAa;gBACb,cAAc;gBACd,aAAa;aACd;YACD,aAAa,EAAE;gBACb,aAAa;gBACb,YAAY;gBACZ,aAAa;aACd;YACD,eAAe,EAAE;gBACf,aAAa;gBACb,aAAa;gBACb,eAAe;aAChB;SACF,CAAC;QAEF,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACnD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,iBAAiB,CAAC,aAAqB,EAAE,aAAkB;QAC/D,OAAO;QACP,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QAE/E,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO;gBACL,cAAc,EAAE,KAAK;gBACrB,MAAM,EAAE,gBAAgB;aACzB,CAAC;QACJ,CAAC;QAED,SAAS;QACT,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QAE3D,SAAS;QACT,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QAE/D,IAAI,WAAW,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;YACzC,OAAO;gBACL,cAAc,EAAE,KAAK;gBACrB,MAAM,EAAE,WAAW;aACpB,CAAC;QACJ,CAAC;QAED,SAAS;QACT,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QAEhF,OAAO;YACL,cAAc,EAAE,IAAI;YACpB,YAAY,EAAE,WAAW,CAAC,MAAM;YAChC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;YAC9B,aAAa;YACb,MAAM,EAAE,IAAI,CAAC,sBAAsB,CAAC,aAAa,EAAE,aAAa,CAAC;SAClE,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,QAAa;QAClC,WAAW;QACX,OAAO;YACL,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,IAAI;YAC7B,MAAM,EAAE,QAAQ,CAAC,aAAa,IAAI,MAAM;YACxC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,IAAI;YACnC,UAAU,EAAE,IAAI;YAChB,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,IAAI;YAC7B,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,GAAG;YAC1B,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,IAAI;SACxC,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,sBAAsB,CAAC,QAAa,EAAE,aAAkB;QAC9D,MAAM,eAAe,GAAG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;QAErF,IAAI,eAAe,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,YAAY,CAAC;QACtB,CAAC;aAAM,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,eAAe,CAAC;QACzB,CAAC;aAAM,IAAI,eAAe,GAAG,EAAE,EAAE,CAAC;YAChC,OAAO,iBAAiB,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,OAAO,mBAAmB,CAAC;QAC7B,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,kBAAkB,CAAC,OAAqB;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAE5C,WAAW;QACX,IAAI,QAAQ,CAAC,UAAU,KAAK,IAAI,IAAI,QAAQ,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;YAC5D,OAAO;gBACL,UAAU,EAAE,KAAK;gBACjB,MAAM,EAAE,cAAc;gBACtB,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;aAC3D,CAAC;QACJ,CAAC;QAED,SAAS;QACT,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAC/C,QAAQ,CAAC,KAAK,EACd,QAAQ,CAAC,MAAM,EACf,QAAQ,CAAC,UAAU,CACpB,CAAC;QAEF,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;gBACL,UAAU,EAAE,KAAK;gBACjB,MAAM,EAAE,aAAa;gBACrB,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;aAC3D,CAAC;QACJ,CAAC;QAED,SAAS;QACT,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,MAAM,EAAE;YACjE,GAAG,QAAQ;YACX,QAAQ,EAAE,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;YAC5D,UAAU,EAAE,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;SACtE,CAAC,CAAC;QAEH,OAAO;YACL,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;YACtC,MAAM,EAAE,MAAM;YACd,SAAS;YACT,UAAU,EAAE,SAAS,CAAC,UAAU;SACjC,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,QAAa;QACnC,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,IAAI,QAAQ,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;YACxD,OAAO,2BAA2B,CAAC;QACrC,CAAC;QACD,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,IAAI,QAAQ,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAC5D,OAAO,wBAAwB,CAAC;QAClC,CAAC;QACD,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,IAAI,QAAQ,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;YACxD,OAAO,0BAA0B,CAAC;QACpC,CAAC;QACD,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB;QACpB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;QACvE,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB,CAAC,MAAoB;QAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;QACvE,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAE7C,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,SAAS;gBACT,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;gBACzB,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC;YAC/B,CAAC;YAED,MAAM,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC5C,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,MAAc;QACjC,MAAM,KAAK,GAA2B;YACpC,WAAW,EAAE,MAAM;YACnB,cAAc,EAAE,MAAM;YACtB,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,MAAM;YACrB,eAAe,EAAE,OAAO;YACxB,QAAQ,EAAE,MAAM;SACjB,CAAC;QACF,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;IACjC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC"}
|
package/dist/cli.d.ts
DELETED
package/dist/cli.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|