@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.
Files changed (175) hide show
  1. package/bin/chat/ChatPlugin.d.ts +2 -10
  2. package/bin/chat/ChatPlugin.d.ts.map +1 -1
  3. package/bin/chat/ChatPlugin.js +3 -13
  4. package/bin/chat/ChatPlugin.js.map +1 -1
  5. package/bin/chat/PROMPT.direct.d.ts +1 -1
  6. package/bin/chat/PROMPT.direct.d.ts.map +1 -1
  7. package/bin/chat/PROMPT.direct.js +1 -1
  8. package/bin/chat/PROMPT.direct.js.map +1 -1
  9. package/bin/chat/access/ChatAccessActions.d.ts +11 -0
  10. package/bin/chat/access/ChatAccessActions.d.ts.map +1 -0
  11. package/bin/chat/access/ChatAccessActions.js +137 -0
  12. package/bin/chat/access/ChatAccessActions.js.map +1 -0
  13. package/bin/chat/access/ChatAccessRuntime.d.ts +17 -0
  14. package/bin/chat/access/ChatAccessRuntime.d.ts.map +1 -0
  15. package/bin/chat/access/ChatAccessRuntime.js +31 -0
  16. package/bin/chat/access/ChatAccessRuntime.js.map +1 -0
  17. package/bin/chat/access/ChatAccessSchema.d.ts +16 -0
  18. package/bin/chat/access/ChatAccessSchema.d.ts.map +1 -0
  19. package/bin/chat/access/ChatAccessSchema.js +99 -0
  20. package/bin/chat/access/ChatAccessSchema.js.map +1 -0
  21. package/bin/chat/access/ChatAccessService.d.ts +44 -0
  22. package/bin/chat/access/ChatAccessService.d.ts.map +1 -0
  23. package/bin/chat/access/ChatAccessService.js +281 -0
  24. package/bin/chat/access/ChatAccessService.js.map +1 -0
  25. package/bin/chat/access/ChatAccessStore.d.ts +67 -0
  26. package/bin/chat/access/ChatAccessStore.d.ts.map +1 -0
  27. package/bin/chat/access/ChatAccessStore.js +367 -0
  28. package/bin/chat/access/ChatAccessStore.js.map +1 -0
  29. package/bin/chat/accounts/Crypto.d.ts +1 -1
  30. package/bin/chat/accounts/Crypto.js +1 -1
  31. package/bin/chat/accounts/Store.d.ts +1 -1
  32. package/bin/chat/accounts/Store.js +1 -1
  33. package/bin/chat/channels/BaseChatChannel.d.ts +34 -21
  34. package/bin/chat/channels/BaseChatChannel.d.ts.map +1 -1
  35. package/bin/chat/channels/BaseChatChannel.js +71 -58
  36. package/bin/chat/channels/BaseChatChannel.js.map +1 -1
  37. package/bin/chat/channels/BaseChatChannelQueue.d.ts +1 -1
  38. package/bin/chat/channels/BaseChatChannelQueue.d.ts.map +1 -1
  39. package/bin/chat/channels/BaseChatChannelQueue.js +2 -14
  40. package/bin/chat/channels/BaseChatChannelQueue.js.map +1 -1
  41. package/bin/chat/channels/Configuration.d.ts +2 -2
  42. package/bin/chat/channels/Configuration.d.ts.map +1 -1
  43. package/bin/chat/channels/Configuration.js +3 -3
  44. package/bin/chat/channels/Configuration.js.map +1 -1
  45. package/bin/chat/channels/feishu/Configuration.js +4 -4
  46. package/bin/chat/channels/feishu/Configuration.js.map +1 -1
  47. package/bin/chat/channels/feishu/Feishu.d.ts +2 -0
  48. package/bin/chat/channels/feishu/Feishu.d.ts.map +1 -1
  49. package/bin/chat/channels/feishu/Feishu.js +8 -7
  50. package/bin/chat/channels/feishu/Feishu.js.map +1 -1
  51. package/bin/chat/channels/feishu/FeishuMessageHandler.d.ts +9 -17
  52. package/bin/chat/channels/feishu/FeishuMessageHandler.d.ts.map +1 -1
  53. package/bin/chat/channels/feishu/FeishuMessageHandler.js +6 -17
  54. package/bin/chat/channels/feishu/FeishuMessageHandler.js.map +1 -1
  55. package/bin/chat/channels/qq/Configuration.js +4 -4
  56. package/bin/chat/channels/qq/Configuration.js.map +1 -1
  57. package/bin/chat/channels/qq/QQ.d.ts +2 -0
  58. package/bin/chat/channels/qq/QQ.d.ts.map +1 -1
  59. package/bin/chat/channels/qq/QQ.js +8 -7
  60. package/bin/chat/channels/qq/QQ.js.map +1 -1
  61. package/bin/chat/channels/qq/QQMessageHandler.d.ts +9 -17
  62. package/bin/chat/channels/qq/QQMessageHandler.d.ts.map +1 -1
  63. package/bin/chat/channels/qq/QQMessageHandler.js +7 -25
  64. package/bin/chat/channels/qq/QQMessageHandler.js.map +1 -1
  65. package/bin/chat/channels/telegram/Bot.d.ts +12 -0
  66. package/bin/chat/channels/telegram/Bot.d.ts.map +1 -1
  67. package/bin/chat/channels/telegram/Bot.js +24 -7
  68. package/bin/chat/channels/telegram/Bot.js.map +1 -1
  69. package/bin/chat/channels/telegram/Configuration.js +4 -4
  70. package/bin/chat/channels/telegram/Configuration.js.map +1 -1
  71. package/bin/chat/channels/telegram/TelegramMessageHandler.d.ts +9 -17
  72. package/bin/chat/channels/telegram/TelegramMessageHandler.d.ts.map +1 -1
  73. package/bin/chat/channels/telegram/TelegramMessageHandler.js +5 -16
  74. package/bin/chat/channels/telegram/TelegramMessageHandler.js.map +1 -1
  75. package/bin/chat/runtime/ChatChannelActions.d.ts +3 -2
  76. package/bin/chat/runtime/ChatChannelActions.d.ts.map +1 -1
  77. package/bin/chat/runtime/ChatChannelActions.js +57 -0
  78. package/bin/chat/runtime/ChatChannelActions.js.map +1 -1
  79. package/bin/chat/runtime/ChatChannelConfig.d.ts +2 -2
  80. package/bin/chat/runtime/ChatChannelConfig.js +3 -3
  81. package/bin/chat/runtime/ChatChannelConfig.js.map +1 -1
  82. package/bin/chat/runtime/ChatChannelCore.d.ts +2 -2
  83. package/bin/chat/runtime/ChatChannelCore.js +1 -1
  84. package/bin/chat/runtime/ChatChannelLifecycle.d.ts +1 -1
  85. package/bin/chat/runtime/ChatChannelLifecycle.js +1 -1
  86. package/bin/chat/runtime/PluginPoints.d.ts +0 -24
  87. package/bin/chat/runtime/PluginPoints.d.ts.map +1 -1
  88. package/bin/chat/runtime/PluginPoints.js +0 -24
  89. package/bin/chat/runtime/PluginPoints.js.map +1 -1
  90. package/bin/chat/runtime/QueuedUserMessage.d.ts.map +1 -1
  91. package/bin/chat/runtime/QueuedUserMessage.js +0 -2
  92. package/bin/chat/runtime/QueuedUserMessage.js.map +1 -1
  93. package/bin/chat/types/ChannelConfiguration.d.ts +4 -4
  94. package/bin/chat/types/ChannelConfiguration.d.ts.map +1 -1
  95. package/bin/chat/types/ChatAccess.d.ts +300 -0
  96. package/bin/chat/types/ChatAccess.d.ts.map +1 -0
  97. package/bin/chat/types/ChatAccess.js +22 -0
  98. package/bin/chat/types/ChatAccess.js.map +1 -0
  99. package/bin/chat/types/ChatPromptContext.d.ts +0 -15
  100. package/bin/chat/types/ChatPromptContext.d.ts.map +1 -1
  101. package/bin/index.d.ts +4 -4
  102. package/bin/index.d.ts.map +1 -1
  103. package/bin/index.js +3 -3
  104. package/bin/index.js.map +1 -1
  105. package/bin/skill/Config.d.ts +1 -1
  106. package/bin/skill/Config.js +1 -1
  107. package/bin/skill/runtime/Paths.d.ts +1 -1
  108. package/bin/skill/runtime/Paths.js +1 -1
  109. package/package.json +6 -4
  110. package/scripts/chat-access.test.mjs +126 -0
  111. package/scripts/chat-channel-config.test.mjs +82 -0
  112. package/src/chat/ChatPlugin.ts +4 -24
  113. package/src/chat/PROMPT.direct.ts +1 -1
  114. package/src/chat/PROMPT.direct.ts.txt +1 -1
  115. package/src/chat/access/ChatAccessActions.ts +159 -0
  116. package/src/chat/access/ChatAccessRuntime.ts +41 -0
  117. package/src/chat/access/ChatAccessSchema.ts +104 -0
  118. package/src/chat/access/ChatAccessService.ts +311 -0
  119. package/src/chat/access/ChatAccessStore.ts +462 -0
  120. package/src/chat/accounts/Crypto.ts +1 -1
  121. package/src/chat/accounts/Store.ts +1 -1
  122. package/src/chat/channels/BaseChatChannel.ts +86 -80
  123. package/src/chat/channels/BaseChatChannelQueue.ts +2 -14
  124. package/src/chat/channels/Configuration.ts +3 -3
  125. package/src/chat/channels/feishu/Configuration.ts +4 -4
  126. package/src/chat/channels/feishu/Feishu.ts +11 -9
  127. package/src/chat/channels/feishu/FeishuMessageHandler.ts +16 -40
  128. package/src/chat/channels/qq/Configuration.ts +4 -4
  129. package/src/chat/channels/qq/QQ.ts +11 -9
  130. package/src/chat/channels/qq/QQMessageHandler.ts +17 -49
  131. package/src/chat/channels/telegram/Bot.ts +29 -9
  132. package/src/chat/channels/telegram/Configuration.ts +4 -4
  133. package/src/chat/channels/telegram/TelegramMessageHandler.ts +15 -39
  134. package/src/chat/runtime/ChatChannelActions.ts +72 -1
  135. package/src/chat/runtime/ChatChannelConfig.ts +3 -3
  136. package/src/chat/runtime/ChatChannelCore.ts +1 -1
  137. package/src/chat/runtime/ChatChannelLifecycle.ts +1 -1
  138. package/src/chat/runtime/PluginPoints.ts +0 -24
  139. package/src/chat/runtime/QueuedUserMessage.ts +0 -2
  140. package/src/chat/types/ChannelConfiguration.ts +4 -4
  141. package/src/chat/types/ChatAccess.ts +335 -0
  142. package/src/chat/types/ChatPromptContext.ts +0 -17
  143. package/src/index.ts +27 -31
  144. package/src/skill/Config.ts +1 -1
  145. package/src/skill/runtime/Paths.ts +1 -1
  146. package/bin/auth/runtime/AuthorizationConfig.d.ts +0 -41
  147. package/bin/auth/runtime/AuthorizationConfig.d.ts.map +0 -1
  148. package/bin/auth/runtime/AuthorizationConfig.js +0 -185
  149. package/bin/auth/runtime/AuthorizationConfig.js.map +0 -1
  150. package/bin/auth/runtime/AuthorizationPolicy.d.ts +0 -28
  151. package/bin/auth/runtime/AuthorizationPolicy.d.ts.map +0 -1
  152. package/bin/auth/runtime/AuthorizationPolicy.js +0 -124
  153. package/bin/auth/runtime/AuthorizationPolicy.js.map +0 -1
  154. package/bin/auth/runtime/AuthorizationStore.d.ts +0 -29
  155. package/bin/auth/runtime/AuthorizationStore.d.ts.map +0 -1
  156. package/bin/auth/runtime/AuthorizationStore.js +0 -179
  157. package/bin/auth/runtime/AuthorizationStore.js.map +0 -1
  158. package/bin/auth/types/AuthPlugin.d.ts +0 -403
  159. package/bin/auth/types/AuthPlugin.d.ts.map +0 -1
  160. package/bin/auth/types/AuthPlugin.js +0 -111
  161. package/bin/auth/types/AuthPlugin.js.map +0 -1
  162. package/bin/chat/runtime/ChatAuthorizationRuntime.d.ts +0 -22
  163. package/bin/chat/runtime/ChatAuthorizationRuntime.d.ts.map +0 -1
  164. package/bin/chat/runtime/ChatAuthorizationRuntime.js +0 -230
  165. package/bin/chat/runtime/ChatAuthorizationRuntime.js.map +0 -1
  166. package/bin/chat/runtime/PluginDispatch.d.ts +0 -43
  167. package/bin/chat/runtime/PluginDispatch.d.ts.map +0 -1
  168. package/bin/chat/runtime/PluginDispatch.js +0 -57
  169. package/bin/chat/runtime/PluginDispatch.js.map +0 -1
  170. package/src/auth/runtime/AuthorizationConfig.ts +0 -247
  171. package/src/auth/runtime/AuthorizationPolicy.ts +0 -167
  172. package/src/auth/runtime/AuthorizationStore.ts +0 -220
  173. package/src/auth/types/AuthPlugin.ts +0 -540
  174. package/src/chat/runtime/ChatAuthorizationRuntime.ts +0 -270
  175. package/src/chat/runtime/PluginDispatch.ts +0 -89
