@keyou007/agent-bot 0.1.3 → 0.1.5
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 +11 -0
- package/README.md +14 -1
- package/README.zh.md +14 -1
- package/dist/cli/FeishuAppConfiguration.js +10 -10
- package/dist/cli/FeishuAppConfiguration.js.map +1 -1
- package/dist/cli/FeishuAppRegistration.js +9 -9
- package/dist/cli/FeishuAppRegistration.js.map +1 -1
- package/dist/cli/Initializer.js +64 -5
- package/dist/cli/Initializer.js.map +1 -1
- package/dist/cli/LocalControlClient.js +2 -2
- package/dist/cli/LocalControlClient.js.map +1 -1
- package/dist/cli/LocalControlServer.js +1 -1
- package/dist/cli/LocalControlServer.js.map +1 -1
- package/dist/cli/ServerStarter.js +3 -3
- package/dist/cli/ServerStarter.js.map +1 -1
- package/dist/cli/SkillRegistry.js +4 -4
- package/dist/cli/SkillRegistry.js.map +1 -1
- package/dist/cli/help.js +9 -57
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/initOptions.js +24 -0
- package/dist/cli/initOptions.js.map +1 -0
- package/dist/cli/packageVersion.js +1 -1
- package/dist/cli/packageVersion.js.map +1 -1
- package/dist/cli/profile.js +3 -3
- package/dist/cli/profile.js.map +1 -1
- package/dist/cli/serverStatus.js +37 -0
- package/dist/cli/serverStatus.js.map +1 -0
- package/dist/cli/taskChatRoute.js +2 -2
- package/dist/cli/taskChatRoute.js.map +1 -1
- package/dist/cli.js +154 -136
- package/dist/cli.js.map +1 -1
- package/dist/feishu/CardRenderer.js +1 -1
- package/dist/feishu/CardRenderer.js.map +1 -1
- package/dist/feishu/transport.js +1 -1
- package/dist/feishu/transport.js.map +1 -1
- package/dist/index.js +8 -4
- package/dist/index.js.map +1 -1
- package/dist/proxy/ProxySessionController.js +10 -10
- package/dist/proxy/ProxySessionController.js.map +1 -1
- package/dist/startup/StartupNotifier.js +1 -0
- package/dist/startup/StartupNotifier.js.map +1 -1
- package/docs/technical-reference.md +5 -1
- package/docs/technical-reference.zh.md +5 -1
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- package/skills/agent-bot/SKILL.md +3 -1
- package/src/cli/FeishuAppConfiguration.ts +10 -10
- package/src/cli/FeishuAppRegistration.ts +9 -9
- package/src/cli/Initializer.ts +76 -6
- package/src/cli/LocalControlClient.ts +2 -2
- package/src/cli/LocalControlServer.ts +1 -1
- package/src/cli/ServerStarter.ts +3 -3
- package/src/cli/SkillRegistry.ts +4 -4
- package/src/cli/help.ts +9 -66
- package/src/cli/initOptions.ts +33 -0
- package/src/cli/packageVersion.ts +1 -1
- package/src/cli/profile.ts +3 -3
- package/src/cli/serverStatus.ts +39 -0
- package/src/cli/taskChatRoute.ts +2 -2
- package/src/cli.ts +158 -139
- package/src/feishu/CardRenderer.ts +2 -0
- package/src/feishu/transport.ts +1 -1
- package/src/index.ts +8 -4
- package/src/proxy/ProxySessionController.ts +10 -10
- package/src/startup/StartupNotifier.ts +2 -0
|
@@ -38,7 +38,7 @@ export class SkillRegistry {
|
|
|
38
38
|
this.assertValidSource();
|
|
39
39
|
const existing = fs.existsSync(this.targetPath);
|
|
40
40
|
if (existing && this.readMarker()?.managedBy !== "agent-bot") {
|
|
41
|
-
throw new Error(
|
|
41
|
+
throw new Error(`The target directory exists and is not managed by Agent Bot: ${this.targetPath}`);
|
|
42
42
|
}
|
|
43
43
|
const before = existing ? this.status() : undefined;
|
|
44
44
|
if (before?.upToDate)
|
|
@@ -68,19 +68,19 @@ export class SkillRegistry {
|
|
|
68
68
|
if (!fs.existsSync(this.targetPath))
|
|
69
69
|
return false;
|
|
70
70
|
if (this.readMarker()?.managedBy !== "agent-bot") {
|
|
71
|
-
throw new Error(
|
|
71
|
+
throw new Error(`Refusing to remove a directory that is not managed by Agent Bot: ${this.targetPath}`);
|
|
72
72
|
}
|
|
73
73
|
this.removeManagedTarget();
|
|
74
74
|
return true;
|
|
75
75
|
}
|
|
76
76
|
assertValidSource() {
|
|
77
77
|
if (!fs.existsSync(path.join(this.sourcePath, "SKILL.md"))) {
|
|
78
|
-
throw new Error(
|
|
78
|
+
throw new Error(`The built-in Agent Bot Skill was not found: ${this.sourcePath}`);
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
assertSafeTarget() {
|
|
82
82
|
if (path.dirname(this.targetPath) !== this.skillsRoot || path.basename(this.targetPath) !== SKILL_NAME) {
|
|
83
|
-
throw new Error(
|
|
83
|
+
throw new Error(`Unsafe Skill target path: ${this.targetPath}`);
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
readMarker() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SkillRegistry.js","sourceRoot":"","sources":["../../src/cli/SkillRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,UAAU,GAAG,WAAW,CAAC;AAC/B,MAAM,WAAW,GAAG,yBAAyB,CAAC;AAoB9C,MAAM,UAAU,uBAAuB,CACrC,GAAG,GAAsB,OAAO,CAAC,GAAG,EACpC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE;IAE5B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;AACjG,CAAC;AAED,MAAM,OAAO,aAAa;IACf,UAAU,CAAS;IACnB,UAAU,CAAS;IACnB,UAAU,CAAS;IAE5B,YAAY,UAAkB,EAAE,UAAU,GAAG,uBAAuB,EAAE;QACpE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACzD,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;QACzE,MAAM,OAAO,GAAG,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,KAAK,WAAW,CAAC;QAC3E,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtD,MAAM,eAAe,GAAG,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClF,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,UAAU;YACV,OAAO;YACP,QAAQ,EAAE,OAAO,IAAI,eAAe,KAAK,YAAY;YACrD,YAAY;YACZ,eAAe;SAChB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,KAAK,WAAW,EAAE,CAAC;YAC7D,MAAM,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"SkillRegistry.js","sourceRoot":"","sources":["../../src/cli/SkillRegistry.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/help.js
CHANGED
|
@@ -1,55 +1,4 @@
|
|
|
1
|
-
export function
|
|
2
|
-
const configuredLocale = [
|
|
3
|
-
env.LC_ALL,
|
|
4
|
-
env.LC_MESSAGES,
|
|
5
|
-
env.LANGUAGE,
|
|
6
|
-
env.LANG,
|
|
7
|
-
].find((value) => value?.trim());
|
|
8
|
-
return isChineseLocale(configuredLocale ?? systemLocale) ? "zh" : "en";
|
|
9
|
-
}
|
|
10
|
-
export function renderCliHelp(version, language = resolveCliLanguage()) {
|
|
11
|
-
return language === "zh" ? renderChineseHelp(version) : renderEnglishHelp(version);
|
|
12
|
-
}
|
|
13
|
-
function renderChineseHelp(version) {
|
|
14
|
-
return `Agent Bot ${version}
|
|
15
|
-
通过飞书/Lark 使用本机 Codex 与 ACP Agent。
|
|
16
|
-
|
|
17
|
-
用法:
|
|
18
|
-
agent-bot [选项] <命令>
|
|
19
|
-
|
|
20
|
-
常用命令:
|
|
21
|
-
init 初始化配置和飞书应用,并启动服务
|
|
22
|
-
console 打开本地 Console
|
|
23
|
-
server start 在后台启动 Agent Bot
|
|
24
|
-
server status 查看服务和安全重启状态
|
|
25
|
-
server restart 安排安全重启
|
|
26
|
-
server stop 停止 Agent Bot
|
|
27
|
-
task list 列出任务
|
|
28
|
-
task status <task> 查看任务状态
|
|
29
|
-
task chat <task> 查看任务绑定的飞书会话
|
|
30
|
-
task prompt <task> <prompt> 向指定任务发送 Prompt
|
|
31
|
-
task stop <task> 停止指定任务
|
|
32
|
-
task title <task> <title> 修改任务标题
|
|
33
|
-
skills status 查看内置 Skill 状态
|
|
34
|
-
skills install 安装内置 Skill
|
|
35
|
-
|
|
36
|
-
选项:
|
|
37
|
-
--profile <directory> 使用指定目录中的独立 Profile
|
|
38
|
-
--config <path> 使用指定配置文件
|
|
39
|
-
--json 在支持的命令中输出 JSON
|
|
40
|
-
-h, --help 显示帮助
|
|
41
|
-
-v, --version 显示版本
|
|
42
|
-
|
|
43
|
-
示例:
|
|
44
|
-
agent-bot init
|
|
45
|
-
agent-bot --profile ~/.agent-bot-rescue init
|
|
46
|
-
agent-bot server start
|
|
47
|
-
agent-bot server status
|
|
48
|
-
agent-bot task list
|
|
49
|
-
agent-bot server restart --reason "升级 Agent Bot"
|
|
50
|
-
`;
|
|
51
|
-
}
|
|
52
|
-
function renderEnglishHelp(version) {
|
|
1
|
+
export function renderCliHelp(version) {
|
|
53
2
|
return `Agent Bot ${version}
|
|
54
3
|
Use local Codex and ACP agents from Lark/Feishu.
|
|
55
4
|
|
|
@@ -58,9 +7,10 @@ Usage:
|
|
|
58
7
|
|
|
59
8
|
Common commands:
|
|
60
9
|
init Initialize the Lark app and start the service
|
|
10
|
+
init --reset Reset and reconfigure an explicit profile
|
|
61
11
|
console Open the local console
|
|
62
12
|
server start Start Agent Bot in the background
|
|
63
|
-
server status Show server and safe-restart status
|
|
13
|
+
server status Show the server, Lark App ID, and safe-restart status
|
|
64
14
|
server restart Schedule a safe restart
|
|
65
15
|
server stop Stop Agent Bot
|
|
66
16
|
task list List tasks
|
|
@@ -79,8 +29,14 @@ Options:
|
|
|
79
29
|
-h, --help Show help
|
|
80
30
|
-v, --version Show version
|
|
81
31
|
|
|
32
|
+
Init options:
|
|
33
|
+
--reset Back up and reset the selected explicit profile
|
|
34
|
+
--skip-feishu Initialize for Console only
|
|
35
|
+
--reconfigure-feishu Replace only the existing Lark credentials
|
|
36
|
+
|
|
82
37
|
Examples:
|
|
83
38
|
agent-bot init
|
|
39
|
+
agent-bot --profile ~/.agent-bot init --reset
|
|
84
40
|
agent-bot --profile ~/.agent-bot-rescue init
|
|
85
41
|
agent-bot server start
|
|
86
42
|
agent-bot server status
|
|
@@ -88,8 +44,4 @@ Examples:
|
|
|
88
44
|
agent-bot server restart --reason "Update Agent Bot"
|
|
89
45
|
`;
|
|
90
46
|
}
|
|
91
|
-
function isChineseLocale(value) {
|
|
92
|
-
const locale = value.trim().split(":")[0]?.split(/[.@]/)[0]?.replaceAll("_", "-").toLowerCase();
|
|
93
|
-
return locale === "zh" || Boolean(locale?.startsWith("zh-"));
|
|
94
|
-
}
|
|
95
47
|
//# sourceMappingURL=help.js.map
|
package/dist/cli/help.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,OAAO,aAAa,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2C5B,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export function parseInitCommandOptions(input, explicitProfile) {
|
|
2
|
+
const supported = new Set(["--json", "--skip-feishu", "--reconfigure-feishu", "--reset"]);
|
|
3
|
+
const unsupported = input.filter((value) => !supported.has(value));
|
|
4
|
+
if (unsupported.length > 0) {
|
|
5
|
+
throw new Error(`Unsupported init options: ${unsupported.join(" ")}`);
|
|
6
|
+
}
|
|
7
|
+
const options = {
|
|
8
|
+
json: input.includes("--json"),
|
|
9
|
+
skipFeishu: input.includes("--skip-feishu"),
|
|
10
|
+
reconfigureFeishu: input.includes("--reconfigure-feishu"),
|
|
11
|
+
reset: input.includes("--reset"),
|
|
12
|
+
};
|
|
13
|
+
if (options.skipFeishu && options.reconfigureFeishu) {
|
|
14
|
+
throw new Error("--skip-feishu and --reconfigure-feishu cannot be used together.");
|
|
15
|
+
}
|
|
16
|
+
if (options.reset && !explicitProfile) {
|
|
17
|
+
throw new Error("--reset requires an explicit --profile <directory>.");
|
|
18
|
+
}
|
|
19
|
+
if (options.reset && options.reconfigureFeishu) {
|
|
20
|
+
throw new Error("--reset cannot be combined with --reconfigure-feishu because reset already replaces Lark credentials.");
|
|
21
|
+
}
|
|
22
|
+
return options;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=initOptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initOptions.js","sourceRoot":"","sources":["../../src/cli/initOptions.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,uBAAuB,CACrC,KAAe,EACf,eAAwB;IAExB,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,eAAe,EAAE,sBAAsB,EAAE,SAAS,CAAC,CAAC,CAAC;IAC1F,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IACnE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,6BAA6B,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,MAAM,OAAO,GAAG;QACd,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC9B,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC3C,iBAAiB,EAAE,KAAK,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QACzD,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;KACjC,CAAC;IACF,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,uGAAuG,CAAC,CAAC;IAC3H,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -3,7 +3,7 @@ import { fileURLToPath } from "node:url";
|
|
|
3
3
|
export function readPackageVersion(packageJsonUrl = new URL("../../package.json", import.meta.url)) {
|
|
4
4
|
const metadata = JSON.parse(fs.readFileSync(fileURLToPath(packageJsonUrl), "utf8"));
|
|
5
5
|
if (typeof metadata.version !== "string" || !metadata.version.trim()) {
|
|
6
|
-
throw new Error("package.json
|
|
6
|
+
throw new Error("package.json does not contain a valid version.");
|
|
7
7
|
}
|
|
8
8
|
return metadata.version;
|
|
9
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../../src/cli/packageVersion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,kBAAkB,CAChC,cAAc,GAAG,IAAI,GAAG,CAAC,oBAAoB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC;IAE/D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CACzB,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,CAC9B,CAAC;IAC3B,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../../src/cli/packageVersion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,kBAAkB,CAChC,cAAc,GAAG,IAAI,GAAG,CAAC,oBAAoB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC;IAE/D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CACzB,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,CAC9B,CAAC;IAC3B,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,QAAQ,CAAC,OAAO,CAAC;AAC1B,CAAC"}
|
package/dist/cli/profile.js
CHANGED
|
@@ -5,7 +5,7 @@ export function parseGlobalOptions(input) {
|
|
|
5
5
|
const configPath = removeOption(args, "--config");
|
|
6
6
|
const profilePath = removeOption(args, "--profile");
|
|
7
7
|
if (configPath && profilePath) {
|
|
8
|
-
throw new Error("--profile
|
|
8
|
+
throw new Error("--profile and --config cannot be used together. A profile always uses config.yaml in its directory.");
|
|
9
9
|
}
|
|
10
10
|
return {
|
|
11
11
|
args,
|
|
@@ -27,13 +27,13 @@ export function applyExplicitProfile(profilePath, env = process.env, baseDirecto
|
|
|
27
27
|
function removeOption(args, option) {
|
|
28
28
|
const indexes = args.flatMap((value, index) => value === option ? [index] : []);
|
|
29
29
|
if (indexes.length > 1)
|
|
30
|
-
throw new Error(`${option}
|
|
30
|
+
throw new Error(`${option} can only be specified once.`);
|
|
31
31
|
const index = indexes[0];
|
|
32
32
|
if (index === undefined)
|
|
33
33
|
return undefined;
|
|
34
34
|
const value = args[index + 1];
|
|
35
35
|
if (!value || value.startsWith("--"))
|
|
36
|
-
throw new Error(`${option}
|
|
36
|
+
throw new Error(`${option} requires a directory or file path.`);
|
|
37
37
|
args.splice(index, 2);
|
|
38
38
|
return value;
|
|
39
39
|
}
|
package/dist/cli/profile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/cli/profile.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,8BAA8B,EAC9B,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAa5B,MAAM,UAAU,kBAAkB,CAAC,KAAe;IAChD,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IACxB,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACpD,IAAI,UAAU,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/cli/profile.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,8BAA8B,EAC9B,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAa5B,MAAM,UAAU,kBAAkB,CAAC,KAAe;IAChD,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IACxB,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACpD,IAAI,UAAU,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,qGAAqG,CAAC,CAAC;IACzH,CAAC;IACD,OAAO;QACL,IAAI;QACJ,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,WAAmB,EACnB,GAAG,GAAsB,OAAO,CAAC,GAAG,EACpC,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE;IAE7B,MAAM,QAAQ,GAAG,eAAe,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAC5D,GAAG,CAAC,kBAAkB,CAAC,GAAG,QAAQ,CAAC;IACnC,GAAG,CAAC,gBAAgB,GAAG,UAAU,CAAC;IAClC,GAAG,CAAC,8BAA8B,CAAC,GAAG,GAAG,CAAC;IAC1C,OAAO,GAAG,CAAC,aAAa,CAAC;IACzB,OAAO,GAAG,CAAC,iBAAiB,CAAC;IAC7B,OAAO,GAAG,CAAC,mBAAmB,CAAC;IAC/B,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,YAAY,CAAC,IAAc,EAAE,MAAc;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAChF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,8BAA8B,CAAC,CAAC;IACjF,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACzB,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,qCAAqC,CAAC,CAAC;IACtG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACtB,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export function withConfiguredFeishuAppId(data, configuredFeishuAppId) {
|
|
2
|
+
const value = data && typeof data === "object"
|
|
3
|
+
? data
|
|
4
|
+
: {};
|
|
5
|
+
if (Object.hasOwn(value, "feishuAppId"))
|
|
6
|
+
return value;
|
|
7
|
+
return {
|
|
8
|
+
...value,
|
|
9
|
+
feishuAppId: configuredFeishuAppId ?? null,
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export function formatServerStatus(data) {
|
|
13
|
+
const value = data && typeof data === "object" ? data : {};
|
|
14
|
+
const activity = value.activity && typeof value.activity === "object"
|
|
15
|
+
? value.activity
|
|
16
|
+
: {};
|
|
17
|
+
const state = value.running === false
|
|
18
|
+
? "not running"
|
|
19
|
+
: value.ready === false
|
|
20
|
+
? "starting (connecting to Lark)"
|
|
21
|
+
: "running";
|
|
22
|
+
const safeRestart = value.safeRestartScheduled
|
|
23
|
+
? `pending (${String(value.safeRestartReason ?? "no reason provided")})`
|
|
24
|
+
: "not scheduled";
|
|
25
|
+
return [
|
|
26
|
+
`Agent Bot server: ${state}`,
|
|
27
|
+
`Lark App ID: ${value.feishuAppId ?? "not configured"}`,
|
|
28
|
+
`PID: ${value.pid ?? "-"}`,
|
|
29
|
+
`Started at: ${value.startedAt ?? "-"}`,
|
|
30
|
+
`Supervisor: ${value.supervised ? "enabled" : "disabled"}`,
|
|
31
|
+
`Running tasks: ${activity.runningSessions ?? 0}`,
|
|
32
|
+
`Pending final deliveries: ${activity.pendingFinalDeliveries ?? 0}`,
|
|
33
|
+
`Safe restart: ${safeRestart}`,
|
|
34
|
+
"",
|
|
35
|
+
].join("\n");
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=serverStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serverStatus.js","sourceRoot":"","sources":["../../src/cli/serverStatus.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,yBAAyB,CACvC,IAAa,EACb,qBAA8B;IAE9B,MAAM,KAAK,GAAG,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAC5C,CAAC,CAAC,IAA+B;QACjC,CAAC,CAAC,EAAE,CAAC;IACP,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC;QAAE,OAAO,KAAK,CAAC;IACtD,OAAO;QACL,GAAG,KAAK;QACR,WAAW,EAAE,qBAAqB,IAAI,IAAI;KAC3C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAa;IAC9C,MAAM,KAAK,GAAG,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAA+B,CAAC,CAAC,CAAC,EAAE,CAAC;IACtF,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ;QACnE,CAAC,CAAC,KAAK,CAAC,QAAmC;QAC3C,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,KAAK,KAAK;QACnC,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK;YACrB,CAAC,CAAC,+BAA+B;YACjC,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,WAAW,GAAG,KAAK,CAAC,oBAAoB;QAC5C,CAAC,CAAC,YAAY,MAAM,CAAC,KAAK,CAAC,iBAAiB,IAAI,oBAAoB,CAAC,GAAG;QACxE,CAAC,CAAC,eAAe,CAAC;IACpB,OAAO;QACL,qBAAqB,KAAK,EAAE;QAC5B,gBAAgB,KAAK,CAAC,WAAW,IAAI,gBAAgB,EAAE;QACvD,QAAQ,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE;QAC1B,eAAe,KAAK,CAAC,SAAS,IAAI,GAAG,EAAE;QACvC,eAAe,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE;QAC1D,kBAAkB,QAAQ,CAAC,eAAe,IAAI,CAAC,EAAE;QACjD,6BAA6B,QAAQ,CAAC,sBAAsB,IAAI,CAAC,EAAE;QACnE,iBAAiB,WAAW,EAAE;QAC9B,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
|
@@ -5,11 +5,11 @@ export function taskChatRoute(session) {
|
|
|
5
5
|
const contextKey = session.contextKey;
|
|
6
6
|
const baseContextKey = baseChatContextKey(contextKey);
|
|
7
7
|
if (!baseContextKey.startsWith(CHAT_CONTEXT_PREFIX)) {
|
|
8
|
-
throw new Error(
|
|
8
|
+
throw new Error(`The task is not bound to a Lark chat: ${session.remoteSessionId ?? session.acpSessionId ?? session.localSessionId}`);
|
|
9
9
|
}
|
|
10
10
|
const chatId = baseContextKey.slice(CHAT_CONTEXT_PREFIX.length);
|
|
11
11
|
if (!chatId)
|
|
12
|
-
throw new Error(
|
|
12
|
+
throw new Error(`The task has an invalid Lark chat ID: ${contextKey}`);
|
|
13
13
|
const threadId = isThreadContextKey(contextKey)
|
|
14
14
|
? contextKey.slice(contextKey.indexOf(THREAD_CONTEXT_MARKER) + THREAD_CONTEXT_MARKER.length)
|
|
15
15
|
: undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taskChatRoute.js","sourceRoot":"","sources":["../../src/cli/taskChatRoute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAGjF,MAAM,mBAAmB,GAAG,UAAU,CAAC;AACvC,MAAM,qBAAqB,GAAG,aAAa,CAAC;AAS5C,MAAM,UAAU,aAAa,CAAC,OAAsB;IAClD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACtC,MAAM,cAAc,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACtD,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"taskChatRoute.js","sourceRoot":"","sources":["../../src/cli/taskChatRoute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAGjF,MAAM,mBAAmB,GAAG,UAAU,CAAC;AACvC,MAAM,qBAAqB,GAAG,aAAa,CAAC;AAS5C,MAAM,UAAU,aAAa,CAAC,OAAsB;IAClD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACtC,MAAM,cAAc,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACtD,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,yCAAyC,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IACxI,CAAC;IACD,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAChE,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,UAAU,EAAE,CAAC,CAAC;IACpF,MAAM,QAAQ,GAAG,kBAAkB,CAAC,UAAU,CAAC;QAC7C,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,GAAG,qBAAqB,CAAC,MAAM,CAAC;QAC5F,CAAC,CAAC,SAAS,CAAC;IACd,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,cAAc;QACjF,MAAM;QACN,UAAU;QACV,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClC,CAAC;AACJ,CAAC"}
|