markdown-ai-rewriter 0.4.1 → 0.5.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/dist/cli.js +135 -0
- package/dist/cli.js.map +1 -1
- package/dist/core/rewriter.d.ts +9 -0
- package/dist/core/rewriter.d.ts.map +1 -1
- package/dist/core/rewriter.js +116 -11
- package/dist/core/rewriter.js.map +1 -1
- package/dist/core/text-providers/anthropic.d.ts +12 -0
- package/dist/core/text-providers/anthropic.d.ts.map +1 -0
- package/dist/core/text-providers/anthropic.js +78 -0
- package/dist/core/text-providers/anthropic.js.map +1 -0
- package/dist/core/text-providers/azure-openai.d.ts +15 -0
- package/dist/core/text-providers/azure-openai.d.ts.map +1 -0
- package/dist/core/text-providers/azure-openai.js +87 -0
- package/dist/core/text-providers/azure-openai.js.map +1 -0
- package/dist/core/text-providers/base.d.ts +12 -0
- package/dist/core/text-providers/base.d.ts.map +1 -0
- package/dist/core/text-providers/base.js +66 -0
- package/dist/core/text-providers/base.js.map +1 -0
- package/dist/core/text-providers/deepseek.d.ts +6 -0
- package/dist/core/text-providers/deepseek.d.ts.map +1 -0
- package/dist/core/text-providers/deepseek.js +12 -0
- package/dist/core/text-providers/deepseek.js.map +1 -0
- package/dist/core/text-providers/doubao.d.ts +6 -0
- package/dist/core/text-providers/doubao.d.ts.map +1 -0
- package/dist/core/text-providers/doubao.js +12 -0
- package/dist/core/text-providers/doubao.js.map +1 -0
- package/dist/core/text-providers/gemini.d.ts +6 -0
- package/dist/core/text-providers/gemini.d.ts.map +1 -0
- package/dist/core/text-providers/gemini.js +12 -0
- package/dist/core/text-providers/gemini.js.map +1 -0
- package/dist/core/text-providers/glm.d.ts +6 -0
- package/dist/core/text-providers/glm.d.ts.map +1 -0
- package/dist/core/text-providers/glm.js +12 -0
- package/dist/core/text-providers/glm.js.map +1 -0
- package/dist/core/text-providers/minimax.d.ts +20 -0
- package/dist/core/text-providers/minimax.d.ts.map +1 -0
- package/dist/core/text-providers/minimax.js +88 -0
- package/dist/core/text-providers/minimax.js.map +1 -0
- package/dist/core/text-providers/openai-compatible.d.ts +14 -0
- package/dist/core/text-providers/openai-compatible.d.ts.map +1 -0
- package/dist/core/text-providers/openai-compatible.js +82 -0
- package/dist/core/text-providers/openai-compatible.js.map +1 -0
- package/dist/core/text-providers/openai.d.ts +12 -0
- package/dist/core/text-providers/openai.d.ts.map +1 -0
- package/dist/core/text-providers/openai.js +77 -0
- package/dist/core/text-providers/openai.js.map +1 -0
- package/dist/core/text-providers/openrouter.d.ts +6 -0
- package/dist/core/text-providers/openrouter.d.ts.map +1 -0
- package/dist/core/text-providers/openrouter.js +12 -0
- package/dist/core/text-providers/openrouter.js.map +1 -0
- package/dist/core/text-providers/qwen.d.ts +6 -0
- package/dist/core/text-providers/qwen.d.ts.map +1 -0
- package/dist/core/text-providers/qwen.js +12 -0
- package/dist/core/text-providers/qwen.js.map +1 -0
- package/dist/core/text-providers/wenxin.d.ts +6 -0
- package/dist/core/text-providers/wenxin.d.ts.map +1 -0
- package/dist/core/text-providers/wenxin.js +12 -0
- package/dist/core/text-providers/wenxin.js.map +1 -0
- package/dist/core/video-generator.d.ts +65 -0
- package/dist/core/video-generator.d.ts.map +1 -0
- package/dist/core/video-generator.js +140 -0
- package/dist/core/video-generator.js.map +1 -0
- package/dist/core/video-providers/doubao.d.ts +52 -0
- package/dist/core/video-providers/doubao.d.ts.map +1 -0
- package/dist/core/video-providers/doubao.js +148 -0
- package/dist/core/video-providers/doubao.js.map +1 -0
- package/dist/core/video-providers/index.d.ts +6 -0
- package/dist/core/video-providers/index.d.ts.map +1 -0
- package/dist/core/video-providers/index.js +16 -0
- package/dist/core/video-providers/index.js.map +1 -0
- package/dist/core/video-providers/kling.d.ts +27 -0
- package/dist/core/video-providers/kling.d.ts.map +1 -0
- package/dist/core/video-providers/kling.js +113 -0
- package/dist/core/video-providers/kling.js.map +1 -0
- package/dist/core/video-providers/minimax.d.ts +30 -0
- package/dist/core/video-providers/minimax.d.ts.map +1 -0
- package/dist/core/video-providers/minimax.js +133 -0
- package/dist/core/video-providers/minimax.js.map +1 -0
- package/dist/core/video-providers/runway.d.ts +22 -0
- package/dist/core/video-providers/runway.d.ts.map +1 -0
- package/dist/core/video-providers/runway.js +121 -0
- package/dist/core/video-providers/runway.js.map +1 -0
- package/dist/core/video-providers/types.d.ts +41 -0
- package/dist/core/video-providers/types.d.ts.map +1 -0
- package/dist/core/video-providers/types.js +3 -0
- package/dist/core/video-providers/types.js.map +1 -0
- package/dist/index.d.ts +21 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -14
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +36 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -5,6 +5,7 @@ const commander_1 = require("commander");
|
|
|
5
5
|
const fs_1 = require("fs");
|
|
6
6
|
const path_1 = require("path");
|
|
7
7
|
const rewriter_1 = require("./core/rewriter");
|
|
8
|
+
const video_generator_1 = require("./core/video-generator");
|
|
8
9
|
const PROVIDER_ENV_KEY_MAP = {
|
|
9
10
|
openai: 'OPENAI_API_KEY',
|
|
10
11
|
anthropic: 'ANTHROPIC_API_KEY',
|
|
@@ -48,6 +49,11 @@ program
|
|
|
48
49
|
.option('--image-model <model>', 'Image model name (provider-specific default used when omitted)')
|
|
49
50
|
.option('--image-prompt <prompt>', 'Custom prompt for image generation')
|
|
50
51
|
.option('--image-output-dir <dir>', 'Output directory for generated images')
|
|
52
|
+
.option('--generate-video', 'Generate a video summary of the article')
|
|
53
|
+
.option('--video-provider <provider>', 'Video provider: minimax, doubao, kling, runway (default: minimax)', 'minimax')
|
|
54
|
+
.option('--video-duration <seconds>', 'Video duration in seconds', parseInt, 6)
|
|
55
|
+
.option('--video-resolution <res>', 'Video resolution: 720P, 768P, 1080P', '1080P')
|
|
56
|
+
.option('--video-output-dir <dir>', 'Output directory for generated video')
|
|
51
57
|
.action(async (options) => {
|
|
52
58
|
try {
|
|
53
59
|
if (!['section', 'full'].includes(options.mode)) {
|
|
@@ -100,6 +106,26 @@ program
|
|
|
100
106
|
verbose: options.verbose,
|
|
101
107
|
};
|
|
102
108
|
}
|
|
109
|
+
// 构建视频处理配置
|
|
110
|
+
let videoProcessing;
|
|
111
|
+
if (options.generateVideo) {
|
|
112
|
+
const videoProvider = options.videoProvider;
|
|
113
|
+
const videoEnvKey = VIDEO_PROVIDER_ENV_MAP[videoProvider];
|
|
114
|
+
const videoApiKey = process.env[videoEnvKey];
|
|
115
|
+
if (!videoApiKey) {
|
|
116
|
+
console.error('❌ 错误:视频生成需要 API key');
|
|
117
|
+
console.error(` 设置环境变量: ${videoEnvKey}`);
|
|
118
|
+
process.exit(1);
|
|
119
|
+
}
|
|
120
|
+
videoProcessing = {
|
|
121
|
+
provider: videoProvider,
|
|
122
|
+
apiKey: videoApiKey,
|
|
123
|
+
duration: options.videoDuration,
|
|
124
|
+
resolution: options.videoResolution,
|
|
125
|
+
outputDir: options.videoOutputDir || (0, path_1.join)((0, path_1.dirname)((0, path_1.resolve)(options.input)), 'generated-videos'),
|
|
126
|
+
verbose: options.verbose,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
103
129
|
const config = {
|
|
104
130
|
provider,
|
|
105
131
|
apiKey,
|
|
@@ -118,6 +144,7 @@ program
|
|
|
118
144
|
preserveLength: options.preserveLength,
|
|
119
145
|
},
|
|
120
146
|
imageProcessing,
|
|
147
|
+
videoProcessing,
|
|
121
148
|
};
|
|
122
149
|
const modeLabel = options.mode === 'section' ? '章节级' : '全文';
|
|
123
150
|
console.log(`🚀 开始${modeLabel}改写 (${provider})...`);
|
|
@@ -132,6 +159,12 @@ program
|
|
|
132
159
|
if (result.imageProcessing) {
|
|
133
160
|
console.log(` - 图片处理: ${result.imageProcessing.success}/${result.imageProcessing.processed} 成功`);
|
|
134
161
|
}
|
|
162
|
+
if (result.videoProcessing) {
|
|
163
|
+
console.log(` - 视频生成: ${result.videoProcessing.success ? '成功' : '失败'}`);
|
|
164
|
+
if (result.videoProcessing.videoPath) {
|
|
165
|
+
console.log(` - 视频文件: ${result.videoProcessing.videoPath}`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
135
168
|
console.log(` - 输出文件: ${options.output}`);
|
|
136
169
|
}
|
|
137
170
|
catch (error) {
|
|
@@ -139,5 +172,107 @@ program
|
|
|
139
172
|
process.exit(1);
|
|
140
173
|
}
|
|
141
174
|
});
|
|
175
|
+
// 视频 Provider 环境变量映射
|
|
176
|
+
const VIDEO_PROVIDER_ENV_MAP = {
|
|
177
|
+
minimax: 'MINIMAX_API_KEY',
|
|
178
|
+
doubao: 'DOUBAO_API_KEY',
|
|
179
|
+
kling: 'KLING_API_KEY',
|
|
180
|
+
runway: 'RUNWAY_API_KEY',
|
|
181
|
+
};
|
|
182
|
+
// 视频生成命令
|
|
183
|
+
program
|
|
184
|
+
.command('video')
|
|
185
|
+
.description('Generate a video from Markdown article')
|
|
186
|
+
.requiredOption('-i, --input <file>', 'Input Markdown file')
|
|
187
|
+
.option('-o, --output <file>', 'Output video file path (default: input filename with .mp4)')
|
|
188
|
+
.option('--video-provider <provider>', 'Video provider: minimax, doubao, kling, runway (default: minimax)', 'minimax')
|
|
189
|
+
.option('--duration <seconds>', 'Video duration in seconds', parseInt, 6)
|
|
190
|
+
.option('--resolution <res>', 'Video resolution: 720P, 768P, 1080P', '1080P')
|
|
191
|
+
.option('--aspect-ratio <ratio>', 'Aspect ratio: 16:9, 9:16, 1:1', '16:9')
|
|
192
|
+
.option('--model <model>', 'Video model (provider-specific)')
|
|
193
|
+
.option('--no-optimize', 'Disable prompt optimization')
|
|
194
|
+
.option('--summary-provider <provider>', 'AI provider for summary: openai, anthropic, minimax, gemini, deepseek, qwen, glm, doubao')
|
|
195
|
+
.option('--summary-model <model>', 'Model for summary generation')
|
|
196
|
+
.option('-v, --verbose', 'Verbose output')
|
|
197
|
+
.action(async (options) => {
|
|
198
|
+
try {
|
|
199
|
+
const videoProvider = options.videoProvider;
|
|
200
|
+
const videoEnvKey = VIDEO_PROVIDER_ENV_MAP[videoProvider];
|
|
201
|
+
const videoApiKey = process.env[videoEnvKey];
|
|
202
|
+
if (!videoApiKey) {
|
|
203
|
+
console.error(`❌ 错误:需要 ${videoEnvKey} 环境变量`);
|
|
204
|
+
process.exit(1);
|
|
205
|
+
}
|
|
206
|
+
const markdown = (0, fs_1.readFileSync)(options.input, 'utf-8');
|
|
207
|
+
console.log(`🎬 开始生成视频 (${videoProvider})...\n`);
|
|
208
|
+
const videoGenerator = new video_generator_1.VideoGenerator({
|
|
209
|
+
provider: videoProvider,
|
|
210
|
+
apiKey: videoApiKey,
|
|
211
|
+
model: options.model,
|
|
212
|
+
duration: options.duration,
|
|
213
|
+
resolution: options.resolution,
|
|
214
|
+
aspectRatio: options.aspectRatio,
|
|
215
|
+
promptOptimizer: options.optimize !== false,
|
|
216
|
+
verbose: options.verbose,
|
|
217
|
+
});
|
|
218
|
+
let summaryProvider;
|
|
219
|
+
// 如果指定了 summary provider,使用 AI 生成视频脚本
|
|
220
|
+
if (options.summaryProvider) {
|
|
221
|
+
const providerKey = PROVIDER_ENV_KEY_MAP[options.summaryProvider];
|
|
222
|
+
const providerApiKey = process.env[providerKey];
|
|
223
|
+
if (!providerApiKey) {
|
|
224
|
+
console.error(`❌ 错误:需要 ${providerKey} 环境变量`);
|
|
225
|
+
process.exit(1);
|
|
226
|
+
}
|
|
227
|
+
const rewriter = new rewriter_1.MarkdownRewriter({
|
|
228
|
+
provider: options.summaryProvider,
|
|
229
|
+
apiKey: providerApiKey,
|
|
230
|
+
model: options.summaryModel,
|
|
231
|
+
verbose: options.verbose,
|
|
232
|
+
});
|
|
233
|
+
// 创建一个简单的 rewrite 包装
|
|
234
|
+
summaryProvider = {
|
|
235
|
+
rewrite: async (text, opts) => {
|
|
236
|
+
const result = await rewriter.rewrite(text);
|
|
237
|
+
return result.rewritten;
|
|
238
|
+
},
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
const result = await videoGenerator.generateFromMarkdown(markdown, summaryProvider);
|
|
242
|
+
if (result.success && result.videoUrl) {
|
|
243
|
+
console.log('\n✅ 视频生成成功!');
|
|
244
|
+
console.log(` 任务 ID: ${result.taskId}`);
|
|
245
|
+
console.log(` 文件 ID: ${result.fileId}`);
|
|
246
|
+
console.log(` 视频 URL: ${result.videoUrl}`);
|
|
247
|
+
// 下载视频到本地
|
|
248
|
+
if (options.output || true) {
|
|
249
|
+
const outputPath = options.output || options.input.replace(/\.md$/i, '.mp4');
|
|
250
|
+
console.log(`\n📥 下载视频到: ${outputPath}`);
|
|
251
|
+
try {
|
|
252
|
+
const videoResponse = await fetch(result.videoUrl);
|
|
253
|
+
if (videoResponse.ok) {
|
|
254
|
+
const videoBuffer = Buffer.from(await videoResponse.arrayBuffer());
|
|
255
|
+
(0, fs_1.writeFileSync)(outputPath, videoBuffer);
|
|
256
|
+
console.log(`✅ 视频已保存: ${outputPath}`);
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
console.log(`⚠️ 下载失败,请手动下载: ${result.videoUrl}`);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
catch (downloadError) {
|
|
263
|
+
console.log(`⚠️ 下载失败,请手动下载: ${result.videoUrl}`);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
console.error(`❌ 视频生成失败: ${result.error}`);
|
|
269
|
+
process.exit(1);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
catch (error) {
|
|
273
|
+
console.error(`❌ 错误:${error.message}`);
|
|
274
|
+
process.exit(1);
|
|
275
|
+
}
|
|
276
|
+
});
|
|
142
277
|
program.parse();
|
|
143
278
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,2BAAiD;AACjD,+BAA8C;AAC9C,8CAAmD;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/core/rewriter.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export declare class MarkdownRewriter {
|
|
|
3
3
|
private sectionRewriter;
|
|
4
4
|
private fullRewriter;
|
|
5
5
|
private imageProcessor?;
|
|
6
|
+
private videoGenerator?;
|
|
6
7
|
private provider;
|
|
7
8
|
private config;
|
|
8
9
|
private quotaManager?;
|
|
@@ -10,5 +11,13 @@ export declare class MarkdownRewriter {
|
|
|
10
11
|
constructor(config: RewriterConfig);
|
|
11
12
|
private resolveApiKey;
|
|
12
13
|
rewrite(markdown: string, basePath?: string): Promise<RewriteResult>;
|
|
14
|
+
/**
|
|
15
|
+
* 将视频插入到 Markdown 正文上方(头部下方)
|
|
16
|
+
*
|
|
17
|
+
* 规则:
|
|
18
|
+
* - 如果有一级标题(# xxx),插入到标题下方
|
|
19
|
+
* - 否则插入到文档开头
|
|
20
|
+
*/
|
|
21
|
+
private insertVideoToMarkdown;
|
|
13
22
|
}
|
|
14
23
|
//# sourceMappingURL=rewriter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rewriter.d.ts","sourceRoot":"","sources":["../../src/core/rewriter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rewriter.d.ts","sourceRoot":"","sources":["../../src/core/rewriter.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAkC,MAAM,UAAU,CAAC;AAMzF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,YAAY,CAAC,CAAe;IACpC,OAAO,CAAC,cAAc,CAAkB;gBAE5B,MAAM,EAAE,cAAc;IA4DlC,OAAO,CAAC,aAAa;IA+Cf,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA0H1E;;;;;;OAMG;IACH,OAAO,CAAC,qBAAqB;CAuB9B"}
|
package/dist/core/rewriter.js
CHANGED
|
@@ -1,21 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MarkdownRewriter = void 0;
|
|
4
|
-
const openai_1 = require("./providers/openai");
|
|
5
|
-
const anthropic_1 = require("./providers/anthropic");
|
|
6
|
-
const minimax_1 = require("./providers/minimax");
|
|
7
|
-
const azure_openai_1 = require("./providers/azure-openai");
|
|
8
|
-
const gemini_1 = require("./providers/gemini");
|
|
9
|
-
const deepseek_1 = require("./providers/deepseek");
|
|
10
|
-
const openrouter_1 = require("./providers/openrouter");
|
|
11
|
-
const qwen_1 = require("./providers/qwen");
|
|
12
|
-
const glm_1 = require("./providers/glm");
|
|
13
|
-
const doubao_1 = require("./providers/doubao");
|
|
14
|
-
const wenxin_1 = require("./providers/wenxin");
|
|
4
|
+
const openai_1 = require("./text-providers/openai");
|
|
5
|
+
const anthropic_1 = require("./text-providers/anthropic");
|
|
6
|
+
const minimax_1 = require("./text-providers/minimax");
|
|
7
|
+
const azure_openai_1 = require("./text-providers/azure-openai");
|
|
8
|
+
const gemini_1 = require("./text-providers/gemini");
|
|
9
|
+
const deepseek_1 = require("./text-providers/deepseek");
|
|
10
|
+
const openrouter_1 = require("./text-providers/openrouter");
|
|
11
|
+
const qwen_1 = require("./text-providers/qwen");
|
|
12
|
+
const glm_1 = require("./text-providers/glm");
|
|
13
|
+
const doubao_1 = require("./text-providers/doubao");
|
|
14
|
+
const wenxin_1 = require("./text-providers/wenxin");
|
|
15
15
|
const quota_manager_1 = require("./quota-manager");
|
|
16
16
|
const section_rewriter_1 = require("./section-rewriter");
|
|
17
17
|
const full_rewriter_1 = require("./full-rewriter");
|
|
18
18
|
const image_processor_1 = require("./image-processor");
|
|
19
|
+
const video_generator_1 = require("./video-generator");
|
|
20
|
+
const fs_1 = require("fs");
|
|
21
|
+
const path_1 = require("path");
|
|
19
22
|
const SHARED_OPENAI_KEY = process.env.SHARED_OPENAI_KEY || '';
|
|
20
23
|
class MarkdownRewriter {
|
|
21
24
|
constructor(config) {
|
|
@@ -71,6 +74,19 @@ class MarkdownRewriter {
|
|
|
71
74
|
verbose: config.verbose,
|
|
72
75
|
});
|
|
73
76
|
}
|
|
77
|
+
// 初始化视频生成器(如果配置了)
|
|
78
|
+
if (config.videoProcessing && config.videoProcessing.apiKey) {
|
|
79
|
+
this.videoGenerator = new video_generator_1.VideoGenerator({
|
|
80
|
+
provider: config.videoProcessing.provider,
|
|
81
|
+
apiKey: config.videoProcessing.apiKey,
|
|
82
|
+
model: config.videoProcessing.model,
|
|
83
|
+
duration: config.videoProcessing.duration,
|
|
84
|
+
resolution: config.videoProcessing.resolution,
|
|
85
|
+
aspectRatio: config.videoProcessing.aspectRatio,
|
|
86
|
+
promptOptimizer: config.videoProcessing.promptOptimizer,
|
|
87
|
+
verbose: config.verbose,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
74
90
|
}
|
|
75
91
|
resolveApiKey(config) {
|
|
76
92
|
if (config.apiKey) {
|
|
@@ -150,8 +166,97 @@ class MarkdownRewriter {
|
|
|
150
166
|
console.log(` 处理完成: ${imageResult.success}/${imageResult.processed} 成功`);
|
|
151
167
|
}
|
|
152
168
|
}
|
|
169
|
+
// 生成视频(如果配置了视频生成器)
|
|
170
|
+
if (this.videoGenerator) {
|
|
171
|
+
if (this.config.verbose) {
|
|
172
|
+
console.log('\n🎬 开始生成视频...');
|
|
173
|
+
}
|
|
174
|
+
// 使用当前 provider 生成视频脚本
|
|
175
|
+
const summaryProvider = {
|
|
176
|
+
rewrite: async (text, opts) => {
|
|
177
|
+
return this.provider.rewrite(text, opts);
|
|
178
|
+
},
|
|
179
|
+
};
|
|
180
|
+
const videoResult = await this.videoGenerator.generateFromMarkdown(result.rewritten, summaryProvider);
|
|
181
|
+
if (videoResult.success && videoResult.videoUrl) {
|
|
182
|
+
// 下载视频到本地
|
|
183
|
+
const outputDir = this.config.videoProcessing?.outputDir ||
|
|
184
|
+
(basePath ? (0, path_1.dirname)(basePath) : '.');
|
|
185
|
+
const videoFileName = `video-${Date.now()}.mp4`;
|
|
186
|
+
const videoPath = (0, path_1.join)(outputDir, videoFileName);
|
|
187
|
+
try {
|
|
188
|
+
const videoResponse = await fetch(videoResult.videoUrl);
|
|
189
|
+
if (videoResponse.ok) {
|
|
190
|
+
const videoBuffer = Buffer.from(await videoResponse.arrayBuffer());
|
|
191
|
+
(0, fs_1.writeFileSync)(videoPath, videoBuffer);
|
|
192
|
+
if (this.config.verbose) {
|
|
193
|
+
console.log(` 视频已保存: ${videoPath}`);
|
|
194
|
+
}
|
|
195
|
+
// 将视频插入到正文上方(头部下方)
|
|
196
|
+
result.rewritten = this.insertVideoToMarkdown(result.rewritten, videoPath);
|
|
197
|
+
result.videoProcessing = {
|
|
198
|
+
success: true,
|
|
199
|
+
videoPath,
|
|
200
|
+
videoUrl: videoResult.videoUrl,
|
|
201
|
+
taskId: videoResult.taskId,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
result.videoProcessing = {
|
|
206
|
+
success: false,
|
|
207
|
+
videoUrl: videoResult.videoUrl,
|
|
208
|
+
error: '视频下载失败',
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
catch (downloadError) {
|
|
213
|
+
result.videoProcessing = {
|
|
214
|
+
success: false,
|
|
215
|
+
videoUrl: videoResult.videoUrl,
|
|
216
|
+
error: downloadError.message,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
result.videoProcessing = {
|
|
222
|
+
success: false,
|
|
223
|
+
error: videoResult.error,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
if (this.config.verbose) {
|
|
227
|
+
console.log(` 视频生成: ${result.videoProcessing?.success ? '成功' : '失败'}`);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
153
230
|
return result;
|
|
154
231
|
}
|
|
232
|
+
/**
|
|
233
|
+
* 将视频插入到 Markdown 正文上方(头部下方)
|
|
234
|
+
*
|
|
235
|
+
* 规则:
|
|
236
|
+
* - 如果有一级标题(# xxx),插入到标题下方
|
|
237
|
+
* - 否则插入到文档开头
|
|
238
|
+
*/
|
|
239
|
+
insertVideoToMarkdown(markdown, videoPath) {
|
|
240
|
+
const lines = markdown.split('\n');
|
|
241
|
+
const videoMarkdown = `\n<video src="${videoPath}" controls width="100%"></video>\n`;
|
|
242
|
+
// 查找第一个一级标题
|
|
243
|
+
let insertIndex = 0;
|
|
244
|
+
for (let i = 0; i < lines.length; i++) {
|
|
245
|
+
const line = lines[i].trim();
|
|
246
|
+
// 匹配一级标题 # xxx
|
|
247
|
+
if (/^#\s+/.test(line)) {
|
|
248
|
+
insertIndex = i + 1;
|
|
249
|
+
// 跳过标题后的空行
|
|
250
|
+
while (insertIndex < lines.length && lines[insertIndex].trim() === '') {
|
|
251
|
+
insertIndex++;
|
|
252
|
+
}
|
|
253
|
+
break;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
// 插入视频
|
|
257
|
+
lines.splice(insertIndex, 0, videoMarkdown);
|
|
258
|
+
return lines.join('\n');
|
|
259
|
+
}
|
|
155
260
|
}
|
|
156
261
|
exports.MarkdownRewriter = MarkdownRewriter;
|
|
157
262
|
//# sourceMappingURL=rewriter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rewriter.js","sourceRoot":"","sources":["../../src/core/rewriter.ts"],"names":[],"mappings":";;;AAAA
|
|
1
|
+
{"version":3,"file":"rewriter.js","sourceRoot":"","sources":["../../src/core/rewriter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BaseProvider } from './base';
|
|
2
|
+
import { RewriteOptions } from '../../types';
|
|
3
|
+
export declare class AnthropicProvider extends BaseProvider {
|
|
4
|
+
name: string;
|
|
5
|
+
private apiKey;
|
|
6
|
+
private model;
|
|
7
|
+
private client;
|
|
8
|
+
constructor(apiKey: string, model?: string);
|
|
9
|
+
private getClient;
|
|
10
|
+
rewrite(text: string, options: RewriteOptions): Promise<string>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/core/text-providers/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAI7C,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,IAAI,SAAe;IACnB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAgC;gBAElC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAqC;YAM1D,SAAS;IAQjB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;CAwBtE"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.AnthropicProvider = void 0;
|
|
37
|
+
const base_1 = require("./base");
|
|
38
|
+
class AnthropicProvider extends base_1.BaseProvider {
|
|
39
|
+
constructor(apiKey, model = 'claude-3-5-sonnet-20241022') {
|
|
40
|
+
super();
|
|
41
|
+
this.name = 'anthropic';
|
|
42
|
+
this.client = null;
|
|
43
|
+
this.apiKey = apiKey;
|
|
44
|
+
this.model = model;
|
|
45
|
+
}
|
|
46
|
+
async getClient() {
|
|
47
|
+
if (!this.client) {
|
|
48
|
+
const Anthropic = await Promise.resolve().then(() => __importStar(require('@anthropic-ai/sdk'))).then(m => m.default || m);
|
|
49
|
+
this.client = new Anthropic({ apiKey: this.apiKey });
|
|
50
|
+
}
|
|
51
|
+
return this.client;
|
|
52
|
+
}
|
|
53
|
+
async rewrite(text, options) {
|
|
54
|
+
try {
|
|
55
|
+
const client = await this.getClient();
|
|
56
|
+
const originalLength = text.length;
|
|
57
|
+
const response = await client.messages.create({
|
|
58
|
+
model: this.model,
|
|
59
|
+
max_tokens: options.maxTokens ?? 2000,
|
|
60
|
+
temperature: options.temperature ?? 0.7,
|
|
61
|
+
system: this.getSystemPrompt(options, originalLength),
|
|
62
|
+
messages: [
|
|
63
|
+
{ role: 'user', content: this.getUserPrompt(text, options.preserveLength) },
|
|
64
|
+
],
|
|
65
|
+
});
|
|
66
|
+
const content = response.content[0];
|
|
67
|
+
return this.cleanupThinkingContent(content.type === 'text' ? content.text.trim() : text);
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
if (error.code === 'MODULE_NOT_FOUND') {
|
|
71
|
+
throw new Error('Anthropic SDK not installed. Run: npm install @anthropic-ai/sdk');
|
|
72
|
+
}
|
|
73
|
+
throw new Error(`Anthropic API error: ${error.message}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.AnthropicProvider = AnthropicProvider;
|
|
78
|
+
//# sourceMappingURL=anthropic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/core/text-providers/anthropic.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAAsC;AAKtC,MAAa,iBAAkB,SAAQ,mBAAY;IAMjD,YAAY,MAAc,EAAE,QAAgB,4BAA4B;QACtE,KAAK,EAAE,CAAC;QANV,SAAI,GAAG,WAAW,CAAC;QAGX,WAAM,GAA2B,IAAI,CAAC;QAI5C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,kDAAO,mBAAmB,IAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;YAC9E,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAoB,CAAC;QAC1E,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,OAAuB;QACjD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;YAEnC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC5C,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,UAAU,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;gBACrC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,GAAG;gBACvC,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,cAAc,CAAC;gBACrD,QAAQ,EAAE;oBACR,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,EAAE;iBAC5E;aACF,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACpC,OAAO,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBACtC,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;YACrF,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,wBAAwB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;CACF;AA5CD,8CA4CC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { BaseProvider } from './base';
|
|
2
|
+
import { RewriteOptions } from '../../types';
|
|
3
|
+
export declare const DEFAULT_AZURE_OPENAI_API_VERSION = "2024-10-21";
|
|
4
|
+
export declare class AzureOpenAIProvider extends BaseProvider {
|
|
5
|
+
name: string;
|
|
6
|
+
private apiKey;
|
|
7
|
+
private deployment;
|
|
8
|
+
private endpoint;
|
|
9
|
+
private apiVersion;
|
|
10
|
+
private client;
|
|
11
|
+
constructor(apiKey: string, deployment?: string, endpoint?: string, apiVersion?: string);
|
|
12
|
+
private getClient;
|
|
13
|
+
rewrite(text: string, options: RewriteOptions): Promise<string>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=azure-openai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"azure-openai.d.ts","sourceRoot":"","sources":["../../../src/core/text-providers/azure-openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAI7C,eAAO,MAAM,gCAAgC,eAAe,CAAC;AAE7D,qBAAa,mBAAoB,SAAQ,YAAY;IACnD,IAAI,SAAkB;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAkC;gBAG9C,MAAM,EAAE,MAAM,EACd,UAAU,GAAE,MAAsB,EAClC,QAAQ,CAAC,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM;YAeP,SAAS;IAYjB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;CAuBtE"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.AzureOpenAIProvider = exports.DEFAULT_AZURE_OPENAI_API_VERSION = void 0;
|
|
37
|
+
const base_1 = require("./base");
|
|
38
|
+
exports.DEFAULT_AZURE_OPENAI_API_VERSION = '2024-10-21';
|
|
39
|
+
class AzureOpenAIProvider extends base_1.BaseProvider {
|
|
40
|
+
constructor(apiKey, deployment = 'gpt-4o-mini', endpoint, apiVersion) {
|
|
41
|
+
super();
|
|
42
|
+
this.name = 'azure-openai';
|
|
43
|
+
this.client = null;
|
|
44
|
+
this.apiKey = apiKey;
|
|
45
|
+
this.deployment = deployment;
|
|
46
|
+
this.endpoint = endpoint || process.env.AZURE_OPENAI_ENDPOINT || '';
|
|
47
|
+
this.apiVersion = apiVersion || process.env.AZURE_OPENAI_API_VERSION || exports.DEFAULT_AZURE_OPENAI_API_VERSION;
|
|
48
|
+
if (!this.endpoint) {
|
|
49
|
+
throw new Error('Azure OpenAI requires endpoint. Set AZURE_OPENAI_ENDPOINT or pass --base-url when provider is azure-openai.');
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async getClient() {
|
|
53
|
+
if (!this.client) {
|
|
54
|
+
const { AzureOpenAI } = await Promise.resolve().then(() => __importStar(require('openai')));
|
|
55
|
+
this.client = new AzureOpenAI({
|
|
56
|
+
apiKey: this.apiKey,
|
|
57
|
+
endpoint: this.endpoint,
|
|
58
|
+
apiVersion: this.apiVersion,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
return this.client;
|
|
62
|
+
}
|
|
63
|
+
async rewrite(text, options) {
|
|
64
|
+
try {
|
|
65
|
+
const client = await this.getClient();
|
|
66
|
+
const originalLength = text.length;
|
|
67
|
+
const response = await client.chat.completions.create({
|
|
68
|
+
model: this.deployment,
|
|
69
|
+
messages: [
|
|
70
|
+
{ role: 'system', content: this.getSystemPrompt(options, originalLength) },
|
|
71
|
+
{ role: 'user', content: this.getUserPrompt(text, options.preserveLength) },
|
|
72
|
+
],
|
|
73
|
+
temperature: options.temperature ?? 0.7,
|
|
74
|
+
max_tokens: options.maxTokens ?? 2000,
|
|
75
|
+
});
|
|
76
|
+
return this.cleanupThinkingContent(response.choices[0]?.message?.content?.trim() || text);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
if (error.code === 'MODULE_NOT_FOUND') {
|
|
80
|
+
throw new Error('OpenAI SDK not installed. Azure OpenAI uses OpenAI SDK. Run: npm install openai');
|
|
81
|
+
}
|
|
82
|
+
throw new Error(`Azure OpenAI API error: ${error.message}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.AzureOpenAIProvider = AzureOpenAIProvider;
|
|
87
|
+
//# sourceMappingURL=azure-openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"azure-openai.js","sourceRoot":"","sources":["../../../src/core/text-providers/azure-openai.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAAsC;AAKzB,QAAA,gCAAgC,GAAG,YAAY,CAAC;AAE7D,MAAa,mBAAoB,SAAQ,mBAAY;IAQnD,YACE,MAAc,EACd,aAAqB,aAAa,EAClC,QAAiB,EACjB,UAAmB;QAEnB,KAAK,EAAE,CAAC;QAbV,SAAI,GAAG,cAAc,CAAC;QAKd,WAAM,GAA6B,IAAI,CAAC;QAS9C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE,CAAC;QACpE,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,wCAAgC,CAAC;QAEzG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACb,6GAA6G,CAC9G,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,EAAE,WAAW,EAAE,GAAG,wDAAa,QAAQ,GAAC,CAAC;YAC/C,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,CAAC;gBAC5B,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,UAAU,EAAE,IAAI,CAAC,UAAU;aAC5B,CAAsB,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,OAAuB;QACjD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;YAEnC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBACpD,KAAK,EAAE,IAAI,CAAC,UAAU;gBACtB,QAAQ,EAAE;oBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE;oBAC1E,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,EAAE;iBAC5E;gBACD,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,GAAG;gBACvC,UAAU,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;aACtC,CAAC,CAAC;YAEH,OAAO,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC;QAC5F,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBACtC,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAC;YACrG,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,2BAA2B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;CACF;AA9DD,kDA8DC"}
|