@linkmind_claw/openclaw-faq-kb 3.0.0 → 3.2.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/dist/index.d.ts +7 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +653 -388
- package/dist/index.js.map +1 -1
- package/dist/lib/api-client.d.ts +23 -39
- package/dist/lib/api-client.d.ts.map +1 -1
- package/dist/lib/api-client.js +54 -97
- package/dist/lib/api-client.js.map +1 -1
- package/dist/tools/account-manage.d.ts +5 -7
- package/dist/tools/account-manage.d.ts.map +1 -1
- package/dist/tools/account-manage.js +104 -70
- package/dist/tools/account-manage.js.map +1 -1
- package/dist/tools/account-register.d.ts +12 -5
- package/dist/tools/account-register.d.ts.map +1 -1
- package/dist/tools/account-register.js +51 -28
- package/dist/tools/account-register.js.map +1 -1
- package/dist/tools/query-kb.d.ts +4 -5
- package/dist/tools/query-kb.d.ts.map +1 -1
- package/dist/tools/query-kb.js +12 -38
- package/dist/tools/query-kb.js.map +1 -1
- package/package.json +3 -3
- package/skills/faq-kb/SKILL.md +143 -47
- package/linkmind_claw-openclaw-faq-kb-1.0.6.tgz +0 -0
- package/linkmind_claw-openclaw-faq-kb-1.1.0.tgz +0 -0
- package/linkmind_claw-openclaw-faq-kb-1.2.0.tgz +0 -0
- package/linkmind_claw-openclaw-faq-kb-1.3.1.tgz +0 -0
- package/linkmind_claw-openclaw-faq-kb-1.3.2.tgz +0 -0
- package/linkmind_claw-openclaw-faq-kb-1.3.3.tgz +0 -0
- package/linkmind_claw-openclaw-faq-kb-1.4.0.tgz +0 -0
- package/linkmind_claw-openclaw-faq-kb-2.0.0.tgz +0 -0
- package/linkmind_claw-openclaw-faq-kb-2.0.1.tgz +0 -0
- package/linkmind_claw-openclaw-faq-kb-2.0.2.tgz +0 -0
- package/linkmind_claw-openclaw-faq-kb-2.0.3.tgz +0 -0
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Tool — faq_account_manage
|
|
3
3
|
*
|
|
4
|
-
* Admin
|
|
5
|
-
*
|
|
6
|
-
* - list_users: 列出渠道用户
|
|
7
|
-
* - my_info: 查看自己的身份和配额
|
|
4
|
+
* Admin-level account management for social-media channel users.
|
|
5
|
+
* Supports: grant_role, list_users, my_info.
|
|
8
6
|
*/
|
|
9
7
|
import { Type } from "@sinclair/typebox";
|
|
10
8
|
export const AccountManageParams = Type.Object({
|
|
@@ -12,78 +10,114 @@ export const AccountManageParams = Type.Object({
|
|
|
12
10
|
Type.Literal("grant_role"),
|
|
13
11
|
Type.Literal("list_users"),
|
|
14
12
|
Type.Literal("my_info"),
|
|
15
|
-
], {
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
], {
|
|
14
|
+
description: "操作类型: grant_role=给用户授权, list_users=列出渠道用户, my_info=查看自己的身份信息",
|
|
15
|
+
}),
|
|
16
|
+
target_channel_user_id: Type.Optional(Type.String({
|
|
17
|
+
description: "目标用户的渠道 ID(grant_role 时必填)",
|
|
18
|
+
})),
|
|
19
|
+
target_channel_type: Type.Optional(Type.String({
|
|
20
|
+
description: "目标用户的渠道类型(默认 telegram)",
|
|
21
|
+
})),
|
|
18
22
|
channel_bot_id: Type.Optional(Type.String({ description: "Bot 标识(默认 default)" })),
|
|
19
|
-
role: Type.Optional(Type.String({
|
|
23
|
+
role: Type.Optional(Type.String({
|
|
24
|
+
description: "要授予的角色: viewer / editor / reviewer / admin(grant_role 时必填)",
|
|
25
|
+
})),
|
|
20
26
|
kb_scope: Type.Optional(Type.Array(Type.String(), {
|
|
21
|
-
description: "可访问的知识库 ID
|
|
27
|
+
description: "可访问的知识库 ID 列表,留空=全部(grant_role 时可选)",
|
|
22
28
|
})),
|
|
23
29
|
});
|
|
24
30
|
export async function executeAccountManage(client, params) {
|
|
25
31
|
switch (params.action) {
|
|
26
|
-
case "grant_role":
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
text: "grant_role 需要 target_channel_user_id 和 role 参数",
|
|
33
|
-
},
|
|
34
|
-
],
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
const res = await client.post("/auth/grant_role", {
|
|
38
|
-
target_channel_user_id: params.target_channel_user_id,
|
|
39
|
-
target_channel_type: params.target_channel_type ?? "telegram",
|
|
40
|
-
channel_bot_id: params.channel_bot_id ?? "default",
|
|
41
|
-
role: params.role,
|
|
42
|
-
kb_scope: params.kb_scope ?? null,
|
|
43
|
-
});
|
|
44
|
-
return {
|
|
45
|
-
content: [{ type: "text", text: res.message || "授权成功" }],
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
case "list_users": {
|
|
49
|
-
const qp = new URLSearchParams();
|
|
50
|
-
if (params.target_channel_type)
|
|
51
|
-
qp.set("channel_type", params.target_channel_type);
|
|
52
|
-
if (params.channel_bot_id)
|
|
53
|
-
qp.set("channel_bot_id", params.channel_bot_id);
|
|
54
|
-
const res = await client.get(`/auth/channel_users?${qp.toString()}`);
|
|
55
|
-
const users = res.data?.users ?? [];
|
|
56
|
-
const lines = [`渠道用户列表(共 ${users.length} 人):`];
|
|
57
|
-
for (const u of users) {
|
|
58
|
-
const scope = u.kb_scope ? `[${u.kb_scope.length} 个 KB]` : "[全部]";
|
|
59
|
-
lines.push(` ${u.name} 角色=${u.role} 渠道=${u.channel_type} 范围=${scope}`);
|
|
60
|
-
}
|
|
61
|
-
if (users.length === 0)
|
|
62
|
-
lines.push(" (暂无用户)");
|
|
63
|
-
return { content: [{ type: "text", text: lines.join("\n") }] };
|
|
64
|
-
}
|
|
65
|
-
case "my_info": {
|
|
66
|
-
const res = await client.get("/oauth/me");
|
|
67
|
-
const d = res.data;
|
|
68
|
-
const lines = [
|
|
69
|
-
"当前用户信息:",
|
|
70
|
-
` 用户 ID: ${d.user_id}`,
|
|
71
|
-
` 名称: ${d.name}`,
|
|
72
|
-
` 角色: ${d.role}`,
|
|
73
|
-
` 渠道: ${d.channel_type}`,
|
|
74
|
-
` 知识库范围: ${d.kb_scope ? JSON.stringify(d.kb_scope) : "全部"}`,
|
|
75
|
-
];
|
|
76
|
-
return { content: [{ type: "text", text: lines.join("\n") }] };
|
|
77
|
-
}
|
|
32
|
+
case "grant_role":
|
|
33
|
+
return doGrantRole(client, params);
|
|
34
|
+
case "list_users":
|
|
35
|
+
return doListUsers(client, params);
|
|
36
|
+
case "my_info":
|
|
37
|
+
return doMyInfo(client);
|
|
78
38
|
default:
|
|
79
|
-
return {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
],
|
|
86
|
-
};
|
|
39
|
+
return textResult(`[ERROR] 不支持的 action: ${params.action}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async function doGrantRole(client, p) {
|
|
43
|
+
if (!p.target_channel_user_id) {
|
|
44
|
+
return textResult("[ERROR] grant_role 需要提供 target_channel_user_id");
|
|
87
45
|
}
|
|
46
|
+
if (!p.role) {
|
|
47
|
+
return textResult("[ERROR] grant_role 需要提供 role (viewer/editor/reviewer/admin)");
|
|
48
|
+
}
|
|
49
|
+
const res = await client.post("/auth/grant_role", {
|
|
50
|
+
target_channel_user_id: p.target_channel_user_id,
|
|
51
|
+
target_channel_type: p.target_channel_type ?? "telegram",
|
|
52
|
+
channel_bot_id: p.channel_bot_id ?? "default",
|
|
53
|
+
role: p.role,
|
|
54
|
+
kb_scope: p.kb_scope ?? null,
|
|
55
|
+
});
|
|
56
|
+
if (!res.success) {
|
|
57
|
+
return textResult(`[ERROR] 授权失败: ${res.message}`);
|
|
58
|
+
}
|
|
59
|
+
const d = res.data;
|
|
60
|
+
const lines = [
|
|
61
|
+
`授权成功!`,
|
|
62
|
+
` 用户 : ${d.name} (${d.user_id})`,
|
|
63
|
+
` 角色变更 : ${d.old_role} → ${d.new_role}`,
|
|
64
|
+
];
|
|
65
|
+
if (d.kb_scope) {
|
|
66
|
+
lines.push(` 可访问知识库: ${d.kb_scope.join(", ")}`);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
lines.push(` 可访问知识库: 全部`);
|
|
70
|
+
}
|
|
71
|
+
return textResult(lines.join("\n"));
|
|
72
|
+
}
|
|
73
|
+
async function doListUsers(client, p) {
|
|
74
|
+
const qp = new URLSearchParams();
|
|
75
|
+
if (p.target_channel_type)
|
|
76
|
+
qp.set("channel_type", p.target_channel_type);
|
|
77
|
+
if (p.channel_bot_id)
|
|
78
|
+
qp.set("channel_bot_id", p.channel_bot_id);
|
|
79
|
+
const res = await client.get(`/auth/channel_users?${qp.toString()}`);
|
|
80
|
+
if (!res.success) {
|
|
81
|
+
return textResult(`[ERROR] 获取用户列表失败: ${res.message}`);
|
|
82
|
+
}
|
|
83
|
+
const { users, total } = res.data;
|
|
84
|
+
const lines = [`渠道用户列表(共 ${total} 人):`];
|
|
85
|
+
for (const u of users) {
|
|
86
|
+
const active = u.is_active ? "" : " [已停用]";
|
|
87
|
+
const scope = u.kb_scope ? `[${u.kb_scope.length} 个库]` : "[全部]";
|
|
88
|
+
lines.push(` ${u.channel_type}:${u.channel_user_id} ${u.name} ${u.role} ${scope}${active}`);
|
|
89
|
+
}
|
|
90
|
+
if (users.length === 0) {
|
|
91
|
+
lines.push(" (暂无渠道用户)");
|
|
92
|
+
}
|
|
93
|
+
return textResult(lines.join("\n"));
|
|
94
|
+
}
|
|
95
|
+
async function doMyInfo(client) {
|
|
96
|
+
const res = await client.get("/auth/me");
|
|
97
|
+
if (!res.success) {
|
|
98
|
+
return textResult(`[ERROR] 获取身份信息失败: ${res.message}`);
|
|
99
|
+
}
|
|
100
|
+
const d = res.data;
|
|
101
|
+
const lines = [
|
|
102
|
+
"当前身份信息:",
|
|
103
|
+
` 用户 ID : ${d.id}`,
|
|
104
|
+
` 名称 : ${d.name}`,
|
|
105
|
+
` 角色 : ${d.role}`,
|
|
106
|
+
` 可执行操作: ${d.allowed_actions.join(", ")}`,
|
|
107
|
+
` 数据等级 : ${d.max_data_level}`,
|
|
108
|
+
];
|
|
109
|
+
if (d.kb_scope) {
|
|
110
|
+
lines.push(` 可访问知识库: ${d.kb_scope.join(", ")}`);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
lines.push(` 可访问知识库: 全部`);
|
|
114
|
+
}
|
|
115
|
+
if (d.quota) {
|
|
116
|
+
lines.push(` 今日配额 : ${d.quota.today_used} / ${d.quota.daily_limit}(剩余 ${d.quota.remaining})`);
|
|
117
|
+
}
|
|
118
|
+
return textResult(lines.join("\n"));
|
|
119
|
+
}
|
|
120
|
+
function textResult(text) {
|
|
121
|
+
return { content: [{ type: "text", text }] };
|
|
88
122
|
}
|
|
89
123
|
//# sourceMappingURL=account-manage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account-manage.js","sourceRoot":"","sources":["../../tools/account-manage.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"account-manage.js","sourceRoot":"","sources":["../../tools/account-manage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,28 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Tool — faq_account_register
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Auto-register or login a social-media channel user.
|
|
5
|
+
* Maps (channel_type, channel_user_id, channel_bot_id) to a local account
|
|
6
|
+
* in the api_users table. On first call creates the account; on subsequent
|
|
7
|
+
* calls returns the existing identity.
|
|
8
|
+
*
|
|
9
|
+
* The returned api_key (new users only) is automatically cached in the
|
|
10
|
+
* FaqKbApiClient so all future requests use user-level RBAC.
|
|
5
11
|
*/
|
|
6
12
|
import { type Static } from "@sinclair/typebox";
|
|
7
13
|
import type { FaqKbApiClient } from "../lib/api-client.js";
|
|
8
14
|
export declare const AccountRegisterParams: import("@sinclair/typebox").TObject<{
|
|
9
15
|
channel_type: import("@sinclair/typebox").TString;
|
|
10
16
|
channel_user_id: import("@sinclair/typebox").TString;
|
|
11
|
-
display_name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
12
17
|
channel_bot_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
18
|
+
display_name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
19
|
+
role: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
13
20
|
}>;
|
|
14
21
|
export type AccountRegisterInput = Static<typeof AccountRegisterParams>;
|
|
15
22
|
export declare function executeAccountRegister(client: FaqKbApiClient, params: AccountRegisterInput): Promise<{
|
|
16
|
-
content:
|
|
23
|
+
content: {
|
|
17
24
|
type: "text";
|
|
18
25
|
text: string;
|
|
19
|
-
}
|
|
26
|
+
}[];
|
|
20
27
|
}>;
|
|
21
28
|
//# sourceMappingURL=account-register.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account-register.d.ts","sourceRoot":"","sources":["../../tools/account-register.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"account-register.d.ts","sourceRoot":"","sources":["../../tools/account-register.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,sBAAsB,CAAC;AAExE,eAAO,MAAM,qBAAqB;;;;;;EAoBhC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAaxE,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,oBAAoB;;;;;GAuD7B"}
|
|
@@ -1,51 +1,74 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Tool — faq_account_register
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Auto-register or login a social-media channel user.
|
|
5
|
+
* Maps (channel_type, channel_user_id, channel_bot_id) to a local account
|
|
6
|
+
* in the api_users table. On first call creates the account; on subsequent
|
|
7
|
+
* calls returns the existing identity.
|
|
8
|
+
*
|
|
9
|
+
* The returned api_key (new users only) is automatically cached in the
|
|
10
|
+
* FaqKbApiClient so all future requests use user-level RBAC.
|
|
5
11
|
*/
|
|
6
12
|
import { Type } from "@sinclair/typebox";
|
|
7
13
|
export const AccountRegisterParams = Type.Object({
|
|
8
14
|
channel_type: Type.String({
|
|
9
|
-
description: "渠道类型: telegram / discord / slack / web",
|
|
15
|
+
description: "渠道类型: telegram / discord / slack / web / whatsapp / line",
|
|
10
16
|
}),
|
|
11
17
|
channel_user_id: Type.String({
|
|
12
18
|
description: "渠道平台用户唯一标识(如 Telegram user ID)",
|
|
13
19
|
}),
|
|
20
|
+
channel_bot_id: Type.Optional(Type.String({
|
|
21
|
+
description: "Bot 标识,区分同用户在不同 Bot 下的身份(默认 default)",
|
|
22
|
+
})),
|
|
14
23
|
display_name: Type.Optional(Type.String({ description: "用户显示名称(可选)" })),
|
|
15
|
-
|
|
24
|
+
role: Type.Optional(Type.String({
|
|
25
|
+
description: "初始角色(仅首次注册生效): viewer / editor / admin。默认 viewer",
|
|
26
|
+
})),
|
|
16
27
|
});
|
|
17
28
|
export async function executeAccountRegister(client, params) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
return {
|
|
21
|
-
content: [
|
|
22
|
-
{
|
|
23
|
-
type: "text",
|
|
24
|
-
text: "✅ 你已经注册过了,无需重复操作。可以直接使用知识库功能。",
|
|
25
|
-
},
|
|
26
|
-
],
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
const result = await client.oauthLogin({
|
|
29
|
+
const botId = params.channel_bot_id || "default";
|
|
30
|
+
const res = await client.post("/auth/channel_register", {
|
|
30
31
|
channel_type: params.channel_type,
|
|
31
32
|
channel_user_id: params.channel_user_id,
|
|
32
|
-
channel_bot_id:
|
|
33
|
+
channel_bot_id: botId,
|
|
33
34
|
display_name: params.display_name ?? "",
|
|
35
|
+
role: params.role ?? "viewer",
|
|
34
36
|
});
|
|
37
|
+
if (!res.success) {
|
|
38
|
+
return textResult(`[ERROR] 注册/登录失败: ${res.message}`);
|
|
39
|
+
}
|
|
40
|
+
const d = res.data;
|
|
41
|
+
if (d.api_key) {
|
|
42
|
+
client.storeUserApiKey({
|
|
43
|
+
channelType: params.channel_type,
|
|
44
|
+
channelUserId: params.channel_user_id,
|
|
45
|
+
channelBotId: botId,
|
|
46
|
+
}, d.api_key);
|
|
47
|
+
}
|
|
35
48
|
const lines = [];
|
|
36
|
-
if (
|
|
37
|
-
lines.push("
|
|
38
|
-
lines.push("");
|
|
39
|
-
lines.push("现在你可以:");
|
|
40
|
-
lines.push(" /faq_create <名称> <文档URL> — 创建知识库");
|
|
41
|
-
lines.push(" /faq_list — 查看你的知识库");
|
|
42
|
-
lines.push(" /faq_query <名称> <问题> — 提问");
|
|
49
|
+
if (d.is_new) {
|
|
50
|
+
lines.push("新用户注册成功!");
|
|
43
51
|
}
|
|
44
52
|
else {
|
|
45
|
-
lines.push("
|
|
53
|
+
lines.push("欢迎回来(已有账号)");
|
|
54
|
+
}
|
|
55
|
+
lines.push(` 用户 ID : ${d.user_id}`);
|
|
56
|
+
lines.push(` 名称 : ${d.name}`);
|
|
57
|
+
lines.push(` 角色 : ${d.role}`);
|
|
58
|
+
lines.push(` 渠道 : ${d.channel_type}`);
|
|
59
|
+
if (d.kb_scope) {
|
|
60
|
+
lines.push(` 可访问知识库: ${d.kb_scope.join(", ")}`);
|
|
46
61
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
62
|
+
else {
|
|
63
|
+
lines.push(` 可访问知识库: 全部`);
|
|
64
|
+
}
|
|
65
|
+
if (d.is_new) {
|
|
66
|
+
lines.push("");
|
|
67
|
+
lines.push("提示: 你的 API Key 已自动缓存,后续操作将使用你的身份进行鉴权。");
|
|
68
|
+
}
|
|
69
|
+
return textResult(lines.join("\n"));
|
|
70
|
+
}
|
|
71
|
+
function textResult(text) {
|
|
72
|
+
return { content: [{ type: "text", text }] };
|
|
50
73
|
}
|
|
51
74
|
//# sourceMappingURL=account-register.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account-register.js","sourceRoot":"","sources":["../../tools/account-register.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"account-register.js","sourceRoot":"","sources":["../../tools/account-register.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/query-kb.d.ts
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Tool — faq_kb_query
|
|
2
|
+
* Tool 2 — faq_kb_query
|
|
3
3
|
*
|
|
4
|
-
* Ask a question against a trained knowledge base
|
|
5
|
-
*
|
|
4
|
+
* Ask a question against a trained knowledge base and get an
|
|
5
|
+
* AI-generated answer with source references.
|
|
6
6
|
*/
|
|
7
7
|
import { type Static } from "@sinclair/typebox";
|
|
8
8
|
import type { FaqKbApiClient } from "../lib/api-client.js";
|
|
9
9
|
export declare const QueryParams: import("@sinclair/typebox").TObject<{
|
|
10
|
+
kb_id: import("@sinclair/typebox").TString;
|
|
10
11
|
question: import("@sinclair/typebox").TString;
|
|
11
|
-
kb_name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
12
|
-
kb_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
13
12
|
enable_polish: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
14
13
|
user_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
15
14
|
session_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-kb.d.ts","sourceRoot":"","sources":["../../tools/query-kb.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,sBAAsB,CAAC;AAExE,eAAO,MAAM,WAAW
|
|
1
|
+
{"version":3,"file":"query-kb.d.ts","sourceRoot":"","sources":["../../tools/query-kb.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,sBAAsB,CAAC;AAExE,eAAO,MAAM,WAAW;;;;;;EAetB,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,WAAW,CAAC,CAAC;AAcpD,wBAAsB,YAAY,CAChC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,UAAU;;;;;GAsCnB"}
|
package/dist/tools/query-kb.js
CHANGED
|
@@ -1,57 +1,31 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Tool — faq_kb_query
|
|
2
|
+
* Tool 2 — faq_kb_query
|
|
3
3
|
*
|
|
4
|
-
* Ask a question against a trained knowledge base
|
|
5
|
-
*
|
|
4
|
+
* Ask a question against a trained knowledge base and get an
|
|
5
|
+
* AI-generated answer with source references.
|
|
6
6
|
*/
|
|
7
7
|
import { Type } from "@sinclair/typebox";
|
|
8
8
|
export const QueryParams = Type.Object({
|
|
9
|
+
kb_id: Type.String({ description: "知识库 ID" }),
|
|
9
10
|
question: Type.String({ description: "要查询的问题" }),
|
|
10
|
-
kb_name: Type.Optional(Type.String({ description: "知识库名称(推荐,支持模糊匹配)" })),
|
|
11
|
-
kb_id: Type.Optional(Type.String({ description: "知识库 ID(精确匹配,可选)" })),
|
|
12
11
|
enable_polish: Type.Optional(Type.Boolean({
|
|
13
|
-
description: "是否启用 LLM 综合分析(多 FAQ 融合生成更自然的答案)。默认
|
|
12
|
+
description: "是否启用 LLM 综合分析(多 FAQ 融合生成更自然的答案)。默认 true",
|
|
14
13
|
})),
|
|
15
14
|
user_id: Type.Optional(Type.String({ description: "用户 ID(用于权限和画像)" })),
|
|
16
15
|
session_id: Type.Optional(Type.String({ description: "会话 ID(用于上下文关联)" })),
|
|
17
16
|
});
|
|
18
17
|
export async function executeQuery(client, params) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
kb_name: params.kb_name,
|
|
26
|
-
question: params.question,
|
|
27
|
-
enable_polish: params.enable_polish ?? false,
|
|
28
|
-
user_id: params.user_id ?? null,
|
|
29
|
-
session_id: params.session_id ?? null,
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
res = await client.post(`/knowledge_bases/${params.kb_id}/query`, {
|
|
34
|
-
question: params.question,
|
|
35
|
-
enable_polish: params.enable_polish ?? false,
|
|
36
|
-
user_id: params.user_id ?? null,
|
|
37
|
-
session_id: params.session_id ?? null,
|
|
38
|
-
});
|
|
39
|
-
}
|
|
18
|
+
const res = await client.post(`/knowledge_bases/${params.kb_id}/query`, {
|
|
19
|
+
question: params.question,
|
|
20
|
+
enable_polish: params.enable_polish ?? true,
|
|
21
|
+
user_id: params.user_id ?? null,
|
|
22
|
+
session_id: params.session_id ?? null,
|
|
23
|
+
});
|
|
40
24
|
if (!res.success) {
|
|
41
|
-
|
|
42
|
-
if (candidates?.length) {
|
|
43
|
-
const list = candidates
|
|
44
|
-
.map((c) => ` • ${c.name} (ID: ${c.id})`)
|
|
45
|
-
.join("\n");
|
|
46
|
-
return textResult(`${res.message}\n\n可选知识库:\n${list}`);
|
|
47
|
-
}
|
|
48
|
-
return textResult(`[ERROR] ${res.message}`);
|
|
25
|
+
return textResult(`[ERROR] 问答失败: ${res.message}`);
|
|
49
26
|
}
|
|
50
27
|
const d = res.data;
|
|
51
28
|
const lines = [];
|
|
52
|
-
if (d.kb_name) {
|
|
53
|
-
lines.push(`**知识库**: ${d.kb_name}`);
|
|
54
|
-
}
|
|
55
29
|
lines.push(`**答案**: ${d.answer || "(无答案)"}`);
|
|
56
30
|
if (d.faq_data?.question) {
|
|
57
31
|
lines.push(`**匹配问题**: ${d.faq_data.question}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-kb.js","sourceRoot":"","sources":["../../tools/query-kb.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAe,MAAM,mBAAmB,CAAC;AAGtD,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;IACrC,
|
|
1
|
+
{"version":3,"file":"query-kb.js","sourceRoot":"","sources":["../../tools/query-kb.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAe,MAAM,mBAAmB,CAAC;AAGtD,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;IACrC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;IAC7C,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;IAChD,aAAa,EAAE,IAAI,CAAC,QAAQ,CAC1B,IAAI,CAAC,OAAO,CAAC;QACX,WAAW,EACT,yCAAyC;KAC5C,CAAC,CACH;IACD,OAAO,EAAE,IAAI,CAAC,QAAQ,CACpB,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAC/C;IACD,UAAU,EAAE,IAAI,CAAC,QAAQ,CACvB,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAC/C;CACF,CAAC,CAAC;AAgBH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAsB,EACtB,MAAkB;IAElB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAC3B,oBAAoB,MAAM,CAAC,KAAK,QAAQ,EACxC;QACE,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,IAAI;QAC3C,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI;QAC/B,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,IAAI;KACtC,CACF,CAAC;IAEF,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,UAAU,CAAC,iBAAiB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;IACnB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,IAAI,OAAO,EAAE,CAAC,CAAC;IAE7C,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,CAAC,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;QAC1C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACzD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,WAAW,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACxD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@linkmind_claw/openclaw-faq-kb",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.2.0",
|
|
4
4
|
"description": "OpenClaw Plugin - FAQ Knowledge Base: one-click document training & intelligent Q&A",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
"@sinclair/typebox": "^0.34.0"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
|
-
"
|
|
31
|
+
"@types/node": "^22.0.0",
|
|
32
32
|
"ts-node": "^10.9.0",
|
|
33
|
-
"
|
|
33
|
+
"typescript": "^5.9.3"
|
|
34
34
|
}
|
|
35
35
|
}
|