@keyou007/agent-bot 0.1.1 → 0.1.2
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 +6 -0
- package/README.md +4 -0
- package/README.zh.md +4 -0
- package/config.example.yaml +0 -2
- package/dist/cli/Initializer.js +155 -11
- package/dist/cli/Initializer.js.map +1 -1
- package/dist/cli/LocalControlClient.js +14 -1
- package/dist/cli/LocalControlClient.js.map +1 -1
- package/dist/cli.js +70 -50
- package/dist/cli.js.map +1 -1
- package/dist/config/loadConfig.js +0 -2
- package/dist/config/loadConfig.js.map +1 -1
- package/dist/config/schema.js +1 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/feishu/FeishuConnector.js +79 -13
- package/dist/feishu/FeishuConnector.js.map +1 -1
- package/dist/feishu/transport.js +4 -11
- package/dist/feishu/transport.js.map +1 -1
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/startup/startFeishu.js +2 -1
- package/dist/startup/startFeishu.js.map +1 -1
- package/dist/supervisor.js +7 -4
- package/dist/supervisor.js.map +1 -1
- package/docs/technical-reference.md +6 -10
- package/docs/technical-reference.zh.md +6 -10
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- package/skills/agent-bot/SKILL.md +1 -1
- package/src/cli/Initializer.ts +164 -11
- package/src/cli/LocalControlClient.ts +12 -1
- package/src/cli.ts +77 -46
- package/src/config/loadConfig.ts +0 -2
- package/src/config/schema.ts +1 -1
- package/src/feishu/FeishuConnector.ts +89 -12
- package/src/feishu/transport.ts +7 -16
- package/src/index.ts +14 -3
- package/src/startup/startFeishu.ts +2 -0
- package/src/supervisor.ts +7 -4
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,12 @@ The project follows [Semantic Versioning](https://semver.org/).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.1.2] - 2026-07-29
|
|
10
|
+
|
|
11
|
+
- Make npm release retries recover a missing GitHub Release from the version tag.
|
|
12
|
+
- Wait for the Feishu WebSocket connection before reporting the server as ready, and reject server startup when bot credentials are missing.
|
|
13
|
+
- Make Feishu initialization recover safely from interruption with exclusive initialization locking, durable credential writes, and new app registration whenever a complete credential pair was not saved.
|
|
14
|
+
|
|
9
15
|
## [0.1.1] - 2026-07-29
|
|
10
16
|
|
|
11
17
|
- Add `npm run release` to prepare the next stable version and changelog.
|
package/README.md
CHANGED
|
@@ -47,6 +47,8 @@ agent-bot init
|
|
|
47
47
|
|
|
48
48
|
Follow the displayed link or scan the QR code to create and authorize the Feishu bot. Initialization prepares `~/.agent-bot`, saves the bot credentials, and checks the required permissions.
|
|
49
49
|
|
|
50
|
+
Only a complete app ID and secret saved locally count as a successful bot creation. If initialization is interrupted before both credentials are saved, rerunning `agent-bot init` creates a new bot. If credentials were saved, initialization resumes by auditing that bot's remote permissions and subscriptions.
|
|
51
|
+
|
|
50
52
|
Missing optional permissions do not block initialization. Agent Bot reports which features may be unavailable.
|
|
51
53
|
|
|
52
54
|
| Option | Purpose |
|
|
@@ -65,6 +67,8 @@ agent-bot server start
|
|
|
65
67
|
agent-bot server status
|
|
66
68
|
```
|
|
67
69
|
|
|
70
|
+
`server start` requires configured Feishu credentials and waits until the bot's persistent connection is ready. Run `agent-bot init` first if the credentials are missing. For local-only use, run `agent-bot console` instead.
|
|
71
|
+
|
|
68
72
|
Open Feishu, find the bot, and send a message. Agent Bot automatically creates a task for a chat that does not have one yet.
|
|
69
73
|
|
|
70
74
|
Stop the service with:
|
package/README.zh.md
CHANGED
|
@@ -47,6 +47,8 @@ agent-bot init
|
|
|
47
47
|
|
|
48
48
|
打开命令显示的链接或扫描二维码,完成飞书机器人创建和授权。初始化会准备 `~/.agent-bot`、保存机器人凭据并检查所需权限。
|
|
49
49
|
|
|
50
|
+
只有 App ID 和 App Secret 都已保存到本地才视为机器人创建成功。如果初始化在完整凭据保存前中断,再次运行 `agent-bot init` 会创建新机器人;如果凭据已经保存,则会继续检查该机器人的远端权限和订阅。
|
|
51
|
+
|
|
50
52
|
非核心权限缺失不会阻塞初始化,Agent Bot 会提示可能无法使用的功能。
|
|
51
53
|
|
|
52
54
|
| 参数 | 作用 |
|
|
@@ -65,6 +67,8 @@ agent-bot server start
|
|
|
65
67
|
agent-bot server status
|
|
66
68
|
```
|
|
67
69
|
|
|
70
|
+
`server start` 要求已经配置飞书机器人,并会等待机器人的长连接就绪。缺少凭据时请先运行 `agent-bot init`;仅在本地使用时请改用 `agent-bot console`。
|
|
71
|
+
|
|
68
72
|
打开飞书,找到机器人并发送消息。当前会话没有任务时,Agent Bot 会自动创建。
|
|
69
73
|
|
|
70
74
|
停止服务:
|
package/config.example.yaml
CHANGED
package/dist/cli/Initializer.js
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
1
2
|
import fs from "node:fs";
|
|
3
|
+
import os from "node:os";
|
|
2
4
|
import path from "node:path";
|
|
3
5
|
import { fileURLToPath } from "node:url";
|
|
4
6
|
import { parse as parseDotEnv } from "dotenv";
|
|
5
7
|
import { agentBotHome, defaultConfigPath, defaultDotEnvPath, resolveUserPath, } from "../config/paths.js";
|
|
6
8
|
const DEFAULT_CONFIG_TEMPLATE = fileURLToPath(new URL("../../config.example.yaml", import.meta.url));
|
|
7
9
|
const DEFAULT_ENV_TEMPLATE = fileURLToPath(new URL("../../.env.example", import.meta.url));
|
|
10
|
+
const INITIALIZATION_LOCK_NAME = "init.lock";
|
|
11
|
+
const MAX_INITIALIZATION_LOCK_AGE_MS = 30 * 60_000;
|
|
8
12
|
export function initializeAgentBot(options = {}) {
|
|
9
13
|
const env = options.env ?? process.env;
|
|
10
14
|
const configTemplatePath = path.resolve(options.configTemplatePath ?? DEFAULT_CONFIG_TEMPLATE);
|
|
@@ -18,14 +22,7 @@ export function initializeAgentBot(options = {}) {
|
|
|
18
22
|
const configDirectory = path.dirname(configPath);
|
|
19
23
|
const home = ensureDirectory(homePath);
|
|
20
24
|
fs.mkdirSync(configDirectory, { recursive: true });
|
|
21
|
-
|
|
22
|
-
if (fs.existsSync(configPath)) {
|
|
23
|
-
config = { path: configPath, status: "existing" };
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
fs.copyFileSync(configTemplatePath, configPath, fs.constants.COPYFILE_EXCL);
|
|
27
|
-
config = { path: configPath, status: "created" };
|
|
28
|
-
}
|
|
25
|
+
const config = copyIfMissing(configTemplatePath, configPath);
|
|
29
26
|
const envFile = copyIfMissing(envTemplatePath, envPath);
|
|
30
27
|
restrictFilePermissions(envFile.path);
|
|
31
28
|
const data = ensureDirectory(path.join(configDirectory, "data"));
|
|
@@ -50,15 +47,92 @@ export function writeFeishuCredentials(envPath, credentials) {
|
|
|
50
47
|
updated = upsertDotEnvValue(updated, "FEISHU_APP_SECRET", credentials.appSecret);
|
|
51
48
|
fs.mkdirSync(path.dirname(envPath), { recursive: true });
|
|
52
49
|
const temporaryPath = `${envPath}.${process.pid}.${Date.now()}.tmp`;
|
|
50
|
+
let temporaryFile;
|
|
53
51
|
try {
|
|
54
|
-
fs.
|
|
52
|
+
temporaryFile = fs.openSync(temporaryPath, "wx", 0o600);
|
|
53
|
+
fs.writeFileSync(temporaryFile, updated, "utf8");
|
|
54
|
+
fs.fsyncSync(temporaryFile);
|
|
55
|
+
fs.closeSync(temporaryFile);
|
|
56
|
+
temporaryFile = undefined;
|
|
55
57
|
fs.renameSync(temporaryPath, envPath);
|
|
58
|
+
syncDirectory(path.dirname(envPath));
|
|
56
59
|
restrictFilePermissions(envPath);
|
|
60
|
+
const persisted = readFeishuCredentials(envPath, {});
|
|
61
|
+
if (persisted.status !== "configured"
|
|
62
|
+
|| persisted.appId !== credentials.appId
|
|
63
|
+
|| persisted.appSecret !== credentials.appSecret) {
|
|
64
|
+
throw new Error("飞书凭据写入后校验失败。");
|
|
65
|
+
}
|
|
57
66
|
}
|
|
58
67
|
finally {
|
|
68
|
+
if (temporaryFile !== undefined)
|
|
69
|
+
fs.closeSync(temporaryFile);
|
|
59
70
|
fs.rmSync(temporaryPath, { force: true });
|
|
60
71
|
}
|
|
61
72
|
}
|
|
73
|
+
export function shouldCreateFeishuApp(credentials, reconfigureFeishu) {
|
|
74
|
+
return reconfigureFeishu || credentials.status !== "configured";
|
|
75
|
+
}
|
|
76
|
+
export function acquireInitializationLock(lockDirectory) {
|
|
77
|
+
fs.mkdirSync(lockDirectory, { recursive: true });
|
|
78
|
+
const lockPath = path.join(lockDirectory, INITIALIZATION_LOCK_NAME);
|
|
79
|
+
const owner = {
|
|
80
|
+
token: randomUUID(),
|
|
81
|
+
pid: process.pid,
|
|
82
|
+
hostname: os.hostname(),
|
|
83
|
+
startedAt: new Date().toISOString(),
|
|
84
|
+
};
|
|
85
|
+
for (let attempt = 0; attempt < 3; attempt += 1) {
|
|
86
|
+
let lockFile;
|
|
87
|
+
let created = false;
|
|
88
|
+
try {
|
|
89
|
+
lockFile = fs.openSync(lockPath, "wx", 0o600);
|
|
90
|
+
created = true;
|
|
91
|
+
fs.writeFileSync(lockFile, `${JSON.stringify(owner)}\n`, "utf8");
|
|
92
|
+
fs.fsyncSync(lockFile);
|
|
93
|
+
fs.closeSync(lockFile);
|
|
94
|
+
lockFile = undefined;
|
|
95
|
+
return {
|
|
96
|
+
path: lockPath,
|
|
97
|
+
release: () => {
|
|
98
|
+
const current = readInitializationLock(lockPath);
|
|
99
|
+
if (current?.token === owner.token)
|
|
100
|
+
fs.rmSync(lockPath, { force: true });
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
if (lockFile !== undefined)
|
|
106
|
+
fs.closeSync(lockFile);
|
|
107
|
+
if (created)
|
|
108
|
+
fs.rmSync(lockPath, { force: true });
|
|
109
|
+
if (!isFileExistsError(error))
|
|
110
|
+
throw error;
|
|
111
|
+
if (!isStaleInitializationLock(lockPath)) {
|
|
112
|
+
throw new Error(`另一个 agent-bot init 正在运行(锁文件:${lockPath})。`);
|
|
113
|
+
}
|
|
114
|
+
fs.rmSync(lockPath, { force: true });
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
throw new Error(`无法获取初始化锁:${lockPath}`);
|
|
118
|
+
}
|
|
119
|
+
export function cleanupFeishuCredentialTemporaryFiles(envPath) {
|
|
120
|
+
const directory = path.dirname(envPath);
|
|
121
|
+
if (!fs.existsSync(directory))
|
|
122
|
+
return 0;
|
|
123
|
+
const prefix = `${path.basename(envPath)}.`;
|
|
124
|
+
let removed = 0;
|
|
125
|
+
for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {
|
|
126
|
+
if (!entry.isFile() || !entry.name.startsWith(prefix) || !entry.name.endsWith(".tmp"))
|
|
127
|
+
continue;
|
|
128
|
+
const middle = entry.name.slice(prefix.length, -".tmp".length);
|
|
129
|
+
if (!/^\d+\.\d+$/.test(middle))
|
|
130
|
+
continue;
|
|
131
|
+
fs.rmSync(path.join(directory, entry.name), { force: true });
|
|
132
|
+
removed += 1;
|
|
133
|
+
}
|
|
134
|
+
return removed;
|
|
135
|
+
}
|
|
62
136
|
function assertTemplate(templatePath) {
|
|
63
137
|
if (!fs.statSync(templatePath, { throwIfNoEntry: false })?.isFile()) {
|
|
64
138
|
throw new Error(`Initialization template does not exist: ${templatePath}`);
|
|
@@ -73,8 +147,15 @@ function copyIfMissing(sourcePath, targetPath) {
|
|
|
73
147
|
if (fs.existsSync(targetPath))
|
|
74
148
|
return { path: targetPath, status: "existing" };
|
|
75
149
|
fs.mkdirSync(path.dirname(targetPath), { recursive: true });
|
|
76
|
-
|
|
77
|
-
|
|
150
|
+
try {
|
|
151
|
+
fs.copyFileSync(sourcePath, targetPath, fs.constants.COPYFILE_EXCL);
|
|
152
|
+
return { path: targetPath, status: "created" };
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
if (isFileExistsError(error))
|
|
156
|
+
return { path: targetPath, status: "existing" };
|
|
157
|
+
throw error;
|
|
158
|
+
}
|
|
78
159
|
}
|
|
79
160
|
function upsertDotEnvValue(contents, key, value) {
|
|
80
161
|
const newline = contents.includes("\r\n") ? "\r\n" : "\n";
|
|
@@ -106,6 +187,69 @@ function restrictFilePermissions(filePath) {
|
|
|
106
187
|
// Windows and some mounted filesystems do not implement POSIX modes.
|
|
107
188
|
}
|
|
108
189
|
}
|
|
190
|
+
function syncDirectory(directoryPath) {
|
|
191
|
+
let directory;
|
|
192
|
+
try {
|
|
193
|
+
directory = fs.openSync(directoryPath, "r");
|
|
194
|
+
fs.fsyncSync(directory);
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
// Directory fsync is not supported on every Windows or mounted filesystem.
|
|
198
|
+
}
|
|
199
|
+
finally {
|
|
200
|
+
if (directory !== undefined)
|
|
201
|
+
fs.closeSync(directory);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
function readInitializationLock(lockPath) {
|
|
205
|
+
try {
|
|
206
|
+
const parsed = JSON.parse(fs.readFileSync(lockPath, "utf8"));
|
|
207
|
+
if (!parsed || typeof parsed !== "object")
|
|
208
|
+
return undefined;
|
|
209
|
+
const value = parsed;
|
|
210
|
+
if (typeof value.token !== "string"
|
|
211
|
+
|| typeof value.pid !== "number"
|
|
212
|
+
|| typeof value.hostname !== "string"
|
|
213
|
+
|| typeof value.startedAt !== "string") {
|
|
214
|
+
return undefined;
|
|
215
|
+
}
|
|
216
|
+
return {
|
|
217
|
+
token: value.token,
|
|
218
|
+
pid: value.pid,
|
|
219
|
+
hostname: value.hostname,
|
|
220
|
+
startedAt: value.startedAt,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
catch {
|
|
224
|
+
return undefined;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
function isStaleInitializationLock(lockPath) {
|
|
228
|
+
const owner = readInitializationLock(lockPath);
|
|
229
|
+
const modifiedAt = fs.statSync(lockPath, { throwIfNoEntry: false })?.mtimeMs ?? Date.now();
|
|
230
|
+
const ageMs = Date.now() - modifiedAt;
|
|
231
|
+
if (!owner)
|
|
232
|
+
return ageMs >= 5_000;
|
|
233
|
+
if (owner.hostname === os.hostname())
|
|
234
|
+
return !isProcessRunning(owner.pid);
|
|
235
|
+
const startedAt = Date.parse(owner.startedAt);
|
|
236
|
+
const ownerAgeMs = Number.isFinite(startedAt) ? Date.now() - startedAt : ageMs;
|
|
237
|
+
return ownerAgeMs >= MAX_INITIALIZATION_LOCK_AGE_MS;
|
|
238
|
+
}
|
|
239
|
+
function isProcessRunning(pid) {
|
|
240
|
+
if (!Number.isInteger(pid) || pid <= 0)
|
|
241
|
+
return false;
|
|
242
|
+
try {
|
|
243
|
+
process.kill(pid, 0);
|
|
244
|
+
return true;
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
return error.code === "EPERM";
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
function isFileExistsError(error) {
|
|
251
|
+
return error?.code === "EEXIST";
|
|
252
|
+
}
|
|
109
253
|
function firstNonBlank(...values) {
|
|
110
254
|
return values.find((value) => value !== undefined && value.trim().length > 0);
|
|
111
255
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Initializer.js","sourceRoot":"","sources":["../../src/cli/Initializer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Initializer.js","sourceRoot":"","sources":["../../src/cli/Initializer.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,7 +38,20 @@ export async function sendControlRequest(endpoint, request, timeoutMs = 5_000) {
|
|
|
38
38
|
export async function isServerRunning(endpoint) {
|
|
39
39
|
try {
|
|
40
40
|
const response = await sendControlRequest(endpoint, { action: "health" }, 1_000);
|
|
41
|
-
|
|
41
|
+
if (!response.ok)
|
|
42
|
+
return false;
|
|
43
|
+
if (!response.data || typeof response.data !== "object")
|
|
44
|
+
return true;
|
|
45
|
+
return response.data.ready !== false;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export async function isServerReachable(endpoint) {
|
|
52
|
+
try {
|
|
53
|
+
await sendControlRequest(endpoint, { action: "health" }, 1_000);
|
|
54
|
+
return true;
|
|
42
55
|
}
|
|
43
56
|
catch {
|
|
44
57
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalControlClient.js","sourceRoot":"","sources":["../../src/cli/LocalControlClient.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,UAAU,CAAC;AAG3B,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,QAAgB,EAChB,OAAuB,EACvB,SAAS,GAAG,KAAK;IAEjB,OAAO,IAAI,OAAO,CAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtD,MAAM,MAAM,GAAG,GAAG,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,CAAC,SAAqB,EAAQ,EAAE;YAC7C,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,SAAS,EAAE,CAAC;QACd,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACnG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3E,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YAClC,KAAK,IAAI,KAAK,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,OAAO,GAAG,CAAC;gBAAE,OAAO;YACxB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAoB,CAAC;gBACxE,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;YAClC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE;YACtB,IAAI,CAAC,OAAO;gBAAE,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAgB;IACpD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;QACjF,OAAO,QAAQ,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"LocalControlClient.js","sourceRoot":"","sources":["../../src/cli/LocalControlClient.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -3,12 +3,13 @@ import { spawn, spawnSync } from "node:child_process";
|
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
4
|
import qrcode from "qrcode-terminal";
|
|
5
5
|
import { loadConfig } from "./config/loadConfig.js";
|
|
6
|
-
import { sendControlRequest, isServerRunning } from "./cli/LocalControlClient.js";
|
|
6
|
+
import { sendControlRequest, isServerReachable, isServerRunning } from "./cli/LocalControlClient.js";
|
|
7
7
|
import { controlEndpoint, } from "./cli/controlProtocol.js";
|
|
8
|
-
import { initializeAgentBot, readFeishuCredentials, writeFeishuCredentials, } from "./cli/Initializer.js";
|
|
8
|
+
import { acquireInitializationLock, cleanupFeishuCredentialTemporaryFiles, initializeAgentBot, readFeishuCredentials, shouldCreateFeishuApp, writeFeishuCredentials, } from "./cli/Initializer.js";
|
|
9
9
|
import { registerFeishuApp, } from "./cli/FeishuAppRegistration.js";
|
|
10
10
|
import { ensureFeishuAppConfiguration, } from "./cli/FeishuAppConfiguration.js";
|
|
11
11
|
import { renderCliHelp } from "./cli/help.js";
|
|
12
|
+
import { requireServerFeishuTransport } from "./feishu/transport.js";
|
|
12
13
|
import { resolveSystemSkillsRoot, SkillRegistry } from "./cli/SkillRegistry.js";
|
|
13
14
|
import { readPackageVersion } from "./cli/packageVersion.js";
|
|
14
15
|
import { taskChatRoute } from "./cli/taskChatRoute.js";
|
|
@@ -67,60 +68,69 @@ async function initCommand(input, configPath) {
|
|
|
67
68
|
const paths = initializeAgentBot({ configPath });
|
|
68
69
|
if (!json)
|
|
69
70
|
printInitializationPaths(paths);
|
|
71
|
+
const initializationLock = acquireInitializationLock(paths.home.path);
|
|
72
|
+
try {
|
|
73
|
+
cleanupFeishuCredentialTemporaryFiles(paths.env.path);
|
|
74
|
+
const feishu = await initializeFeishu(paths, { json, skipFeishu, reconfigureFeishu });
|
|
75
|
+
const result = { ...paths, feishu };
|
|
76
|
+
if (json)
|
|
77
|
+
printJson(result);
|
|
78
|
+
else
|
|
79
|
+
printInitializationResult(result);
|
|
80
|
+
}
|
|
81
|
+
finally {
|
|
82
|
+
initializationLock.release();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
async function initializeFeishu(paths, options) {
|
|
70
86
|
const existing = readFeishuCredentials(paths.env.path);
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
feishu = {
|
|
87
|
+
if (options.skipFeishu) {
|
|
88
|
+
return {
|
|
74
89
|
status: "skipped",
|
|
75
90
|
...(existing.appId ? { appId: existing.appId } : {}),
|
|
76
91
|
};
|
|
77
92
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
}
|
|
96
|
-
credentials = await registerFeishuApp({
|
|
97
|
-
signal: controller.signal,
|
|
98
|
-
onVerification: (challenge) => printFeishuVerification(challenge, json),
|
|
99
|
-
});
|
|
100
|
-
writeFeishuCredentials(paths.env.path, credentials);
|
|
101
|
-
status = "created";
|
|
93
|
+
const controller = new AbortController();
|
|
94
|
+
const onInterrupt = () => controller.abort(new Error("已取消初始化。"));
|
|
95
|
+
process.once("SIGINT", onInterrupt);
|
|
96
|
+
process.once("SIGTERM", onInterrupt);
|
|
97
|
+
try {
|
|
98
|
+
let credentials;
|
|
99
|
+
let status;
|
|
100
|
+
if (!shouldCreateFeishuApp(existing, options.reconfigureFeishu)) {
|
|
101
|
+
credentials = {
|
|
102
|
+
appId: existing.appId,
|
|
103
|
+
appSecret: existing.appSecret,
|
|
104
|
+
};
|
|
105
|
+
status = "existing";
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
if (existing.status === "incomplete" && !options.json) {
|
|
109
|
+
process.stdout.write("\n检测到未完整保存的飞书凭据,将重新创建机器人。\n");
|
|
102
110
|
}
|
|
103
|
-
|
|
104
|
-
process.stdout.write("\n正在检查飞书应用权限、事件和回调配置...\n");
|
|
105
|
-
const configuration = await ensureFeishuAppConfiguration(credentials, {
|
|
111
|
+
credentials = await registerFeishuApp({
|
|
106
112
|
signal: controller.signal,
|
|
107
|
-
onVerification: (challenge) =>
|
|
113
|
+
onVerification: (challenge) => printFeishuVerification(challenge, options.json),
|
|
108
114
|
});
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
appId: credentials.appId,
|
|
112
|
-
configuration,
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
finally {
|
|
116
|
-
process.removeListener("SIGINT", onInterrupt);
|
|
115
|
+
writeFeishuCredentials(paths.env.path, credentials);
|
|
116
|
+
status = "created";
|
|
117
117
|
}
|
|
118
|
+
if (!options.json)
|
|
119
|
+
process.stdout.write("\n正在检查飞书应用权限、事件和回调配置...\n");
|
|
120
|
+
const configuration = await ensureFeishuAppConfiguration(credentials, {
|
|
121
|
+
signal: controller.signal,
|
|
122
|
+
onVerification: (challenge) => printFeishuConfigurationVerification(challenge, options.json),
|
|
123
|
+
});
|
|
124
|
+
return {
|
|
125
|
+
status,
|
|
126
|
+
appId: credentials.appId,
|
|
127
|
+
configuration,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
finally {
|
|
131
|
+
process.removeListener("SIGINT", onInterrupt);
|
|
132
|
+
process.removeListener("SIGTERM", onInterrupt);
|
|
118
133
|
}
|
|
119
|
-
const result = { ...paths, feishu };
|
|
120
|
-
if (json)
|
|
121
|
-
printJson(result);
|
|
122
|
-
else
|
|
123
|
-
printInitializationResult(result);
|
|
124
134
|
}
|
|
125
135
|
function skillsCommand(input) {
|
|
126
136
|
const [action = "status", ...rest] = input;
|
|
@@ -173,7 +183,7 @@ async function consoleCommand(input) {
|
|
|
173
183
|
const config = loadConfig();
|
|
174
184
|
const endpoint = controlEndpoint(config.storage.sqlitePath);
|
|
175
185
|
const force = input.includes("--force");
|
|
176
|
-
if (!force && await
|
|
186
|
+
if (!force && await isServerReachable(endpoint)) {
|
|
177
187
|
throw new Error("agent-bot server 正在运行。为避免争用同一任务状态,请先停止 server,或明确使用 --force。");
|
|
178
188
|
}
|
|
179
189
|
const entry = fileURLToPath(new URL("./index.js", import.meta.url));
|
|
@@ -210,10 +220,18 @@ async function serverCommand(input) {
|
|
|
210
220
|
return;
|
|
211
221
|
}
|
|
212
222
|
if (action === "start") {
|
|
223
|
+
requireServerFeishuTransport(config.feishu);
|
|
213
224
|
if (await isServerRunning(endpoint)) {
|
|
214
225
|
process.stdout.write("agent-bot server 已在运行。\n");
|
|
215
226
|
return;
|
|
216
227
|
}
|
|
228
|
+
if (await isServerReachable(endpoint)) {
|
|
229
|
+
const running = await waitForServer(endpoint, 45_000);
|
|
230
|
+
if (!running)
|
|
231
|
+
throw new Error("agent-bot server 已启动,但未能连接飞书机器人。请检查日志。");
|
|
232
|
+
process.stdout.write("agent-bot server 已启动。\n");
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
217
235
|
const entry = fileURLToPath(new URL("./supervisor.js", import.meta.url));
|
|
218
236
|
const child = spawn(process.execPath, [entry], {
|
|
219
237
|
cwd: process.cwd(),
|
|
@@ -223,9 +241,9 @@ async function serverCommand(input) {
|
|
|
223
241
|
env: { ...process.env, AGENT_BOT_RESTART_REASON: "通过 agent-bot CLI 启动" },
|
|
224
242
|
});
|
|
225
243
|
child.unref();
|
|
226
|
-
const running = await waitForServer(endpoint,
|
|
244
|
+
const running = await waitForServer(endpoint, 45_000);
|
|
227
245
|
if (!running)
|
|
228
|
-
throw new Error("已启动 Supervisor,但 server 未在
|
|
246
|
+
throw new Error("已启动 Supervisor,但 server 未在 45 秒内连接飞书机器人。请检查日志。");
|
|
229
247
|
process.stdout.write("agent-bot server 已启动。\n");
|
|
230
248
|
return;
|
|
231
249
|
}
|
|
@@ -420,7 +438,9 @@ function printServerStatus(data) {
|
|
|
420
438
|
const activity = value.activity && typeof value.activity === "object"
|
|
421
439
|
? value.activity
|
|
422
440
|
: {};
|
|
423
|
-
process.stdout.write(
|
|
441
|
+
process.stdout.write(value.ready === false
|
|
442
|
+
? "agent-bot server:启动中(正在连接飞书机器人)\n"
|
|
443
|
+
: "agent-bot server:运行中\n");
|
|
424
444
|
process.stdout.write(`PID:${value.pid ?? "-"}\n`);
|
|
425
445
|
process.stdout.write(`启动时间:${value.startedAt ?? "-"}\n`);
|
|
426
446
|
process.stdout.write(`Supervisor:${value.supervised ? "已启用" : "未启用"}\n`);
|