@@ -0,0 +1,300 @@
1
+ /**
2
+ * Chat Access 领域类型。
3
+ *
4
+ * 关键点(中文)
5
+ * - Chat Access 只负责外部聊天用户进入当前 Agent 前的准入判定。
6
+ * - 用户唯一身份由 channel、issuer、subject_id 共同确定。
7
+ * - `all` 仅用于管理命令输入,持久化时展开为 direct/group 两条明确记录。
8
+ */
9
+ import type { ChatDispatchChannel } from "../../chat/types/ChatDispatcher.js";
10
+ /** Chat Plugin 对外暴露的 Access Action。 */
11
+ export declare const CHAT_ACCESS_ACTIONS: {
12
+ /** 读取 Principal、Grant 和 Request 快照。 */
13
+ readonly snapshot: "access-snapshot";
14
+ /** 批准待处理 Request。 */
15
+ readonly approve: "access-approve";
16
+ /** 拒绝待处理 Request。 */
17
+ readonly deny: "access-deny";
18
+ /** 直接设置已知 Principal 的 Access。 */
19
+ readonly set: "access-set";
20
+ /** 撤销已知 Principal 的 Access。 */
21
+ readonly revoke: "access-revoke";
22
+ };
23
+ /** Chat Access 支持的消息范围。 */
24
+ export type ChatAccessScope = "direct" | "group";
25
+ /** Chat Access 管理入口支持的范围。 */
26
+ export type ChatAccessScopeInput = ChatAccessScope | "all";
27
+ /** Chat Access Grant 效果。 */
28
+ export type ChatAccessEffect = "allow" | "deny";
29
+ /** Chat Access Request 状态。 */
30
+ export type ChatAccessRequestStatus = "pending" | "approved" | "denied" | "expired";
31
+ /** Chat Access 判定原因。 */
32
+ export type ChatAccessDecisionReason = "grant_allowed" | "grant_denied" | "request_pending" | "identity_missing";
33
+ /**
34
+ * Chat 平台提供的原始身份与消息来源。
35
+ */
36
+ export interface ChatAccessIdentityInput {
37
+ /** 当前消息来源渠道。 */
38
+ channel: ChatDispatchChannel;
39
+ /** 当前 Bot/App 的稳定账号标识,不得包含密钥。 */
40
+ issuer: string;
41
+ /** 平台用户稳定 ID。 */
42
+ subject_id: string;
43
+ /** 用户展示名称。 */
44
+ display_name?: string;
45
+ /** 当前平台会话 ID。 */
46
+ chat_id: string;
47
+ /** 当前平台会话类型。 */
48
+ chat_type?: string;
49
+ /** 当前会话展示名称。 */
50
+ chat_title?: string;
51
+ }
52
+ /**
53
+ * Chat Access 内部规范化主体。
54
+ */
55
+ export interface ChatAccessPrincipal {
56
+ /** 内部稳定主体 ID。 */
57
+ principal_id: string;
58
+ /** 当前主体来源渠道。 */
59
+ channel: ChatDispatchChannel;
60
+ /** 当前主体所在 Bot/App 账号边界。 */
61
+ issuer: string;
62
+ /** 平台用户稳定 ID。 */
63
+ subject_id: string;
64
+ /** 最近观测到的展示名称。 */
65
+ display_name?: string;
66
+ /** 首次观测时间。 */
67
+ first_seen_at: string;
68
+ /** 最近观测时间。 */
69
+ last_seen_at: string;
70
+ /** 最近发言会话 ID。 */
71
+ last_chat_id?: string;
72
+ /** 最近发言会话类型。 */
73
+ last_chat_type?: string;
74
+ }
75
+ /**
76
+ * Chat Access Grant。
77
+ */
78
+ export interface ChatAccessGrant {
79
+ /** Grant 稳定 ID。 */
80
+ grant_id: string;
81
+ /** 关联主体 ID。 */
82
+ principal_id: string;
83
+ /** Grant 适用范围。 */
84
+ scope: ChatAccessScope;
85
+ /** Allow 或 Deny。 */
86
+ effect: ChatAccessEffect;
87
+ /** 执行该变更的可信操作者。 */
88
+ created_by: string;
89
+ /** 创建时间。 */
90
+ created_at: string;
91
+ /** 最近更新时间。 */
92
+ updated_at: string;
93
+ }
94
+ /**
95
+ * Chat Access Request。
96
+ */
97
+ export interface ChatAccessRequest {
98
+ /** Request 稳定 ID。 */
99
+ request_id: string;
100
+ /** 关联主体 ID。 */
101
+ principal_id: string;
102
+ /** 请求准入范围。 */
103
+ scope: ChatAccessScope;
104
+ /** 触发请求的平台会话 ID。 */
105
+ chat_id: string;
106
+ /** 触发请求的平台会话类型。 */
107
+ chat_type: string;
108
+ /** 当前请求状态。 */
109
+ status: ChatAccessRequestStatus;
110
+ /** 解决该请求的可信操作者。 */
111
+ resolved_by?: string;
112
+ /** 创建时间。 */
113
+ created_at: string;
114
+ /** 最近一次重复请求时间。 */
115
+ last_requested_at: string;
116
+ /** 请求解决时间。 */
117
+ resolved_at?: string;
118
+ }
119
+ /**
120
+ * 带主体详情的请求展示项。
121
+ */
122
+ export interface ChatAccessRequestView extends ChatAccessRequest {
123
+ /** 当前请求对应主体。 */
124
+ principal: ChatAccessPrincipal;
125
+ }
126
+ /**
127
+ * 带 Grant 的主体展示项。
128
+ */
129
+ export interface ChatAccessPrincipalView {
130
+ /** 当前主体。 */
131
+ principal: ChatAccessPrincipal;
132
+ /** 当前主体所有 Grant。 */
133
+ grants: ChatAccessGrant[];
134
+ }
135
+ /**
136
+ * Chat Access 入站判定结果。
137
+ */
138
+ export interface ChatAccessDecision {
139
+ /** 是否允许进入 Agent。 */
140
+ allowed: boolean;
141
+ /** 归一化主体 ID;身份缺失时为空字符串。 */
142
+ principal_id: string;
143
+ /** 当前消息对应范围。 */
144
+ scope: ChatAccessScope;
145
+ /** 稳定判定原因。 */
146
+ reason: ChatAccessDecisionReason;
147
+ /** 未批准时创建或复用的 Request ID。 */
148
+ request_id?: string;
149
+ }
150
+ /**
151
+ * 批准请求输入。
152
+ */
153
+ export interface ApproveChatAccessRequestInput {
154
+ /** Request ID。 */
155
+ request_id: string;
156
+ /** 可选范围覆盖;默认使用请求自身范围。 */
157
+ scope?: ChatAccessScopeInput;
158
+ /** 执行批准的可信操作者。 */
159
+ operator: string;
160
+ }
161
+ /**
162
+ * 拒绝请求输入。
163
+ */
164
+ export interface DenyChatAccessRequestInput {
165
+ /** Request ID。 */
166
+ request_id: string;
167
+ /** 可选范围覆盖;默认使用请求自身范围。 */
168
+ scope?: ChatAccessScopeInput;
169
+ /** 执行拒绝的可信操作者。 */
170
+ operator: string;
171
+ }
172
+ /**
173
+ * 撤销 Grant 输入。
174
+ */
175
+ export interface RevokeChatAccessGrantInput {
176
+ /** Principal ID。 */
177
+ principal_id: string;
178
+ /** 要撤销的范围。 */
179
+ scope: ChatAccessScopeInput;
180
+ /** 执行撤销的可信操作者。 */
181
+ operator: string;
182
+ }
183
+ /** ChatAccessService 构造参数。 */
184
+ export interface ChatAccessServiceOptions {
185
+ /** 当前 Agent 项目根目录。 */
186
+ project_root: string;
187
+ }
188
+ /** 直接设置 Principal Grant 的输入。 */
189
+ export interface SetChatAccessPrincipalEffectInput {
190
+ /** Principal 稳定 ID。 */
191
+ principal_id: string;
192
+ /** 要设置的 Chat 消息范围。 */
193
+ scope: ChatAccessScopeInput;
194
+ /** 要写入的 Allow/Deny 效果。 */
195
+ effect: ChatAccessEffect;
196
+ /** 执行设置的可信操作者。 */
197
+ operator: string;
198
+ }
199
+ /** Store 新增或更新 Principal 的输入。 */
200
+ export interface UpsertChatAccessPrincipalInput {
201
+ /** Principal 来源渠道。 */
202
+ channel: ChatDispatchChannel;
203
+ /** 当前 Bot/App 的稳定账号边界。 */
204
+ issuer: string;
205
+ /** 平台用户稳定 ID。 */
206
+ subject_id: string;
207
+ /** 最近观测到的展示名称。 */
208
+ display_name?: string;
209
+ /** 最近发言会话 ID。 */
210
+ chat_id?: string;
211
+ /** 最近发言会话类型。 */
212
+ chat_type?: string;
213
+ /** 迁移时提供的首次观测时间。 */
214
+ first_seen_at?: string;
215
+ /** 迁移时提供的最近观测时间。 */
216
+ last_seen_at?: string;
217
+ }
218
+ /** Store 新增或更新 Grant 的输入。 */
219
+ export interface UpsertChatAccessGrantInput {
220
+ /** 关联 Principal 稳定 ID。 */
221
+ principal_id: string;
222
+ /** Grant 适用范围。 */
223
+ scope: ChatAccessScope;
224
+ /** Grant 的 Allow/Deny 效果。 */
225
+ effect: ChatAccessEffect;
226
+ /** 执行变更的可信操作者。 */
227
+ operator: string;
228
+ }
229
+ /** Store 创建或复用 Request 的输入。 */
230
+ export interface CreateChatAccessRequestInput {
231
+ /** 关联 Principal 稳定 ID。 */
232
+ principal_id: string;
233
+ /** 请求准入范围。 */
234
+ scope: ChatAccessScope;
235
+ /** 触发请求的平台会话 ID。 */
236
+ chat_id: string;
237
+ /** 触发请求的平台会话类型。 */
238
+ chat_type?: string;
239
+ }
240
+ /** Store 创建或复用 Request 的结果。 */
241
+ export interface CreateChatAccessRequestResult {
242
+ /** 创建或复用后的 Request。 */
243
+ request: ChatAccessRequest;
244
+ /** 本次是否创建了新 Request。 */
245
+ created: boolean;
246
+ }
247
+ /** Store 解决单个 Request 的输入。 */
248
+ export interface ResolveChatAccessRequestStoreInput {
249
+ /** 要解决的 Request ID。 */
250
+ request_id: string;
251
+ /** Request 最终状态。 */
252
+ status: "approved" | "denied";
253
+ /** 执行操作的可信操作者。 */
254
+ operator: string;
255
+ }
256
+ /** Store 批量解决 Principal pending Request 的输入。 */
257
+ export interface ResolvePendingChatAccessRequestsInput {
258
+ /** 关联 Principal 稳定 ID。 */
259
+ principal_id: string;
260
+ /** 要解决的明确范围集合。 */
261
+ scopes: ChatAccessScope[];
262
+ /** Request 最终状态。 */
263
+ status: "approved" | "denied";
264
+ /** 执行操作的可信操作者。 */
265
+ operator: string;
266
+ }
267
+ /** Store 写入审计事件的输入。 */
268
+ export interface InsertChatAccessAuditEventInput {
269
+ /** 可选关联 Principal ID。 */
270
+ principal_id?: string;
271
+ /** 可选关联 Request ID。 */
272
+ request_id?: string;
273
+ /** 稳定审计动作名称。 */
274
+ action: string;
275
+ /** 可选 Chat 消息范围。 */
276
+ scope?: ChatAccessScope;
277
+ /** 可选判定或 Grant 效果。 */
278
+ decision?: string;
279
+ /** 可选可信操作者。 */
280
+ operator?: string;
281
+ /** 可选结构化审计详情。 */
282
+ detail?: Record<string, unknown>;
283
+ }
284
+ /**
285
+ * 请求列表过滤条件。
286
+ */
287
+ export interface ListChatAccessRequestsInput {
288
+ /** 可选状态过滤。 */
289
+ status?: ChatAccessRequestStatus;
290
+ }
291
+ /**
292
+ * Chat Access 快照。
293
+ */
294
+ export interface ChatAccessSnapshot {
295
+ /** 当前 Principal 列表。 */
296
+ principals: ChatAccessPrincipalView[];
297
+ /** 当前 Request 列表。 */
298
+ requests: ChatAccessRequestView[];
299
+ }
300
+ //# sourceMappingURL=ChatAccess.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatAccess.d.ts","sourceRoot":"","sources":["../../../src/chat/types/ChatAccess.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Chat Access 领域类型。
3
+ *
4
+ * 关键点(中文)
5
+ * - Chat Access 只负责外部聊天用户进入当前 Agent 前的准入判定。
6
+ * - 用户唯一身份由 channel、issuer、subject_id 共同确定。
7
+ * - `all` 仅用于管理命令输入,持久化时展开为 direct/group 两条明确记录。
8
+ */
9
+ /** Chat Plugin 对外暴露的 Access Action。 */
10
+ export const CHAT_ACCESS_ACTIONS = {
11
+ /** 读取 Principal、Grant 和 Request 快照。 */
12
+ snapshot: "access-snapshot",
13
+ /** 批准待处理 Request。 */
14
+ approve: "access-approve",
15
+ /** 拒绝待处理 Request。 */
16
+ deny: "access-deny",
17
+ /** 直接设置已知 Principal 的 Access。 */
18
+ set: "access-set",
19
+ /** 撤销已知 Principal 的 Access。 */
20
+ revoke: "access-revoke",
21
+ };
22
+ //# sourceMappingURL=ChatAccess.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatAccess.js","sourceRoot":"","sources":["../../../src/chat/types/ChatAccess.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,uCAAuC;AACvC,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,uCAAuC;IACvC,QAAQ,EAAE,iBAAiB;IAC3B,qBAAqB;IACrB,OAAO,EAAE,gBAAgB;IACzB,qBAAqB;IACrB,IAAI,EAAE,aAAa;IACnB,iCAAiC;IACjC,GAAG,EAAE,YAAY;IACjB,+BAA+B;IAC/B,MAAM,EAAE,eAAe;CACf,CAAC"}
@@ -6,7 +6,6 @@
6
6
  * - chat 路由环境与用户身份信息分离,避免把平台路由字段混入 user info。
