markdown-ai-rewriter 0.4.0 → 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.
Files changed (112) hide show
  1. package/dist/cli.js +135 -0
  2. package/dist/cli.js.map +1 -1
  3. package/dist/core/providers/anthropic.d.ts.map +1 -1
  4. package/dist/core/providers/anthropic.js +3 -2
  5. package/dist/core/providers/anthropic.js.map +1 -1
  6. package/dist/core/providers/azure-openai.d.ts.map +1 -1
  7. package/dist/core/providers/azure-openai.js +4 -3
  8. package/dist/core/providers/azure-openai.js.map +1 -1
  9. package/dist/core/providers/base.d.ts +2 -2
  10. package/dist/core/providers/base.d.ts.map +1 -1
  11. package/dist/core/providers/base.js +19 -4
  12. package/dist/core/providers/base.js.map +1 -1
  13. package/dist/core/providers/minimax.d.ts.map +1 -1
  14. package/dist/core/providers/minimax.js +4 -3
  15. package/dist/core/providers/minimax.js.map +1 -1
  16. package/dist/core/providers/openai-compatible.d.ts.map +1 -1
  17. package/dist/core/providers/openai-compatible.js +3 -2
  18. package/dist/core/providers/openai-compatible.js.map +1 -1
  19. package/dist/core/providers/openai.d.ts.map +1 -1
  20. package/dist/core/providers/openai.js +4 -3
  21. package/dist/core/providers/openai.js.map +1 -1
  22. package/dist/core/rewriter.d.ts +9 -0
  23. package/dist/core/rewriter.d.ts.map +1 -1
  24. package/dist/core/rewriter.js +116 -11
  25. package/dist/core/rewriter.js.map +1 -1
  26. package/dist/core/text-providers/anthropic.d.ts +12 -0
  27. package/dist/core/text-providers/anthropic.d.ts.map +1 -0
  28. package/dist/core/text-providers/anthropic.js +78 -0
  29. package/dist/core/text-providers/anthropic.js.map +1 -0
  30. package/dist/core/text-providers/azure-openai.d.ts +15 -0
  31. package/dist/core/text-providers/azure-openai.d.ts.map +1 -0
  32. package/dist/core/text-providers/azure-openai.js +87 -0
  33. package/dist/core/text-providers/azure-openai.js.map +1 -0
  34. package/dist/core/text-providers/base.d.ts +12 -0
  35. package/dist/core/text-providers/base.d.ts.map +1 -0
  36. package/dist/core/text-providers/base.js +66 -0
  37. package/dist/core/text-providers/base.js.map +1 -0
  38. package/dist/core/text-providers/deepseek.d.ts +6 -0
  39. package/dist/core/text-providers/deepseek.d.ts.map +1 -0
  40. package/dist/core/text-providers/deepseek.js +12 -0
  41. package/dist/core/text-providers/deepseek.js.map +1 -0
  42. package/dist/core/text-providers/doubao.d.ts +6 -0
  43. package/dist/core/text-providers/doubao.d.ts.map +1 -0
  44. package/dist/core/text-providers/doubao.js +12 -0
  45. package/dist/core/text-providers/doubao.js.map +1 -0
  46. package/dist/core/text-providers/gemini.d.ts +6 -0
  47. package/dist/core/text-providers/gemini.d.ts.map +1 -0
  48. package/dist/core/text-providers/gemini.js +12 -0
  49. package/dist/core/text-providers/gemini.js.map +1 -0
  50. package/dist/core/text-providers/glm.d.ts +6 -0
  51. package/dist/core/text-providers/glm.d.ts.map +1 -0
  52. package/dist/core/text-providers/glm.js +12 -0
  53. package/dist/core/text-providers/glm.js.map +1 -0
  54. package/dist/core/text-providers/minimax.d.ts +20 -0
  55. package/dist/core/text-providers/minimax.d.ts.map +1 -0
  56. package/dist/core/text-providers/minimax.js +88 -0
  57. package/dist/core/text-providers/minimax.js.map +1 -0
  58. package/dist/core/text-providers/openai-compatible.d.ts +14 -0
  59. package/dist/core/text-providers/openai-compatible.d.ts.map +1 -0
  60. package/dist/core/text-providers/openai-compatible.js +82 -0
  61. package/dist/core/text-providers/openai-compatible.js.map +1 -0
  62. package/dist/core/text-providers/openai.d.ts +12 -0
  63. package/dist/core/text-providers/openai.d.ts.map +1 -0
  64. package/dist/core/text-providers/openai.js +77 -0
  65. package/dist/core/text-providers/openai.js.map +1 -0
  66. package/dist/core/text-providers/openrouter.d.ts +6 -0
  67. package/dist/core/text-providers/openrouter.d.ts.map +1 -0
  68. package/dist/core/text-providers/openrouter.js +12 -0
  69. package/dist/core/text-providers/openrouter.js.map +1 -0
  70. package/dist/core/text-providers/qwen.d.ts +6 -0
  71. package/dist/core/text-providers/qwen.d.ts.map +1 -0
  72. package/dist/core/text-providers/qwen.js +12 -0
  73. package/dist/core/text-providers/qwen.js.map +1 -0
  74. package/dist/core/text-providers/wenxin.d.ts +6 -0
  75. package/dist/core/text-providers/wenxin.d.ts.map +1 -0
  76. package/dist/core/text-providers/wenxin.js +12 -0
  77. package/dist/core/text-providers/wenxin.js.map +1 -0
  78. package/dist/core/video-generator.d.ts +65 -0
  79. package/dist/core/video-generator.d.ts.map +1 -0
  80. package/dist/core/video-generator.js +140 -0
  81. package/dist/core/video-generator.js.map +1 -0
  82. package/dist/core/video-providers/doubao.d.ts +52 -0
  83. package/dist/core/video-providers/doubao.d.ts.map +1 -0
  84. package/dist/core/video-providers/doubao.js +148 -0
  85. package/dist/core/video-providers/doubao.js.map +1 -0
  86. package/dist/core/video-providers/index.d.ts +6 -0
  87. package/dist/core/video-providers/index.d.ts.map +1 -0
  88. package/dist/core/video-providers/index.js +16 -0
  89. package/dist/core/video-providers/index.js.map +1 -0
  90. package/dist/core/video-providers/kling.d.ts +27 -0
  91. package/dist/core/video-providers/kling.d.ts.map +1 -0
  92. package/dist/core/video-providers/kling.js +113 -0
  93. package/dist/core/video-providers/kling.js.map +1 -0
  94. package/dist/core/video-providers/minimax.d.ts +30 -0
  95. package/dist/core/video-providers/minimax.d.ts.map +1 -0
  96. package/dist/core/video-providers/minimax.js +133 -0
  97. package/dist/core/video-providers/minimax.js.map +1 -0
  98. package/dist/core/video-providers/runway.d.ts +22 -0
  99. package/dist/core/video-providers/runway.d.ts.map +1 -0
  100. package/dist/core/video-providers/runway.js +121 -0
  101. package/dist/core/video-providers/runway.js.map +1 -0
  102. package/dist/core/video-providers/types.d.ts +41 -0
  103. package/dist/core/video-providers/types.d.ts.map +1 -0
  104. package/dist/core/video-providers/types.js +3 -0
  105. package/dist/core/video-providers/types.js.map +1 -0
  106. package/dist/index.d.ts +21 -13
  107. package/dist/index.d.ts.map +1 -1
  108. package/dist/index.js +29 -14
  109. package/dist/index.js.map +1 -1
  110. package/dist/types/index.d.ts +36 -0
  111. package/dist/types/index.d.ts.map +1 -1
  112. package/package.json +1 -1
