larkcc 0.1.6 → 0.1.8

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/commands.js CHANGED
@@ -1,6 +1,25 @@
1
1
  import { execSync } from "child_process";
2
2
  import fs from "fs";
3
+ import path from "path";
4
+ import { fileURLToPath } from "url";
5
+ import yaml from "js-yaml";
3
6
  import { logger } from "./logger.js";
7
+ // 获取当前文件目录
8
+ const __filename = fileURLToPath(import.meta.url);
9
+ const __dirname = path.dirname(__filename);
10
+ // 加载内置 PROMPT 默认值
11
+ function loadDefaultPrompts() {
12
+ const ymlPath = path.join(__dirname, "commands", "default-prompts.yml");
13
+ try {
14
+ const content = fs.readFileSync(ymlPath, "utf8");
15
+ return yaml.load(content);
16
+ }
17
+ catch {
18
+ logger.warn("Failed to load default-prompts.yml");
19
+ return {};
20
+ }
21
+ }
22
+ const DEFAULT_PROMPTS = loadDefaultPrompts();
4
23
  function detectPkgManager(cwd) {
5
24
  if (fs.existsSync(`${cwd}/pnpm-lock.yaml`))
6
25
  return "pnpm";
@@ -10,7 +29,7 @@ function detectPkgManager(cwd) {
10
29
  return "cargo";
11
30
  return "npm";
12
31
  }
13
- function runCmd(cmd, cwd) {
32
+ export function runCmd(cmd, cwd) {
14
33
  try {
15
34
  return execSync(cmd, { cwd, encoding: "utf8", timeout: 30000 }).trim();
16
35
  }
@@ -31,37 +50,51 @@ export const BUILTIN_EXEC = {
31
50
  "pwd": (cwd) => runCmd("pwd && echo '---' && ls -la", cwd),
32
51
  "ps": (_) => runCmd("ps aux | grep -v grep | head -20", process.cwd()),
33
52
  };
34
- // ── 内置 Claude prompt 快捷方式 ──────────────────────────────
35
- export const BUILTIN_PROMPTS = {
36
- "review": (_, __) => "帮我 review 最近的 git diff,关注安全性、性能、代码质量,给出具体改进建议",
37
- "fix": (_, __) => "分析项目最近的报错日志或测试失败,找到根本原因并修复",
38
- "doc": (_, __) => "为当前项目生成或更新 README,包括项目介绍、安装、使用方法",
39
- "test": (args, __) => args ? `为 ${args} 生成完整的单元测试` : "为最近修改的文件生成单元测试",
40
- "explain": (args, __) => args ? `详细解释 ${args} 的作用、逻辑和关键设计决策` : "解释当前项目的整体架构",
41
- "refactor": (args, __) => args ? `重构 ${args},提升可读性、性能和可维护性,保持功能不变` : "找出项目中最需要重构的部分并重构",
42
- "commit": (_, __) => "分析当前 git diff,生成符合 Conventional Commits 规范的 commit message,直接输出,不要解释",
43
- "pr": (_, __) => "基于当前分支的改动,生成详细的 PR 描述,包括改动说明、测试方案、注意事项",
44
- "todo": (_, __) => "扫描项目里所有的 TODO、FIXME、HACK 注释,整理成优先级清单并给出建议",
45
- "summary": (_, __) => "总结今天的代码改动,生成简洁的工作日报",
46
- "bsx": (args, __) => {
47
- const prompt = "先不动代码,我们头脑风暴,深度讨论方案与规划,并给出你需要确认的。";
48
- return args ? `${prompt}\n\n${args}` : prompt;
49
- },
50
- "upmd": (_, __) => "更新 README.md(如果存在,如果不存在就新增)和 CLAUDE.md(如果存在)。确保文档与代码保持同步,包括:功能描述、使用方法、配置说明等。",
51
- "build": (args, cwd) => {
52
- const pm = detectPkgManager(cwd);
53
- const cmd = pm === "cargo" ? "cargo build" : `${pm} run build`;
54
- return args ? `运行构建命令:${args}` : `运行项目构建命令 \`${cmd}\`,如有报错帮我修复`;
55
- },
56
- "install": (_, cwd) => {
57
- const pm = detectPkgManager(cwd);
58
- return `运行 \`${pm} install\` 安装依赖,如有问题帮我解决`;
59
- },
60
- "run": (args, cwd) => {
61
- const pm = detectPkgManager(cwd);
62
- return args ? `运行 \`${pm} run ${args}\`,如有报错帮我修复` : `列出 package.json 中可用的 scripts 并帮我选择`;
63
- },
64
- };
53
+ // ── 模板解析 ──────────────────────────────────────────────────
54
+ /**
55
+ * 解析模板参数
56
+ * 支持 {{param}} 和 {{param|default}} 语法
57
+ */
58
+ export function parseTemplate(template, args) {
59
+ const parts = args.split(/\s+/).filter(Boolean);
60
+ // 匹配所有 {{...}} 占位符
61
+ let result = template;
62
+ const placeholderRegex = /\{\{(\w+)(?:\|([^}]*))?\}\}/g;
63
+ let match;
64
+ let argIndex = 0;
65
+ while ((match = placeholderRegex.exec(template)) !== null) {
66
+ const [fullMatch, paramName, defaultValue] = match;
67
+ const hasDefault = defaultValue !== undefined;
68
+ // 特殊处理:args 表示所有剩余参数
69
+ if (paramName === "args") {
70
+ result = result.replace(fullMatch, args || defaultValue || "");
71
+ continue;
72
+ }
73
+ // 按顺序取参数
74
+ const value = parts[argIndex] || (hasDefault ? defaultValue : "");
75
+ if (parts[argIndex])
76
+ argIndex++;
77
+ result = result.replace(fullMatch, value);
78
+ }
79
+ return result;
80
+ }
81
+ export function checkExecSecurity(cmd, security) {
82
+ if (!security.enabled) {
83
+ return { safe: true };
84
+ }
85
+ const cmdLower = cmd.toLowerCase();
86
+ for (const keyword of security.blacklist) {
87
+ if (cmdLower.includes(keyword.toLowerCase())) {
88
+ return {
89
+ safe: !security.confirm_on_warning,
90
+ reason: `检测到危险关键词: ${keyword}`,
91
+ needsConfirm: security.confirm_on_warning,
92
+ };
93
+ }
94
+ }
95
+ return { safe: true };
96
+ }
97
+ // ── 命令处理 ──────────────────────────────────────────────────
65
98
  const HELP_TEXT = `可用命令:
66
99
 
67
100
  ⚡ 快速执行(不走 Claude):
@@ -94,7 +127,7 @@ const HELP_TEXT = `可用命令:
94
127
  /mf done 结束并发送所有文件
95
128
 
96
129
  自定义命令在 ~/.larkcc/config.yml 的 commands 块配置。`;
97
- export function parseCommand(text, cwd, customCommands = {}) {
130
+ export function parseCommand(text, cwd, context) {
98
131
  if (!text.startsWith("/"))
99
132
  return null;
100
133
  const parts = text.slice(1).trim().split(/\s+/);
@@ -119,22 +152,75 @@ export function parseCommand(text, cwd, customCommands = {}) {
119
152
  };
120
153
  }
121
154
  }
155
+ // 1. 内置 EXEC 命令(优先级最高,不可覆盖)
122
156
  if (BUILTIN_EXEC[cmd]) {
123
157
  logger.info(`Running /${cmd}...`);
124
158
  const output = BUILTIN_EXEC[cmd](cwd);
125
159
  return { type: "exec", output };
126
160
  }
127
- if (BUILTIN_PROMPTS[cmd]) {
128
- const prompt = BUILTIN_PROMPTS[cmd](args, cwd);
129
- return { type: "prompt", prompt };
161
+ // 2. 用户自定义 EXEC 命令
162
+ if (context.execCommands[cmd]) {
163
+ const template = context.execCommands[cmd];
164
+ const resolvedCmd = parseTemplate(template, args);
165
+ // 安全检查
166
+ const securityResult = checkExecSecurity(resolvedCmd, context.execSecurity);
167
+ if (securityResult.needsConfirm) {
168
+ return {
169
+ type: "exec_confirm",
170
+ cmd: resolvedCmd,
171
+ output: securityResult.reason,
172
+ };
173
+ }
174
+ if (!securityResult.safe) {
175
+ return {
176
+ type: "unknown",
177
+ output: `❌ 命令被阻止: ${securityResult.reason}`,
178
+ };
179
+ }
180
+ logger.info(`Running custom exec /${cmd}: ${resolvedCmd}`);
181
+ const output = runCmd(resolvedCmd, cwd);
182
+ return { type: "exec", output };
130
183
  }
131
- if (customCommands[cmd]) {
132
- const template = customCommands[cmd];
184
+ // 3. 用户自定义 PROMPT 命令(覆盖内置)
185
+ if (context.customCommands[cmd]) {
186
+ const template = context.customCommands[cmd];
133
187
  const prompt = template.includes("{input}")
134
188
  ? template.replace("{input}", args || "")
135
189
  : (args ? `${template}\n补充信息:${args}` : template);
136
190
  return { type: "prompt", prompt };
137
191
  }
192
+ // 4. 内置 PROMPT 命令(从配置文件加载)
193
+ if (DEFAULT_PROMPTS[cmd]) {
194
+ let prompt = DEFAULT_PROMPTS[cmd];
195
+ // 处理带参数的命令
196
+ if (cmd === "test" || cmd === "explain" || cmd === "refactor") {
197
+ if (args) {
198
+ if (cmd === "test")
199
+ prompt = `为 ${args} 生成完整的单元测试`;
200
+ if (cmd === "explain")
201
+ prompt = `详细解释 ${args} 的作用、逻辑和关键设计决策`;
202
+ if (cmd === "refactor")
203
+ prompt = `重构 ${args},提升可读性、性能和可维护性,保持功能不变`;
204
+ }
205
+ }
206
+ else if (cmd === "bsx") {
207
+ prompt = args ? `${prompt}\n\n${args}` : prompt;
208
+ }
209
+ else if (cmd === "build") {
210
+ const pm = detectPkgManager(cwd);
211
+ const buildCmd = pm === "cargo" ? "cargo build" : `${pm} run build`;
212
+ prompt = args ? `运行构建命令:${args}` : `运行项目构建命令 \`${buildCmd}\`,如有报错帮我修复`;
213
+ }
214
+ else if (cmd === "install") {
215
+ const pm = detectPkgManager(cwd);
216
+ prompt = `运行 \`${pm} install\` 安装依赖,如有问题帮我解决`;
217
+ }
218
+ else if (cmd === "run") {
219
+ const pm = detectPkgManager(cwd);
220
+ prompt = args ? `运行 \`${pm} run ${args}\`,如有报错帮我修复` : `列出 package.json 中可用的 scripts 并帮我选择`;
221
+ }
222
+ return { type: "prompt", prompt };
223
+ }
138
224
  return {
139
225
  type: "unknown",
140
226
  output: `未知命令 /${cmd},发送 /help 查看可用命令`,
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -27,6 +27,11 @@ export interface OverflowConfig {
27
27
  cleanup: CleanupConfig;
28
28
  };
29
29
  }
