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.
Files changed (93) hide show
  1. package/dist/cli.js +135 -0
  2. package/dist/cli.js.map +1 -1
  3. package/dist/core/rewriter.d.ts +9 -0
  4. package/dist/core/rewriter.d.ts.map +1 -1
  5. package/dist/core/rewriter.js +116 -11
  6. package/dist/core/rewriter.js.map +1 -1
  7. package/dist/core/text-providers/anthropic.d.ts +12 -0
  8. package/dist/core/text-providers/anthropic.d.ts.map +1 -0
  9. package/dist/core/text-providers/anthropic.js +78 -0
  10. package/dist/core/text-providers/anthropic.js.map +1 -0
  11. package/dist/core/text-providers/azure-openai.d.ts +15 -0
  12. package/dist/core/text-providers/azure-openai.d.ts.map +1 -0
  13. package/dist/core/text-providers/azure-openai.js +87 -0
  14. package/dist/core/text-providers/azure-openai.js.map +1 -0
  15. package/dist/core/text-providers/base.d.ts +12 -0
  16. package/dist/core/text-providers/base.d.ts.map +1 -0
  17. package/dist/core/text-providers/base.js +66 -0
  18. package/dist/core/text-providers/base.js.map +1 -0
  19. package/dist/core/text-providers/deepseek.d.ts +6 -0
  20. package/dist/core/text-providers/deepseek.d.ts.map +1 -0
  21. package/dist/core/text-providers/deepseek.js +12 -0
  22. package/dist/core/text-providers/deepseek.js.map +1 -0
  23. package/dist/core/text-providers/doubao.d.ts +6 -0
  24. package/dist/core/text-providers/doubao.d.ts.map +1 -0
  25. package/dist/core/text-providers/doubao.js +12 -0
  26. package/dist/core/text-providers/doubao.js.map +1 -0
  27. package/dist/core/text-providers/gemini.d.ts +6 -0
  28. package/dist/core/text-providers/gemini.d.ts.map +1 -0
  29. package/dist/core/text-providers/gemini.js +12 -0
  30. package/dist/core/text-providers/gemini.js.map +1 -0
  31. package/dist/core/text-providers/glm.d.ts +6 -0
  32. package/dist/core/text-providers/glm.d.ts.map +1 -0
  33. package/dist/core/text-providers/glm.js +12 -0
  34. package/dist/core/text-providers/glm.js.map +1 -0
  35. package/dist/core/text-providers/minimax.d.ts +20 -0
  36. package/dist/core/text-providers/minimax.d.ts.map +1 -0
  37. package/dist/core/text-providers/minimax.js +88 -0
  38. package/dist/core/text-providers/minimax.js.map +1 -0
  39. package/dist/core/text-providers/openai-compatible.d.ts +14 -0
  40. package/dist/core/text-providers/openai-compatible.d.ts.map +1 -0
  41. package/dist/core/text-providers/openai-compatible.js +82 -0
  42. package/dist/core/text-providers/openai-compatible.js.map +1 -0
  43. package/dist/core/text-providers/openai.d.ts +12 -0
  44. package/dist/core/text-providers/openai.d.ts.map +1 -0
  45. package/dist/core/text-providers/openai.js +77 -0
  46. package/dist/core/text-providers/openai.js.map +1 -0
  47. package/dist/core/text-providers/openrouter.d.ts +6 -0
  48. package/dist/core/text-providers/openrouter.d.ts.map +1 -0
  49. package/dist/core/text-providers/openrouter.js +12 -0
  50. package/dist/core/text-providers/openrouter.js.map +1 -0
  51. package/dist/core/text-providers/qwen.d.ts +6 -0
  52. package/dist/core/text-providers/qwen.d.ts.map +1 -0
  53. package/dist/core/text-providers/qwen.js +12 -0
  54. package/dist/core/text-providers/qwen.js.map +1 -0
  55. package/dist/core/text-providers/wenxin.d.ts +6 -0
  56. package/dist/core/text-providers/wenxin.d.ts.map +1 -0
  57. package/dist/core/text-providers/wenxin.js +12 -0
  58. package/dist/core/text-providers/wenxin.js.map +1 -0
  59. package/dist/core/video-generator.d.ts +65 -0
  60. package/dist/core/video-generator.d.ts.map +1 -0
  61. package/dist/core/video-generator.js +140 -0
  62. package/dist/core/video-generator.js.map +1 -0
  63. package/dist/core/video-providers/doubao.d.ts +52 -0
  64. package/dist/core/video-providers/doubao.d.ts.map +1 -0
  65. package/dist/core/video-providers/doubao.js +148 -0
  66. package/dist/core/video-providers/doubao.js.map +1 -0
  67. package/dist/core/video-providers/index.d.ts +6 -0
  68. package/dist/core/video-providers/index.d.ts.map +1 -0
  69. package/dist/core/video-providers/index.js +16 -0
  70. package/dist/core/video-providers/index.js.map +1 -0
  71. package/dist/core/video-providers/kling.d.ts +27 -0
  72. package/dist/core/video-providers/kling.d.ts.map +1 -0
  73. package/dist/core/video-providers/kling.js +113 -0
  74. package/dist/core/video-providers/kling.js.map +1 -0
  75. package/dist/core/video-providers/minimax.d.ts +30 -0
  76. package/dist/core/video-providers/minimax.d.ts.map +1 -0
  77. package/dist/core/video-providers/minimax.js +133 -0
  78. package/dist/core/video-providers/minimax.js.map +1 -0
  79. package/dist/core/video-providers/runway.d.ts +22 -0
  80. package/dist/core/video-providers/runway.d.ts.map +1 -0
  81. package/dist/core/video-providers/runway.js +121 -0
  82. package/dist/core/video-providers/runway.js.map +1 -0
  83. package/dist/core/video-providers/types.d.ts +41 -0
  84. package/dist/core/video-providers/types.d.ts.map +1 -0
  85. package/dist/core/video-providers/types.js +3 -0
  86. package/dist/core/video-providers/types.js.map +1 -0
  87. package/dist/index.d.ts +21 -13
  88. package/dist/index.d.ts.map +1 -1
  89. package/dist/index.js +29 -14
  90. package/dist/index.js.map +1 -1
  91. package/dist/types/index.d.ts +36 -0
  92. package/dist/types/index.d.ts.map +1 -1
  93. package/package.json +1 -1
