larkcc 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/LICENSE +21 -0
- package/README.md +617 -0
- package/dist/agent.d.ts +9 -0
- package/dist/agent.js +177 -0
- package/dist/agent.js.map +1 -0
- package/dist/app.d.ts +14 -0
- package/dist/app.js +570 -0
- package/dist/app.js.map +1 -0
- package/dist/commands.d.ts +8 -0
- package/dist/commands.js +143 -0
- package/dist/commands.js.map +1 -0
- package/dist/config.d.ts +61 -0
- package/dist/config.js +184 -0
- package/dist/config.js.map +1 -0
- package/dist/feishu.d.ts +52 -0
- package/dist/feishu.js +964 -0
- package/dist/feishu.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +213 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +10 -0
- package/dist/logger.js +13 -0
- package/dist/logger.js.map +1 -0
- package/dist/multifile.d.ts +48 -0
- package/dist/multifile.js +107 -0
- package/dist/multifile.js.map +1 -0
- package/dist/oauth.d.ts +19 -0
- package/dist/oauth.js +142 -0
- package/dist/oauth.js.map +1 -0
- package/dist/session.d.ts +6 -0
- package/dist/session.js +59 -0
- package/dist/session.js.map +1 -0
- package/dist/setup.d.ts +2 -0
- package/dist/setup.js +45 -0
- package/dist/setup.js.map +1 -0
- package/package.json +58 -0
package/dist/commands.js
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { execSync } from "child_process";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import { logger } from "./logger.js";
|
|
4
|
+
function detectPkgManager(cwd) {
|
|
5
|
+
if (fs.existsSync(`${cwd}/pnpm-lock.yaml`))
|
|
6
|
+
return "pnpm";
|
|
7
|
+
if (fs.existsSync(`${cwd}/yarn.lock`))
|
|
8
|
+
return "yarn";
|
|
9
|
+
if (fs.existsSync(`${cwd}/Cargo.toml`))
|
|
10
|
+
return "cargo";
|
|
11
|
+
return "npm";
|
|
12
|
+
}
|
|
13
|
+
function runCmd(cmd, cwd) {
|
|
14
|
+
try {
|
|
15
|
+
return execSync(cmd, { cwd, encoding: "utf8", timeout: 30000 }).trim();
|
|
16
|
+
}
|
|
17
|
+
catch (e) {
|
|
18
|
+
return e.stdout?.trim() || e.stderr?.trim() || e.message || "Command failed";
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
// ── 内置快速执行命令(不走 Claude,秒返回) ───────────────────
|
|
22
|
+
export const BUILTIN_EXEC = {
|
|
23
|
+
"status": (cwd) => runCmd("git status && echo '---' && git log --oneline -5", cwd),
|
|
24
|
+
"s": (cwd) => runCmd("git status && echo '---' && git log --oneline -5", cwd),
|
|
25
|
+
"diff": (cwd) => runCmd("git diff", cwd),
|
|
26
|
+
"d": (cwd) => runCmd("git diff", cwd),
|
|
27
|
+
"log": (cwd) => runCmd("git log --oneline -20", cwd),
|
|
28
|
+
"l": (cwd) => runCmd("git log --oneline -20", cwd),
|
|
29
|
+
"branch": (cwd) => runCmd("git branch -a", cwd),
|
|
30
|
+
"b": (cwd) => runCmd("git branch -a", cwd),
|
|
31
|
+
"pwd": (cwd) => runCmd("pwd && echo '---' && ls -la", cwd),
|
|
32
|
+
"ps": (_) => runCmd("ps aux | grep -v grep | head -20", process.cwd()),
|
|
33
|
+
};
|
|
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
|
+
};
|
|
65
|
+
const HELP_TEXT = `可用命令:
|
|
66
|
+
|
|
67
|
+
⚡ 快速执行(不走 Claude):
|
|
68
|
+
/s /status git status + 最近提交
|
|
69
|
+
/d /diff git diff
|
|
70
|
+
/l /log git log
|
|
71
|
+
/b /branch 分支列表
|
|
72
|
+
/pwd 当前目录 + 文件列表
|
|
73
|
+
/ps 运行中的进程
|
|
74
|
+
|
|
75
|
+
💬 Claude 快捷方式:
|
|
76
|
+
/review 代码 review
|
|
77
|
+
/fix 修复报错
|
|
78
|
+
/doc 生成/更新文档
|
|
79
|
+
/test [文件] 生成单测
|
|
80
|
+
/explain [文件] 解释代码
|
|
81
|
+
/refactor [文件] 重构
|
|
82
|
+
/commit 生成 commit message
|
|
83
|
+
/pr 生成 PR 描述
|
|
84
|
+
/todo 整理 TODO 清单
|
|
85
|
+
/summary 生成工作日报
|
|
86
|
+
/bsx [内容] 头脑风暴,不动代码
|
|
87
|
+
/upmd 更新 README.md 和 CLAUDE.md
|
|
88
|
+
/build [命令] 构建项目
|
|
89
|
+
/install 安装依赖
|
|
90
|
+
/run [script] 运行 npm script
|
|
91
|
+
|
|
92
|
+
📁 多文件模式:
|
|
93
|
+
/mf start 开始多文件模式
|
|
94
|
+
/mf done 结束并发送所有文件
|
|
95
|
+
|
|
96
|
+
自定义命令在 ~/.larkcc/config.yml 的 commands 块配置。`;
|
|
97
|
+
export function parseCommand(text, cwd, customCommands = {}) {
|
|
98
|
+
if (!text.startsWith("/"))
|
|
99
|
+
return null;
|
|
100
|
+
const parts = text.slice(1).trim().split(/\s+/);
|
|
101
|
+
const cmd = parts[0].toLowerCase();
|
|
102
|
+
const args = parts.slice(1).join(" ");
|
|
103
|
+
if (cmd === "help" || cmd === "h") {
|
|
104
|
+
return { type: "help", output: HELP_TEXT };
|
|
105
|
+
}
|
|
106
|
+
// 多文件模式命令
|
|
107
|
+
if (cmd === "mf") {
|
|
108
|
+
const subCmd = args.toLowerCase().trim();
|
|
109
|
+
if (subCmd === "start") {
|
|
110
|
+
return { type: "multifile_start" };
|
|
111
|
+
}
|
|
112
|
+
else if (subCmd === "done" || subCmd === "end") {
|
|
113
|
+
return { type: "multifile_done" };
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
return {
|
|
117
|
+
type: "unknown",
|
|
118
|
+
output: `未知多文件命令 /mf ${subCmd},可用:/mf start, /mf done`,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
if (BUILTIN_EXEC[cmd]) {
|
|
123
|
+
logger.info(`Running /${cmd}...`);
|
|
124
|
+
const output = BUILTIN_EXEC[cmd](cwd);
|
|
125
|
+
return { type: "exec", output };
|
|
126
|
+
}
|
|
127
|
+
if (BUILTIN_PROMPTS[cmd]) {
|
|
128
|
+
const prompt = BUILTIN_PROMPTS[cmd](args, cwd);
|
|
129
|
+
return { type: "prompt", prompt };
|
|
130
|
+
}
|
|
131
|
+
if (customCommands[cmd]) {
|
|
132
|
+
const template = customCommands[cmd];
|
|
133
|
+
const prompt = template.includes("{input}")
|
|
134
|
+
? template.replace("{input}", args || "")
|
|
135
|
+
: (args ? `${template}\n补充信息:${args}` : template);
|
|
136
|
+
return { type: "prompt", prompt };
|
|
137
|
+
}
|
|
138
|
+
return {
|
|
139
|
+
type: "unknown",
|
|
140
|
+
output: `未知命令 /${cmd},发送 /help 查看可用命令`,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export interface FeishuConfig {
|
|
2
|
+
app_id: string;
|
|
3
|
+
app_secret: string;
|
|
4
|
+
owner_open_id: string;
|
|
5
|
+
}
|
|
6
|
+
export interface CleanupConfig {
|
|
7
|
+
enabled: boolean;
|
|
8
|
+
max_docs: number;
|
|
9
|
+
notify: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface FileConfig {
|
|
12
|
+
enabled: boolean;
|
|
13
|
+
size_limit: number;
|
|
14
|
+
temp_dir: string;
|
|
15
|
+
prompt: string;
|
|
16
|
+
multifile_prompt: string;
|
|
17
|
+
multifile_timeout: number;
|
|
18
|
+
}
|
|
19
|
+
export interface OverflowConfig {
|
|
20
|
+
mode: "chunk" | "document";
|
|
21
|
+
chunk: {
|
|
22
|
+
threshold: number;
|
|
23
|
+
};
|
|
24
|
+
document: {
|
|
25
|
+
threshold: number;
|
|
26
|
+
title_template: string;
|
|
27
|
+
cleanup: CleanupConfig;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export interface ProfileConfig {
|
|
31
|
+
feishu: FeishuConfig;
|
|
32
|
+
claude: {
|
|
33
|
+
permission_mode?: "acceptEdits" | "auto" | "default";
|
|
34
|
+
allowed_tools?: string[];
|
|
35
|
+
};
|
|
36
|
+
overflow?: OverflowConfig;
|
|
37
|
+
image_prompt?: string;
|
|
38
|
+
file?: Partial<FileConfig>;
|
|
39
|
+
commands?: Record<string, string>;
|
|
40
|
+
}
|
|
41
|
+
export interface LarkccConfig extends ProfileConfig {
|
|
42
|
+
}
|
|
43
|
+
export interface RawConfig {
|
|
44
|
+
feishu: FeishuConfig;
|
|
45
|
+
claude?: ProfileConfig["claude"];
|
|
46
|
+
overflow?: OverflowConfig;
|
|
47
|
+
image_prompt?: string;
|
|
48
|
+
file?: Partial<FileConfig>;
|
|
49
|
+
commands?: Record<string, string>;
|
|
50
|
+
profiles?: Record<string, Partial<ProfileConfig>>;
|
|
51
|
+
}
|
|
52
|
+
declare const GLOBAL_CONFIG_PATH: string;
|
|
53
|
+
export declare function loadConfig(cwd: string, profile?: string): LarkccConfig;
|
|
54
|
+
export declare function globalConfigExists(): boolean;
|
|
55
|
+
export declare function saveProfile(profile: string | undefined, feishu: FeishuConfig): void;
|
|
56
|
+
export declare function listProfiles(): Array<{
|
|
57
|
+
name: string;
|
|
58
|
+
app_id: string;
|
|
59
|
+
}>;
|
|
60
|
+
export { GLOBAL_CONFIG_PATH };
|
|
61
|
+
export declare function saveOwnerOpenId(openId: string, profile?: string): void;
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import os from "os";
|
|
4
|
+
import yaml from "js-yaml";
|
|
5
|
+
const DEFAULT_TOOLS = ["Read", "Write", "Edit", "Bash", "Glob", "Grep", "LS"];
|
|
6
|
+
const DEFAULT_IMAGE_PROMPT = "分析图片,给出回应";
|
|
7
|
+
const GLOBAL_CONFIG_PATH = path.join(os.homedir(), ".larkcc", "config.yml");
|
|
8
|
+
const PROJECT_CONFIG_NAME = ".larkcc.yml";
|
|
9
|
+
const DEFAULT_OVERFLOW = {
|
|
10
|
+
mode: "document",
|
|
11
|
+
chunk: { threshold: 2800 },
|
|
12
|
+
document: {
|
|
13
|
+
threshold: 2800,
|
|
14
|
+
title_template: "{datetime}",
|
|
15
|
+
cleanup: {
|
|
16
|
+
enabled: true,
|
|
17
|
+
max_docs: 50,
|
|
18
|
+
notify: true,
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
const DEFAULT_FILE_CONFIG = {
|
|
23
|
+
enabled: true,
|
|
24
|
+
size_limit: 30 * 1024 * 1024, // 30MB
|
|
25
|
+
temp_dir: path.join(os.homedir(), ".larkcc", "temp"),
|
|
26
|
+
prompt: "分析文件 {filename}(路径:{filepath},大小:{size},类型:{mime_type})",
|
|
27
|
+
multifile_prompt: "分析以下 {count} 个文件:\n{files}\n\n用户说明:{text}",
|
|
28
|
+
multifile_timeout: 300, // 5分钟
|
|
29
|
+
};
|
|
30
|
+
function loadYml(filePath) {
|
|
31
|
+
if (!fs.existsSync(filePath))
|
|
32
|
+
return null;
|
|
33
|
+
try {
|
|
34
|
+
return yaml.load(fs.readFileSync(filePath, "utf8"));
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export function loadConfig(cwd, profile) {
|
|
41
|
+
const raw = loadYml(GLOBAL_CONFIG_PATH) ?? {};
|
|
42
|
+
const projectOverride = loadYml(path.join(cwd, PROJECT_CONFIG_NAME)) ?? {};
|
|
43
|
+
// 选择 profile
|
|
44
|
+
let feishu;
|
|
45
|
+
let claude = raw.claude ?? {};
|
|
46
|
+
let overflow = raw.overflow ?? {};
|
|
47
|
+
let file = raw.file ?? {};
|
|
48
|
+
if (profile && profile !== "default") {
|
|
49
|
+
const profileData = raw.profiles?.[profile];
|
|
50
|
+
if (!profileData)
|
|
51
|
+
throw new Error(`Profile "${profile}" not found. Run: larkcc --setup -p ${profile}`);
|
|
52
|
+
feishu = { ...raw.feishu, ...profileData.feishu };
|
|
53
|
+
claude = { ...claude, ...profileData.claude };
|
|
54
|
+
overflow = { ...overflow, ...profileData.overflow };
|
|
55
|
+
file = { ...file, ...profileData.file };
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
feishu = raw.feishu;
|
|
59
|
+
}
|
|
60
|
+
// 项目级覆盖(不覆盖飞书配置,只覆盖 claude 配置)
|
|
61
|
+
if (projectOverride.claude) {
|
|
62
|
+
claude = { ...claude, ...projectOverride.claude };
|
|
63
|
+
}
|
|
64
|
+
if (!feishu?.app_id)
|
|
65
|
+
throw new Error("Missing feishu.app_id in config");
|
|
66
|
+
if (!feishu?.app_secret)
|
|
67
|
+
throw new Error("Missing feishu.app_secret in config");
|
|
68
|
+
// owner_open_id 可以为空,首次收到消息时自动填入
|
|
69
|
+
// 处理 temp_dir 中的 ~ 前缀
|
|
70
|
+
let tempDir = file.temp_dir ?? DEFAULT_FILE_CONFIG.temp_dir;
|
|
71
|
+
if (tempDir.startsWith("~")) {
|
|
72
|
+
tempDir = path.join(os.homedir(), tempDir.slice(1));
|
|
73
|
+
}
|
|
74
|
+
// 为不同 profile 创建子目录
|
|
75
|
+
const profileTempDir = profile && profile !== "default"
|
|
76
|
+
? path.join(tempDir, profile)
|
|
77
|
+
: path.join(tempDir, "default");
|
|
78
|
+
return {
|
|
79
|
+
feishu,
|
|
80
|
+
claude: {
|
|
81
|
+
permission_mode: claude.permission_mode ?? "acceptEdits",
|
|
82
|
+
allowed_tools: claude.allowed_tools ?? DEFAULT_TOOLS,
|
|
83
|
+
},
|
|
84
|
+
overflow: {
|
|
85
|
+
mode: overflow.mode ?? DEFAULT_OVERFLOW.mode,
|
|
86
|
+
chunk: { threshold: overflow.chunk?.threshold ?? DEFAULT_OVERFLOW.chunk.threshold },
|
|
87
|
+
document: {
|
|
88
|
+
threshold: overflow.document?.threshold ?? DEFAULT_OVERFLOW.document.threshold,
|
|
89
|
+
title_template: overflow.document?.title_template ?? DEFAULT_OVERFLOW.document.title_template,
|
|
90
|
+
cleanup: {
|
|
91
|
+
enabled: overflow.document?.cleanup?.enabled ?? DEFAULT_OVERFLOW.document.cleanup.enabled,
|
|
92
|
+
max_docs: overflow.document?.cleanup?.max_docs ?? DEFAULT_OVERFLOW.document.cleanup.max_docs,
|
|
93
|
+
notify: overflow.document?.cleanup?.notify ?? DEFAULT_OVERFLOW.document.cleanup.notify,
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
image_prompt: raw.image_prompt ?? DEFAULT_IMAGE_PROMPT,
|
|
98
|
+
file: {
|
|
99
|
+
enabled: file.enabled ?? DEFAULT_FILE_CONFIG.enabled,
|
|
100
|
+
size_limit: file.size_limit ?? DEFAULT_FILE_CONFIG.size_limit,
|
|
101
|
+
temp_dir: profileTempDir,
|
|
102
|
+
prompt: file.prompt ?? DEFAULT_FILE_CONFIG.prompt,
|
|
103
|
+
multifile_prompt: file.multifile_prompt ?? DEFAULT_FILE_CONFIG.multifile_prompt,
|
|
104
|
+
multifile_timeout: file.multifile_timeout ?? DEFAULT_FILE_CONFIG.multifile_timeout,
|
|
105
|
+
},
|
|
106
|
+
commands: raw.commands,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
export function globalConfigExists() {
|
|
110
|
+
return fs.existsSync(GLOBAL_CONFIG_PATH);
|
|
111
|
+
}
|
|
112
|
+
export function saveProfile(profile, feishu) {
|
|
113
|
+
const dir = path.dirname(GLOBAL_CONFIG_PATH);
|
|
114
|
+
if (!fs.existsSync(dir))
|
|
115
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
116
|
+
let raw = loadYml(GLOBAL_CONFIG_PATH) ?? {};
|
|
117
|
+
if (!profile || profile === "default") {
|
|
118
|
+
raw.feishu = feishu;
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
if (!raw.profiles)
|
|
122
|
+
raw.profiles = {};
|
|
123
|
+
raw.profiles[profile] = { feishu };
|
|
124
|
+
}
|
|
125
|
+
if (!raw.claude) {
|
|
126
|
+
raw.claude = {
|
|
127
|
+
permission_mode: "acceptEdits",
|
|
128
|
+
allowed_tools: DEFAULT_TOOLS,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
// 添加默认 overflow 配置(首次创建时)
|
|
132
|
+
if (!raw.overflow) {
|
|
133
|
+
raw.overflow = DEFAULT_OVERFLOW;
|
|
134
|
+
}
|
|
135
|
+
// 添加默认 image_prompt 配置(首次创建时)
|
|
136
|
+
if (!raw.image_prompt) {
|
|
137
|
+
raw.image_prompt = DEFAULT_IMAGE_PROMPT;
|
|
138
|
+
}
|
|
139
|
+
// 添加默认 file 配置(首次创建时)
|
|
140
|
+
if (!raw.file) {
|
|
141
|
+
raw.file = DEFAULT_FILE_CONFIG;
|
|
142
|
+
}
|
|
143
|
+
// 确保 cleanup 配置存在(兼容旧配置)
|
|
144
|
+
if (!raw.overflow.document?.cleanup) {
|
|
145
|
+
raw.overflow.document = raw.overflow.document || {};
|
|
146
|
+
raw.overflow.document.cleanup = DEFAULT_OVERFLOW.document.cleanup;
|
|
147
|
+
}
|
|
148
|
+
fs.writeFileSync(GLOBAL_CONFIG_PATH, yaml.dump(raw), "utf8");
|
|
149
|
+
}
|
|
150
|
+
export function listProfiles() {
|
|
151
|
+
const raw = loadYml(GLOBAL_CONFIG_PATH) ?? {};
|
|
152
|
+
const result = [];
|
|
153
|
+
if (raw.feishu?.app_id) {
|
|
154
|
+
result.push({ name: "default", app_id: raw.feishu.app_id });
|
|
155
|
+
}
|
|
156
|
+
for (const [name, profile] of Object.entries(raw.profiles ?? {})) {
|
|
157
|
+
result.push({ name, app_id: profile.feishu?.app_id ?? "(no app_id)" });
|
|
158
|
+
}
|
|
159
|
+
return result;
|
|
160
|
+
}
|
|
161
|
+
export { GLOBAL_CONFIG_PATH };
|
|
162
|
+
// 首次收到消息时自动写入 owner_open_id
|
|
163
|
+
export function saveOwnerOpenId(openId, profile) {
|
|
164
|
+
const dir = path.dirname(GLOBAL_CONFIG_PATH);
|
|
165
|
+
if (!fs.existsSync(dir))
|
|
166
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
167
|
+
let raw = loadYml(GLOBAL_CONFIG_PATH) ?? {};
|
|
168
|
+
if (!profile || profile === "default") {
|
|
169
|
+
if (!raw.feishu)
|
|
170
|
+
raw.feishu = {};
|
|
171
|
+
raw.feishu.owner_open_id = openId;
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
if (!raw.profiles)
|
|
175
|
+
raw.profiles = {};
|
|
176
|
+
if (!raw.profiles[profile])
|
|
177
|
+
raw.profiles[profile] = {};
|
|
178
|
+
if (!raw.profiles[profile].feishu)
|
|
179
|
+
raw.profiles[profile].feishu = {};
|
|
180
|
+
raw.profiles[profile].feishu.owner_open_id = openId;
|
|
181
|
+
}
|
|
182
|
+
fs.writeFileSync(GLOBAL_CONFIG_PATH, yaml.dump(raw), "utf8");
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +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"}
|
package/dist/feishu.d.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import * as lark from "@larksuiteoapi/node-sdk";
|
|
2
|
+
import { OverflowConfig } from "./config.js";
|
|
3
|
+
export declare function createLarkClient(appId: string, appSecret: string): lark.Client;
|
|
4
|
+
export declare function createWSClient(appId: string, appSecret: string): lark.WSClient;
|
|
5
|
+
export declare function sendText(client: lark.Client, chatId: string, text: string): Promise<string>;
|
|
6
|
+
export declare function replyText(client: lark.Client, chatId: string, rootMsgId: string, text: string): Promise<string>;
|
|
7
|
+
export declare function updateText(client: lark.Client, msgId: string, text: string): Promise<void>;
|
|
8
|
+
export declare function replyFinalCard(client: lark.Client, chatId: string, rootMsgId: string, markdown: string, context?: ReplyContext): Promise<void>;
|
|
9
|
+
export declare function sendToolCard(client: lark.Client, chatId: string, rootMsgId: string, label: string, detail: string, status?: "running" | "done" | "error"): Promise<string>;
|
|
10
|
+
export declare function updateToolCard(client: lark.Client, msgId: string, label: string, detail: string, _resultPreview: string): Promise<void>;
|
|
11
|
+
export declare function downloadImage(client: lark.Client, messageId: string, imageKey: string): Promise<{
|
|
12
|
+
base64: string;
|
|
13
|
+
mediaType: string;
|
|
14
|
+
} | null>;
|
|
15
|
+
export interface DownloadedFile {
|
|
16
|
+
filepath: string;
|
|
17
|
+
filename: string;
|
|
18
|
+
size: number;
|
|
19
|
+
mime_type: string;
|
|
20
|
+
file_key: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* 下载飞书消息中的文件到本地临时目录
|
|
24
|
+
*/
|
|
25
|
+
export declare function downloadFile(client: lark.Client, messageId: string, fileKey: string, tempDir: string, filename: string): Promise<DownloadedFile | null>;
|
|
26
|
+
interface ReplyContext {
|
|
27
|
+
profile: string;
|
|
28
|
+
cwd: string;
|
|
29
|
+
sessionId: string;
|
|
30
|
+
overflow: OverflowConfig;
|
|
31
|
+
chatId: string;
|
|
32
|
+
rootMsgId: string;
|
|
33
|
+
appId: string;
|
|
34
|
+
appSecret: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 文档元信息
|
|
38
|
+
*/
|
|
39
|
+
interface DocumentMeta {
|
|
40
|
+
cwd: string;
|
|
41
|
+
profile: string;
|
|
42
|
+
sessionId: string;
|
|
43
|
+
datetime: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* 创建云文档并写入内容(在应用云空间)
|
|
47
|
+
*/
|
|
48
|
+
export declare function createOverflowDocument(token: string, title: string, markdown: string, originalMessage: string, meta: DocumentMeta): Promise<{
|
|
49
|
+
docUrl: string;
|
|
50
|
+
docId: string;
|
|
51
|
+
}>;
|
|
52
|
+
export {};
|