@keyou007/agent-bot 0.1.1 → 0.1.3
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/.env.example +3 -1
- package/CHANGELOG.md +15 -0
- package/README.md +23 -6
- package/README.zh.md +23 -6
- package/config.example.yaml +1 -2
- package/dist/cli/FeishuAppRegistration.js +12 -2
- package/dist/cli/FeishuAppRegistration.js.map +1 -1
- package/dist/cli/Initializer.js +164 -14
- 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/ServerStarter.js +69 -0
- package/dist/cli/ServerStarter.js.map +1 -0
- package/dist/cli/help.js +6 -2
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/profile.js +40 -0
- package/dist/cli/profile.js.map +1 -0
- package/dist/cli.js +93 -89
- package/dist/cli.js.map +1 -1
- package/dist/config/loadConfig.js +7 -4
- package/dist/config/loadConfig.js.map +1 -1
- package/dist/config/paths.js +1 -0
- package/dist/config/paths.js.map +1 -1
- package/dist/config/schema.js +2 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/feishu/CardRenderer.js +21 -3
- package/dist/feishu/CardRenderer.js.map +1 -1
- package/dist/feishu/FeishuConnector.js +8 -11
- 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 +20 -8
- package/dist/index.js.map +1 -1
- package/dist/proxy/ProxySessionController.js +18 -3
- package/dist/proxy/ProxySessionController.js.map +1 -1
- package/dist/startup/StartupNotifier.js +13 -2
- package/dist/startup/StartupNotifier.js.map +1 -1
- package/dist/startup/startFeishu.js +2 -1
- package/dist/startup/startFeishu.js.map +1 -1
- package/dist/supervision/SafeRestartNotifier.js +23 -7
- package/dist/supervision/SafeRestartNotifier.js.map +1 -1
- package/dist/supervision/SafeRestartScheduler.js +20 -2
- package/dist/supervision/SafeRestartScheduler.js.map +1 -1
- package/dist/supervision/SupervisorDiagnostics.js +209 -0
- package/dist/supervision/SupervisorDiagnostics.js.map +1 -0
- package/dist/supervisor.js +54 -16
- package/dist/supervisor.js.map +1 -1
- package/docs/technical-reference.md +28 -14
- package/docs/technical-reference.zh.md +28 -14
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- package/skills/agent-bot/SKILL.md +24 -4
- package/src/cli/FeishuAppRegistration.ts +14 -1
- package/src/cli/Initializer.ts +174 -14
- package/src/cli/LocalControlClient.ts +12 -1
- package/src/cli/ServerStarter.ts +106 -0
- package/src/cli/help.ts +6 -2
- package/src/cli/profile.ts +59 -0
- package/src/cli.ts +114 -84
- package/src/config/loadConfig.ts +12 -4
- package/src/config/paths.ts +1 -0
- package/src/config/schema.ts +2 -1
- package/src/feishu/CardRenderer.ts +25 -3
- package/src/feishu/FeishuConnector.ts +8 -12
- package/src/feishu/transport.ts +7 -16
- package/src/index.ts +31 -8
- package/src/proxy/ProxySessionController.ts +18 -3
- package/src/startup/StartupNotifier.ts +21 -4
- package/src/startup/startFeishu.ts +2 -0
- package/src/supervision/SafeRestartNotifier.ts +22 -7
- package/src/supervision/SafeRestartScheduler.ts +27 -3
- package/src/supervision/SupervisorDiagnostics.ts +268 -0
- package/src/supervisor.ts +53 -15
package/.env.example
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
# agent-bot init fills these through Feishu one-click registration.
|
|
2
|
-
# Leave
|
|
2
|
+
# Leave them blank for console-only mode. When binding an existing app manually,
|
|
3
|
+
# FEISHU_USER_OPEN_ID is the private-chat fallback for startup notifications.
|
|
3
4
|
FEISHU_APP_ID=
|
|
4
5
|
FEISHU_APP_SECRET=
|
|
6
|
+
FEISHU_USER_OPEN_ID=
|
|
5
7
|
# Optional user-data root. Defaults to ~/.agent-bot.
|
|
6
8
|
# AGENT_BOT_HOME=~/.agent-bot
|
|
7
9
|
# Optional config path. Defaults to ~/.agent-bot/config.yaml.
|
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,21 @@ The project follows [Semantic Versioning](https://semver.org/).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.1.3] - 2026-07-31
|
|
10
|
+
|
|
11
|
+
- Show the incoming-message reaction before chat persistence, image downloads, queue waits, commands, or runtime work begins.
|
|
12
|
+
- Verify Feishu startup through notification delivery before reporting the server as ready.
|
|
13
|
+
- Support isolated Agent Bot profiles through explicit profile directories.
|
|
14
|
+
- Start the selected profile's server automatically after successful initialization.
|
|
15
|
+
- Persist Supervisor crash context and enable privacy-reduced Node diagnostic reports by default.
|
|
16
|
+
- Add a `Cancel` action to pending safe-restart status cards.
|
|
17
|
+
|
|
18
|
+
## [0.1.2] - 2026-07-29
|
|
19
|
+
|
|
20
|
+
- Make npm release retries recover a missing GitHub Release from the version tag.
|
|
21
|
+
- Wait for the Feishu WebSocket connection before reporting the server as ready, and reject server startup when bot credentials are missing.
|
|
22
|
+
- 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.
|
|
23
|
+
|
|
9
24
|
## [0.1.1] - 2026-07-29
|
|
10
25
|
|
|
11
26
|
- Add `npm run release` to prepare the next stable version and changelog.
|
package/README.md
CHANGED
|
@@ -45,26 +45,30 @@ This installs the `agent-bot` command globally. Help is displayed in Chinese whe
|
|
|
45
45
|
agent-bot init
|
|
46
46
|
```
|
|
47
47
|
|
|
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
|
|
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 the authorizing user, checks the required permissions, and starts Agent Bot automatically.
|
|
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.
|
|
49
51
|
|
|
50
52
|
Missing optional permissions do not block initialization. Agent Bot reports which features may be unavailable.
|
|
51
53
|
|
|
52
54
|
| Option | Purpose |
|
|
53
55
|
| ---------------------- | ----------------------------------- |
|
|
54
|
-
| `--skip-feishu` | Initialize for Console
|
|
56
|
+
| `--skip-feishu` | Initialize for Console only; do not start the server |
|
|
55
57
|
| `--reconfigure-feishu` | Replace existing Feishu credentials |
|
|
56
58
|
| `--json` | Print a machine-readable result |
|
|
59
|
+
| `--profile <directory>`| Use an isolated profile directory |
|
|
57
60
|
| `--config <path>` | Use a specific configuration file |
|
|
58
61
|
|
|
59
|
-
You can rerun `agent-bot init` later to check or complete the bot configuration.
|
|
62
|
+
You can rerun `agent-bot init` later to check or complete the bot configuration. If the server is already running, initialization leaves it running.
|
|
60
63
|
|
|
61
|
-
### Start
|
|
64
|
+
### Start And Stop
|
|
62
65
|
|
|
63
66
|
```powershell
|
|
64
|
-
agent-bot server start
|
|
65
67
|
agent-bot server status
|
|
66
68
|
```
|
|
67
69
|
|
|
70
|
+
`agent-bot init` starts the server automatically. If you stop it later, run `agent-bot server start` to start it again. For local-only use, initialize with `--skip-feishu` and 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:
|
|
@@ -103,7 +107,7 @@ agent-bot server stop
|
|
|
103
107
|
agent-bot server restart
|
|
104
108
|
```
|
|
105
109
|
|
|
106
|
-
`server restart` waits for current work to finish by default. Use `--immediate` only when interruption is acceptable.
|
|
110
|
+
`server restart` waits for current work to finish by default. Its status card includes a `Cancel` button while the restart is still waiting. Use `--immediate` only when interruption is acceptable.
|
|
107
111
|
|
|
108
112
|
### Console
|
|
109
113
|
|
|
@@ -173,9 +177,22 @@ Agent Bot keeps user-owned files outside the repository:
|
|
|
173
177
|
|
|
174
178
|
Set `AGENT_BOT_HOME` to use another user-data directory. See [config.example.yaml](config.example.yaml) for configuration examples.
|
|
175
179
|
|
|
180
|
+
### Multiple Profiles
|
|
181
|
+
|
|
182
|
+
Commands without `--profile` use the main profile at `~/.agent-bot`. To run another bot with isolated credentials, configuration, data, logs, and local control endpoint, pass its directory explicitly on every command:
|
|
183
|
+
|
|
184
|
+
```powershell
|
|
185
|
+
agent-bot --profile ~/.agent-bot-rescue init
|
|
186
|
+
agent-bot --profile ~/.agent-bot-rescue server start
|
|
187
|
+
agent-bot --profile ~/.agent-bot-rescue server status
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
Alternative profiles are directory-based and are not registered by name. Each one uses `config.yaml`, `.env`, `data/`, and `logs/` inside the selected directory. `--profile` cannot be combined with `--config`.
|
|
191
|
+
|
|
176
192
|
## Troubleshooting
|
|
177
193
|
|
|
178
194
|
- **The bot does not respond:** run `agent-bot server status` and check `~/.agent-bot/logs/agent-bot.log`.
|
|
195
|
+
- **The Worker restarted after a Node crash:** check `~/.agent-bot/data/last-crash.json`, `~/.agent-bot/logs/worker.stderr.log`, and `~/.agent-bot/data/crash-reports/`.
|
|
179
196
|
- **Feishu permissions are incomplete:** rerun `agent-bot init` and follow the displayed authorization steps.
|
|
180
197
|
- **Codex cannot start:** run `codex login status` as the same operating-system user that runs Agent Bot.
|
|
181
198
|
- **You only need local testing:** run `agent-bot init --skip-feishu`, then `agent-bot console`.
|
package/README.zh.md
CHANGED
|
@@ -45,26 +45,30 @@ agent-bot --help
|
|
|
45
45
|
agent-bot init
|
|
46
46
|
```
|
|
47
47
|
|
|
48
|
-
打开命令显示的链接或扫描二维码,完成飞书机器人创建和授权。初始化会准备 `~/.agent-bot
|
|
48
|
+
打开命令显示的链接或扫描二维码,完成飞书机器人创建和授权。初始化会准备 `~/.agent-bot`、保存机器人凭据和授权用户、检查所需权限,并自动启动 Agent Bot。
|
|
49
|
+
|
|
50
|
+
只有 App ID 和 App Secret 都已保存到本地才视为机器人创建成功。如果初始化在完整凭据保存前中断,再次运行 `agent-bot init` 会创建新机器人;如果凭据已经保存,则会继续检查该机器人的远端权限和订阅。
|
|
49
51
|
|
|
50
52
|
非核心权限缺失不会阻塞初始化,Agent Bot 会提示可能无法使用的功能。
|
|
51
53
|
|
|
52
54
|
| 参数 | 作用 |
|
|
53
55
|
| ---------------------- | ------------------------- |
|
|
54
|
-
| `--skip-feishu` | 仅初始化 Console
|
|
56
|
+
| `--skip-feishu` | 仅初始化 Console 使用环境,不启动 Server |
|
|
55
57
|
| `--reconfigure-feishu` | 替换已有飞书凭据 |
|
|
56
58
|
| `--json` | 输出便于程序读取的结果 |
|
|
59
|
+
| `--profile <目录>` | 使用指定目录中的独立 Profile |
|
|
57
60
|
| `--config <路径>` | 使用指定配置文件 |
|
|
58
61
|
|
|
59
|
-
之后可以重新运行 `agent-bot init`
|
|
62
|
+
之后可以重新运行 `agent-bot init` 检查或补齐机器人配置。如果 Server 已在运行,初始化会保留当前服务。
|
|
60
63
|
|
|
61
|
-
###
|
|
64
|
+
### 启动与停止
|
|
62
65
|
|
|
63
66
|
```powershell
|
|
64
|
-
agent-bot server start
|
|
65
67
|
agent-bot server status
|
|
66
68
|
```
|
|
67
69
|
|
|
70
|
+
`agent-bot init` 会自动启动 Server。之后如果手动停止了服务,可执行 `agent-bot server start` 再次启动。仅在本地使用时,请通过 `--skip-feishu` 初始化并运行 `agent-bot console`。
|
|
71
|
+
|
|
68
72
|
打开飞书,找到机器人并发送消息。当前会话没有任务时,Agent Bot 会自动创建。
|
|
69
73
|
|
|
70
74
|
停止服务:
|
|
@@ -103,7 +107,7 @@ agent-bot server stop
|
|
|
103
107
|
agent-bot server restart
|
|
104
108
|
```
|
|
105
109
|
|
|
106
|
-
`server restart`
|
|
110
|
+
`server restart` 默认等待当前工作完成后再重启;等待期间可通过状态卡片下方的 `Cancel` 按钮取消。只有可接受中断时才使用 `--immediate`。
|
|
107
111
|
|
|
108
112
|
### Console
|
|
109
113
|
|
|
@@ -173,9 +177,22 @@ Agent Bot 将用户相关文件保存在仓库之外:
|
|
|
173
177
|
|
|
174
178
|
可通过 `AGENT_BOT_HOME` 修改用户数据目录。配置示例见 [config.example.yaml](config.example.yaml)。
|
|
175
179
|
|
|
180
|
+
### 多 Profile
|
|
181
|
+
|
|
182
|
+
不指定 `--profile` 时使用位于 `~/.agent-bot` 的主 Profile。运行其他相互隔离的机器人时,需要在每次命令中显式指定其目录:
|
|
183
|
+
|
|
184
|
+
```powershell
|
|
185
|
+
agent-bot --profile ~/.agent-bot-rescue init
|
|
186
|
+
agent-bot --profile ~/.agent-bot-rescue server start
|
|
187
|
+
agent-bot --profile ~/.agent-bot-rescue server status
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
其他 Profile 不按名称注册,而是直接使用目录。每个 Profile 都在所选目录内保存自己的 `config.yaml`、`.env`、`data/` 和 `logs/`,飞书凭据与本地控制端点也相互隔离。`--profile` 不能和 `--config` 同时使用。
|
|
191
|
+
|
|
176
192
|
## 常见问题
|
|
177
193
|
|
|
178
194
|
- **机器人没有响应:** 运行 `agent-bot server status`,并查看 `~/.agent-bot/logs/agent-bot.log`
|
|
195
|
+
- **Node 崩溃后 Worker 被自动重启:** 查看 `~/.agent-bot/data/last-crash.json`、`~/.agent-bot/logs/worker.stderr.log` 和 `~/.agent-bot/data/crash-reports/`
|
|
179
196
|
- **飞书权限不完整:** 重新运行 `agent-bot init`,完成显示的授权步骤
|
|
180
197
|
- **Codex 无法启动:** 使用运行 Agent Bot 的同一操作系统用户执行 `codex login status`
|
|
181
198
|
- **只需要本地测试:** 运行 `agent-bot init --skip-feishu`,然后执行 `agent-bot console`
|
package/config.example.yaml
CHANGED
|
@@ -60,8 +60,14 @@ export async function registerFeishuApp(options = {}) {
|
|
|
60
60
|
if (!errorCode) {
|
|
61
61
|
const appId = readString(payload, "client_id");
|
|
62
62
|
const appSecret = readString(payload, "client_secret");
|
|
63
|
-
if (appId && appSecret)
|
|
64
|
-
|
|
63
|
+
if (appId && appSecret) {
|
|
64
|
+
const userOpenId = readString(readObject(payload, "user_info"), "open_id");
|
|
65
|
+
return {
|
|
66
|
+
appId,
|
|
67
|
+
appSecret,
|
|
68
|
+
...(userOpenId ? { userOpenId } : {}),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
65
71
|
continue;
|
|
66
72
|
}
|
|
67
73
|
switch (errorCode) {
|
|
@@ -123,6 +129,10 @@ function readString(value, key) {
|
|
|
123
129
|
const field = value[key];
|
|
124
130
|
return typeof field === "string" ? field.trim() : "";
|
|
125
131
|
}
|
|
132
|
+
function readObject(value, key) {
|
|
133
|
+
const field = value[key];
|
|
134
|
+
return isRecord(field) ? field : {};
|
|
135
|
+
}
|
|
126
136
|
function readPositiveInteger(value, key) {
|
|
127
137
|
const field = value[key];
|
|
128
138
|
const parsed = typeof field === "number" ? field : Number(field);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeishuAppRegistration.js","sourceRoot":"","sources":["../../src/cli/FeishuAppRegistration.ts"],"names":[],"mappings":"AAAA,MAAM,wBAAwB,GAAG,4BAA4B,CAAC;AAC9D,MAAM,oBAAoB,GAAG,wBAAwB,CAAC;AACtD,MAAM,qBAAqB,GAAG,4BAA4B,CAAC;AAC3D,MAAM,0BAA0B,GAAG,GAAG,CAAC;AACvC,MAAM,6BAA6B,GAAG,CAAC,CAAC;AACxC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AACrC,MAAM,kBAAkB,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"FeishuAppRegistration.js","sourceRoot":"","sources":["../../src/cli/FeishuAppRegistration.ts"],"names":[],"mappings":"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"}
|
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"));
|
|
@@ -36,29 +33,112 @@ export function readFeishuCredentials(envPath, env = process.env) {
|
|
|
36
33
|
const fileValues = fs.existsSync(envPath) ? parseDotEnv(fs.readFileSync(envPath, "utf8")) : {};
|
|
37
34
|
const appId = firstNonBlank(env.FEISHU_APP_ID, fileValues.FEISHU_APP_ID);
|
|
38
35
|
const appSecret = firstNonBlank(env.FEISHU_APP_SECRET, fileValues.FEISHU_APP_SECRET);
|
|
36
|
+
const userOpenId = firstNonBlank(env.FEISHU_USER_OPEN_ID, fileValues.FEISHU_USER_OPEN_ID);
|
|
37
|
+
const user = userOpenId ? { userOpenId } : {};
|
|
39
38
|
if (appId && appSecret)
|
|
40
|
-
return { status: "configured", appId, appSecret };
|
|
39
|
+
return { status: "configured", appId, appSecret, ...user };
|
|
41
40
|
if (appId || appSecret)
|
|
42
|
-
return { status: "incomplete", appId, appSecret };
|
|
43
|
-
return { status: "missing" };
|
|
41
|
+
return { status: "incomplete", appId, appSecret, ...user };
|
|
42
|
+
return { status: "missing", ...user };
|
|
44
43
|
}
|
|
45
44
|
export function writeFeishuCredentials(envPath, credentials) {
|
|
46
45
|
assertDotEnvValue("FEISHU_APP_ID", credentials.appId);
|
|
47
46
|
assertDotEnvValue("FEISHU_APP_SECRET", credentials.appSecret);
|
|
47
|
+
if (credentials.userOpenId)
|
|
48
|
+
assertDotEnvValue("FEISHU_USER_OPEN_ID", credentials.userOpenId);
|
|
48
49
|
const original = fs.existsSync(envPath) ? fs.readFileSync(envPath, "utf8") : "";
|
|
49
50
|
let updated = upsertDotEnvValue(original, "FEISHU_APP_ID", credentials.appId);
|
|
50
51
|
updated = upsertDotEnvValue(updated, "FEISHU_APP_SECRET", credentials.appSecret);
|
|
52
|
+
updated = upsertDotEnvValue(updated, "FEISHU_USER_OPEN_ID", credentials.userOpenId ?? "");
|
|
51
53
|
fs.mkdirSync(path.dirname(envPath), { recursive: true });
|
|
52
54
|
const temporaryPath = `${envPath}.${process.pid}.${Date.now()}.tmp`;
|
|
55
|
+
let temporaryFile;
|
|
53
56
|
try {
|
|
54
|
-
fs.
|
|
57
|
+
temporaryFile = fs.openSync(temporaryPath, "wx", 0o600);
|
|
58
|
+
fs.writeFileSync(temporaryFile, updated, "utf8");
|
|
59
|
+
fs.fsyncSync(temporaryFile);
|
|
60
|
+
fs.closeSync(temporaryFile);
|
|
61
|
+
temporaryFile = undefined;
|
|
55
62
|
fs.renameSync(temporaryPath, envPath);
|
|
63
|
+
syncDirectory(path.dirname(envPath));
|
|
56
64
|
restrictFilePermissions(envPath);
|
|
65
|
+
const persisted = readFeishuCredentials(envPath, {});
|
|
66
|
+
if (persisted.status !== "configured"
|
|
67
|
+
|| persisted.appId !== credentials.appId
|
|
68
|
+
|| persisted.appSecret !== credentials.appSecret
|
|
69
|
+
|| persisted.userOpenId !== credentials.userOpenId) {
|
|
70
|
+
throw new Error("飞书凭据写入后校验失败。");
|
|
71
|
+
}
|
|
57
72
|
}
|
|
58
73
|
finally {
|
|
74
|
+
if (temporaryFile !== undefined)
|
|
75
|
+
fs.closeSync(temporaryFile);
|
|
59
76
|
fs.rmSync(temporaryPath, { force: true });
|
|
60
77
|
}
|
|
61
78
|
}
|
|
79
|
+
export function shouldCreateFeishuApp(credentials, reconfigureFeishu) {
|
|
80
|
+
return reconfigureFeishu || credentials.status !== "configured";
|
|
81
|
+
}
|
|
82
|
+
export function acquireInitializationLock(lockDirectory) {
|
|
83
|
+
fs.mkdirSync(lockDirectory, { recursive: true });
|
|
84
|
+
const lockPath = path.join(lockDirectory, INITIALIZATION_LOCK_NAME);
|
|
85
|
+
const owner = {
|
|
86
|
+
token: randomUUID(),
|
|
87
|
+
pid: process.pid,
|
|
88
|
+
hostname: os.hostname(),
|
|
89
|
+
startedAt: new Date().toISOString(),
|
|
90
|
+
};
|
|
91
|
+
for (let attempt = 0; attempt < 3; attempt += 1) {
|
|
92
|
+
let lockFile;
|
|
93
|
+
let created = false;
|
|
94
|
+
try {
|
|
95
|
+
lockFile = fs.openSync(lockPath, "wx", 0o600);
|
|
96
|
+
created = true;
|
|
97
|
+
fs.writeFileSync(lockFile, `${JSON.stringify(owner)}\n`, "utf8");
|
|
98
|
+
fs.fsyncSync(lockFile);
|
|
99
|
+
fs.closeSync(lockFile);
|
|
100
|
+
lockFile = undefined;
|
|
101
|
+
return {
|
|
102
|
+
path: lockPath,
|
|
103
|
+
release: () => {
|
|
104
|
+
const current = readInitializationLock(lockPath);
|
|
105
|
+
if (current?.token === owner.token)
|
|
106
|
+
fs.rmSync(lockPath, { force: true });
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
if (lockFile !== undefined)
|
|
112
|
+
fs.closeSync(lockFile);
|
|
113
|
+
if (created)
|
|
114
|
+
fs.rmSync(lockPath, { force: true });
|
|
115
|
+
if (!isFileExistsError(error))
|
|
116
|
+
throw error;
|
|
117
|
+
if (!isStaleInitializationLock(lockPath)) {
|
|
118
|
+
throw new Error(`另一个 agent-bot init 正在运行(锁文件:${lockPath})。`);
|
|
119
|
+
}
|
|
120
|
+
fs.rmSync(lockPath, { force: true });
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
throw new Error(`无法获取初始化锁:${lockPath}`);
|
|
124
|
+
}
|
|
125
|
+
export function cleanupFeishuCredentialTemporaryFiles(envPath) {
|
|
126
|
+
const directory = path.dirname(envPath);
|
|
127
|
+
if (!fs.existsSync(directory))
|
|
128
|
+
return 0;
|
|
129
|
+
const prefix = `${path.basename(envPath)}.`;
|
|
130
|
+
let removed = 0;
|
|
131
|
+
for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {
|
|
132
|
+
if (!entry.isFile() || !entry.name.startsWith(prefix) || !entry.name.endsWith(".tmp"))
|
|
133
|
+
continue;
|
|
134
|
+
const middle = entry.name.slice(prefix.length, -".tmp".length);
|
|
135
|
+
if (!/^\d+\.\d+$/.test(middle))
|
|
136
|
+
continue;
|
|
137
|
+
fs.rmSync(path.join(directory, entry.name), { force: true });
|
|
138
|
+
removed += 1;
|
|
139
|
+
}
|
|
140
|
+
return removed;
|
|
141
|
+
}
|
|
62
142
|
function assertTemplate(templatePath) {
|
|
63
143
|
if (!fs.statSync(templatePath, { throwIfNoEntry: false })?.isFile()) {
|
|
64
144
|
throw new Error(`Initialization template does not exist: ${templatePath}`);
|
|
@@ -73,8 +153,15 @@ function copyIfMissing(sourcePath, targetPath) {
|
|
|
73
153
|
if (fs.existsSync(targetPath))
|
|
74
154
|
return { path: targetPath, status: "existing" };
|
|
75
155
|
fs.mkdirSync(path.dirname(targetPath), { recursive: true });
|
|
76
|
-
|
|
77
|
-
|
|
156
|
+
try {
|
|
157
|
+
fs.copyFileSync(sourcePath, targetPath, fs.constants.COPYFILE_EXCL);
|
|
158
|
+
return { path: targetPath, status: "created" };
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
if (isFileExistsError(error))
|
|
162
|
+
return { path: targetPath, status: "existing" };
|
|
163
|
+
throw error;
|
|
164
|
+
}
|
|
78
165
|
}
|
|
79
166
|
function upsertDotEnvValue(contents, key, value) {
|
|
80
167
|
const newline = contents.includes("\r\n") ? "\r\n" : "\n";
|
|
@@ -106,6 +193,69 @@ function restrictFilePermissions(filePath) {
|
|
|
106
193
|
// Windows and some mounted filesystems do not implement POSIX modes.
|
|
107
194
|
}
|
|
108
195
|
}
|
|
196
|
+
function syncDirectory(directoryPath) {
|
|
197
|
+
let directory;
|
|
198
|
+
try {
|
|
199
|
+
directory = fs.openSync(directoryPath, "r");
|
|
200
|
+
fs.fsyncSync(directory);
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
// Directory fsync is not supported on every Windows or mounted filesystem.
|
|
204
|
+
}
|
|
205
|
+
finally {
|
|
206
|
+
if (directory !== undefined)
|
|
207
|
+
fs.closeSync(directory);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
function readInitializationLock(lockPath) {
|
|
211
|
+
try {
|
|
212
|
+
const parsed = JSON.parse(fs.readFileSync(lockPath, "utf8"));
|
|
213
|
+
if (!parsed || typeof parsed !== "object")
|
|
214
|
+
return undefined;
|
|
215
|
+
const value = parsed;
|
|
216
|
+
if (typeof value.token !== "string"
|
|
217
|
+
|| typeof value.pid !== "number"
|
|
218
|
+
|| typeof value.hostname !== "string"
|
|
219
|
+
|| typeof value.startedAt !== "string") {
|
|
220
|
+
return undefined;
|
|
221
|
+
}
|
|
222
|
+
return {
|
|
223
|
+
token: value.token,
|
|
224
|
+
pid: value.pid,
|
|
225
|
+
hostname: value.hostname,
|
|
226
|
+
startedAt: value.startedAt,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
return undefined;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
function isStaleInitializationLock(lockPath) {
|
|
234
|
+
const owner = readInitializationLock(lockPath);
|
|
235
|
+
const modifiedAt = fs.statSync(lockPath, { throwIfNoEntry: false })?.mtimeMs ?? Date.now();
|
|
236
|
+
const ageMs = Date.now() - modifiedAt;
|
|
237
|
+
if (!owner)
|
|
238
|
+
return ageMs >= 5_000;
|
|
239
|
+
if (owner.hostname === os.hostname())
|
|
240
|
+
return !isProcessRunning(owner.pid);
|
|
241
|
+
const startedAt = Date.parse(owner.startedAt);
|
|
242
|
+
const ownerAgeMs = Number.isFinite(startedAt) ? Date.now() - startedAt : ageMs;
|
|
243
|
+
return ownerAgeMs >= MAX_INITIALIZATION_LOCK_AGE_MS;
|
|
244
|
+
}
|
|
245
|
+
function isProcessRunning(pid) {
|
|
246
|
+
if (!Number.isInteger(pid) || pid <= 0)
|
|
247
|
+
return false;
|
|
248
|
+
try {
|
|
249
|
+
process.kill(pid, 0);
|
|
250
|
+
return true;
|
|
251
|
+
}
|
|
252
|
+
catch (error) {
|
|
253
|
+
return error.code === "EPERM";
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
function isFileExistsError(error) {
|
|
257
|
+
return error?.code === "EEXIST";
|
|
258
|
+
}
|
|
109
259
|
function firstNonBlank(...values) {
|
|
110
260
|
return values.find((value) => value !== undefined && value.trim().length > 0);
|
|
111
261
|
}
|
|
@@ -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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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import { loadConfig } from "../config/loadConfig.js";
|
|
4
|
+
import { requireServerFeishuTransport } from "../feishu/transport.js";
|
|
5
|
+
import { nodeDiagnosticReportArguments, prepareCrashReportDirectory, resolveSupervisorDiagnosticsPaths, } from "../supervision/SupervisorDiagnostics.js";
|
|
6
|
+
import { controlEndpoint } from "./controlProtocol.js";
|
|
7
|
+
import { isServerReachable, isServerRunning } from "./LocalControlClient.js";
|
|
8
|
+
const SERVER_START_TIMEOUT_MS = 45_000;
|
|
9
|
+
export async function startInitializedServer(options, dependencies = defaultInitializationDependencies) {
|
|
10
|
+
if (options.skipFeishu) {
|
|
11
|
+
return { status: "skipped", reason: "feishu-skipped" };
|
|
12
|
+
}
|
|
13
|
+
return dependencies.startServer(dependencies.loadConfig(options.configPath));
|
|
14
|
+
}
|
|
15
|
+
export async function startServer(config, dependencies = defaultDependencies) {
|
|
16
|
+
requireServerFeishuTransport(config.feishu);
|
|
17
|
+
const endpoint = controlEndpoint(config.storage.sqlitePath);
|
|
18
|
+
if (await dependencies.isRunning(endpoint)) {
|
|
19
|
+
return { status: "already-running" };
|
|
20
|
+
}
|
|
21
|
+
if (await dependencies.isReachable(endpoint)) {
|
|
22
|
+
const running = await dependencies.waitUntilRunning(endpoint, SERVER_START_TIMEOUT_MS);
|
|
23
|
+
if (!running) {
|
|
24
|
+
throw new Error("agent-bot server 已启动,但未能连接飞书机器人。请检查日志。");
|
|
25
|
+
}
|
|
26
|
+
return { status: "started" };
|
|
27
|
+
}
|
|
28
|
+
dependencies.spawnSupervisor(config);
|
|
29
|
+
const running = await dependencies.waitUntilRunning(endpoint, SERVER_START_TIMEOUT_MS);
|
|
30
|
+
if (!running) {
|
|
31
|
+
throw new Error("已启动 Supervisor,但 server 未在 45 秒内连接飞书机器人。请检查日志。");
|
|
32
|
+
}
|
|
33
|
+
return { status: "started" };
|
|
34
|
+
}
|
|
35
|
+
const defaultDependencies = {
|
|
36
|
+
isRunning: isServerRunning,
|
|
37
|
+
isReachable: isServerReachable,
|
|
38
|
+
waitUntilRunning: waitForServer,
|
|
39
|
+
spawnSupervisor: (config) => {
|
|
40
|
+
const entry = fileURLToPath(new URL("../supervisor.js", import.meta.url));
|
|
41
|
+
const reportDirectory = resolveSupervisorDiagnosticsPaths(config).crashReportDirectory;
|
|
42
|
+
prepareCrashReportDirectory(reportDirectory);
|
|
43
|
+
const child = spawn(process.execPath, [
|
|
44
|
+
...nodeDiagnosticReportArguments(reportDirectory),
|
|
45
|
+
entry,
|
|
46
|
+
], {
|
|
47
|
+
cwd: process.cwd(),
|
|
48
|
+
detached: true,
|
|
49
|
+
windowsHide: true,
|
|
50
|
+
stdio: "ignore",
|
|
51
|
+
env: { ...process.env, AGENT_BOT_RESTART_REASON: "通过 agent-bot CLI 启动" },
|
|
52
|
+
});
|
|
53
|
+
child.unref();
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
const defaultInitializationDependencies = {
|
|
57
|
+
loadConfig,
|
|
58
|
+
startServer: (config) => startServer(config),
|
|
59
|
+
};
|
|
60
|
+
async function waitForServer(endpoint, timeoutMs) {
|
|
61
|
+
const deadline = Date.now() + timeoutMs;
|
|
62
|
+
while (Date.now() < deadline) {
|
|
63
|
+
if (await isServerRunning(endpoint))
|
|
64
|
+
return true;
|
|
65
|
+
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
66
|
+
}
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=ServerStarter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServerStarter.js","sourceRoot":"","sources":["../../src/cli/ServerStarter.ts"],"names":[],"mappings":"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"}
|