@@ -0,0 +1,12 @@
1
+ import { AIProvider, RewriteOptions } from '../../types';
2
+ export declare abstract class BaseProvider implements AIProvider {
3
+ abstract name: string;
4
+ protected getSystemPrompt(options: RewriteOptions, originalLength?: number): string;
5
+ protected getUserPrompt(text: string, preserveLength?: boolean): string;
6
+ /**
7
+ * 清理 AI 思考过程标签和内容
8
+ */
9
+ protected cleanupThinkingContent(content: string): string;
10
+ abstract rewrite(text: string, options: RewriteOptions): Promise<string>;
11
+ }
12
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/core/text-providers/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEzD,8BAAsB,YAAa,YAAW,UAAU;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM;IAmCnF,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM;IAQvE;;OAEG;IACH,SAAS,CAAC,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAmBzD,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;CACzE"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseProvider = void 0;
4
+ class BaseProvider {
5
+ getSystemPrompt(options, originalLength) {
6
+ const stylePrompts = {
7
+ casual: '用轻松、口语化的风格重写,就像和朋友聊天一样。',
8
+ formal: '用正式、专业的风格重写,适合商务或学术场合。',
9
+ technical: '用技术性、精确的风格重写,保持专业术语。',
10
+ creative: '用创意、生动的风格重写,增加表现力和吸引力。',
11
+ custom: options.prompt || '重写以下内容,保持原意但改变表达方式。',
12
+ };
13
+ // 长度保持指令
14
+ let lengthInstruction = '';
15
+ if (options.preserveLength && originalLength) {
16
+ const minLength = Math.floor(originalLength * 0.85);
17
+ const maxLength = Math.ceil(originalLength * 1.15);
18
+ lengthInstruction = `
19
+ 5. 【重要】严格保持与原文相近的长度:
20
+ - 原文约 ${originalLength} 字
21
+ - 你的输出必须在 ${minLength}-${maxLength} 字之间
22
+ - 不要大幅缩减或扩展内容
23
+ - 如果原文有多个段落,保持相似的段落数量`;
24
+ }
25
+ const basePrompt = `你是一个专业的内容重写助手。你的任务是重写给定的文本,要求:
26
+ 1. 保持原文的核心意思和信息
27
+ 2. 改变表达方式和句式结构
28
+ 3. 使用不同的词汇和语言风格
29
+ 4. ${stylePrompts[options.style || 'custom']}${lengthInstruction}
30
+
31
+ 重要:只返回重写后的内容,不要添加任何解释、前言或后缀。
32
+ 严禁输出任何思考过程、推理过程或中间分析。
33
+ 严禁输出 <think>...</think>、<reasoning>...</reasoning> 或类似标签。`;
34
+ return basePrompt;
35
+ }
36
+ getUserPrompt(text, preserveLength) {
37
+ if (preserveLength) {
38
+ const charCount = text.length;
39
+ return `请重写以下内容(原文约 ${charCount} 字,请保持相近长度):\n\n${text}`;
40
+ }
41
+ return `请重写以下内容:\n\n${text}`;
42
+ }
43
+ /**
44
+ * 清理 AI 思考过程标签和内容
45
+ */
46
+ cleanupThinkingContent(content) {
47
+ return content
48
+ // 移除 <thinking>...</thinking> 块
49
+ .replace(/<thinking>[\s\S]*?<\/thinking>/gi, '')
50
+ // 移除 <reasoning>...</reasoning> 块
51
+ .replace(/<reasoning>[\s\S]*?<\/reasoning>/gi, '')
52
+ // 移除独立存在的 <thinking> 标签(无闭合)
53
+ .replace(/<thinking>\s*/gi, '')
54
+ // 移除独立存在的 </thinking> 标签
55
+ .replace(/\s*<\/thinking>/gi, '')
56
+ // 移除独立存在的 <reasoning> 标签
57
+ .replace(/<reasoning>\s*/gi, '')
58
+ // 移除独立存在的 </reasoning> 标签
59
+ .replace(/\s*<\/reasoning>/gi, '')
60
+ // 清理多余空行
61
+ .replace(/\n{3,}/g, '\n\n')
62
+ .trim();
63
+ }
64
+ }
65
+ exports.BaseProvider = BaseProvider;
66
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/core/text-providers/base.ts"],"names":[],"mappings":";;;AAEA,MAAsB,YAAY;IAGtB,eAAe,CAAC,OAAuB,EAAE,cAAuB;QACxE,MAAM,YAAY,GAAG;YACnB,MAAM,EAAE,yBAAyB;YACjC,MAAM,EAAE,wBAAwB;YAChC,SAAS,EAAE,sBAAsB;YACjC,QAAQ,EAAE,wBAAwB;YAClC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,qBAAqB;SAChD,CAAC;QAEF,SAAS;QACT,IAAI,iBAAiB,GAAG,EAAE,CAAC;QAC3B,IAAI,OAAO,CAAC,cAAc,IAAI,cAAc,EAAE,CAAC;YAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;YACpD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;YACnD,iBAAiB,GAAG;;WAEf,cAAc;eACV,SAAS,IAAI,SAAS;;yBAEZ,CAAC;QACtB,CAAC;QAED,MAAM,UAAU,GAAG;;;;KAIlB,YAAY,CAAC,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC,GAAG,iBAAiB;;;;0DAIN,CAAC;QAEvD,OAAO,UAAU,CAAC;IACpB,CAAC;IAES,aAAa,CAAC,IAAY,EAAE,cAAwB;QAC5D,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;YAC9B,OAAO,eAAe,SAAS,mBAAmB,IAAI,EAAE,CAAC;QAC3D,CAAC;QACD,OAAO,eAAe,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACO,sBAAsB,CAAC,OAAe;QAC9C,OAAO,OAAO;YACZ,gCAAgC;aAC/B,OAAO,CAAC,kCAAkC,EAAE,EAAE,CAAC;YAChD,kCAAkC;aACjC,OAAO,CAAC,oCAAoC,EAAE,EAAE,CAAC;YAClD,6BAA6B;aAC5B,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;YAC/B,yBAAyB;aACxB,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;YACjC,yBAAyB;aACxB,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;YAChC,0BAA0B;aACzB,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC;YAClC,SAAS;aACR,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;aAC1B,IAAI,EAAE,CAAC;IACZ,CAAC;CAGF;AArED,oCAqEC"}
@@ -0,0 +1,6 @@
1
+ import { OpenAICompatibleProvider } from './openai-compatible';
2
+ export declare const DEFAULT_DEEPSEEK_BASE_URL = "https://api.deepseek.com/v1";
3
+ export declare class DeepSeekProvider extends OpenAICompatibleProvider {
4
+ constructor(apiKey: string, model?: string, baseURL?: string);
5
+ }
6
+ //# sourceMappingURL=deepseek.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepseek.d.ts","sourceRoot":"","sources":["../../../src/core/text-providers/deepseek.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,eAAO,MAAM,yBAAyB,gCAAgC,CAAC;AAEvE,qBAAa,gBAAiB,SAAQ,wBAAwB;gBAChD,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAwB,EAAE,OAAO,CAAC,EAAE,MAAM;CAS9E"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeepSeekProvider = exports.DEFAULT_DEEPSEEK_BASE_URL = void 0;
4
+ const openai_compatible_1 = require("./openai-compatible");
5
+ exports.DEFAULT_DEEPSEEK_BASE_URL = 'https://api.deepseek.com/v1';
6
+ class DeepSeekProvider extends openai_compatible_1.OpenAICompatibleProvider {
7
+ constructor(apiKey, model = 'deepseek-chat', baseURL) {
8
+ super('deepseek', apiKey, model, baseURL || process.env.DEEPSEEK_BASE_URL || exports.DEFAULT_DEEPSEEK_BASE_URL, 'DeepSeek uses an OpenAI-compatible endpoint');
9
+ }
10
+ }
11
+ exports.DeepSeekProvider = DeepSeekProvider;
12
+ //# sourceMappingURL=deepseek.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepseek.js","sourceRoot":"","sources":["../../../src/core/text-providers/deepseek.ts"],"names":[],"mappings":";;;AAAA,2DAA+D;AAElD,QAAA,yBAAyB,GAAG,6BAA6B,CAAC;AAEvE,MAAa,gBAAiB,SAAQ,4CAAwB;IAC5D,YAAY,MAAc,EAAE,QAAgB,eAAe,EAAE,OAAgB;QAC3E,KAAK,CACH,UAAU,EACV,MAAM,EACN,KAAK,EACL,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,iCAAyB,EACrE,6CAA6C,CAC9C,CAAC;IACJ,CAAC;CACF;AAVD,4CAUC"}
@@ -0,0 +1,6 @@
1
+ import { OpenAICompatibleProvider } from './openai-compatible';
2
+ export declare const DEFAULT_DOUBAO_BASE_URL = "https://ark.cn-beijing.volces.com/api/v3";
3
+ export declare class DoubaoProvider extends OpenAICompatibleProvider {
4
+ constructor(apiKey: string, model?: string, baseURL?: string);
5
+ }
6
+ //# sourceMappingURL=doubao.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doubao.d.ts","sourceRoot":"","sources":["../../../src/core/text-providers/doubao.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,eAAO,MAAM,uBAAuB,6CAA6C,CAAC;AAElF,qBAAa,cAAe,SAAQ,wBAAwB;gBAC9C,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAiC,EAAE,OAAO,CAAC,EAAE,MAAM;CASvF"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DoubaoProvider = exports.DEFAULT_DOUBAO_BASE_URL = void 0;
4
+ const openai_compatible_1 = require("./openai-compatible");
5
+ exports.DEFAULT_DOUBAO_BASE_URL = 'https://ark.cn-beijing.volces.com/api/v3';
6
+ class DoubaoProvider extends openai_compatible_1.OpenAICompatibleProvider {
7
+ constructor(apiKey, model = 'doubao-seed-1-6-250615', baseURL) {
8
+ super('doubao', apiKey, model, baseURL || process.env.DOUBAO_BASE_URL || exports.DEFAULT_DOUBAO_BASE_URL, 'Doubao (Volcengine Ark) uses an OpenAI-compatible endpoint');
9
+ }
10
+ }
11
+ exports.DoubaoProvider = DoubaoProvider;
12
+ //# sourceMappingURL=doubao.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doubao.js","sourceRoot":"","sources":["../../../src/core/text-providers/doubao.ts"],"names":[],"mappings":";;;AAAA,2DAA+D;AAElD,QAAA,uBAAuB,GAAG,0CAA0C,CAAC;AAElF,MAAa,cAAe,SAAQ,4CAAwB;IAC1D,YAAY,MAAc,EAAE,QAAgB,wBAAwB,EAAE,OAAgB;QACpF,KAAK,CACH,QAAQ,EACR,MAAM,EACN,KAAK,EACL,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,+BAAuB,EACjE,4DAA4D,CAC7D,CAAC;IACJ,CAAC;CACF;AAVD,wCAUC"}
@@ -0,0 +1,6 @@
1
+ import { OpenAICompatibleProvider } from './openai-compatible';
2
+ export declare const DEFAULT_GEMINI_BASE_URL = "https://generativelanguage.googleapis.com/v1beta/openai";
3
+ export declare class GeminiProvider extends OpenAICompatibleProvider {
4
+ constructor(apiKey: string, model?: string, baseURL?: string);
5
+ }
6
+ //# sourceMappingURL=gemini.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../src/core/text-providers/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,eAAO,MAAM,uBAAuB,4DAA4D,CAAC;AAEjG,qBAAa,cAAe,SAAQ,wBAAwB;gBAC9C,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAA2B,EAAE,OAAO,CAAC,EAAE,MAAM;CASjF"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GeminiProvider = exports.DEFAULT_GEMINI_BASE_URL = void 0;
4
+ const openai_compatible_1 = require("./openai-compatible");
5
+ exports.DEFAULT_GEMINI_BASE_URL = 'https://generativelanguage.googleapis.com/v1beta/openai';
6
+ class GeminiProvider extends openai_compatible_1.OpenAICompatibleProvider {
7
+ constructor(apiKey, model = 'gemini-2.0-flash', baseURL) {
8
+ super('gemini', apiKey, model, baseURL || process.env.GEMINI_BASE_URL || exports.DEFAULT_GEMINI_BASE_URL, 'Gemini uses an OpenAI-compatible endpoint');
9
+ }
10
+ }
11
+ exports.GeminiProvider = GeminiProvider;
12
+ //# sourceMappingURL=gemini.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../../src/core/text-providers/gemini.ts"],"names":[],"mappings":";;;AAAA,2DAA+D;AAElD,QAAA,uBAAuB,GAAG,yDAAyD,CAAC;AAEjG,MAAa,cAAe,SAAQ,4CAAwB;IAC1D,YAAY,MAAc,EAAE,QAAgB,kBAAkB,EAAE,OAAgB;QAC9E,KAAK,CACH,QAAQ,EACR,MAAM,EACN,KAAK,EACL,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,+BAAuB,EACjE,2CAA2C,CAC5C,CAAC;IACJ,CAAC;CACF;AAVD,wCAUC"}
@@ -0,0 +1,6 @@
1
+ import { OpenAICompatibleProvider } from './openai-compatible';
2
+ export declare const DEFAULT_GLM_BASE_URL = "https://open.bigmodel.cn/api/paas/v4";
3
+ export declare class GLMProvider extends OpenAICompatibleProvider {
4
+ constructor(apiKey: string, model?: string, baseURL?: string);
5
+ }
6
+ //# sourceMappingURL=glm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glm.d.ts","sourceRoot":"","sources":["../../../src/core/text-providers/glm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,eAAO,MAAM,oBAAoB,yCAAyC,CAAC;AAE3E,qBAAa,WAAY,SAAQ,wBAAwB;gBAC3C,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAqB,EAAE,OAAO,CAAC,EAAE,MAAM;CAS3E"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GLMProvider = exports.DEFAULT_GLM_BASE_URL = void 0;
4
+ const openai_compatible_1 = require("./openai-compatible");
5
+ exports.DEFAULT_GLM_BASE_URL = 'https://open.bigmodel.cn/api/paas/v4';
6
+ class GLMProvider extends openai_compatible_1.OpenAICompatibleProvider {
7
+ constructor(apiKey, model = 'glm-4-plus', baseURL) {
8
+ super('glm', apiKey, model, baseURL || process.env.GLM_BASE_URL || exports.DEFAULT_GLM_BASE_URL, 'GLM (BigModel) uses an OpenAI-compatible endpoint');
9
+ }
10
+ }
11
+ exports.GLMProvider = GLMProvider;
12
+ //# sourceMappingURL=glm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glm.js","sourceRoot":"","sources":["../../../src/core/text-providers/glm.ts"],"names":[],"mappings":";;;AAAA,2DAA+D;AAElD,QAAA,oBAAoB,GAAG,sCAAsC,CAAC;AAE3E,MAAa,WAAY,SAAQ,4CAAwB;IACvD,YAAY,MAAc,EAAE,QAAgB,YAAY,EAAE,OAAgB;QACxE,KAAK,CACH,KAAK,EACL,MAAM,EACN,KAAK,EACL,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,4BAAoB,EAC3D,mDAAmD,CACpD,CAAC;IACJ,CAAC;CACF;AAVD,kCAUC"}
@@ -0,0 +1,20 @@
1
+ import { BaseProvider } from './base';
2
+ import { RewriteOptions } from '../../types';
3
+ /** MiniMax OpenAI-compatible base URL (see https://platform.minimax.io/docs/api-reference/text-openai-api) */
4
+ export declare const DEFAULT_MINIMAX_BASE_URL = "https://api.minimaxi.com/v1";
5
+ export declare class MinimaxProvider extends BaseProvider {
6
+ name: string;
7
+ private apiKey;
8
+ private model;
9
+ private baseURL;
10
+ private client;
11
+ /**
12
+ * @param apiKey MiniMax API key from the console
13
+ * @param model e.g. MiniMax-M2.1, MiniMax-M2.7 (see MiniMax docs)
14
+ * @param baseURL Override API base; default MINIMAX_BASE_URL env or `https://api.minimaxi.com/v1`
15
+ */
16
+ constructor(apiKey: string, model?: string, baseURL?: string);
17
+ private getClient;
18
+ rewrite(text: string, options: RewriteOptions): Promise<string>;
19
+ }
20
+ //# sourceMappingURL=minimax.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minimax.d.ts","sourceRoot":"","sources":["../../../src/core/text-providers/minimax.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAI7C,8GAA8G;AAC9G,eAAO,MAAM,wBAAwB,gCAAgC,CAAC;AAEtE,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,IAAI,SAAa;IACjB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAA6B;IAE3C;;;;OAIG;gBAED,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAuB,EAC9B,OAAO,CAAC,EAAE,MAAM;YAQJ,SAAS;IAWjB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;CAyBtE"}
@@ -0,0 +1,88 @@
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.MinimaxProvider = exports.DEFAULT_MINIMAX_BASE_URL = void 0;
37
+ const base_1 = require("./base");
38
+ /** MiniMax OpenAI-compatible base URL (see https://platform.minimax.io/docs/api-reference/text-openai-api) */
39
+ exports.DEFAULT_MINIMAX_BASE_URL = 'https://api.minimaxi.com/v1';
40
+ class MinimaxProvider extends base_1.BaseProvider {
41
+ /**
42
+ * @param apiKey MiniMax API key from the console
43
+ * @param model e.g. MiniMax-M2.1, MiniMax-M2.7 (see MiniMax docs)
44
+ * @param baseURL Override API base; default MINIMAX_BASE_URL env or `https://api.minimaxi.com/v1`
45
+ */
46
+ constructor(apiKey, model = 'MiniMax-M2.1', baseURL) {
47
+ super();
48
+ this.name = 'minimax';
49
+ this.client = null;
50
+ this.apiKey = apiKey;
51
+ this.model = model;
52
+ this.baseURL = baseURL || process.env.MINIMAX_BASE_URL || exports.DEFAULT_MINIMAX_BASE_URL;
53
+ }
54
+ async getClient() {
55
+ if (!this.client) {
56
+ const OpenAI = await Promise.resolve().then(() => __importStar(require('openai'))).then(m => m.default || m);
57
+ this.client = new OpenAI({
58
+ apiKey: this.apiKey,
59
+ baseURL: this.baseURL,
60
+ });
61
+ }
62
+ return this.client;
63
+ }
64
+ async rewrite(text, options) {
65
+ try {
66
+ const client = await this.getClient();
67
+ const originalLength = text.length;
68
+ const response = await client.chat.completions.create({
69
+ model: this.model,
70
+ messages: [
71
+ { role: 'system', content: this.getSystemPrompt(options, originalLength) },
72
+ { role: 'user', content: this.getUserPrompt(text, options.preserveLength) },
73
+ ],
74
+ temperature: options.temperature ?? 0.7,
75
+ max_tokens: options.maxTokens ?? 2000,
76
+ });
77
+ return this.cleanupThinkingContent(response.choices[0]?.message?.content?.trim() || text);
78
+ }
79
+ catch (error) {
80
+ if (error.code === 'MODULE_NOT_FOUND') {
81
+ throw new Error('OpenAI SDK not installed. MiniMax uses the OpenAI-compatible API. Run: npm install openai');
82
+ }
83
+ throw new Error(`MiniMax API error: ${error.message}`);
84
+ }
85
+ }
86
+ }
87
+ exports.MinimaxProvider = MinimaxProvider;
88
+ //# sourceMappingURL=minimax.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minimax.js","sourceRoot":"","sources":["../../../src/core/text-providers/minimax.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAAsC;AAKtC,8GAA8G;AACjG,QAAA,wBAAwB,GAAG,6BAA6B,CAAC;AAEtE,MAAa,eAAgB,SAAQ,mBAAY;IAO/C;;;;OAIG;IACH,YACE,MAAc,EACd,QAAgB,cAAc,EAC9B,OAAgB;QAEhB,KAAK,EAAE,CAAC;QAhBV,SAAI,GAAG,SAAS,CAAC;QAIT,WAAM,GAAwB,IAAI,CAAC;QAazC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,gCAAwB,CAAC;IACrF,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,MAAM,kDAAO,QAAQ,IAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;YAChE,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC;gBACvB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAiB,CAAC;QACrB,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,KAAK;gBACjB,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,CACb,2FAA2F,CAC5F,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;CACF;AA3DD,0CA2DC"}
@@ -0,0 +1,14 @@
1
+ import { BaseProvider } from './base';
2
+ import { RewriteOptions } from '../../types';
3
+ export declare class OpenAICompatibleProvider extends BaseProvider {
4
+ name: string;
5
+ private apiKey;
6
+ private model;
7
+ private baseURL;
8
+ private sdkInstallHint;
9
+ private client;
10
+ constructor(providerName: string, apiKey: string, model: string, baseURL: string, sdkInstallHint?: string);
11
+ private getClient;
12
+ rewrite(text: string, options: RewriteOptions): Promise<string>;
13
+ }
14
+ //# sourceMappingURL=openai-compatible.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-compatible.d.ts","sourceRoot":"","sources":["../../../src/core/text-providers/openai-compatible.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAI7C,qBAAa,wBAAyB,SAAQ,YAAY;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,MAAM,CAA6B;gBAGzC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,cAAc,GAAE,MAAgC;YAUpC,SAAS;IAWjB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;CAuBtE"}
@@ -0,0 +1,82 @@
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.OpenAICompatibleProvider = void 0;
37
+ const base_1 = require("./base");
38
+ class OpenAICompatibleProvider extends base_1.BaseProvider {
39
+ constructor(providerName, apiKey, model, baseURL, sdkInstallHint = 'OpenAI-compatible API') {
40
+ super();
41
+ this.client = null;
42
+ this.name = providerName;
43
+ this.apiKey = apiKey;
44
+ this.model = model;
45
+ this.baseURL = baseURL;
46
+ this.sdkInstallHint = sdkInstallHint;
47
+ }
48
+ async getClient() {
49
+ if (!this.client) {
50
+ const OpenAI = await Promise.resolve().then(() => __importStar(require('openai'))).then(m => m.default || m);
51
+ this.client = new OpenAI({
52
+ apiKey: this.apiKey,
53
+ baseURL: this.baseURL,
54
+ });
55
+ }
56
+ return this.client;
57
+ }
58
+ async rewrite(text, options) {
59
+ try {
60
+ const client = await this.getClient();
61
+ const originalLength = text.length;
62
+ const response = await client.chat.completions.create({
63
+ model: this.model,
64
+ messages: [
65
+ { role: 'system', content: this.getSystemPrompt(options, originalLength) },
66
+ { role: 'user', content: this.getUserPrompt(text, options.preserveLength) },
67
+ ],
68
+ temperature: options.temperature ?? 0.7,
69
+ max_tokens: options.maxTokens ?? 2000,
70
+ });
71
+ return this.cleanupThinkingContent(response.choices[0]?.message?.content?.trim() || text);
72
+ }
73
+ catch (error) {
74
+ if (error.code === 'MODULE_NOT_FOUND') {
75
+ throw new Error(`OpenAI SDK not installed. ${this.sdkInstallHint}. Run: npm install openai`);
76
+ }
77
+ throw new Error(`${this.name} API error: ${error.message}`);
78
+ }
79
+ }
80
+ }
81
+ exports.OpenAICompatibleProvider = OpenAICompatibleProvider;
82
+ //# sourceMappingURL=openai-compatible.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-compatible.js","sourceRoot":"","sources":["../../../src/core/text-providers/openai-compatible.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAAsC;AAKtC,MAAa,wBAAyB,SAAQ,mBAAY;IAQxD,YACE,YAAoB,EACpB,MAAc,EACd,KAAa,EACb,OAAe,EACf,iBAAyB,uBAAuB;QAEhD,KAAK,EAAE,CAAC;QATF,WAAM,GAAwB,IAAI,CAAC;QAUzC,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,MAAM,kDAAO,QAAQ,IAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;YAChE,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC;gBACvB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAiB,CAAC;QACrB,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,KAAK;gBACjB,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,6BAA6B,IAAI,CAAC,cAAc,2BAA2B,CAAC,CAAC;YAC/F,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,eAAe,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;CACF;AAzDD,4DAyDC"}
@@ -0,0 +1,12 @@
1
+ import { BaseProvider } from './base';
2
+ import { RewriteOptions } from '../../types';
3
+ export declare class OpenAIProvider 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=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/core/text-providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAI7C,qBAAa,cAAe,SAAQ,YAAY;IAC9C,IAAI,SAAY;IAChB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAA6B;gBAE/B,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAsB;YAM3C,SAAS;IAQjB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;CAuBtE"}
@@ -0,0 +1,77 @@
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.OpenAIProvider = void 0;
37
+ const base_1 = require("./base");
38
+ class OpenAIProvider extends base_1.BaseProvider {
39
+ constructor(apiKey, model = 'gpt-4o-mini') {
40
+ super();
41
+ this.name = 'openai';
42
+ this.client = null;
43
+ this.apiKey = apiKey;
44
+ this.model = model;
45
+ }
46
+ async getClient() {
47
+ if (!this.client) {
48
+ const OpenAI = await Promise.resolve().then(() => __importStar(require('openai'))).then(m => m.default || m);
49
+ this.client = new OpenAI({ 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.chat.completions.create({
58
+ model: this.model,
59
+ messages: [
60
+ { role: 'system', content: this.getSystemPrompt(options, originalLength) },
61
+ { role: 'user', content: this.getUserPrompt(text, options.preserveLength) },
62
+ ],
63
+ temperature: options.temperature ?? 0.7,
64
+ max_tokens: options.maxTokens ?? 2000,
65
+ });
66
+ return this.cleanupThinkingContent(response.choices[0]?.message?.content?.trim() || text);
67
+ }
68
+ catch (error) {
69
+ if (error.code === 'MODULE_NOT_FOUND') {
70
+ throw new Error('OpenAI SDK not installed. Run: npm install openai');
71
+ }
72
+ throw new Error(`OpenAI API error: ${error.message}`);
73
+ }
74
+ }
75
+ }
76
+ exports.OpenAIProvider = OpenAIProvider;
77
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/core/text-providers/openai.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAAsC;AAKtC,MAAa,cAAe,SAAQ,mBAAY;IAM9C,YAAY,MAAc,EAAE,QAAgB,aAAa;QACvD,KAAK,EAAE,CAAC;QANV,SAAI,GAAG,QAAQ,CAAC;QAGR,WAAM,GAAwB,IAAI,CAAC;QAIzC,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,MAAM,GAAG,MAAM,kDAAO,QAAQ,IAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;YAChE,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAiB,CAAC;QACpE,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,KAAK;gBACjB,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,mDAAmD,CAAC,CAAC;YACvE,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,qBAAqB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;CACF;AA3CD,wCA2CC"}
@@ -0,0 +1,6 @@
1
+ import { OpenAICompatibleProvider } from './openai-compatible';
2
+ export declare const DEFAULT_OPENROUTER_BASE_URL = "https://openrouter.ai/api/v1";
3
+ export declare class OpenRouterProvider extends OpenAICompatibleProvider {
4
+ constructor(apiKey: string, model?: string, baseURL?: string);
5
+ }
6
+ //# sourceMappingURL=openrouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../../src/core/text-providers/openrouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,eAAO,MAAM,2BAA2B,iCAAiC,CAAC;AAE1E,qBAAa,kBAAmB,SAAQ,wBAAwB;gBAClD,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAA6B,EAAE,OAAO,CAAC,EAAE,MAAM;CASnF"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OpenRouterProvider = exports.DEFAULT_OPENROUTER_BASE_URL = void 0;
4
+ const openai_compatible_1 = require("./openai-compatible");
5
+ exports.DEFAULT_OPENROUTER_BASE_URL = 'https://openrouter.ai/api/v1';
6
+ class OpenRouterProvider extends openai_compatible_1.OpenAICompatibleProvider {
7
+ constructor(apiKey, model = 'openai/gpt-4o-mini', baseURL) {
8
+ super('openrouter', apiKey, model, baseURL || process.env.OPENROUTER_BASE_URL || exports.DEFAULT_OPENROUTER_BASE_URL, 'OpenRouter uses an OpenAI-compatible endpoint');
9
+ }
10
+ }
11
+ exports.OpenRouterProvider = OpenRouterProvider;
12
+ //# sourceMappingURL=openrouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter.js","sourceRoot":"","sources":["../../../src/core/text-providers/openrouter.ts"],"names":[],"mappings":";;;AAAA,2DAA+D;AAElD,QAAA,2BAA2B,GAAG,8BAA8B,CAAC;AAE1E,MAAa,kBAAmB,SAAQ,4CAAwB;IAC9D,YAAY,MAAc,EAAE,QAAgB,oBAAoB,EAAE,OAAgB;QAChF,KAAK,CACH,YAAY,EACZ,MAAM,EACN,KAAK,EACL,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,mCAA2B,EACzE,+CAA+C,CAChD,CAAC;IACJ,CAAC;CACF;AAVD,gDAUC"}
@@ -0,0 +1,6 @@
1
+ import { OpenAICompatibleProvider } from './openai-compatible';
2
+ export declare const DEFAULT_QWEN_BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1";
3
+ export declare class QwenProvider extends OpenAICompatibleProvider {
4
+ constructor(apiKey: string, model?: string, baseURL?: string);
5
+ }
6
+ //# sourceMappingURL=qwen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qwen.d.ts","sourceRoot":"","sources":["../../../src/core/text-providers/qwen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,eAAO,MAAM,qBAAqB,sDAAsD,CAAC;AAEzF,qBAAa,YAAa,SAAQ,wBAAwB;gBAC5C,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAoB,EAAE,OAAO,CAAC,EAAE,MAAM;CAS1E"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QwenProvider = exports.DEFAULT_QWEN_BASE_URL = void 0;
4
+ const openai_compatible_1 = require("./openai-compatible");
5
+ exports.DEFAULT_QWEN_BASE_URL = 'https://dashscope.aliyuncs.com/compatible-mode/v1';
6
+ class QwenProvider extends openai_compatible_1.OpenAICompatibleProvider {
7
+ constructor(apiKey, model = 'qwen-plus', baseURL) {
8
+ super('qwen', apiKey, model, baseURL || process.env.QWEN_BASE_URL || exports.DEFAULT_QWEN_BASE_URL, 'Qwen (DashScope) uses an OpenAI-compatible endpoint');
9
+ }
10
+ }
11
+ exports.QwenProvider = QwenProvider;
12
+ //# sourceMappingURL=qwen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qwen.js","sourceRoot":"","sources":["../../../src/core/text-providers/qwen.ts"],"names":[],"mappings":";;;AAAA,2DAA+D;AAElD,QAAA,qBAAqB,GAAG,mDAAmD,CAAC;AAEzF,MAAa,YAAa,SAAQ,4CAAwB;IACxD,YAAY,MAAc,EAAE,QAAgB,WAAW,EAAE,OAAgB;QACvE,KAAK,CACH,MAAM,EACN,MAAM,EACN,KAAK,EACL,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,6BAAqB,EAC7D,qDAAqD,CACtD,CAAC;IACJ,CAAC;CACF;AAVD,oCAUC"}
@@ -0,0 +1,6 @@
1
+ import { OpenAICompatibleProvider } from './openai-compatible';
2
+ export declare const DEFAULT_WENXIN_BASE_URL = "https://qianfan.baidubce.com/v2";
3
+ export declare class WenxinProvider extends OpenAICompatibleProvider {
4
+ constructor(apiKey: string, model?: string, baseURL?: string);
5
+ }
6
+ //# sourceMappingURL=wenxin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wenxin.d.ts","sourceRoot":"","sources":["../../../src/core/text-providers/wenxin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,eAAO,MAAM,uBAAuB,oCAAoC,CAAC;AAEzE,qBAAa,cAAe,SAAQ,wBAAwB;gBAC9C,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAA8B,EAAE,OAAO,CAAC,EAAE,MAAM;CASpF"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WenxinProvider = exports.DEFAULT_WENXIN_BASE_URL = void 0;
4
+ const openai_compatible_1 = require("./openai-compatible");
5
+ exports.DEFAULT_WENXIN_BASE_URL = 'https://qianfan.baidubce.com/v2';
6
+ class WenxinProvider extends openai_compatible_1.OpenAICompatibleProvider {
7
+ constructor(apiKey, model = 'ernie-4.0-8k-latest', baseURL) {
8
+ super('wenxin', apiKey, model, baseURL || process.env.WENXIN_BASE_URL || exports.DEFAULT_WENXIN_BASE_URL, 'Wenxin (Qianfan) uses an OpenAI-compatible endpoint');
9
+ }
10
+ }
11
+ exports.WenxinProvider = WenxinProvider;
12
+ //# sourceMappingURL=wenxin.js.map