@downcity/plugins 1.0.152 → 1.0.156

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 +18 -21
  34. package/bin/chat/channels/BaseChatChannel.d.ts.map +1 -1
  35. package/bin/chat/channels/BaseChatChannel.js +48 -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 +2 -0
  66. package/bin/chat/channels/telegram/Bot.d.ts.map +1 -1
  67. package/bin/chat/channels/telegram/Bot.js +8 -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 +90 -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 +59 -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 +11 -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
@@ -1,41 +0,0 @@
1
- /**
2
- * Auth 授权配置读写工具。
3
- *
4
- * 关键点(中文)
5
- * - 静态授权规则直接存放在项目 `.downcity/chat/authorization/config.json`。
6
- * - 授权核心模型为 role / permission / binding。
7
- */
8
- import type { AgentContext } from "@downcity/agent";
9
- import type { ChatAuthorizationConfig, ChatAuthorizationChannel, ChatAuthorizationPermission, ChatAuthorizationRole } from "../../auth/types/AuthPlugin.js";
10
- export declare const DEFAULT_CHAT_AUTHORIZATION_PERMISSIONS: ChatAuthorizationPermission[];
11
- /**
12
- * 同步读取当前 agent 的授权配置。
13
- */
14
- export declare function readChatAuthorizationConfigSync(projectRoot: string): ChatAuthorizationConfig;
15
- /**
16
- * 读取当前 agent 的授权配置。
17
- */
18
- export declare function readChatAuthorizationConfig(contextOrProjectRoot: Pick<AgentContext, "rootPath"> | string): ChatAuthorizationConfig;
19
- /**
20
- * 覆盖写入整份授权配置。
21
- */
22
- export declare function writeChatAuthorizationConfig(params: {
23
- context: Pick<AgentContext, "rootPath">;
24
- nextConfig: ChatAuthorizationConfig;
25
- }): Promise<void>;
26
- /**
27
- * 读取角色列表。
28
- */
29
- export declare function listChatAuthorizationRoles(params: {
30
- config: ChatAuthorizationConfig;
31
- }): ChatAuthorizationRole[];
32
- /**
33
- * 设置用户角色。
34
- */
35
- export declare function setChatAuthorizationUserRole(params: {
36
- context: Pick<AgentContext, "rootPath">;
37
- channel: ChatAuthorizationChannel;
38
- userId: string;
39
- roleId: string;
40
- }): Promise<void>;
41
- //# sourceMappingURL=AuthorizationConfig.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AuthorizationConfig.d.ts","sourceRoot":"","sources":["../../../src/auth/runtime/AuthorizationConfig.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EACV,uBAAuB,EACvB,wBAAwB,EACxB,2BAA2B,EAC3B,qBAAqB,EAEtB,MAAM,4BAA4B,CAAC;AASpC,eAAO,MAAM,sCAAsC,EAAE,2BAA2B,EAE/E,CAAC;AAwJF;;GAEG;AACH,wBAAgB,+BAA+B,CAAC,WAAW,EAAE,MAAM,GAAG,uBAAuB,CAE5F;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,oBAAoB,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG,MAAM,GAC5D,uBAAuB,CAKzB;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAAC,MAAM,EAAE;IACzD,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IACxC,UAAU,EAAE,uBAAuB,CAAC;CACrC,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE;IACjD,MAAM,EAAE,uBAAuB,CAAC;CACjC,GAAG,qBAAqB,EAAE,CAG1B;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAAC,MAAM,EAAE;IACzD,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IACxC,OAAO,EAAE,wBAAwB,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBhB"}
@@ -1,185 +0,0 @@
1
- /**
2
- * Auth 授权配置读写工具。
3
- *
4
- * 关键点(中文)
5
- * - 静态授权规则直接存放在项目 `.downcity/chat/authorization/config.json`。
6
- * - 授权核心模型为 role / permission / binding。
7
- */
8
- import fs from "fs-extra";
9
- import path from "node:path";
10
- import { CHAT_AUTHORIZATION_CHANNELS, CHAT_AUTHORIZATION_PERMISSIONS, createDefaultChatAuthorizationRoles, } from "../../auth/types/AuthPlugin.js";
11
- const CHANNELS = [...CHAT_AUTHORIZATION_CHANNELS];
12
- export const DEFAULT_CHAT_AUTHORIZATION_PERMISSIONS = [
13
- ...CHAT_AUTHORIZATION_PERMISSIONS,
14
- ];
15
- function normalizeText(value) {
16
- const text = String(value || "").trim();
17
- return text ? text : undefined;
18
- }
19
- function normalizePermissionList(values) {
20
- const allowed = new Set(DEFAULT_CHAT_AUTHORIZATION_PERMISSIONS);
21
- if (!Array.isArray(values))
22
- return [];
23
- return [
24
- ...new Set(values
25
- .map((value) => normalizeText(value))
26
- .filter((value) => Boolean(value && allowed.has(value)))),
27
- ];
28
- }
29
- function buildDefaultRole(roleId) {
30
- return createDefaultChatAuthorizationRoles()[roleId];
31
- }
32
- function normalizeRoleMap(input) {
33
- const defaultRoles = createDefaultChatAuthorizationRoles();
34
- if (!input || typeof input !== "object" || Array.isArray(input))
35
- return defaultRoles;
36
- const roles = {};
37
- for (const [rawRoleId, rawRole] of Object.entries(input)) {
38
- const roleId = normalizeText(rawRoleId);
39
- if (!roleId)
40
- continue;
41
- const roleObj = rawRole && typeof rawRole === "object" && !Array.isArray(rawRole)
42
- ? rawRole
43
- : null;
44
- if (!roleObj)
45
- continue;
46
- const builtinRole = defaultRoles[roleId];
47
- roles[roleId] = {
48
- roleId,
49
- name: normalizeText(roleObj.name) || builtinRole?.name || roleId,
50
- ...(normalizeText(roleObj.description) || builtinRole?.description
51
- ? {
52
- description: normalizeText(roleObj.description) || builtinRole?.description || undefined,
53
- }
54
- : {}),
55
- permissions: normalizePermissionList(roleObj.permissions),
56
- };
57
- }
58
- if (Object.keys(roles).length === 0)
59
- return defaultRoles;
60
- if (!roles.default)
61
- roles.default = buildDefaultRole("default");
62
- return roles;
63
- }
64
- function normalizeBindingMap(input, roles) {
65
- if (!input || typeof input !== "object" || Array.isArray(input))
66
- return {};
67
- const out = {};
68
- for (const [rawId, rawRoleId] of Object.entries(input)) {
69
- const entityId = normalizeText(rawId);
70
- const roleId = normalizeText(rawRoleId);
71
- if (!entityId || !roleId || !roles[roleId])
72
- continue;
73
- out[entityId] = roleId;
74
- }
75
- return out;
76
- }
77
- function normalizeChannelConfig(input, roles) {
78
- const raw = input && typeof input === "object" && !Array.isArray(input)
79
- ? input
80
- : {};
81
- const defaultUserRoleId = normalizeText(raw.defaultUserRoleId) || "default";
82
- return {
83
- defaultUserRoleId: roles[defaultUserRoleId] ? defaultUserRoleId : "default",
84
- userRoles: normalizeBindingMap(raw.userRoles, roles),
85
- };
86
- }
87
- function normalizeAuthorizationConfig(input) {
88
- const raw = input && typeof input === "object" && !Array.isArray(input)
89
- ? input
90
- : {};
91
- const roles = normalizeRoleMap(raw.roles);
92
- const channels = {};
93
- for (const channel of CHANNELS) {
94
- channels[channel] = normalizeChannelConfig(raw.channels?.[channel], roles);
95
- }
96
- return { roles, channels };
97
- }
98
- function cloneAuthorizationConfig(input) {
99
- return normalizeAuthorizationConfig(input ? JSON.parse(JSON.stringify(input)) : {});
100
- }
101
- function getChatAuthorizationConfigPath(projectRoot) {
102
- return path.join(projectRoot, ".downcity", "chat", "authorization", "config.json");
103
- }
104
- function readAuthorizationConfigFromProjectRoot(projectRoot) {
105
- const normalizedProjectRoot = normalizeText(projectRoot);
106
- if (!normalizedProjectRoot)
107
- return normalizeAuthorizationConfig({});
108
- const file = getChatAuthorizationConfigPath(normalizedProjectRoot);
109
- if (!fs.existsSync(file))
110
- return normalizeAuthorizationConfig({});
111
- try {
112
- return normalizeAuthorizationConfig(fs.readJsonSync(file));
113
- }
114
- catch {
115
- return normalizeAuthorizationConfig({});
116
- }
117
- }
118
- async function writeAuthorizationConfigToPlatform(params) {
119
- const normalizedProjectRoot = normalizeText(params.projectRoot);
120
- if (!normalizedProjectRoot)
121
- throw new Error("projectRoot is required");
122
- const file = getChatAuthorizationConfigPath(normalizedProjectRoot);
123
- await fs.ensureDir(path.dirname(file));
124
- await fs.writeJson(file, normalizeAuthorizationConfig(params.nextConfig), {
125
- spaces: 2,
126
- });
127
- }
128
- function ensureChannelConfig(config, channel) {
129
- config.roles = normalizeRoleMap(config.roles);
130
- config.channels ??= {};
131
- config.channels[channel] = normalizeChannelConfig(config.channels[channel], config.roles);
132
- return config.channels[channel];
133
- }
134
- /**
135
- * 同步读取当前 agent 的授权配置。
136
- */
137
- export function readChatAuthorizationConfigSync(projectRoot) {
138
- return readAuthorizationConfigFromProjectRoot(projectRoot);
139
- }
140
- /**
141
- * 读取当前 agent 的授权配置。
142
- */
143
- export function readChatAuthorizationConfig(contextOrProjectRoot) {
144
- if (typeof contextOrProjectRoot === "string") {
145
- return readAuthorizationConfigFromProjectRoot(contextOrProjectRoot);
146
- }
147
- return readAuthorizationConfigFromProjectRoot(contextOrProjectRoot.rootPath);
148
- }
149
- /**
150
- * 覆盖写入整份授权配置。
151
- */
152
- export async function writeChatAuthorizationConfig(params) {
153
- await writeAuthorizationConfigToPlatform({
154
- projectRoot: params.context.rootPath,
155
- nextConfig: params.nextConfig,
156
- });
157
- }
158
- /**
159
- * 读取角色列表。
160
- */
161
- export function listChatAuthorizationRoles(params) {
162
- const config = normalizeAuthorizationConfig(params.config);
163
- return Object.values(config.roles || {}).sort((a, b) => a.roleId.localeCompare(b.roleId));
164
- }
165
- /**
166
- * 设置用户角色。
167
- */
168
- export async function setChatAuthorizationUserRole(params) {
169
- const userId = normalizeText(params.userId);
170
- const roleId = normalizeText(params.roleId);
171
- if (!userId || !roleId)
172
- throw new Error("userId and roleId are required");
173
- const authorization = cloneAuthorizationConfig(readAuthorizationConfigFromProjectRoot(params.context.rootPath));
174
- authorization.roles = normalizeRoleMap(authorization.roles);
175
- const channelConfig = ensureChannelConfig(authorization, params.channel);
176
- if (!authorization.roles?.[roleId])
177
- throw new Error(`Unknown roleId: ${roleId}`);
178
- channelConfig.userRoles ??= {};
179
- channelConfig.userRoles[userId] = roleId;
180
- await writeAuthorizationConfigToPlatform({
181
- projectRoot: params.context.rootPath,
182
- nextConfig: authorization,
183
- });
184
- }
185
- //# sourceMappingURL=AuthorizationConfig.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AuthorizationConfig.js","sourceRoot":"","sources":["../../../src/auth/runtime/AuthorizationConfig.ts"],"names":[],"mappings":"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"}
@@ -1,28 +0,0 @@
1
- /**
2
- * Auth 授权判定逻辑。
3
- *
4
- * 关键点(中文)
5
- * - 角色模型替代旧的 allowlist/pairing 模型。
6
- * - 判定统一走“用户角色 + 权限集合”,群聊只看发言用户自身权限。
7
- */
8
- import type { DowncityConfig } from "@downcity/agent";
9
- import type { ChatAuthorizationConfig, ChatAuthorizationChannel, ChatAuthorizationEvaluateInput, ChatAuthorizationEvaluateResult, ChatAuthorizationRole } from "../../auth/types/AuthPlugin.js";
10
- /**
11
- * 解析用户授权角色。
12
- */
13
- export declare function resolveAuthorizedUserRole(params: {
14
- channel: ChatAuthorizationChannel;
15
- userId?: string;
16
- authorizationConfig?: ChatAuthorizationConfig;
17
- rootPath?: string;
18
- }): ChatAuthorizationRole | undefined;
19
- /**
20
- * 执行入站授权判定。
21
- */
22
- export declare function evaluateIncomingChatAuthorization(params: {
23
- config: DowncityConfig;
24
- channel: ChatAuthorizationChannel;
25
- input: ChatAuthorizationEvaluateInput;
26
- authorizationConfig?: ChatAuthorizationConfig;
27
- }): ChatAuthorizationEvaluateResult;
28
- //# sourceMappingURL=AuthorizationPolicy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AuthorizationPolicy.d.ts","sourceRoot":"","sources":["../../../src/auth/runtime/AuthorizationPolicy.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EACV,uBAAuB,EACvB,wBAAwB,EACxB,8BAA8B,EAC9B,+BAA+B,EAE/B,qBAAqB,EAEtB,MAAM,4BAA4B,CAAC;AAqEpC;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE;IAChD,OAAO,EAAE,wBAAwB,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,uBAAuB,CAAC;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,qBAAqB,GAAG,SAAS,CAepC;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAAC,MAAM,EAAE;IACxD,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,wBAAwB,CAAC;IAClC,KAAK,EAAE,8BAA8B,CAAC;IACtC,mBAAmB,CAAC,EAAE,uBAAuB,CAAC;CAC/C,GAAG,+BAA+B,CA+ClC"}
@@ -1,124 +0,0 @@
1
- /**
2
- * Auth 授权判定逻辑。
3
- *
4
- * 关键点(中文)
5
- * - 角色模型替代旧的 allowlist/pairing 模型。
6
- * - 判定统一走“用户角色 + 权限集合”,群聊只看发言用户自身权限。
7
- */
8
- import { createDefaultChatAuthorizationRoles } from "../../auth/types/AuthPlugin.js";
9
- import { readChatAuthorizationConfigSync } from "../../auth/runtime/AuthorizationConfig.js";
10
- function normalizeText(value) {
11
- const text = String(value || "").trim();
12
- return text ? text : undefined;
13
- }
14
- function isDirectMessage(channel, chatType) {
15
- const type = String(chatType || "").trim().toLowerCase();
16
- if (!type)
17
- return true;
18
- if (channel === "telegram")
19
- return type === "private";
20
- if (channel === "feishu")
21
- return type === "p2p";
22
- if (channel === "qq")
23
- return type === "private" || type === "c2c";
24
- return false;
25
- }
26
- function resolveAuthorizationRoles(authorizationConfig) {
27
- const raw = authorizationConfig?.roles;
28
- if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
29
- return createDefaultChatAuthorizationRoles();
30
- }
31
- return Object.keys(raw).length > 0 ? raw : createDefaultChatAuthorizationRoles();
32
- }
33
- function resolveChannelAuthorizationConfig(channel, authorizationConfig) {
34
- const raw = authorizationConfig?.channels?.[channel];
35
- if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
36
- return {
37
- defaultUserRoleId: "default",
38
- userRoles: {},
39
- };
40
- }
41
- return raw;
42
- }
43
- function resolveRole(roleId, roles) {
44
- if (roleId && roles?.[roleId])
45
- return roles[roleId];
46
- if (roles?.default)
47
- return roles.default;
48
- return { roleId: "default", name: "Default", permissions: [] };
49
- }
50
- function hasPermission(role, permission) {
51
- return role.permissions.includes(permission);
52
- }
53
- function resolveUserRole(params) {
54
- const userId = normalizeText(params.userId);
55
- const defaultRoleId = normalizeText(params.channelConfig.defaultUserRoleId) || "default";
56
- const boundRoleId = userId ? normalizeText(params.channelConfig.userRoles?.[userId]) : undefined;
57
- return resolveRole(boundRoleId || defaultRoleId, params.roles);
58
- }
59
- /**
60
- * 解析用户授权角色。
61
- */
62
- export function resolveAuthorizedUserRole(params) {
63
- const userId = normalizeText(params.userId);
64
- if (!userId)
65
- return undefined;
66
- const authorizationConfig = params.authorizationConfig ||
67
- (params.rootPath
68
- ? readChatAuthorizationConfigSync(params.rootPath)
69
- : undefined);
70
- const roles = resolveAuthorizationRoles(authorizationConfig);
71
- const channelConfig = resolveChannelAuthorizationConfig(params.channel, authorizationConfig);
72
- return resolveUserRole({
73
- roles,
74
- channelConfig,
75
- userId,
76
- });
77
- }
78
- /**
79
- * 执行入站授权判定。
80
- */
81
- export function evaluateIncomingChatAuthorization(params) {
82
- const channelConfig = resolveChannelAuthorizationConfig(params.channel, params.authorizationConfig);
83
- const roles = resolveAuthorizationRoles(params.authorizationConfig);
84
- const direct = isDirectMessage(params.channel, params.input.chatType);
85
- const userRole = resolveUserRole({
86
- roles,
87
- channelConfig,
88
- userId: params.input.userId,
89
- });
90
- const isOwner = hasPermission(userRole, "agent.manage");
91
- if (direct) {
92
- return hasPermission(userRole, "chat.dm.use")
93
- ? {
94
- decision: "allow",
95
- isOwner,
96
- userRoleId: userRole.roleId,
97
- userPermissions: [...userRole.permissions],
98
- reason: "dm_role_allowed",
99
- }
100
- : {
101
- decision: "block",
102
- isOwner,
103
- userRoleId: userRole.roleId,
104
- userPermissions: [...userRole.permissions],
105
- reason: "dm_role_blocked",
106
- };
107
- }
108
- return hasPermission(userRole, "chat.group.use")
109
- ? {
110
- decision: "allow",
111
- isOwner,
112
- userRoleId: userRole.roleId,
113
- userPermissions: [...userRole.permissions],
114
- reason: "group_user_role_allowed",
115
- }
116
- : {
117
- decision: "block",
118
- isOwner,
119
- userRoleId: userRole.roleId,
120
- userPermissions: [...userRole.permissions],
121
- reason: "user_group_permission_blocked",
122
- };
123
- }
124
- //# sourceMappingURL=AuthorizationPolicy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AuthorizationPolicy.js","sourceRoot":"","sources":["../../../src/auth/runtime/AuthorizationPolicy.ts"],"names":[],"mappings":"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"}
@@ -1,29 +0,0 @@
1
- /**
2
- * Auth 授权运行时状态存储。
3
- *
4
- * 关键点(中文)
5
- * - 所有动态状态(观测用户 / 会话)统一落盘到 `.downcity/chat/authorization/state.json`。
6
- * - 静态授权配置保存在同目录下的 `config.json`,不和运行时观测数据混写。
7
- */
8
- import type { ChatAuthorizationSnapshot } from "../../auth/types/AuthPlugin.js";
9
- import type { AgentContext } from "@downcity/agent";
10
- import type { ChatDispatchChannel } from "../../chat/types/ChatDispatcher.js";
11
- /**
12
- * 记录观测到的用户 / 会话。
13
- */
14
- export declare function recordObservedAuthorizationPrincipal(params: {
15
- context: Pick<AgentContext, "rootPath">;
16
- channel: ChatDispatchChannel;
17
- chatId: string;
18
- chatType?: string;
19
- chatTitle?: string;
20
- userId?: string;
21
- username?: string;
22
- }): Promise<void>;
23
- /**
24
- * 读取授权快照(配置 + 动态状态)。
25
- */
26
- export declare function readAuthorizationSnapshot(params: {
27
- context: Pick<AgentContext, "rootPath">;
28
- }): Promise<ChatAuthorizationSnapshot>;
29
- //# sourceMappingURL=AuthorizationStore.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AuthorizationStore.d.ts","sourceRoot":"","sources":["../../../src/auth/runtime/AuthorizationStore.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAGV,yBAAyB,EAE1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAwI1E;;GAEG;AACH,wBAAsB,oCAAoC,CAAC,MAAM,EAAE;IACjE,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IACxC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyChB;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAAC,MAAM,EAAE;IACtD,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;CACzC,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAOrC"}
@@ -1,179 +0,0 @@
1
- /**
2
- * Auth 授权运行时状态存储。
3
- *
4
- * 关键点(中文)
5
- * - 所有动态状态(观测用户 / 会话)统一落盘到 `.downcity/chat/authorization/state.json`。
6
- * - 静态授权配置保存在同目录下的 `config.json`,不和运行时观测数据混写。
7
- */
8
- import fs from "fs-extra";
9
- import path from "node:path";
10
- import { readChatAuthorizationConfig } from "../../auth/runtime/AuthorizationConfig.js";
11
- function getAuthorizationStatePath(rootPath) {
12
- return path.join(rootPath, ".downcity", "chat", "authorization", "state.json");
13
- }
14
- function normalizeText(value) {
15
- const text = String(value || "").trim();
16
- return text ? text : undefined;
17
- }
18
- function buildUserKey(channel, userId) {
19
- return `${channel}:${userId}`;
20
- }
21
- function buildChatKey(channel, chatId) {
22
- return `${channel}:${chatId}`;
23
- }
24
- function createEmptyState() {
25
- return {
26
- v: 1,
27
- updatedAt: Date.now(),
28
- usersByKey: {},
29
- chatsByKey: {},
30
- };
31
- }
32
- function normalizeObservedUser(input) {
33
- if (!input || typeof input !== "object")
34
- return null;
35
- const channel = normalizeText(input.channel);
36
- const userId = normalizeText(input.userId);
37
- if (!channel || !userId)
38
- return null;
39
- return {
40
- v: 1,
41
- channel,
42
- userId,
43
- ...(normalizeText(input.username) ? { username: normalizeText(input.username) } : {}),
44
- ...(normalizeText(input.lastChatId) ? { lastChatId: normalizeText(input.lastChatId) } : {}),
45
- ...(normalizeText(input.lastChatTitle)
46
- ? { lastChatTitle: normalizeText(input.lastChatTitle) }
47
- : {}),
48
- ...(normalizeText(input.lastChatType)
49
- ? { lastChatType: normalizeText(input.lastChatType) }
50
- : {}),
51
- firstSeenAt: typeof input.firstSeenAt === "number" && Number.isFinite(input.firstSeenAt)
52
- ? input.firstSeenAt
53
- : Date.now(),
54
- lastSeenAt: typeof input.lastSeenAt === "number" && Number.isFinite(input.lastSeenAt)
55
- ? input.lastSeenAt
56
- : Date.now(),
57
- };
58
- }
59
- function normalizeObservedChat(input) {
60
- if (!input || typeof input !== "object")
61
- return null;
62
- const channel = normalizeText(input.channel);
63
- const chatId = normalizeText(input.chatId);
64
- if (!channel || !chatId)
65
- return null;
66
- return {
67
- v: 1,
68
- channel,
69
- chatId,
70
- ...(normalizeText(input.chatTitle) ? { chatTitle: normalizeText(input.chatTitle) } : {}),
71
- ...(normalizeText(input.chatType) ? { chatType: normalizeText(input.chatType) } : {}),
72
- ...(normalizeText(input.lastActorId)
73
- ? { lastActorId: normalizeText(input.lastActorId) }
74
- : {}),
75
- ...(normalizeText(input.lastActorName)
76
- ? { lastActorName: normalizeText(input.lastActorName) }
77
- : {}),
78
- firstSeenAt: typeof input.firstSeenAt === "number" && Number.isFinite(input.firstSeenAt)
79
- ? input.firstSeenAt
80
- : Date.now(),
81
- lastSeenAt: typeof input.lastSeenAt === "number" && Number.isFinite(input.lastSeenAt)
82
- ? input.lastSeenAt
83
- : Date.now(),
84
- };
85
- }
86
- function normalizeStateFile(input) {
87
- const out = createEmptyState();
88
- out.updatedAt =
89
- typeof input?.updatedAt === "number" && Number.isFinite(input.updatedAt)
90
- ? input.updatedAt
91
- : Date.now();
92
- const users = input?.usersByKey;
93
- if (users && typeof users === "object") {
94
- for (const [key, value] of Object.entries(users)) {
95
- const normalized = normalizeObservedUser(value);
96
- if (!normalized)
97
- continue;
98
- out.usersByKey[key] = normalized;
99
- }
100
- }
101
- const chats = input?.chatsByKey;
102
- if (chats && typeof chats === "object") {
103
- for (const [key, value] of Object.entries(chats)) {
104
- const normalized = normalizeObservedChat(value);
105
- if (!normalized)
106
- continue;
107
- out.chatsByKey[key] = normalized;
108
- }
109
- }
110
- return out;
111
- }
112
- async function readState(rootPath) {
113
- const file = getAuthorizationStatePath(rootPath);
114
- const raw = (await fs.readJson(file).catch(() => null));
115
- return normalizeStateFile(raw);
116
- }
117
- async function writeState(rootPath, state) {
118
- const file = getAuthorizationStatePath(rootPath);
119
- await fs.ensureDir(path.dirname(file));
120
- await fs.writeJson(file, state, { spaces: 2 });
121
- }
122
- function readAuthorizationConfig(context) {
123
- return readChatAuthorizationConfig(context.rootPath);
124
- }
125
- /**
126
- * 记录观测到的用户 / 会话。
127
- */
128
- export async function recordObservedAuthorizationPrincipal(params) {
129
- const chatId = normalizeText(params.chatId);
130
- if (!chatId)
131
- return;
132
- const now = Date.now();
133
- const state = await readState(params.context.rootPath);
134
- const chatKey = buildChatKey(params.channel, chatId);
135
- const prevChat = state.chatsByKey[chatKey];
136
- state.chatsByKey[chatKey] = {
137
- v: 1,
138
- channel: params.channel,
139
- chatId,
140
- ...(normalizeText(params.chatTitle) ? { chatTitle: normalizeText(params.chatTitle) } : {}),
141
- ...(normalizeText(params.chatType) ? { chatType: normalizeText(params.chatType) } : {}),
142
- ...(normalizeText(params.userId) ? { lastActorId: normalizeText(params.userId) } : {}),
143
- ...(normalizeText(params.username) ? { lastActorName: normalizeText(params.username) } : {}),
144
- firstSeenAt: prevChat?.firstSeenAt ?? now,
145
- lastSeenAt: now,
146
- };
147
- const userId = normalizeText(params.userId);
148
- if (userId) {
149
- const userKey = buildUserKey(params.channel, userId);
150
- const prevUser = state.usersByKey[userKey];
151
- state.usersByKey[userKey] = {
152
- v: 1,
153
- channel: params.channel,
154
- userId,
155
- ...(normalizeText(params.username) ? { username: normalizeText(params.username) } : {}),
156
- lastChatId: chatId,
157
- ...(normalizeText(params.chatTitle)
158
- ? { lastChatTitle: normalizeText(params.chatTitle) }
159
- : {}),
160
- ...(normalizeText(params.chatType) ? { lastChatType: normalizeText(params.chatType) } : {}),
161
- firstSeenAt: prevUser?.firstSeenAt ?? now,
162
- lastSeenAt: now,
163
- };
164
- }
165
- state.updatedAt = now;
166
- await writeState(params.context.rootPath, state);
167
- }
168
- /**
169
- * 读取授权快照(配置 + 动态状态)。
170
- */
171
- export async function readAuthorizationSnapshot(params) {
172
- const state = await readState(params.context.rootPath);
173
- return {
174
- config: readAuthorizationConfig(params.context),
175
- users: Object.values(state.usersByKey).sort((a, b) => b.lastSeenAt - a.lastSeenAt),
176
- chats: Object.values(state.chatsByKey).sort((a, b) => b.lastSeenAt - a.lastSeenAt),
177
- };
178
- }
179
- //# sourceMappingURL=AuthorizationStore.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AuthorizationStore.js","sourceRoot":"","sources":["../../../src/auth/runtime/AuthorizationStore.ts"],"names":[],"mappings":"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"}