7
7
  * - 所有字段均保持可序列化,便于 system prompt 与入站消息文本复用。
8
8
  */
9
- import type { ChatAuthorizationPermission } from "../../auth/types/AuthPlugin.js";
10
9
  import type { ChatDispatchChannel } from "../../chat/types/ChatDispatcher.js";
11
10
  /**
12
11
  * 当前 chat 环境提示输入。
@@ -91,20 +90,6 @@ export interface QueuedUserInfoInput {
91
90
  * - 渠道适配器按 best-effort 提供。
92
91
  */
93
92
  username?: string;
94
- /**
95
- * 当前用户在授权系统中的角色 ID。
96
- *
97
- * 说明(中文)
98
- * - 例如 `default`、`member`、`admin`。
99
- */
100
- roleId?: string;
101
- /**
102
- * 当前用户拥有的权限集合。
103
- *
104
- * 说明(中文)
105
- * - 仅描述授权快照,不代表平台原生权限模型。
106
- */
107
- permissions?: ChatAuthorizationPermission[];
108
93
  /**
109
94
  * 当前消息接收时间。
110
95
  *
@@ -1 +1 @@
1
- {"version":3,"file":"ChatPromptContext.d.ts","sourceRoot":"","sources":["../../../src/chat/types/ChatPromptContext.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC;;;;;;OAMG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;;;;OAMG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;;;;OAKG;IACH,OAAO,EAAE,mBAAmB,CAAC;IAE7B;;;;;OAKG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,2BAA2B,EAAE,CAAC;IAE5C;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
1
+ {"version":3,"file":"ChatPromptContext.d.ts","sourceRoot":"","sources":["../../../src/chat/types/ChatPromptContext.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC;;;;;;OAMG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;;;;OAMG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;;;;OAKG;IACH,OAAO,EAAE,mBAAmB,CAAC;IAE7B;;;;;OAKG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
package/bin/index.d.ts CHANGED
@@ -20,9 +20,9 @@ export { TtsPlugin } from "./tts/Plugin.js";
20
20
  export { WorkboardPlugin } from "./workboard/Plugin.js";
21
21
  export { TaskPlugin } from "./task/TaskPlugin.js";
22
22
  export { MemoryPlugin } from "./memory/MemoryPlugin.js";
23
- export { listChatAuthorizationRoles, readChatAuthorizationConfigSync, setChatAuthorizationUserRole, } from "./auth/runtime/AuthorizationConfig.js";
24
- export { resolveAuthorizedUserRole } from "./auth/runtime/AuthorizationPolicy.js";
25
- export { CHAT_AUTHORIZATION_ACTIONS, CHAT_AUTHORIZATION_CHANNELS, CHAT_AUTHORIZATION_POINTS, createDefaultChatAuthorizationRoles, isChatAuthorizationChannel, } from "./auth/types/AuthPlugin.js";
23
+ export { ChatAccessService, is_chat_access_channel, resolve_chat_access_scope, resolve_chat_access_scopes, } from "./chat/access/ChatAccessService.js";
24
+ export { get_chat_access_db_path } from "./chat/access/ChatAccessStore.js";
25
+ export { CHAT_ACCESS_ACTIONS } from "./chat/types/ChatAccess.js";
26
26
  export type { ChatChannelAccountListItem, } from "./chat/types/ChannelAccount.js";
27
27
  export type { BaseChatChannelOptions, ChatChannelEnv, FeishuChannelOptions, QqChannelOptions, TelegramChannelOptions, } from "./chat/channels/RuntimeChannel.js";
28
28
  export type { ChatChannel, ChatChannelRuntimePatch, ChatPluginOptions, } from "./chat/types/ChatPluginOptions.js";
@@ -32,5 +32,5 @@ export type { MemoryActionPayload, MemoryDefaults, MemoryDigestHandler, MemoryDi
32
32
  export type { AsrPluginInput, AsrPluginOptions, AsrPluginResult, } from "./asr/types/AsrPlugin.js";
33
33
  export type { TtsPluginInput, TtsPluginOptions, TtsPluginResult, TtsPluginSimpleAudioResult, TtsPluginUiMessageResult, } from "./tts/types/TtsPlugin.js";
34
34
  export type { ImagePluginContent, ImagePluginDefaultModel, ImagePluginDefaultModelResolverInput, ImagePluginFileContent, ImagePluginInput, ImagePluginJobCreateResult, ImagePluginJobResult, ImagePluginJobResultInput, ImagePluginJobStatus, ImagePluginModel, ImagePluginModelsResult, ImagePluginOptions, ImagePluginResolvedContent, ImagePluginResolvedInput, ImagePluginResolvedMessage, ImagePluginResult, ImagePluginTextContent, } from "./image/types/ImagePlugin.js";
35
- export type { ChatAuthorizationCatalog, ChatAuthorizationChannel, ChatAuthorizationConfig, ChatAuthorizationDecision, ChatAuthorizationEvaluateInput, ChatAuthorizationEvaluateResult, ChatAuthorizationObservePrincipalPayload, ChatAuthorizationObservedChat, ChatAuthorizationObservedUser, ChatAuthorizationPermission, ChatAuthorizationPermissionMeta, ChatAuthorizationResolveUserRolePayload, ChatAuthorizationRole, ChatAuthorizationSetUserRolePayload, ChatAuthorizationSnapshot, ChatAuthorizationStateFile, ChatAuthorizationWriteConfigPayload, ChatChannelAuthorizationConfig, } from "./auth/types/AuthPlugin.js";
35
+ export type { ApproveChatAccessRequestInput, ChatAccessDecision, ChatAccessDecisionReason, ChatAccessEffect, ChatAccessGrant, ChatAccessIdentityInput, ChatAccessPrincipal, ChatAccessPrincipalView, ChatAccessRequest, ChatAccessRequestStatus, ChatAccessRequestView, ChatAccessScope, ChatAccessScopeInput, ChatAccessServiceOptions, ChatAccessSnapshot, DenyChatAccessRequestInput, ListChatAccessRequestsInput, RevokeChatAccessGrantInput, SetChatAccessPrincipalEffectInput, } from "./chat/types/ChatAccess.js";
36
36
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/bin/index.js CHANGED
@@ -19,7 +19,7 @@ export { TtsPlugin } from "./tts/Plugin.js";
19
19
  export { WorkboardPlugin } from "./workboard/Plugin.js";
20
20
  export { TaskPlugin } from "./task/TaskPlugin.js";
21
21
  export { MemoryPlugin } from "./memory/MemoryPlugin.js";
22
- export { listChatAuthorizationRoles, readChatAuthorizationConfigSync, setChatAuthorizationUserRole, } from "./auth/runtime/AuthorizationConfig.js";
23
- export { resolveAuthorizedUserRole } from "./auth/runtime/AuthorizationPolicy.js";
24
- export { CHAT_AUTHORIZATION_ACTIONS, CHAT_AUTHORIZATION_CHANNELS, CHAT_AUTHORIZATION_POINTS, createDefaultChatAuthorizationRoles, isChatAuthorizationChannel, } from "./auth/types/AuthPlugin.js";
22
+ export { ChatAccessService, is_chat_access_channel, resolve_chat_access_scope, resolve_chat_access_scopes, } from "./chat/access/ChatAccessService.js";
23
+ export { get_chat_access_db_path } from "./chat/access/ChatAccessStore.js";
24
+ export { CHAT_ACCESS_ACTIONS } from "./chat/types/ChatAccess.js";
25
25
  //# sourceMappingURL=index.js.map
package/bin/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EACL,aAAa,EACb,SAAS,EACT,eAAe,GAChB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EACL,0BAA0B,EAC1B,+BAA+B,EAC/B,4BAA4B,GAC7B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,yBAAyB,EACzB,mCAAmC,EACnC,0BAA0B,GAC3B,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EACL,aAAa,EACb,SAAS,EACT,eAAe,GAChB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -2,7 +2,7 @@
2
2
  * SkillPlugin 构造参数归一化工具。
3
3
  *
4
4
  * 关键点(中文)
5
- * - SkillPlugin 不再读取 `downcity.json.plugins.skill` 私有配置。
5
+ * - SkillPlugin 只读取 constructor 配置,不读取项目配置文件。
6
6
  * - constructor options 是唯一行为配置入口,便于 SDK 用户直接理解。
7
7
  * - 这里只做默认值与去重,不做文件系统扫描。
8
8
  */