@@ -0,0 +1,52 @@
1
+ import { VideoProvider, VideoGenerationOptions, VideoGenerationResult } from './types';
2
+ export declare const DEFAULT_DOUBAO_VIDEO_URL = "https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks";
3
+ export declare const DEFAULT_DOUBAO_VIDEO_QUERY_URL = "https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks";
4
+ /**
5
+ * Seedance 模型列表
6
+ *
7
+ * 文生视频 (T2V):
8
+ * - seedance-2.0-lite-t2v-250428 (Seedance 2.0 Lite)
9
+ * - seedance-1.5-pro-t2v-250328 (Seedance 1.5 Pro)
10
+ * - seedance-1.0-pro-t2v (Seedance 1.0 Pro)
11
+ * - seedance-1.0-lite-t2v (Seedance 1.0 Lite)
12
+ *
13
+ * 图生视频 (I2V):
14
+ * - seedance-2.0-lite-i2v-250428 (Seedance 2.0 Lite)
15
+ * - seedance-1.5-pro-i2v-250328 (Seedance 1.5 Pro)
16
+ * - seedance-1.0-pro-i2v (Seedance 1.0 Pro)
17
+ * - seedance-1.0-lite-i2v (Seedance 1.0 Lite)
18
+ */
19
+ export declare const SEEDANCE_MODELS: {
20
+ 'seedance-2.0-lite-t2v': string;
21
+ 'seedance-2.0-lite-i2v': string;
22
+ 'seedance-1.5-pro-t2v': string;
23
+ 'seedance-1.5-pro-i2v': string;
24
+ 'seedance-1.0-pro-t2v': string;
25
+ 'seedance-1.0-pro-i2v': string;
26
+ 'seedance-1.0-lite-t2v': string;
27
+ 'seedance-1.0-lite-i2v': string;
28
+ };
29
+ /**
30
+ * 火山引擎豆包视频生成 Provider (Seedance)
31
+ *
32
+ * 支持模型:
33
+ * - Seedance 2.0 Lite (默认,最新)
34
+ * - Seedance 1.5 Pro
35
+ * - Seedance 1.0 Pro / Lite
36
+ */
37
+ export declare class DoubaoVideoProvider implements VideoProvider {
38
+ name: string;
39
+ private apiKey;
40
+ private model;
41
+ private pollInterval;
42
+ private maxPollAttempts;
43
+ private verbose;
44
+ constructor(apiKey: string, model?: string, options?: {
45
+ pollInterval?: number;
46
+ maxPollAttempts?: number;
47
+ verbose?: boolean;
48
+ });
49
+ generateVideo(options: VideoGenerationOptions): Promise<VideoGenerationResult>;
50
+ private sleep;
51
+ }
52
+ //# sourceMappingURL=doubao.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doubao.d.ts","sourceRoot":"","sources":["../../../src/core/video-providers/doubao.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAEvF,eAAO,MAAM,wBAAwB,wEAAwE,CAAC;AAC9G,eAAO,MAAM,8BAA8B,wEAAwE,CAAC;AAEpH;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,eAAe;;;;;;;;;CAY3B,CAAC;AAEF;;;;;;;GAOG;AACH,qBAAa,mBAAoB,YAAW,aAAa;IACvD,IAAI,SAAkB;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,OAAO,CAAU;gBAGvB,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAuC,EAC9C,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE;IAS5E,aAAa,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IA4HpF,OAAO,CAAC,KAAK;CAGd"}
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DoubaoVideoProvider = exports.SEEDANCE_MODELS = exports.DEFAULT_DOUBAO_VIDEO_QUERY_URL = exports.DEFAULT_DOUBAO_VIDEO_URL = void 0;
4
+ exports.DEFAULT_DOUBAO_VIDEO_URL = 'https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks';
5
+ exports.DEFAULT_DOUBAO_VIDEO_QUERY_URL = 'https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks';
6
+ /**
7
+ * Seedance 模型列表
8
+ *
9
+ * 文生视频 (T2V):
10
+ * - seedance-2.0-lite-t2v-250428 (Seedance 2.0 Lite)
11
+ * - seedance-1.5-pro-t2v-250328 (Seedance 1.5 Pro)
12
+ * - seedance-1.0-pro-t2v (Seedance 1.0 Pro)
13
+ * - seedance-1.0-lite-t2v (Seedance 1.0 Lite)
14
+ *
15
+ * 图生视频 (I2V):
16
+ * - seedance-2.0-lite-i2v-250428 (Seedance 2.0 Lite)
17
+ * - seedance-1.5-pro-i2v-250328 (Seedance 1.5 Pro)
18
+ * - seedance-1.0-pro-i2v (Seedance 1.0 Pro)
19
+ * - seedance-1.0-lite-i2v (Seedance 1.0 Lite)
20
+ */
21
+ exports.SEEDANCE_MODELS = {
22
+ // Seedance 2.0
23
+ 'seedance-2.0-lite-t2v': 'seedance-2.0-lite-t2v-250428',
24
+ 'seedance-2.0-lite-i2v': 'seedance-2.0-lite-i2v-250428',
25
+ // Seedance 1.5
26
+ 'seedance-1.5-pro-t2v': 'seedance-1.5-pro-t2v-250328',
27
+ 'seedance-1.5-pro-i2v': 'seedance-1.5-pro-i2v-250328',
28
+ // Seedance 1.0
29
+ 'seedance-1.0-pro-t2v': 'seedance-1.0-pro-t2v',
30
+ 'seedance-1.0-pro-i2v': 'seedance-1.0-pro-i2v',
31
+ 'seedance-1.0-lite-t2v': 'seedance-1.0-lite-t2v',
32
+ 'seedance-1.0-lite-i2v': 'seedance-1.0-lite-i2v',
33
+ };
34
+ /**
35
+ * 火山引擎豆包视频生成 Provider (Seedance)
36
+ *
37
+ * 支持模型:
38
+ * - Seedance 2.0 Lite (默认,最新)
39
+ * - Seedance 1.5 Pro
40
+ * - Seedance 1.0 Pro / Lite
41
+ */
42
+ class DoubaoVideoProvider {
43
+ constructor(apiKey, model = 'seedance-2.0-lite-t2v-250428', options) {
44
+ this.name = 'doubao-video';
45
+ this.apiKey = apiKey;
46
+ this.model = model;
47
+ this.pollInterval = options?.pollInterval || 5000;
48
+ this.maxPollAttempts = options?.maxPollAttempts || 120;
49
+ this.verbose = options?.verbose || false;
50
+ }
51
+ async generateVideo(options) {
52
+ const { prompt, duration = 5, aspectRatio = '16:9', } = options;
53
+ if (this.verbose) {
54
+ console.log(`🎬 [豆包] 开始生成视频...`);
55
+ console.log(` 模型: ${this.model}`);
56
+ console.log(` 时长: ${duration}s`);
57
+ console.log(` 宽高比: ${aspectRatio}`);
58
+ }
59
+ try {
60
+ // 1. 创建视频生成任务
61
+ const createResponse = await fetch(exports.DEFAULT_DOUBAO_VIDEO_URL, {
62
+ method: 'POST',
63
+ headers: {
64
+ 'Authorization': `Bearer ${this.apiKey}`,
65
+ 'Content-Type': 'application/json',
66
+ },
67
+ body: JSON.stringify({
68
+ model: this.model,
69
+ content: [
70
+ {
71
+ type: 'text',
72
+ text: prompt,
73
+ },
74
+ ],
75
+ video_gen_params: {
76
+ duration,
77
+ aspect_ratio: aspectRatio,
78
+ },
79
+ }),
80
+ });
81
+ if (!createResponse.ok) {
82
+ const errorText = await createResponse.text();
83
+ throw new Error(`创建视频任务失败: ${createResponse.status} - ${errorText}`);
84
+ }
85
+ const createResult = await createResponse.json();
86
+ if (createResult.error) {
87
+ throw new Error(`创建视频任务失败: ${createResult.error.message}`);
88
+ }
89
+ const taskId = createResult.id;
90
+ if (!taskId) {
91
+ throw new Error('未返回任务 ID');
92
+ }
93
+ if (this.verbose) {
94
+ console.log(` 任务 ID: ${taskId}`);
95
+ console.log(` 等待视频生成...`);
96
+ }
97
+ // 2. 轮询任务状态
98
+ let attempts = 0;
99
+ while (attempts < this.maxPollAttempts) {
100
+ await this.sleep(this.pollInterval);
101
+ attempts++;
102
+ const queryResponse = await fetch(`${exports.DEFAULT_DOUBAO_VIDEO_QUERY_URL}/${taskId}`, {
103
+ method: 'GET',
104
+ headers: {
105
+ 'Authorization': `Bearer ${this.apiKey}`,
106
+ },
107
+ });
108
+ if (!queryResponse.ok) {
109
+ continue;
110
+ }
111
+ const queryResult = await queryResponse.json();
112
+ if (this.verbose && attempts % 6 === 0) {
113
+ console.log(` 状态: ${queryResult.status} (${attempts * this.pollInterval / 1000}s)`);
114
+ }
115
+ if (queryResult.status === 'succeeded') {
116
+ const videoContent = queryResult.content?.find(c => c.type === 'video_url');
117
+ const videoUrl = videoContent?.video_url;
118
+ if (!videoUrl) {
119
+ throw new Error('未返回视频 URL');
120
+ }
121
+ if (this.verbose) {
122
+ console.log(`✅ [豆包] 视频生成成功!`);
123
+ }
124
+ return {
125
+ success: true,
126
+ videoUrl,
127
+ taskId,
128
+ };
129
+ }
130
+ if (queryResult.status === 'failed') {
131
+ throw new Error(`视频生成失败: ${queryResult.error?.message || '未知错误'}`);
132
+ }
133
+ }
134
+ throw new Error(`视频生成超时(等待 ${this.maxPollAttempts * this.pollInterval / 1000}s)`);
135
+ }
136
+ catch (error) {
137
+ return {
138
+ success: false,
139
+ error: error.message,
140
+ };
141
+ }
142
+ }
143
+ sleep(ms) {
144
+ return new Promise(resolve => setTimeout(resolve, ms));
145
+ }
146
+ }
147
+ exports.DoubaoVideoProvider = DoubaoVideoProvider;
148
+ //# sourceMappingURL=doubao.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doubao.js","sourceRoot":"","sources":["../../../src/core/video-providers/doubao.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export { MiniMaxVideoProvider, DEFAULT_MINIMAX_VIDEO_URL } from './minimax';
2
+ export { DoubaoVideoProvider, DEFAULT_DOUBAO_VIDEO_URL, SEEDANCE_MODELS } from './doubao';
3
+ export { KlingVideoProvider, DEFAULT_KLING_VIDEO_URL } from './kling';
4
+ export { RunwayVideoProvider } from './runway';
5
+ export type { VideoProvider, VideoGenerationOptions, VideoGenerationResult } from './types';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/video-providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RunwayVideoProvider = exports.DEFAULT_KLING_VIDEO_URL = exports.KlingVideoProvider = exports.SEEDANCE_MODELS = exports.DEFAULT_DOUBAO_VIDEO_URL = exports.DoubaoVideoProvider = exports.DEFAULT_MINIMAX_VIDEO_URL = exports.MiniMaxVideoProvider = void 0;
4
+ var minimax_1 = require("./minimax");
5
+ Object.defineProperty(exports, "MiniMaxVideoProvider", { enumerable: true, get: function () { return minimax_1.MiniMaxVideoProvider; } });
6
+ Object.defineProperty(exports, "DEFAULT_MINIMAX_VIDEO_URL", { enumerable: true, get: function () { return minimax_1.DEFAULT_MINIMAX_VIDEO_URL; } });
7
+ var doubao_1 = require("./doubao");
8
+ Object.defineProperty(exports, "DoubaoVideoProvider", { enumerable: true, get: function () { return doubao_1.DoubaoVideoProvider; } });
9
+ Object.defineProperty(exports, "DEFAULT_DOUBAO_VIDEO_URL", { enumerable: true, get: function () { return doubao_1.DEFAULT_DOUBAO_VIDEO_URL; } });
10
+ Object.defineProperty(exports, "SEEDANCE_MODELS", { enumerable: true, get: function () { return doubao_1.SEEDANCE_MODELS; } });
11
+ var kling_1 = require("./kling");
12
+ Object.defineProperty(exports, "KlingVideoProvider", { enumerable: true, get: function () { return kling_1.KlingVideoProvider; } });
13
+ Object.defineProperty(exports, "DEFAULT_KLING_VIDEO_URL", { enumerable: true, get: function () { return kling_1.DEFAULT_KLING_VIDEO_URL; } });
14
+ var runway_1 = require("./runway");
15
+ Object.defineProperty(exports, "RunwayVideoProvider", { enumerable: true, get: function () { return runway_1.RunwayVideoProvider; } });
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/video-providers/index.ts"],"names":[],"mappings":";;;AAAA,qCAA4E;AAAnE,+GAAA,oBAAoB,OAAA;AAAE,oHAAA,yBAAyB,OAAA;AACxD,mCAA0F;AAAjF,6GAAA,mBAAmB,OAAA;AAAE,kHAAA,wBAAwB,OAAA;AAAE,yGAAA,eAAe,OAAA;AACvE,iCAAsE;AAA7D,2GAAA,kBAAkB,OAAA;AAAE,gHAAA,uBAAuB,OAAA;AACpD,mCAA+C;AAAtC,6GAAA,mBAAmB,OAAA"}
@@ -0,0 +1,27 @@
1
+ import { VideoProvider, VideoGenerationOptions, VideoGenerationResult } from './types';
2
+ export declare const DEFAULT_KLING_VIDEO_URL = "https://api.klingai.com/v1/videos/text2video";
3
+ export declare const DEFAULT_KLING_VIDEO_QUERY_URL = "https://api.klingai.com/v1/videos/text2video";
4
+ /**
5
+ * 快手可灵视频生成 Provider (Kling)
6
+ *
7
+ * 支持模型:
8
+ * - kling-v1 (默认)
9
+ * - kling-v1-5
10
+ * - kling-v1-6
11
+ */
12
+ export declare class KlingVideoProvider implements VideoProvider {
13
+ name: string;
14
+ private apiKey;
15
+ private model;
16
+ private pollInterval;
17
+ private maxPollAttempts;
18
+ private verbose;
19
+ constructor(apiKey: string, model?: string, options?: {
20
+ pollInterval?: number;
21
+ maxPollAttempts?: number;
22
+ verbose?: boolean;
23
+ });
24
+ generateVideo(options: VideoGenerationOptions): Promise<VideoGenerationResult>;
25
+ private sleep;
26
+ }
27
+ //# sourceMappingURL=kling.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kling.d.ts","sourceRoot":"","sources":["../../../src/core/video-providers/kling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAEvF,eAAO,MAAM,uBAAuB,iDAAiD,CAAC;AACtF,eAAO,MAAM,6BAA6B,iDAAiD,CAAC;AAE5F;;;;;;;GAOG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IACtD,IAAI,SAAiB;IACrB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,OAAO,CAAU;gBAGvB,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAmB,EAC1B,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE;IAS5E,aAAa,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAwHpF,OAAO,CAAC,KAAK;CAGd"}
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KlingVideoProvider = exports.DEFAULT_KLING_VIDEO_QUERY_URL = exports.DEFAULT_KLING_VIDEO_URL = void 0;
4
+ exports.DEFAULT_KLING_VIDEO_URL = 'https://api.klingai.com/v1/videos/text2video';
5
+ exports.DEFAULT_KLING_VIDEO_QUERY_URL = 'https://api.klingai.com/v1/videos/text2video';
6
+ /**
7
+ * 快手可灵视频生成 Provider (Kling)
8
+ *
9
+ * 支持模型:
10
+ * - kling-v1 (默认)
11
+ * - kling-v1-5
12
+ * - kling-v1-6
13
+ */
14
+ class KlingVideoProvider {
15
+ constructor(apiKey, model = 'kling-v1', options) {
16
+ this.name = 'kling-video';
17
+ this.apiKey = apiKey;
18
+ this.model = model;
19
+ this.pollInterval = options?.pollInterval || 5000;
20
+ this.maxPollAttempts = options?.maxPollAttempts || 120;
21
+ this.verbose = options?.verbose || false;
22
+ }
23
+ async generateVideo(options) {
24
+ const { prompt, duration = 5, aspectRatio = '16:9', } = options;
25
+ if (this.verbose) {
26
+ console.log(`🎬 [可灵] 开始生成视频...`);
27
+ console.log(` 模型: ${this.model}`);
28
+ console.log(` 时长: ${duration}s`);
29
+ console.log(` 宽高比: ${aspectRatio}`);
30
+ }
31
+ try {
32
+ // 1. 创建视频生成任务
33
+ const createResponse = await fetch(exports.DEFAULT_KLING_VIDEO_URL, {
34
+ method: 'POST',
35
+ headers: {
36
+ 'Authorization': `Bearer ${this.apiKey}`,
37
+ 'Content-Type': 'application/json',
38
+ },
39
+ body: JSON.stringify({
40
+ model: this.model,
41
+ prompt,
42
+ duration: String(duration),
43
+ aspect_ratio: aspectRatio,
44
+ mode: 'std', // std 或 pro
45
+ }),
46
+ });
47
+ if (!createResponse.ok) {
48
+ const errorText = await createResponse.text();
49
+ throw new Error(`创建视频任务失败: ${createResponse.status} - ${errorText}`);
50
+ }
51
+ const createResult = await createResponse.json();
52
+ if (createResult.code !== 0) {
53
+ throw new Error(`创建视频任务失败: ${createResult.message}`);
54
+ }
55
+ const taskId = createResult.data?.task_id;
56
+ if (!taskId) {
57
+ throw new Error('未返回任务 ID');
58
+ }
59
+ if (this.verbose) {
60
+ console.log(` 任务 ID: ${taskId}`);
61
+ console.log(` 等待视频生成...`);
62
+ }
63
+ // 2. 轮询任务状态
64
+ let attempts = 0;
65
+ while (attempts < this.maxPollAttempts) {
66
+ await this.sleep(this.pollInterval);
67
+ attempts++;
68
+ const queryResponse = await fetch(`${exports.DEFAULT_KLING_VIDEO_QUERY_URL}/${taskId}`, {
69
+ method: 'GET',
70
+ headers: {
71
+ 'Authorization': `Bearer ${this.apiKey}`,
72
+ },
73
+ });
74
+ if (!queryResponse.ok) {
75
+ continue;
76
+ }
77
+ const queryResult = await queryResponse.json();
78
+ if (this.verbose && attempts % 6 === 0) {
79
+ console.log(` 状态: ${queryResult.data?.task_status} (${attempts * this.pollInterval / 1000}s)`);
80
+ }
81
+ if (queryResult.data?.task_status === 'succeed') {
82
+ const videoUrl = queryResult.data.task_result?.videos?.[0]?.url;
83
+ if (!videoUrl) {
84
+ throw new Error('未返回视频 URL');
85
+ }
86
+ if (this.verbose) {
87
+ console.log(`✅ [可灵] 视频生成成功!`);
88
+ }
89
+ return {
90
+ success: true,
91
+ videoUrl,
92
+ taskId,
93
+ };
94
+ }
95
+ if (queryResult.data?.task_status === 'failed') {
96
+ throw new Error(`视频生成失败: ${queryResult.message || '未知错误'}`);
97
+ }
98
+ }
99
+ throw new Error(`视频生成超时(等待 ${this.maxPollAttempts * this.pollInterval / 1000}s)`);
100
+ }
101
+ catch (error) {
102
+ return {
103
+ success: false,
104
+ error: error.message,
105
+ };
106
+ }
107
+ }
108
+ sleep(ms) {
109
+ return new Promise(resolve => setTimeout(resolve, ms));
110
+ }
111
+ }
112
+ exports.KlingVideoProvider = KlingVideoProvider;
113
+ //# sourceMappingURL=kling.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kling.js","sourceRoot":"","sources":["../../../src/core/video-providers/kling.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { VideoProvider, VideoGenerationOptions, VideoGenerationResult } from './types';
2
+ export declare const DEFAULT_MINIMAX_VIDEO_URL = "https://api.minimax.io/v1/video_generation";
3
+ export declare const DEFAULT_MINIMAX_VIDEO_QUERY_URL = "https://api.minimax.io/v1/query/video_generation";
4
+ export declare const DEFAULT_MINIMAX_FILE_URL = "https://api.minimax.io/v1/files/retrieve";
5
+ /**
6
+ * MiniMax 视频生成 Provider (Hailuo)
7
+ *
8
+ * 支持模型:
9
+ * - MiniMax-Hailuo-2.3 (默认)
10
+ * - MiniMax-Hailuo-02
11
+ * - T2V-01-Director
12
+ * - T2V-01
13
+ */
14
+ export declare class MiniMaxVideoProvider implements VideoProvider {
15
+ name: string;
16
+ private apiKey;
17
+ private model;
18
+ private pollInterval;
19
+ private maxPollAttempts;
20
+ private verbose;
21
+ constructor(apiKey: string, model?: string, options?: {
22
+ pollInterval?: number;
23
+ maxPollAttempts?: number;
24
+ verbose?: boolean;
25
+ });
26
+ generateVideo(options: VideoGenerationOptions): Promise<VideoGenerationResult>;
27
+ private getVideoUrl;
28
+ private sleep;
29
+ }
30
+ //# sourceMappingURL=minimax.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minimax.d.ts","sourceRoot":"","sources":["../../../src/core/video-providers/minimax.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAEvF,eAAO,MAAM,yBAAyB,+CAA+C,CAAC;AACtF,eAAO,MAAM,+BAA+B,qDAAqD,CAAC;AAClG,eAAO,MAAM,wBAAwB,6CAA6C,CAAC;AAEnF;;;;;;;;GAQG;AACH,qBAAa,oBAAqB,YAAW,aAAa;IACxD,IAAI,SAAmB;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,OAAO,CAAU;gBAGvB,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAA6B,EACpC,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE;IAS5E,aAAa,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC;YAiHtE,WAAW;IA6BzB,OAAO,CAAC,KAAK;CAGd"}
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MiniMaxVideoProvider = exports.DEFAULT_MINIMAX_FILE_URL = exports.DEFAULT_MINIMAX_VIDEO_QUERY_URL = exports.DEFAULT_MINIMAX_VIDEO_URL = void 0;
4
+ exports.DEFAULT_MINIMAX_VIDEO_URL = 'https://api.minimax.io/v1/video_generation';
5
+ exports.DEFAULT_MINIMAX_VIDEO_QUERY_URL = 'https://api.minimax.io/v1/query/video_generation';
6
+ exports.DEFAULT_MINIMAX_FILE_URL = 'https://api.minimax.io/v1/files/retrieve';
7
+ /**
8
+ * MiniMax 视频生成 Provider (Hailuo)
9
+ *
10
+ * 支持模型:
11
+ * - MiniMax-Hailuo-2.3 (默认)
12
+ * - MiniMax-Hailuo-02
13
+ * - T2V-01-Director
14
+ * - T2V-01
15
+ */
16
+ class MiniMaxVideoProvider {
17
+ constructor(apiKey, model = 'MiniMax-Hailuo-2.3', options) {
18
+ this.name = 'minimax-video';
19
+ this.apiKey = apiKey;
20
+ this.model = model;
21
+ this.pollInterval = options?.pollInterval || 5000;
22
+ this.maxPollAttempts = options?.maxPollAttempts || 120;
23
+ this.verbose = options?.verbose || false;
24
+ }
25
+ async generateVideo(options) {
26
+ const { prompt, duration = 6, resolution = '1080P', promptOptimizer = true, } = options;
27
+ if (this.verbose) {
28
+ console.log(`🎬 [MiniMax] 开始生成视频...`);
29
+ console.log(` 模型: ${this.model}`);
30
+ console.log(` 时长: ${duration}s`);
31
+ console.log(` 分辨率: ${resolution}`);
32
+ }
33
+ try {
34
+ // 1. 创建视频生成任务
35
+ const createResponse = await fetch(exports.DEFAULT_MINIMAX_VIDEO_URL, {
36
+ method: 'POST',
37
+ headers: {
38
+ 'Authorization': `Bearer ${this.apiKey}`,
39
+ 'Content-Type': 'application/json',
40
+ },
41
+ body: JSON.stringify({
42
+ model: this.model,
43
+ prompt,
44
+ duration,
45
+ resolution,
46
+ prompt_optimizer: promptOptimizer,
47
+ }),
48
+ });
49
+ if (!createResponse.ok) {
50
+ const errorText = await createResponse.text();
51
+ throw new Error(`创建视频任务失败: ${createResponse.status} - ${errorText}`);
52
+ }
53
+ const createResult = await createResponse.json();
54
+ if (createResult.base_resp?.status_code !== 0) {
55
+ throw new Error(`创建视频任务失败: ${createResult.base_resp?.status_msg}`);
56
+ }
57
+ const taskId = createResult.task_id;
58
+ if (!taskId) {
59
+ throw new Error('未返回任务 ID');
60
+ }
61
+ if (this.verbose) {
62
+ console.log(` 任务 ID: ${taskId}`);
63
+ console.log(` 等待视频生成...`);
64
+ }
65
+ // 2. 轮询任务状态
66
+ let attempts = 0;
67
+ while (attempts < this.maxPollAttempts) {
68
+ await this.sleep(this.pollInterval);
69
+ attempts++;
70
+ const queryResponse = await fetch(`${exports.DEFAULT_MINIMAX_VIDEO_QUERY_URL}?task_id=${taskId}`, {
71
+ method: 'GET',
72
+ headers: {
73
+ 'Authorization': `Bearer ${this.apiKey}`,
74
+ },
75
+ });
76
+ if (!queryResponse.ok) {
77
+ continue;
78
+ }
79
+ const queryResult = await queryResponse.json();
80
+ if (this.verbose && attempts % 6 === 0) {
81
+ console.log(` 状态: ${queryResult.status} (${attempts * this.pollInterval / 1000}s)`);
82
+ }
83
+ if (queryResult.status === 'success' && queryResult.file_id) {
84
+ const videoUrl = await this.getVideoUrl(queryResult.file_id);
85
+ if (this.verbose) {
86
+ console.log(`✅ [MiniMax] 视频生成成功!`);
87
+ }
88
+ return {
89
+ success: true,
90
+ videoUrl,
91
+ taskId,
92
+ fileId: queryResult.file_id,
93
+ };
94
+ }
95
+ if (queryResult.status === 'failed') {
96
+ throw new Error(`视频生成失败: ${queryResult.base_resp?.status_msg || '未知错误'}`);
97
+ }
98
+ }
99
+ throw new Error(`视频生成超时(等待 ${this.maxPollAttempts * this.pollInterval / 1000}s)`);
100
+ }
101
+ catch (error) {
102
+ return {
103
+ success: false,
104
+ error: error.message,
105
+ };
106
+ }
107
+ }
108
+ async getVideoUrl(fileId) {
109
+ const response = await fetch(`${exports.DEFAULT_MINIMAX_FILE_URL}?file_id=${fileId}`, {
110
+ method: 'GET',
111
+ headers: {
112
+ 'Authorization': `Bearer ${this.apiKey}`,
113
+ },
114
+ });
115
+ if (!response.ok) {
116
+ throw new Error(`获取视频 URL 失败: ${response.status}`);
117
+ }
118
+ const result = await response.json();
119
+ if (result.base_resp?.status_code !== 0) {
120
+ throw new Error(`获取视频 URL 失败: ${result.base_resp?.status_msg}`);
121
+ }
122
+ const downloadUrl = result.file?.download_url;
123
+ if (!downloadUrl) {
124
+ throw new Error('未返回视频下载 URL');
125
+ }
126
+ return downloadUrl;
127
+ }
128
+ sleep(ms) {
129
+ return new Promise(resolve => setTimeout(resolve, ms));
130
+ }
131
+ }
132
+ exports.MiniMaxVideoProvider = MiniMaxVideoProvider;
133
+ //# sourceMappingURL=minimax.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minimax.js","sourceRoot":"","sources":["../../../src/core/video-providers/minimax.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { VideoProvider, VideoGenerationOptions, VideoGenerationResult } from './types';
2
+ /**
3
+ * Runway 视频生成 Provider (Gen-4.5)
4
+ *
5
+ * 支持模型:
6
+ * - gen4.5 (默认)
7
+ * - gen4
8
+ * - gen3a_turbo
9
+ *
10
+ * 注意:需要安装 @runwayml/sdk
11
+ */
12
+ export declare class RunwayVideoProvider implements VideoProvider {
13
+ name: string;
14
+ private apiKey;
15
+ private model;
16
+ private verbose;
17
+ constructor(apiKey: string, model?: string, options?: {
18
+ verbose?: boolean;
19
+ });
20
+ generateVideo(options: VideoGenerationOptions): Promise<VideoGenerationResult>;
21
+ }
22
+ //# sourceMappingURL=runway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runway.d.ts","sourceRoot":"","sources":["../../../src/core/video-providers/runway.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAEvF;;;;;;;;;GASG;AACH,qBAAa,mBAAoB,YAAW,aAAa;IACvD,IAAI,SAAkB;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAU;gBAGvB,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAiB,EACxB,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE;IAO3B,aAAa,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC;CA8ErF"}