@downcity/plugins 1.0.153 → 1.0.157
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/bin/chat/ChatPlugin.d.ts +2 -10
- package/bin/chat/ChatPlugin.d.ts.map +1 -1
- package/bin/chat/ChatPlugin.js +3 -13
- package/bin/chat/ChatPlugin.js.map +1 -1
- package/bin/chat/PROMPT.direct.d.ts +1 -1
- package/bin/chat/PROMPT.direct.d.ts.map +1 -1
- package/bin/chat/PROMPT.direct.js +1 -1
- package/bin/chat/PROMPT.direct.js.map +1 -1
- package/bin/chat/access/ChatAccessActions.d.ts +11 -0
- package/bin/chat/access/ChatAccessActions.d.ts.map +1 -0
- package/bin/chat/access/ChatAccessActions.js +137 -0
- package/bin/chat/access/ChatAccessActions.js.map +1 -0
- package/bin/chat/access/ChatAccessRuntime.d.ts +17 -0
- package/bin/chat/access/ChatAccessRuntime.d.ts.map +1 -0
- package/bin/chat/access/ChatAccessRuntime.js +31 -0
- package/bin/chat/access/ChatAccessRuntime.js.map +1 -0
- package/bin/chat/access/ChatAccessSchema.d.ts +16 -0
- package/bin/chat/access/ChatAccessSchema.d.ts.map +1 -0
- package/bin/chat/access/ChatAccessSchema.js +99 -0
- package/bin/chat/access/ChatAccessSchema.js.map +1 -0
- package/bin/chat/access/ChatAccessService.d.ts +44 -0
- package/bin/chat/access/ChatAccessService.d.ts.map +1 -0
- package/bin/chat/access/ChatAccessService.js +281 -0
- package/bin/chat/access/ChatAccessService.js.map +1 -0
- package/bin/chat/access/ChatAccessStore.d.ts +67 -0
- package/bin/chat/access/ChatAccessStore.d.ts.map +1 -0
- package/bin/chat/access/ChatAccessStore.js +367 -0
- package/bin/chat/access/ChatAccessStore.js.map +1 -0
- package/bin/chat/accounts/Crypto.d.ts +1 -1
- package/bin/chat/accounts/Crypto.js +1 -1
- package/bin/chat/accounts/Store.d.ts +1 -1
- package/bin/chat/accounts/Store.js +1 -1
- package/bin/chat/channels/BaseChatChannel.d.ts +34 -21
- package/bin/chat/channels/BaseChatChannel.d.ts.map +1 -1
- package/bin/chat/channels/BaseChatChannel.js +71 -58
- package/bin/chat/channels/BaseChatChannel.js.map +1 -1
- package/bin/chat/channels/BaseChatChannelQueue.d.ts +1 -1
- package/bin/chat/channels/BaseChatChannelQueue.d.ts.map +1 -1
- package/bin/chat/channels/BaseChatChannelQueue.js +2 -14
- package/bin/chat/channels/BaseChatChannelQueue.js.map +1 -1
- package/bin/chat/channels/Configuration.d.ts +2 -2
- package/bin/chat/channels/Configuration.d.ts.map +1 -1
- package/bin/chat/channels/Configuration.js +3 -3
- package/bin/chat/channels/Configuration.js.map +1 -1
- package/bin/chat/channels/feishu/Configuration.js +4 -4
- package/bin/chat/channels/feishu/Configuration.js.map +1 -1
- package/bin/chat/channels/feishu/Feishu.d.ts +2 -0
- package/bin/chat/channels/feishu/Feishu.d.ts.map +1 -1
- package/bin/chat/channels/feishu/Feishu.js +8 -7
- package/bin/chat/channels/feishu/Feishu.js.map +1 -1
- package/bin/chat/channels/feishu/FeishuMessageHandler.d.ts +9 -17
- package/bin/chat/channels/feishu/FeishuMessageHandler.d.ts.map +1 -1
- package/bin/chat/channels/feishu/FeishuMessageHandler.js +6 -17
- package/bin/chat/channels/feishu/FeishuMessageHandler.js.map +1 -1
- package/bin/chat/channels/qq/Configuration.js +4 -4
- package/bin/chat/channels/qq/Configuration.js.map +1 -1
- package/bin/chat/channels/qq/QQ.d.ts +2 -0
- package/bin/chat/channels/qq/QQ.d.ts.map +1 -1
- package/bin/chat/channels/qq/QQ.js +8 -7
- package/bin/chat/channels/qq/QQ.js.map +1 -1
- package/bin/chat/channels/qq/QQMessageHandler.d.ts +9 -17
- package/bin/chat/channels/qq/QQMessageHandler.d.ts.map +1 -1
- package/bin/chat/channels/qq/QQMessageHandler.js +7 -25
- package/bin/chat/channels/qq/QQMessageHandler.js.map +1 -1
- package/bin/chat/channels/telegram/Bot.d.ts +12 -0
- package/bin/chat/channels/telegram/Bot.d.ts.map +1 -1
- package/bin/chat/channels/telegram/Bot.js +24 -7
- package/bin/chat/channels/telegram/Bot.js.map +1 -1
- package/bin/chat/channels/telegram/Configuration.js +4 -4
- package/bin/chat/channels/telegram/Configuration.js.map +1 -1
- package/bin/chat/channels/telegram/TelegramMessageHandler.d.ts +9 -17
- package/bin/chat/channels/telegram/TelegramMessageHandler.d.ts.map +1 -1
- package/bin/chat/channels/telegram/TelegramMessageHandler.js +5 -16
- package/bin/chat/channels/telegram/TelegramMessageHandler.js.map +1 -1
- package/bin/chat/runtime/ChatChannelActions.d.ts +3 -2
- package/bin/chat/runtime/ChatChannelActions.d.ts.map +1 -1
- package/bin/chat/runtime/ChatChannelActions.js +57 -0
- package/bin/chat/runtime/ChatChannelActions.js.map +1 -1
- package/bin/chat/runtime/ChatChannelConfig.d.ts +2 -2
- package/bin/chat/runtime/ChatChannelConfig.js +3 -3
- package/bin/chat/runtime/ChatChannelConfig.js.map +1 -1
- package/bin/chat/runtime/ChatChannelCore.d.ts +2 -2
- package/bin/chat/runtime/ChatChannelCore.js +1 -1
- package/bin/chat/runtime/ChatChannelLifecycle.d.ts +1 -1
- package/bin/chat/runtime/ChatChannelLifecycle.js +1 -1
- package/bin/chat/runtime/PluginPoints.d.ts +0 -24
- package/bin/chat/runtime/PluginPoints.d.ts.map +1 -1
- package/bin/chat/runtime/PluginPoints.js +0 -24
- package/bin/chat/runtime/PluginPoints.js.map +1 -1
- package/bin/chat/runtime/QueuedUserMessage.d.ts.map +1 -1
- package/bin/chat/runtime/QueuedUserMessage.js +0 -2
- package/bin/chat/runtime/QueuedUserMessage.js.map +1 -1
- package/bin/chat/types/ChannelConfiguration.d.ts +4 -4
- package/bin/chat/types/ChannelConfiguration.d.ts.map +1 -1
- package/bin/chat/types/ChatAccess.d.ts +300 -0
- package/bin/chat/types/ChatAccess.d.ts.map +1 -0
- package/bin/chat/types/ChatAccess.js +22 -0
- package/bin/chat/types/ChatAccess.js.map +1 -0
- package/bin/chat/types/ChatPromptContext.d.ts +0 -15
- package/bin/chat/types/ChatPromptContext.d.ts.map +1 -1
- package/bin/index.d.ts +4 -4
- package/bin/index.d.ts.map +1 -1
- package/bin/index.js +3 -3
- package/bin/index.js.map +1 -1
- package/bin/skill/Config.d.ts +1 -1
- package/bin/skill/Config.js +1 -1
- package/bin/skill/runtime/Paths.d.ts +1 -1
- package/bin/skill/runtime/Paths.js +1 -1
- package/package.json +6 -4
- package/scripts/chat-access.test.mjs +126 -0
- package/scripts/chat-channel-config.test.mjs +82 -0
- package/src/chat/ChatPlugin.ts +4 -24
- package/src/chat/PROMPT.direct.ts +1 -1
- package/src/chat/PROMPT.direct.ts.txt +1 -1
- package/src/chat/access/ChatAccessActions.ts +159 -0
- package/src/chat/access/ChatAccessRuntime.ts +41 -0
- package/src/chat/access/ChatAccessSchema.ts +104 -0
- package/src/chat/access/ChatAccessService.ts +311 -0
- package/src/chat/access/ChatAccessStore.ts +462 -0
- package/src/chat/accounts/Crypto.ts +1 -1
- package/src/chat/accounts/Store.ts +1 -1
- package/src/chat/channels/BaseChatChannel.ts +86 -80
- package/src/chat/channels/BaseChatChannelQueue.ts +2 -14
- package/src/chat/channels/Configuration.ts +3 -3
- package/src/chat/channels/feishu/Configuration.ts +4 -4
- package/src/chat/channels/feishu/Feishu.ts +11 -9
- package/src/chat/channels/feishu/FeishuMessageHandler.ts +16 -40
- package/src/chat/channels/qq/Configuration.ts +4 -4
- package/src/chat/channels/qq/QQ.ts +11 -9
- package/src/chat/channels/qq/QQMessageHandler.ts +17 -49
- package/src/chat/channels/telegram/Bot.ts +29 -9
- package/src/chat/channels/telegram/Configuration.ts +4 -4
- package/src/chat/channels/telegram/TelegramMessageHandler.ts +15 -39
- package/src/chat/runtime/ChatChannelActions.ts +72 -1
- package/src/chat/runtime/ChatChannelConfig.ts +3 -3
- package/src/chat/runtime/ChatChannelCore.ts +1 -1
- package/src/chat/runtime/ChatChannelLifecycle.ts +1 -1
- package/src/chat/runtime/PluginPoints.ts +0 -24
- package/src/chat/runtime/QueuedUserMessage.ts +0 -2
- package/src/chat/types/ChannelConfiguration.ts +4 -4
- package/src/chat/types/ChatAccess.ts +335 -0
- package/src/chat/types/ChatPromptContext.ts +0 -17
- package/src/index.ts +27 -31
- package/src/skill/Config.ts +1 -1
- package/src/skill/runtime/Paths.ts +1 -1
- package/bin/auth/runtime/AuthorizationConfig.d.ts +0 -41
- package/bin/auth/runtime/AuthorizationConfig.d.ts.map +0 -1
- package/bin/auth/runtime/AuthorizationConfig.js +0 -185
- package/bin/auth/runtime/AuthorizationConfig.js.map +0 -1
- package/bin/auth/runtime/AuthorizationPolicy.d.ts +0 -28
- package/bin/auth/runtime/AuthorizationPolicy.d.ts.map +0 -1
- package/bin/auth/runtime/AuthorizationPolicy.js +0 -124
- package/bin/auth/runtime/AuthorizationPolicy.js.map +0 -1
- package/bin/auth/runtime/AuthorizationStore.d.ts +0 -29
- package/bin/auth/runtime/AuthorizationStore.d.ts.map +0 -1
- package/bin/auth/runtime/AuthorizationStore.js +0 -179
- package/bin/auth/runtime/AuthorizationStore.js.map +0 -1
- package/bin/auth/types/AuthPlugin.d.ts +0 -403
- package/bin/auth/types/AuthPlugin.d.ts.map +0 -1
- package/bin/auth/types/AuthPlugin.js +0 -111
- package/bin/auth/types/AuthPlugin.js.map +0 -1
- package/bin/chat/runtime/ChatAuthorizationRuntime.d.ts +0 -22
- package/bin/chat/runtime/ChatAuthorizationRuntime.d.ts.map +0 -1
- package/bin/chat/runtime/ChatAuthorizationRuntime.js +0 -230
- package/bin/chat/runtime/ChatAuthorizationRuntime.js.map +0 -1
- package/bin/chat/runtime/PluginDispatch.d.ts +0 -43
- package/bin/chat/runtime/PluginDispatch.d.ts.map +0 -1
- package/bin/chat/runtime/PluginDispatch.js +0 -57
- package/bin/chat/runtime/PluginDispatch.js.map +0 -1
- package/src/auth/runtime/AuthorizationConfig.ts +0 -247
- package/src/auth/runtime/AuthorizationPolicy.ts +0 -167
- package/src/auth/runtime/AuthorizationStore.ts +0 -220
- package/src/auth/types/AuthPlugin.ts +0 -540
- package/src/chat/runtime/ChatAuthorizationRuntime.ts +0 -270
- package/src/chat/runtime/PluginDispatch.ts +0 -89
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chat Access SQLite Store。
|
|
3
|
+
*
|
|
4
|
+
* 关键点(中文)
|
|
5
|
+
* - 该 Store 是当前 Agent Chat Access 的唯一持久化入口。
|
|
6
|
+
* - 所有字段先归一化再写入,避免平台适配器差异污染查询键。
|
|
7
|
+
* - Service 负责业务编排,Store 只负责结构化读写和事务。
|
|
8
|
+
*/
|
|
9
|
+
import Database from "better-sqlite3";
|
|
10
|
+
import fs from "fs-extra";
|
|
11
|
+
import path from "node:path";
|
|
12
|
+
import { generateId } from "@downcity/agent";
|
|
13
|
+
import { ensure_chat_access_schema } from "../../chat/access/ChatAccessSchema.js";
|
|
14
|
+
/**
|
|
15
|
+
* 返回项目级 Chat Access 数据库路径。
|
|
16
|
+
*/
|
|
17
|
+
export function get_chat_access_db_path(project_root) {
|
|
18
|
+
return path.join(path.resolve(project_root), ".downcity", "chat", "access.db");
|
|
19
|
+
}
|
|
20
|
+
function normalize_text(value) {
|
|
21
|
+
return String(value || "").trim();
|
|
22
|
+
}
|
|
23
|
+
function optional_text(value) {
|
|
24
|
+
const text = normalize_text(value);
|
|
25
|
+
return text || undefined;
|
|
26
|
+
}
|
|
27
|
+
function now_iso() {
|
|
28
|
+
return new Date().toISOString();
|
|
29
|
+
}
|
|
30
|
+
function to_principal(row) {
|
|
31
|
+
if (!row)
|
|
32
|
+
return null;
|
|
33
|
+
const principal_id = normalize_text(row.principal_id);
|
|
34
|
+
const channel = normalize_text(row.channel);
|
|
35
|
+
const issuer = normalize_text(row.issuer);
|
|
36
|
+
const subject_id = normalize_text(row.subject_id);
|
|
37
|
+
if (!principal_id || !channel || !issuer || !subject_id)
|
|
38
|
+
return null;
|
|
39
|
+
return {
|
|
40
|
+
principal_id,
|
|
41
|
+
channel,
|
|
42
|
+
issuer,
|
|
43
|
+
subject_id,
|
|
44
|
+
...(optional_text(row.display_name)
|
|
45
|
+
? { display_name: optional_text(row.display_name) }
|
|
46
|
+
: {}),
|
|
47
|
+
first_seen_at: normalize_text(row.first_seen_at),
|
|
48
|
+
last_seen_at: normalize_text(row.last_seen_at),
|
|
49
|
+
...(optional_text(row.last_chat_id)
|
|
50
|
+
? { last_chat_id: optional_text(row.last_chat_id) }
|
|
51
|
+
: {}),
|
|
52
|
+
...(optional_text(row.last_chat_type)
|
|
53
|
+
? { last_chat_type: optional_text(row.last_chat_type) }
|
|
54
|
+
: {}),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function to_grant(row) {
|
|
58
|
+
if (!row)
|
|
59
|
+
return null;
|
|
60
|
+
const grant_id = normalize_text(row.grant_id);
|
|
61
|
+
const principal_id = normalize_text(row.principal_id);
|
|
62
|
+
const scope = normalize_text(row.scope);
|
|
63
|
+
const effect = normalize_text(row.effect);
|
|
64
|
+
if (!grant_id || !principal_id || !scope || !effect)
|
|
65
|
+
return null;
|
|
66
|
+
return {
|
|
67
|
+
grant_id,
|
|
68
|
+
principal_id,
|
|
69
|
+
scope,
|
|
70
|
+
effect,
|
|
71
|
+
created_by: normalize_text(row.created_by),
|
|
72
|
+
created_at: normalize_text(row.created_at),
|
|
73
|
+
updated_at: normalize_text(row.updated_at),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function to_request(row) {
|
|
77
|
+
if (!row)
|
|
78
|
+
return null;
|
|
79
|
+
const request_id = normalize_text(row.request_id);
|
|
80
|
+
const principal_id = normalize_text(row.principal_id);
|
|
81
|
+
const scope = normalize_text(row.scope);
|
|
82
|
+
const status = normalize_text(row.status);
|
|
83
|
+
if (!request_id || !principal_id || !scope || !status)
|
|
84
|
+
return null;
|
|
85
|
+
return {
|
|
86
|
+
request_id,
|
|
87
|
+
principal_id,
|
|
88
|
+
scope,
|
|
89
|
+
chat_id: normalize_text(row.chat_id),
|
|
90
|
+
chat_type: normalize_text(row.chat_type),
|
|
91
|
+
status,
|
|
92
|
+
...(optional_text(row.resolved_by)
|
|
93
|
+
? { resolved_by: optional_text(row.resolved_by) }
|
|
94
|
+
: {}),
|
|
95
|
+
created_at: normalize_text(row.created_at),
|
|
96
|
+
last_requested_at: normalize_text(row.last_requested_at),
|
|
97
|
+
...(optional_text(row.resolved_at)
|
|
98
|
+
? { resolved_at: optional_text(row.resolved_at) }
|
|
99
|
+
: {}),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* 当前 Agent 的 Chat Access SQLite Store。
|
|
104
|
+
*/
|
|
105
|
+
export class ChatAccessStore {
|
|
106
|
+
database;
|
|
107
|
+
/**
|
|
108
|
+
* 打开当前项目 Chat Access 数据库。
|
|
109
|
+
*/
|
|
110
|
+
constructor(project_root) {
|
|
111
|
+
const database_path = get_chat_access_db_path(project_root);
|
|
112
|
+
fs.ensureDirSync(path.dirname(database_path), { mode: 0o700 });
|
|
113
|
+
this.database = new Database(database_path);
|
|
114
|
+
ensure_chat_access_schema(this.database);
|
|
115
|
+
try {
|
|
116
|
+
fs.chmodSync(database_path, 0o600);
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
// 某些平台不支持 POSIX 权限,SQLite 仍可正常工作。
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/** 关闭数据库连接。 */
|
|
123
|
+
close() {
|
|
124
|
+
this.database.close();
|
|
125
|
+
}
|
|
126
|
+
/** 在单个 SQLite 事务中执行操作。 */
|
|
127
|
+
transaction(operation) {
|
|
128
|
+
return this.database.transaction(operation)();
|
|
129
|
+
}
|
|
130
|
+
/** 读取 Store 元信息。 */
|
|
131
|
+
get_meta(key) {
|
|
132
|
+
const row = this.database
|
|
133
|
+
.prepare("SELECT value FROM chat_access_meta WHERE key = ? LIMIT 1")
|
|
134
|
+
.get(normalize_text(key));
|
|
135
|
+
return row ? normalize_text(row.value) : null;
|
|
136
|
+
}
|
|
137
|
+
/** 写入 Store 元信息。 */
|
|
138
|
+
set_meta(key, value) {
|
|
139
|
+
const current_time = now_iso();
|
|
140
|
+
this.database.prepare(`
|
|
141
|
+
INSERT INTO chat_access_meta (key, value, updated_at)
|
|
142
|
+
VALUES (?, ?, ?)
|
|
143
|
+
ON CONFLICT(key) DO UPDATE SET
|
|
144
|
+
value = excluded.value,
|
|
145
|
+
updated_at = excluded.updated_at
|
|
146
|
+
`).run(normalize_text(key), normalize_text(value), current_time);
|
|
147
|
+
}
|
|
148
|
+
/** 判断是否已经存在业务数据。 */
|
|
149
|
+
has_access_data() {
|
|
150
|
+
const row = this.database.prepare(`
|
|
151
|
+
SELECT
|
|
152
|
+
(SELECT COUNT(*) FROM chat_access_principals) +
|
|
153
|
+
(SELECT COUNT(*) FROM chat_access_grants) +
|
|
154
|
+
(SELECT COUNT(*) FROM chat_access_requests) AS total
|
|
155
|
+
`).get();
|
|
156
|
+
return Number(row?.total || 0) > 0;
|
|
157
|
+
}
|
|
158
|
+
/** 读取指定平台身份对应主体。 */
|
|
159
|
+
get_principal_by_identity(input) {
|
|
160
|
+
const row = this.database.prepare(`
|
|
161
|
+
SELECT * FROM chat_access_principals
|
|
162
|
+
WHERE channel = ? AND issuer = ? AND subject_id = ?
|
|
163
|
+
LIMIT 1
|
|
164
|
+
`).get(input.channel, normalize_text(input.issuer), normalize_text(input.subject_id));
|
|
165
|
+
return to_principal(row);
|
|
166
|
+
}
|
|
167
|
+
/** 按 Principal ID 读取主体。 */
|
|
168
|
+
get_principal(principal_id) {
|
|
169
|
+
const row = this.database.prepare(`
|
|
170
|
+
SELECT * FROM chat_access_principals
|
|
171
|
+
WHERE principal_id = ?
|
|
172
|
+
LIMIT 1
|
|
173
|
+
`).get(normalize_text(principal_id));
|
|
174
|
+
return to_principal(row);
|
|
175
|
+
}
|
|
176
|
+
/** 新增或更新观测主体。 */
|
|
177
|
+
upsert_principal(input) {
|
|
178
|
+
const existing = this.get_principal_by_identity(input);
|
|
179
|
+
const current_time = now_iso();
|
|
180
|
+
const principal_id = existing?.principal_id || `principal_${generateId()}`;
|
|
181
|
+
const first_seen_at = normalize_text(input.first_seen_at) || existing?.first_seen_at || current_time;
|
|
182
|
+
const last_seen_at = normalize_text(input.last_seen_at) || current_time;
|
|
183
|
+
this.database.prepare(`
|
|
184
|
+
INSERT INTO chat_access_principals (
|
|
185
|
+
principal_id, channel, issuer, subject_id, display_name,
|
|
186
|
+
first_seen_at, last_seen_at, last_chat_id, last_chat_type
|
|
187
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
188
|
+
ON CONFLICT(channel, issuer, subject_id) DO UPDATE SET
|
|
189
|
+
display_name = COALESCE(excluded.display_name, chat_access_principals.display_name),
|
|
190
|
+
last_seen_at = excluded.last_seen_at,
|
|
191
|
+
last_chat_id = COALESCE(excluded.last_chat_id, chat_access_principals.last_chat_id),
|
|
192
|
+
last_chat_type = COALESCE(excluded.last_chat_type, chat_access_principals.last_chat_type)
|
|
193
|
+
`).run(principal_id, input.channel, normalize_text(input.issuer), normalize_text(input.subject_id), optional_text(input.display_name) || null, first_seen_at, last_seen_at, optional_text(input.chat_id) || null, optional_text(input.chat_type) || null);
|
|
194
|
+
const principal = this.get_principal_by_identity(input);
|
|
195
|
+
if (!principal)
|
|
196
|
+
throw new Error("Failed to persist Chat Access principal");
|
|
197
|
+
return principal;
|
|
198
|
+
}
|
|
199
|
+
/** 读取指定主体和范围的 Grant。 */
|
|
200
|
+
get_grant(principal_id, scope) {
|
|
201
|
+
const row = this.database.prepare(`
|
|
202
|
+
SELECT * FROM chat_access_grants
|
|
203
|
+
WHERE principal_id = ? AND scope = ?
|
|
204
|
+
LIMIT 1
|
|
205
|
+
`).get(normalize_text(principal_id), scope);
|
|
206
|
+
return to_grant(row);
|
|
207
|
+
}
|
|
208
|
+
/** 新增或更新 Grant。 */
|
|
209
|
+
upsert_grant(input) {
|
|
210
|
+
const existing = this.get_grant(input.principal_id, input.scope);
|
|
211
|
+
const current_time = now_iso();
|
|
212
|
+
const grant_id = existing?.grant_id || `grant_${generateId()}`;
|
|
213
|
+
this.database.prepare(`
|
|
214
|
+
INSERT INTO chat_access_grants (
|
|
215
|
+
grant_id, principal_id, scope, effect, created_by, created_at, updated_at
|
|
216
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
217
|
+
ON CONFLICT(principal_id, scope) DO UPDATE SET
|
|
218
|
+
effect = excluded.effect,
|
|
219
|
+
created_by = excluded.created_by,
|
|
220
|
+
updated_at = excluded.updated_at
|
|
221
|
+
`).run(grant_id, normalize_text(input.principal_id), input.scope, input.effect, normalize_text(input.operator) || "unknown", existing?.created_at || current_time, current_time);
|
|
222
|
+
const grant = this.get_grant(input.principal_id, input.scope);
|
|
223
|
+
if (!grant)
|
|
224
|
+
throw new Error("Failed to persist Chat Access grant");
|
|
225
|
+
return grant;
|
|
226
|
+
}
|
|
227
|
+
/** 删除指定主体和范围的 Grant。 */
|
|
228
|
+
delete_grant(principal_id, scope) {
|
|
229
|
+
const result = this.database.prepare(`
|
|
230
|
+
DELETE FROM chat_access_grants
|
|
231
|
+
WHERE principal_id = ? AND scope = ?
|
|
232
|
+
`).run(normalize_text(principal_id), scope);
|
|
233
|
+
return result.changes > 0;
|
|
234
|
+
}
|
|
235
|
+
/** 读取指定主体全部 Grant。 */
|
|
236
|
+
list_grants(principal_id) {
|
|
237
|
+
const rows = this.database.prepare(`
|
|
238
|
+
SELECT * FROM chat_access_grants
|
|
239
|
+
WHERE principal_id = ?
|
|
240
|
+
ORDER BY scope ASC
|
|
241
|
+
`).all(normalize_text(principal_id));
|
|
242
|
+
return rows.map((row) => to_grant(row)).filter((item) => !!item);
|
|
243
|
+
}
|
|
244
|
+
/** 读取 Request。 */
|
|
245
|
+
get_request(request_id) {
|
|
246
|
+
const row = this.database.prepare(`
|
|
247
|
+
SELECT * FROM chat_access_requests
|
|
248
|
+
WHERE request_id = ?
|
|
249
|
+
LIMIT 1
|
|
250
|
+
`).get(normalize_text(request_id));
|
|
251
|
+
return to_request(row);
|
|
252
|
+
}
|
|
253
|
+
/** 创建或复用 pending Request。 */
|
|
254
|
+
create_or_touch_request(input) {
|
|
255
|
+
const pending_row = this.database.prepare(`
|
|
256
|
+
SELECT * FROM chat_access_requests
|
|
257
|
+
WHERE principal_id = ? AND scope = ? AND status = 'pending'
|
|
258
|
+
LIMIT 1
|
|
259
|
+
`).get(normalize_text(input.principal_id), input.scope);
|
|
260
|
+
const pending = to_request(pending_row);
|
|
261
|
+
const current_time = now_iso();
|
|
262
|
+
if (pending) {
|
|
263
|
+
this.database.prepare(`
|
|
264
|
+
UPDATE chat_access_requests
|
|
265
|
+
SET chat_id = ?, chat_type = ?, last_requested_at = ?
|
|
266
|
+
WHERE request_id = ?
|
|
267
|
+
`).run(normalize_text(input.chat_id), normalize_text(input.chat_type), current_time, pending.request_id);
|
|
268
|
+
const updated = this.get_request(pending.request_id);
|
|
269
|
+
if (!updated)
|
|
270
|
+
throw new Error("Failed to update Chat Access request");
|
|
271
|
+
return { request: updated, created: false };
|
|
272
|
+
}
|
|
273
|
+
const request_id = `req_${generateId()}`;
|
|
274
|
+
this.database.prepare(`
|
|
275
|
+
INSERT INTO chat_access_requests (
|
|
276
|
+
request_id, principal_id, scope, chat_id, chat_type, status,
|
|
277
|
+
created_at, last_requested_at
|
|
278
|
+
) VALUES (?, ?, ?, ?, ?, 'pending', ?, ?)
|
|
279
|
+
`).run(request_id, normalize_text(input.principal_id), input.scope, normalize_text(input.chat_id), normalize_text(input.chat_type), current_time, current_time);
|
|
280
|
+
const request = this.get_request(request_id);
|
|
281
|
+
if (!request)
|
|
282
|
+
throw new Error("Failed to create Chat Access request");
|
|
283
|
+
return { request, created: true };
|
|
284
|
+
}
|
|
285
|
+
/** 解决指定 Request。 */
|
|
286
|
+
resolve_request(input) {
|
|
287
|
+
const current_time = now_iso();
|
|
288
|
+
const result = this.database.prepare(`
|
|
289
|
+
UPDATE chat_access_requests
|
|
290
|
+
SET status = ?, resolved_by = ?, resolved_at = ?, last_requested_at = ?
|
|
291
|
+
WHERE request_id = ? AND status = 'pending'
|
|
292
|
+
`).run(input.status, normalize_text(input.operator) || "unknown", current_time, current_time, normalize_text(input.request_id));
|
|
293
|
+
if (result.changes === 0) {
|
|
294
|
+
throw new Error(`Pending Chat Access request not found: ${input.request_id}`);
|
|
295
|
+
}
|
|
296
|
+
const request = this.get_request(input.request_id);
|
|
297
|
+
if (!request)
|
|
298
|
+
throw new Error(`Chat Access request not found: ${input.request_id}`);
|
|
299
|
+
return request;
|
|
300
|
+
}
|
|
301
|
+
/** 解决指定主体和范围内的全部 pending Request。 */
|
|
302
|
+
resolve_pending_requests(input) {
|
|
303
|
+
if (input.scopes.length === 0)
|
|
304
|
+
return;
|
|
305
|
+
const current_time = now_iso();
|
|
306
|
+
const placeholders = input.scopes.map(() => "?").join(", ");
|
|
307
|
+
this.database.prepare(`
|
|
308
|
+
UPDATE chat_access_requests
|
|
309
|
+
SET status = ?, resolved_by = ?, resolved_at = ?, last_requested_at = ?
|
|
310
|
+
WHERE principal_id = ?
|
|
311
|
+
AND status = 'pending'
|
|
312
|
+
AND scope IN (${placeholders})
|
|
313
|
+
`).run(input.status, normalize_text(input.operator) || "unknown", current_time, current_time, normalize_text(input.principal_id), ...input.scopes);
|
|
314
|
+
}
|
|
315
|
+
/** 列出 Request 及主体详情。 */
|
|
316
|
+
list_requests(status) {
|
|
317
|
+
const rows = status
|
|
318
|
+
? this.database.prepare(`
|
|
319
|
+
SELECT * FROM chat_access_requests
|
|
320
|
+
WHERE status = ?
|
|
321
|
+
ORDER BY last_requested_at DESC
|
|
322
|
+
`).all(status)
|
|
323
|
+
: this.database.prepare(`
|
|
324
|
+
SELECT * FROM chat_access_requests
|
|
325
|
+
ORDER BY last_requested_at DESC
|
|
326
|
+
`).all();
|
|
327
|
+
const views = [];
|
|
328
|
+
for (const row of rows) {
|
|
329
|
+
const request = to_request(row);
|
|
330
|
+
if (!request)
|
|
331
|
+
continue;
|
|
332
|
+
const principal = this.get_principal(request.principal_id);
|
|
333
|
+
if (!principal)
|
|
334
|
+
continue;
|
|
335
|
+
views.push({ ...request, principal });
|
|
336
|
+
}
|
|
337
|
+
return views;
|
|
338
|
+
}
|
|
339
|
+
/** 列出所有主体和 Grant。 */
|
|
340
|
+
list_principals() {
|
|
341
|
+
const rows = this.database.prepare(`
|
|
342
|
+
SELECT * FROM chat_access_principals
|
|
343
|
+
ORDER BY last_seen_at DESC
|
|
344
|
+
`).all();
|
|
345
|
+
const views = [];
|
|
346
|
+
for (const row of rows) {
|
|
347
|
+
const principal = to_principal(row);
|
|
348
|
+
if (!principal)
|
|
349
|
+
continue;
|
|
350
|
+
views.push({
|
|
351
|
+
principal,
|
|
352
|
+
grants: this.list_grants(principal.principal_id),
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
return views;
|
|
356
|
+
}
|
|
357
|
+
/** 写入审计事件。 */
|
|
358
|
+
insert_audit_event(input) {
|
|
359
|
+
this.database.prepare(`
|
|
360
|
+
INSERT INTO chat_access_audit_events (
|
|
361
|
+
event_id, principal_id, request_id, action, scope,
|
|
362
|
+
decision, operator, detail_json, created_at
|
|
363
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
364
|
+
`).run(`audit_${generateId()}`, optional_text(input.principal_id) || null, optional_text(input.request_id) || null, normalize_text(input.action), input.scope || null, optional_text(input.decision) || null, optional_text(input.operator) || null, input.detail ? JSON.stringify(input.detail) : null, now_iso());
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
//# sourceMappingURL=ChatAccessStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatAccessStore.js","sourceRoot":"","sources":["../../../src/chat/access/ChatAccessStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,11 +4,12 @@
|
|
|
4
4
|
* 关键点(中文)
|
|
5
5
|
* - 通过 context 显式注入 runtime 依赖。
|
|
6
6
|
* - 统一注册 dispatcher,暴露 sendText/sendAction 能力。
|
|
7
|
-
* -
|
|
7
|
+
* - 基类只保留 Chat Access、工具发送与入站编排;存储/队列细节已下沉到辅助模块。
|
|
8
8
|
*/
|
|
9
9
|
import type { ChatDispatchAction, ChatDispatchChannel, ChatDispatchSendActionParams } from "../../chat/types/ChatDispatcher.js";
|
|
10
10
|
import type { Logger } from "@downcity/agent";
|
|
11
11
|
import type { AgentContext } from "@downcity/agent";
|
|
12
|
+
import type { ChatAccessDecision } from "../../chat/types/ChatAccess.js";
|
|
12
13
|
import { type ChannelUserMessageMeta } from "./BaseChatChannelSupport.js";
|
|
13
14
|
/**
|
|
14
15
|
* Channel chatKey 计算入参。
|
|
@@ -82,9 +83,9 @@ export type IncomingChatMessage = {
|
|
|
82
83
|
extra?: ChannelUserMessageMeta;
|
|
83
84
|
};
|
|
84
85
|
/**
|
|
85
|
-
*
|
|
86
|
+
* 入站 Chat Access 判定输入。
|
|
86
87
|
*/
|
|
87
|
-
export type
|
|
88
|
+
export type IncomingChatAccessParams = {
|
|
88
89
|
chatId: string;
|
|
89
90
|
chatType?: string;
|
|
90
91
|
userId?: string;
|
|
@@ -92,12 +93,9 @@ export type IncomingAuthorizationParams = {
|
|
|
92
93
|
chatTitle?: string;
|
|
93
94
|
};
|
|
94
95
|
/**
|
|
95
|
-
*
|
|
96
|
+
* 入站 Chat Access 判定结果。
|
|
96
97
|
*/
|
|
97
|
-
export type
|
|
98
|
-
decision: "allow" | "block";
|
|
99
|
-
reason: string;
|
|
100
|
-
};
|
|
98
|
+
export type IncomingChatAccessResult = ChatAccessDecision;
|
|
101
99
|
/**
|
|
102
100
|
* Chat channel 基类。
|
|
103
101
|
*/
|
|
@@ -106,40 +104,55 @@ export declare abstract class BaseChatChannel {
|
|
|
106
104
|
protected readonly context: AgentContext;
|
|
107
105
|
protected readonly rootPath: string;
|
|
108
106
|
protected readonly logger: Logger;
|
|
107
|
+
private readonly access_notice_sent_at;
|
|
109
108
|
protected constructor(params: {
|
|
110
109
|
channel: ChatDispatchChannel;
|
|
111
110
|
context: AgentContext;
|
|
112
111
|
});
|
|
113
112
|
protected abstract getChatKey(params: ChannelChatKeyParams): string;
|
|
114
113
|
protected abstract sendTextToPlatform(params: ChannelSendTextParams): Promise<void>;
|
|
114
|
+
/**
|
|
115
|
+
* SDK 未绑定 City Chat Account 时的平台稳定 issuer 回退值。
|
|
116
|
+
*/
|
|
117
|
+
protected getAccessIssuerFallback(): string;
|
|
118
|
+
/**
|
|
119
|
+
* 格式化 Chat Access 中需要原样展示的值。
|
|
120
|
+
*
|
|
121
|
+
* 说明(中文)
|
|
122
|
+
* - 默认返回纯文本,避免通用层绑定具体平台的富文本语法。
|
|
123
|
+
* - 支持富文本的平台可覆写此方法,确保标识符和命令可被准确展示、复制。
|
|
124
|
+
*/
|
|
125
|
+
protected format_access_code(value: string): string;
|
|
126
|
+
/**
|
|
127
|
+
* 格式化 Chat Access 管理命令。
|
|
128
|
+
*
|
|
129
|
+
* 说明(中文)
|
|
130
|
+
* - 默认复用平台的原样值格式,避免通用层引入具体富文本语法。
|
|
131
|
+
* - 平台可单独覆写为块级代码,改善长命令的阅读和复制体验。
|
|
132
|
+
*/
|
|
133
|
+
protected format_access_command(command: string): string;
|
|
115
134
|
protected sendActionToPlatform?(params: ChannelSendActionParams): Promise<void>;
|
|
116
135
|
/**
|
|
117
|
-
*
|
|
136
|
+
* 发送 Chat Access 提示文本。
|
|
118
137
|
*
|
|
119
138
|
* 关键点(中文)
|
|
120
139
|
* - 一律按普通消息发送,不挂 reply,避免把“权限提示”误挂到某条消息下面。
|
|
121
140
|
*/
|
|
122
|
-
protected
|
|
141
|
+
protected sendAccessText(params: {
|
|
123
142
|
chatId: string;
|
|
124
143
|
text: string;
|
|
125
144
|
chatType?: string;
|
|
126
145
|
messageThreadId?: number;
|
|
127
146
|
}): Promise<void>;
|
|
128
147
|
/**
|
|
129
|
-
*
|
|
148
|
+
* 执行入站 Chat Access 判定。
|
|
130
149
|
*/
|
|
131
|
-
protected
|
|
150
|
+
protected evaluateIncomingAccess(params: IncomingChatAccessParams): Promise<IncomingChatAccessResult>;
|
|
132
151
|
/**
|
|
133
|
-
*
|
|
152
|
+
* 生成 Chat Access 拒绝提示文案。
|
|
134
153
|
*/
|
|
135
|
-
protected
|
|
136
|
-
|
|
137
|
-
* 生成未授权提示文案。
|
|
138
|
-
*/
|
|
139
|
-
protected buildUnauthorizedBlockedText(params?: {
|
|
140
|
-
userId?: string;
|
|
141
|
-
chatId?: string;
|
|
142
|
-
chatType?: string;
|
|
154
|
+
protected buildAccessBlockedText(params: {
|
|
155
|
+
result: IncomingChatAccessResult;
|
|
143
156
|
}): string;
|
|
144
157
|
/**
|
|
145
158
|
* 是否在 `sendToolText` 成功后自动写入 outbound chat history。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseChatChannel.d.ts","sourceRoot":"","sources":["../../../src/chat/channels/BaseChatChannel.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,4BAA4B,EAE7B,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAOpD,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,6BAA6B,CAAC;AAMrC;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,oBAAoB,GAAG;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,oBAAoB,GAAG;IAC3D,MAAM,EAAE,kBAAkB,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,sBAAsB,CAAC;CAChC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"BaseChatChannel.d.ts","sourceRoot":"","sources":["../../../src/chat/channels/BaseChatChannel.ts"],"names":[],"mappings":"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"}
|