@@ -2,7 +2,7 @@
2
2
  * SkillPlugin 构造参数归一化工具。
3
3
  *
4
4
  * 关键点(中文)
5
- * - SkillPlugin 不再读取 `downcity.json.plugins.skill` 私有配置。
5
+ * - SkillPlugin 只读取 constructor 配置,不读取项目配置文件。
6
6
  * - constructor options 是唯一行为配置入口,便于 SDK 用户直接理解。
7
7
  * - 这里只做默认值与去重,不做文件系统扫描。
8
8
  */
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * 关键点(中文)
5
5
  * - roots 分三类:项目内(project)、用户目录(home),以及构造参数路径(custom)
6
- * - SkillPlugin constructor 是唯一配置入口,不再读取 downcity.json 的 skill 私有配置
6
+ * - SkillPlugin constructor 是唯一配置入口,不读取项目配置文件
7
7
  * - 兼容 `<any>/skills` 这种布局:如果 root basename 不是 `skills` 且其子目录 `skills/` 存在,则优先扫描 `<root>/skills`
8
8
  */
9
9
  import type { SkillRoot } from "../../skill/types/SkillRoot.js";
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * 关键点(中文)
5
5
  * - roots 分三类:项目内(project)、用户目录(home),以及构造参数路径(custom)