30
+ export interface ExecSecurity {
31
+ enabled: boolean;
32
+ blacklist: string[];
33
+ confirm_on_warning: boolean;
34
+ }
30
35
  export interface ProfileConfig {
31
36
  feishu: FeishuConfig;
32
37
  claude: {
@@ -37,6 +42,8 @@ export interface ProfileConfig {
37
42
  image_prompt?: string;
38
43
  file?: Partial<FileConfig>;
39
44
  commands?: Record<string, string>;
45
+ exec_commands?: Record<string, string>;
46
+ exec_security?: ExecSecurity;
40
47
  }
41
48
  export interface LarkccConfig extends ProfileConfig {
42
49
  }
@@ -47,6 +54,8 @@ export interface RawConfig {
47
54
  image_prompt?: string;
48
55
  file?: Partial<FileConfig>;
49
56
  commands?: Record<string, string>;
57
+ exec_commands?: Record<string, string>;
58
+ exec_security?: ExecSecurity;
50
59
  profiles?: Record<string, Partial<ProfileConfig>>;
51
60
  }
52
61
  declare const GLOBAL_CONFIG_PATH: string;
package/dist/config.js CHANGED
@@ -27,6 +27,23 @@ const DEFAULT_FILE_CONFIG = {
27
27
  multifile_prompt: "分析以下 {count} 个文件:\n{files}\n\n用户说明:{text}",
28
28
  multifile_timeout: 300, // 5分钟
29
29
  };
30
+ const DEFAULT_EXEC_SECURITY = {
31
+ enabled: true,
32
+ blacklist: [
33
+ "rm -rf",
34
+ "rm -r",
35
+ "sudo",
36
+ "mkfs",
37
+ "dd if=",
38
+ "> /dev/",
39
+ "chmod 777",
40
+ "chmod -R",
41
+ "chown -R",
42
+ "shutdown",
43
+ "reboot",
44
+ ],
45
+ confirm_on_warning: true,
46
+ };
30
47
  function loadYml(filePath) {
31
48
  if (!fs.existsSync(filePath))
32
49
  return null;
@@ -104,6 +121,12 @@ export function loadConfig(cwd, profile) {
104
121
  multifile_timeout: file.multifile_timeout ?? DEFAULT_FILE_CONFIG.multifile_timeout,
105
122
  },
106
123
  commands: raw.commands,
124
+ exec_commands: raw.exec_commands,
125
+ exec_security: {
126
+ enabled: raw.exec_security?.enabled ?? DEFAULT_EXEC_SECURITY.enabled,
127
+ blacklist: raw.exec_security?.blacklist ?? DEFAULT_EXEC_SECURITY.blacklist,
128
+ confirm_on_warning: raw.exec_security?.confirm_on_warning ?? DEFAULT_EXEC_SECURITY.confirm_on_warning,
129
+ },
107
130
  };
108
131
  }
109
132
  export function globalConfigExists() {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,SAAS,CAAC;AAyD3B,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAC9E,MAAM,oBAAoB,GAAG,WAAW,CAAC;AACzC,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;AAC5E,MAAM,mBAAmB,GAAG,aAAa,CAAC;AAE1C,MAAM,gBAAgB,GAAmB;IACvC,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;IAC1B,QAAQ,EAAE;QACR,SAAS,EAAE,IAAI;QACf,cAAc,EAAE,YAAY;QAC5B,OAAO,EAAE;YACP,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,EAAE;YACZ,MAAM,EAAE,IAAI;SACb;KACF;CACF,CAAC;AAEF,MAAM,mBAAmB,GAAe;IACtC,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAG,OAAO;IACtC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC;IACpD,MAAM,EAAE,yDAAyD;IACjE,gBAAgB,EAAE,2CAA2C;IAC7D,iBAAiB,EAAE,GAAG,EAAG,MAAM;CAChC,CAAC;AAEF,SAAS,OAAO,CAAC,QAAgB;IAC/B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW,EAAE,OAAgB;IACtD,MAAM,GAAG,GAAc,OAAO,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;IACzD,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC,IAAI,EAAE,CAAC;IAE3E,aAAa;IACb,IAAI,MAAoB,CAAC;IACzB,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;IAC9B,IAAI,QAAQ,GAA4B,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;IAC3D,IAAI,IAAI,GAAwB,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IAE/C,IAAI,OAAO,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACrC,MAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,YAAY,OAAO,uCAAuC,OAAO,EAAE,CAAC,CAAC;QACvG,MAAM,GAAG,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,EAAkB,CAAC;QAClE,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;QAC9C,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;QACpD,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IAC1C,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IACtB,CAAC;IAED,+BAA+B;IAC/B,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC;IACpD,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACxE,IAAI,CAAC,MAAM,EAAE,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAChF,iCAAiC;IAEjC,sBAAsB;IACtB,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,IAAI,mBAAmB,CAAC,QAAQ,CAAC;IAC5D,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,oBAAoB;IACpB,MAAM,cAAc,GAAG,OAAO,IAAI,OAAO,KAAK,SAAS;QACrD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;QAC7B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAElC,OAAO;QACL,MAAM;QACN,MAAM,EAAE;YACN,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,aAAa;YACxD,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,aAAa;SACrD;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,gBAAgB,CAAC,IAAI;YAC5C,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,gBAAgB,CAAC,KAAK,CAAC,SAAS,EAAE;YACnF,QAAQ,EAAE;gBACR,SAAS,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,IAAI,gBAAgB,CAAC,QAAQ,CAAC,SAAS;gBAC9E,cAAc,EAAE,QAAQ,CAAC,QAAQ,EAAE,cAAc,IAAI,gBAAgB,CAAC,QAAQ,CAAC,cAAc;gBAC7F,OAAO,EAAE;oBACP,OAAO,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,IAAI,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO;oBACzF,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ;oBAC5F,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,IAAI,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM;iBACvF;aACF;SACF;QACD,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,oBAAoB;QACtD,IAAI,EAAE;YACJ,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,mBAAmB,CAAC,OAAO;YACpD,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,mBAAmB,CAAC,UAAU;YAC7D,QAAQ,EAAE,cAAc;YACxB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,mBAAmB,CAAC,MAAM;YACjD,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,IAAI,mBAAmB,CAAC,gBAAgB;YAC/E,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,IAAI,mBAAmB,CAAC,iBAAiB;SACnF;QACD,QAAQ,EAAE,GAAG,CAAC,QAAQ;KACvB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAA2B,EAAE,MAAoB;IAC3E,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhE,IAAI,GAAG,GAAQ,OAAO,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;IAEjD,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACtC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,GAAG,CAAC,QAAQ;YAAE,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;QACrC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC;IACrC,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAChB,GAAG,CAAC,MAAM,GAAG;YACX,eAAe,EAAE,aAAa;YAC9B,aAAa,EAAE,aAAa;SAC7B,CAAC;IACJ,CAAC;IAED,0BAA0B;IAC1B,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAClB,GAAG,CAAC,QAAQ,GAAG,gBAAgB,CAAC;IAClC,CAAC;IAED,8BAA8B;IAC9B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QACtB,GAAG,CAAC,YAAY,GAAG,oBAAoB,CAAC;IAC1C,CAAC;IAED,sBAAsB;IACtB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACd,GAAG,CAAC,IAAI,GAAG,mBAAmB,CAAC;IACjC,CAAC;IAED,yBAAyB;IACzB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;QACpC,GAAG,CAAC,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;QACpD,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC;IACpE,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,GAAG,GAAc,OAAO,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;IACzD,MAAM,MAAM,GAA4C,EAAE,CAAC;IAE3D,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;QACjE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,IAAI,aAAa,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,4BAA4B;AAC5B,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,OAAgB;IAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhE,IAAI,GAAG,GAAQ,OAAO,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;IAEjD,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACtC,IAAI,CAAC,GAAG,CAAC,MAAM;YAAE,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;QACjC,GAAG,CAAC,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,GAAG,CAAC,QAAQ;YAAE,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;QACrC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACvD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM;YAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC;QACrE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC;IACtD,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;AAC/D,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,SAAS,CAAC;AAmE3B,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAC9E,MAAM,oBAAoB,GAAG,WAAW,CAAC;AACzC,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;AAC5E,MAAM,mBAAmB,GAAG,aAAa,CAAC;AAE1C,MAAM,gBAAgB,GAAmB;IACvC,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;IAC1B,QAAQ,EAAE;QACR,SAAS,EAAE,IAAI;QACf,cAAc,EAAE,YAAY;QAC5B,OAAO,EAAE;YACP,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,EAAE;YACZ,MAAM,EAAE,IAAI;SACb;KACF;CACF,CAAC;AAEF,MAAM,mBAAmB,GAAe;IACtC,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAG,OAAO;IACtC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC;IACpD,MAAM,EAAE,yDAAyD;IACjE,gBAAgB,EAAE,2CAA2C;IAC7D,iBAAiB,EAAE,GAAG,EAAG,MAAM;CAChC,CAAC;AAEF,MAAM,qBAAqB,GAAiB;IAC1C,OAAO,EAAE,IAAI;IACb,SAAS,EAAE;QACT,QAAQ;QACR,OAAO;QACP,MAAM;QACN,MAAM;QACN,QAAQ;QACR,SAAS;QACT,WAAW;QACX,UAAU;QACV,UAAU;QACV,UAAU;QACV,QAAQ;KACT;IACD,kBAAkB,EAAE,IAAI;CACzB,CAAC;AAEF,SAAS,OAAO,CAAC,QAAgB;IAC/B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW,EAAE,OAAgB;IACtD,MAAM,GAAG,GAAc,OAAO,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;IACzD,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC,IAAI,EAAE,CAAC;IAE3E,aAAa;IACb,IAAI,MAAoB,CAAC;IACzB,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;IAC9B,IAAI,QAAQ,GAA4B,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;IAC3D,IAAI,IAAI,GAAwB,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IAE/C,IAAI,OAAO,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACrC,MAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,YAAY,OAAO,uCAAuC,OAAO,EAAE,CAAC,CAAC;QACvG,MAAM,GAAG,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,EAAkB,CAAC;QAClE,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;QAC9C,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;QACpD,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IAC1C,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IACtB,CAAC;IAED,+BAA+B;IAC/B,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC;IACpD,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACxE,IAAI,CAAC,MAAM,EAAE,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAChF,iCAAiC;IAEjC,sBAAsB;IACtB,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,IAAI,mBAAmB,CAAC,QAAQ,CAAC;IAC5D,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,oBAAoB;IACpB,MAAM,cAAc,GAAG,OAAO,IAAI,OAAO,KAAK,SAAS;QACrD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;QAC7B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAElC,OAAO;QACL,MAAM;QACN,MAAM,EAAE;YACN,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,aAAa;YACxD,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,aAAa;SACrD;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,gBAAgB,CAAC,IAAI;YAC5C,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,gBAAgB,CAAC,KAAK,CAAC,SAAS,EAAE;YACnF,QAAQ,EAAE;gBACR,SAAS,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,IAAI,gBAAgB,CAAC,QAAQ,CAAC,SAAS;gBAC9E,cAAc,EAAE,QAAQ,CAAC,QAAQ,EAAE,cAAc,IAAI,gBAAgB,CAAC,QAAQ,CAAC,cAAc;gBAC7F,OAAO,EAAE;oBACP,OAAO,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,IAAI,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO;oBACzF,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ;oBAC5F,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,IAAI,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM;iBACvF;aACF;SACF;QACD,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,oBAAoB;QACtD,IAAI,EAAE;YACJ,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,mBAAmB,CAAC,OAAO;YACpD,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,mBAAmB,CAAC,UAAU;YAC7D,QAAQ,EAAE,cAAc;YACxB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,mBAAmB,CAAC,MAAM;YACjD,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,IAAI,mBAAmB,CAAC,gBAAgB;YAC/E,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,IAAI,mBAAmB,CAAC,iBAAiB;SACnF;QACD,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,aAAa,EAAE;YACb,OAAO,EAAE,GAAG,CAAC,aAAa,EAAE,OAAO,IAAI,qBAAqB,CAAC,OAAO;YACpE,SAAS,EAAE,GAAG,CAAC,aAAa,EAAE,SAAS,IAAI,qBAAqB,CAAC,SAAS;YAC1E,kBAAkB,EAAE,GAAG,CAAC,aAAa,EAAE,kBAAkB,IAAI,qBAAqB,CAAC,kBAAkB;SACtG;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAA2B,EAAE,MAAoB;IAC3E,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhE,IAAI,GAAG,GAAQ,OAAO,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;IAEjD,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACtC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,GAAG,CAAC,QAAQ;YAAE,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;QACrC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC;IACrC,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAChB,GAAG,CAAC,MAAM,GAAG;YACX,eAAe,EAAE,aAAa;YAC9B,aAAa,EAAE,aAAa;SAC7B,CAAC;IACJ,CAAC;IAED,0BAA0B;IAC1B,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAClB,GAAG,CAAC,QAAQ,GAAG,gBAAgB,CAAC;IAClC,CAAC;IAED,8BAA8B;IAC9B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QACtB,GAAG,CAAC,YAAY,GAAG,oBAAoB,CAAC;IAC1C,CAAC;IAED,sBAAsB;IACtB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACd,GAAG,CAAC,IAAI,GAAG,mBAAmB,CAAC;IACjC,CAAC;IAED,yBAAyB;IACzB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;QACpC,GAAG,CAAC,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;QACpD,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC;IACpE,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,GAAG,GAAc,OAAO,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;IACzD,MAAM,MAAM,GAA4C,EAAE,CAAC;IAE3D,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;QACjE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,IAAI,aAAa,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,4BAA4B;AAC5B,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,OAAgB;IAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhE,IAAI,GAAG,GAAQ,OAAO,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;IAEjD,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACtC,IAAI,CAAC,GAAG,CAAC,MAAM;YAAE,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;QACjC,GAAG,CAAC,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,GAAG,CAAC,QAAQ;YAAE,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;QACrC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACvD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM;YAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC;QACrE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC;IACtD,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;AAC/D,CAAC"}
package/dist/feishu.js CHANGED
@@ -2,6 +2,7 @@ import * as lark from "@larksuiteoapi/node-sdk";
2
2
  import * as fs from "fs";
3
3
  import * as path from "path";
4
4
  import * as os from "os";
5
+ import { sanitizeContent, formatWarnings, BlockType, LanguageMap } from "./format/index.js";
5
6
  const DOC_REGISTRY_DIR = path.join(os.homedir(), ".larkcc");
6
7
  function getDocRegistryPath(profile) {
7
8
  if (!profile || profile === "default") {
@@ -133,12 +134,12 @@ export async function replyFinalCard(client, chatId, rootMsgId, markdown, contex
133
134
  }
134
135
  }
135
136
  async function sendMessageChunk(client, rootMsgId, content) {
136
- // 过滤 blob URL
137
- const { content: sanitizedContent, filteredCount } = sanitizeContent(content);
138
- // 追加过滤通知
137
+ // 过滤 blob URL 和外部图片
138
+ const { content: sanitizedContent, warnings } = sanitizeContent(content);
139
+ // 追加警告消息
139
140
  let finalContent = sanitizedContent;
140
- if (filteredCount > 0) {
141
- finalContent += `\n\n(已过滤 ${filteredCount} 个无效图片)`;
141
+ if (warnings.length > 0) {
142
+ finalContent += formatWarnings(warnings);
142
143
  }
143
144
  try {
144
145
  const card = buildMarkdownCard(finalContent);
@@ -369,31 +370,11 @@ export async function downloadFile(client, messageId, fileKey, tempDir, filename
369
370
  return null;
370
371
  }
371
372
  }
372
- // ── 内容清理 ─────────────────────────────────────────────────
373
- /**
374
- * 清理内容中的 blob URL
375
- * 返回: { content: 清理后的内容, filteredCount: 过滤的 blob URL 数量 }
376
- */
377
- function sanitizeContent(content) {
378
- // 统计 blob URL 数量
379
- const blobMatches = content.match(/blob:https?:\/\//gi) || [];
380
- const filteredCount = blobMatches.length;
381
- if (filteredCount > 0) {
382
- console.error(`[WARN] Filtered ${filteredCount} blob URL(s) from content`);
383
- // 1. 移除 Markdown 图片 ![...](blob:...)
384
- content = content.replace(/!\[[^\]]*\]\(blob:[^)]+\)/gi, '');
385
- // 2. 保留文字,移除 blob 链接 [...](blob:...)
386
- content = content.replace(/\[([^\]]+)\]\(blob:[^)]+\)/gi, '$1');
387
- // 3. 移除独立的 blob URL
388
- content = content.replace(/blob:https?:\/\/[^\s\)]+/gi, '');
389
- }
390
- return { content, filteredCount };
391
- }
392
373
  // ── 卡片构建 ─────────────────────────────────────────────────
393
- function buildMarkdownCard(markdown, filteredCount = 0) {
374
+ function buildMarkdownCard(markdown, warnings = []) {
394
375
  let content = markdown;
395
- if (filteredCount > 0) {
396
- content += `\n\n(已过滤 ${filteredCount} 个无效图片)`;
376
+ if (warnings.length > 0) {
377
+ content += formatWarnings(warnings);
397
378
  }
398
379
  return {
399
380
  schema: "2.0",
@@ -415,173 +396,6 @@ async function safeJsonParse(res, context) {
415
396
  throw new Error(`${context} returned non-JSON: ${text.slice(0, 200)}`);
416
397
  }
417
398
  }
418
- // 飞书文档块类型常量(通过 API 测试验证)
419
- // 注意:飞书 API 的 block_type 与文档类型是一一对应的,不是用属性区分
420
- const BlockType = {
421
- PAGE: 1, // 页面
422
- TEXT: 2, // 文本
423
- HEADING1: 3, // 一级标题
424
- HEADING2: 4, // 二级标题
425
- HEADING3: 5, // 三级标题
426
- BULLET: 12, // 无序列表
427
- ORDERED: 13, // 有序列表
428
- CODE: 14, // 代码块
429
- QUOTE: 15, // 引用块
430
- DIVIDER: 22, // 分割线
431
- };
432
- // 飞书官方语言ID对照表(ID范围1-75)
433
- // 参考:https://open.feishu.cn/document/ukTMukTMukTM/uUDN04SN0QjL1QDN/files/guide/create-document/create-new-document/create-new-document-overview
434
- const LanguageMap = {
435
- // 1 - PlainText
436
- "": 1, "text": 1, "plain": 1, "txt": 1,
437
- // 2 - ABAP
438
- "abap": 2,
439
- // 3 - Ada
440
- "ada": 3,
441
- // 4 - Apache
442
- "apache": 4, "apacheconf": 4,
443
- // 5 - Apex
444
- "apex": 5,
445
- // 6 - Assembly
446
- "assembly": 6, "asm": 6,
447
- // 7 - Bash
448
- "bash": 7, "sh": 7, "shell": 7, "zsh": 7,
449
- // 8 - CSharp
450
- "csharp": 8, "cs": 8, "c#": 8,
451
- // 9 - C++
452
- "cpp": 9, "c++": 9, "cplusplus": 9, "cc": 9, "cxx": 9,
453
- // 10 - C
454
- "c": 10,
455
- // 11 - COBOL
456
- "cobol": 11,
457
- // 12 - CSS
458
- "css": 12,
459
- // 13 - CoffeeScript
460
- "coffeescript": 13, "coffee": 13,
461
- // 14 - D
462
- "d": 14,
463
- // 15 - Dart
464
- "dart": 15,
465
- // 16 - Delphi
466
- "delphi": 16, "pas": 16, "pascal": 16,
467
- // 17 - Django
468
- "django": 17, "jinja2": 17,
469
- // 18 - Dockerfile
470
- "dockerfile": 18, "docker": 18,
471
- // 19 - Erlang
472
- "erlang": 19, "erl": 19,
473
- // 20 - Fortran
474
- "fortran": 20, "f90": 20,
475
- // 21 - FoxPro
476
- "foxpro": 21, "dbf": 21,
477
- // 22 - Go
478
- "go": 22, "golang": 22,
479
- // 23 - Groovy
480
- "groovy": 23, "gradle": 23,
481
- // 24 - HTML
482
- "html": 24, "htm": 24,
483
- // 25 - HTMLBars
484
- "htmlbars": 25, "handlebars": 25, "hbs": 25,
485
- // 26 - HTTP
486
- "http": 26, "https": 26,
487
- // 27 - Haskell
488
- "haskell": 27, "hs": 27,
489
- // 28 - JSON
490
- "json": 28,
491
- // 29 - Java
492
- "java": 29,
493
- // 30 - JavaScript
494
- "javascript": 30, "js": 30, "jsx": 30,
495
- // 31 - Julia
496
- "julia": 31,
497
- // 32 - Kotlin
498
- "kotlin": 32, "kt": 32, "kts": 32,
499
- // 33 - LaTeX
500
- "latex": 33, "tex": 33,
501
- // 34 - Lisp
502
- "lisp": 34, "elisp": 34, "clisp": 34,
503
- // 35 - Logo
504
- "logo": 35,
505
- // 36 - Lua
506
- "lua": 36,
507
- // 37 - MATLAB
508
- "matlab": 37,
509
- // 38 - Makefile
510
- "makefile": 38, "make": 38, "mk": 38,
511
- // 39 - Markdown
512
- "markdown": 39, "md": 39,
513
- // 40 - Nginx
514
- "nginx": 40, "nginxconf": 40,
515
- // 41 - Objective-C
516
- "objc": 41, "objective-c": 41, "oc": 41,
517
- // 42 - OpenEdgeABL
518
- "openedge": 42, "abl": 42,
519
- // 43 - PHP
520
- "php": 43,
521
- // 44 - Perl
522
- "perl": 44, "pl": 44,
523
- // 45 - PostScript
524
- "postscript": 45, "ps": 45,
525
- // 46 - PowerShell
526
- "powershell": 46, "ps1": 46, "pwsh": 46,
527
- // 47 - Prolog
528
- "prolog": 47,
529
- // 48 - ProtoBuf
530
- "protobuf": 48, "proto": 48, "pb": 48,
531
- // 49 - Python
532
- "python": 49, "py": 49,
533
- // 50 - R
534
- "r": 50,
535
- // 51 - RPG
536
- "rpg": 51,
537
- // 52 - Ruby
538
- "ruby": 52, "rb": 52,
539
- // 53 - Rust
540
- "rust": 53, "rs": 53,
541
- // 54 - SAS
542
- "sas": 54,
543
- // 55 - SCSS
544
- "scss": 55, "sass": 55,
545
- // 56 - SQL
546
- "sql": 56, "mysql": 56, "postgresql": 56, "pgsql": 56,
547
- // 57 - Scala
548
- "scala": 57,
549
- // 58 - Scheme
550
- "scheme": 58,
551
- // 59 - Scratch
552
- "scratch": 59,
553
- // 60 - Shell (shell 别名已归入 Bash 7)
554
- // 61 - Swift
555
- "swift": 61,
556
- // 62 - Thrift
557
- "thrift": 62,
558
- // 63 - TypeScript
559
- "typescript": 63, "ts": 63, "tsx": 63,
560
- // 64 - VBScript
561
- "vbscript": 64, "vbs": 64,
562
- // 65 - Visual Basic
563
- "vb": 65, "visual basic": 65, "vbnet": 65,
564
- // 66 - XML
565
- "xml": 66,
566
- // 67 - YAML
567
- "yaml": 67, "yml": 67,
568
- // 68 - CMake
569
- "cmake": 68,
570
- // 69 - Diff
571
- "diff": 69, "patch": 69,
572
- // 70 - Gherkin
573
- "gherkin": 70, "cucumber": 70, "feature": 70,
574
- // 71 - GraphQL
575
- "graphql": 71, "gql": 71,
576
- // 72 - OpenGL Shading Language
577
- "glsl": 72, "opengl": 72,
578
- // 73 - Properties
579
- "properties": 73, "ini": 73, "conf": 73,
580
- // 74 - Solidity
581
- "solidity": 74, "sol": 74,
582
- // 75 - TOML
583
- "toml": 75, "tml": 75,
584
- };
585
399
  /**
586
400
  * 解析内联 Markdown 文本,支持粗体、斜体、行内代码、链接等
587
401
  * 返回飞书文本元素数组
@@ -680,10 +494,10 @@ function parseInlineText(text) {
680
494
  */
681
495
  function markdownToBlocks(markdown, originalMessage, meta) {
682
496
  const blocks = [];
683
- // 过滤 blob URL
684
- const { content: sanitizedMarkdown, filteredCount } = sanitizeContent(markdown);
685
- if (filteredCount > 0) {
686
- console.error(`[WARN] Filtered ${filteredCount} blob URL(s) from document content`);
497
+ // 过滤 blob URL 和外部图片
498
+ const { content: sanitizedMarkdown, warnings } = sanitizeContent(markdown);
499
+ if (warnings.length > 0) {
500
+ console.error(`[WARN] Content sanitization: ${warnings.join(", ")}`);
687
501
  }
688
502
  // 处理 markdown 内容
689
503
  const lines = sanitizedMarkdown.split("\n");
@@ -868,16 +682,16 @@ function markdownToBlocks(markdown, originalMessage, meta) {
868
682
  else {
869
683
  blocks.unshift(...header);
870
684
  }
871
- // 如果有过滤的 blob URL,追加通知块
872
- if (filteredCount > 0) {
685
+ // 如果有警告,追加通知块
686
+ if (warnings.length > 0) {
873
687
  blocks.push({
874
688
  block_type: BlockType.TEXT,
875
689
  text: {
876
- elements: [{ text_run: { content: `(已过滤 ${filteredCount} 个无效图片)` } }],
690
+ elements: [{ text_run: { content: `(${warnings.join(",")})` } }],
877
691
  },
878
692
  });
879
693
  }
880
- return { blocks, filteredCount };
694
+ return { blocks, warnings };
881
695
  }
882
696
  /**
883
697
  * 创建云文档并写入内容(在应用云空间)