6
- * - SkillPlugin constructor 是唯一配置入口,不再读取 downcity.json 的 skill 私有配置
6
+ * - SkillPlugin constructor 是唯一配置入口,不读取项目配置文件
7
7
  * - 兼容 `<any>/skills` 这种布局:如果 root basename 不是 `skills` 且其子目录 `skills/` 存在,则优先扫描 `<root>/skills`
8
8
  */
9
9
  import fs from "fs-extra";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@downcity/plugins",
3
- "version": "1.0.153",
3
+ "version": "1.0.157",
4
4
  "type": "module",
5
5
  "description": "Downcity 内建 plugin 集合包",
6
6
  "main": "./bin/index.js",
@@ -12,8 +12,8 @@
12
12
  }
13
13
  },
14
14
  "dependencies": {
15
- "@downcity/agent": "^1.1.212",
16
- "@downcity/shell": "^0.1.76",
15
+ "@downcity/agent": "^1.1.215",
16
+ "@downcity/shell": "^0.1.79",
17
17
  "ai": "^6.0.193",
18
18
  "better-sqlite3": "^12.10.0",
19
19
  "commander": "^15.0.0",
@@ -37,6 +37,8 @@
37
37
  "scripts": {
38
38
  "build": "rm -rf bin tsconfig.tsbuildinfo && tsc && tsc-alias -f",
39
39
  "dev": "tsc --watch",
40
- "typecheck": "tsc --noEmit"
40
+ "typecheck": "tsc --noEmit",
41
+ "test:chat-access": "pnpm build && node --test scripts/chat-access.test.mjs",
42
+ "test:chat-config": "pnpm build && node --test scripts/chat-channel-config.test.mjs"
41
43
  }
42
44
  }
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Chat Access 公开行为测试。
3
+ */
4
+
5
+ import assert from "node:assert/strict";
6
+ import fs from "node:fs";
7
+ import os from "node:os";
8
+ import path from "node:path";
9
+ import test from "node:test";
10
+ import { ChatAccessService } from "../bin/index.js";
11
+ import { TelegramBot } from "../bin/chat/channels/telegram/Bot.js";
12
+
13
+ function create_project_root() {
14
+ return fs.mkdtempSync(path.join(os.tmpdir(), "downcity-chat-access-"));
15
+ }
16
+
17
+ function remove_project_root(project_root) {
18
+ fs.rmSync(project_root, { recursive: true, force: true });
19
+ }
20
+
21
+ function telegram_identity(issuer, chat_type = "private") {
22
+ return {
23
+ channel: "telegram",
24
+ issuer,
25
+ subject_id: "8444574557",
26
+ display_name: "Access Tester",
27
+ chat_id: chat_type === "private" ? "8444574557" : "-100001",
28
+ chat_type,
29
+ };
30
+ }
31
+
32
+ test("Chat Access 按 issuer 隔离并复用 pending request", () => {
33
+ const project_root = create_project_root();
34
+ try {
35
+ const service = new ChatAccessService({ project_root });
36
+ const first = service.evaluate(telegram_identity("telegram-main"));
37
+ const repeated = service.evaluate(telegram_identity("telegram-main"));
38
+ const other_issuer = service.evaluate(telegram_identity("telegram-backup"));
39
+
40
+ assert.equal(first.reason, "request_pending");
41
+ assert.equal(repeated.request_id, first.request_id);
42
+ assert.notEqual(other_issuer.principal_id, first.principal_id);
43
+ assert.notEqual(other_issuer.request_id, first.request_id);
44
+ assert.equal(service.list_requests("pending").length, 2);
45
+ } finally {
46
+ remove_project_root(project_root);
47
+ }
48
+ });
49
+
50
+ test("Telegram 授权命令使用代码格式并保留完整标识符", () => {
51
+ const project_root = create_project_root();
52
+ try {
53
+ const bot = new TelegramBot(
54
+ {
55
+ rootPath: project_root,
56
+ config: { id: "lucas_whitman" },
57
+ logger: {
58
+ debug() {},
59
+ info() {},
60
+ warn() {},
61
+ error() {},
62
+ },
63
+ },
64
+ "test-token",
65
+ );
66
+ const text = bot.buildAccessBlockedText({
67
+ result: {
68
+ allowed: false,
69
+ reason: "request_pending",
70
+ request_id: "req_dFij9rOzsDnDPOVJ",
71
+ },
72
+ });
73
+
74
+ assert.match(text, /Agent "`lucas_whitman`"/);
75
+ assert.match(text, /访问请求:`req_dFij9rOzsDnDPOVJ`/);
76
+ assert.match(
77
+ text,
78
+ /```bash\ndowncity chat access approve req_dFij9rOzsDnDPOVJ --agent lucas_whitman\n```/,
79
+ );
80
+ } finally {
81
+ remove_project_root(project_root);
82
+ }
83
+ });
84
+
85
+ test("approve all、revoke 和 deny 保持明确状态语义", () => {
86
+ const project_root = create_project_root();
87
+ try {
88
+ const service = new ChatAccessService({ project_root });
89
+ const pending = service.evaluate(telegram_identity("telegram-main"));
90
+ assert.ok(pending.request_id);
91
+
92
+ const grants = service.approve_request({
93
+ request_id: pending.request_id,
94
+ scope: "all",
95
+ operator: "test",
96
+ });
97
+ assert.deepEqual(grants.map((grant) => grant.scope).sort(), ["direct", "group"]);
98
+ assert.equal(service.evaluate(telegram_identity("telegram-main")).allowed, true);
99
+ assert.equal(service.evaluate(telegram_identity("telegram-main", "supergroup")).allowed, true);
100
+
101
+ assert.equal(service.revoke_grant({
102
+ principal_id: pending.principal_id,
103
+ scope: "direct",
104
+ operator: "test",
105
+ }), 1);
106
+ const requested_again = service.evaluate(telegram_identity("telegram-main"));
107
+ assert.equal(requested_again.reason, "request_pending");
108
+ assert.ok(requested_again.request_id);
109
+
110
+ service.deny_request({
111
+ request_id: requested_again.request_id,
112
+ operator: "test",
113
+ });
114
+ const denied = service.evaluate(telegram_identity("telegram-main"));
115
+ assert.equal(denied.reason, "grant_denied");
116
+ assert.equal(denied.request_id, undefined);
117
+ assert.equal(service.list_requests("pending").length, 0);
118
+ assert.throws(() => service.revoke_grant({
119
+ principal_id: "principal_missing",
120
+ scope: "all",
121
+ operator: "test",
122
+ }), /principal not found/);
123
+ } finally {
124
+ remove_project_root(project_root);
125
+ }
126
+ });