@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
@@ -8,7 +8,7 @@
8
8
  * - action 注册表已经拆到独立模块,当前文件只保留实例骨架。
9
9
  */
10
10
  import { BasePlugin } from "@downcity/agent";
11
- import type { PluginActions, PluginHooks, PluginResolves } from "@downcity/agent";
11
+ import type { PluginActions } from "@downcity/agent";
12
12
  import type { AgentContext } from "@downcity/agent";
13
13
  import type { ChatChannelState } from "../chat/types/ChatRuntime.js";
14
14
  import type { ChatQueueWorkerConfig } from "../chat/types/ChatQueueWorker.js";
@@ -60,14 +60,6 @@ export declare class ChatPlugin extends BasePlugin {
60
60
  * 当前 plugin 的 action 定义表。
61
61
  */
62
62
  readonly actions: PluginActions;
63
- /**
64
- * 当前 plugin 的 hook 定义表。
65
- */
66
- readonly hooks: PluginHooks;
67
- /**
68
- * 当前 plugin 的 resolve 定义表。
69
- */
70
- readonly resolves: PluginResolves;
71
63
  /**
72
64
  * 启动当前实例的 queue worker。
73
65
  */
@@ -93,7 +85,7 @@ export declare class ChatPlugin extends BasePlugin {
93
85
  * 更新当前实例的渠道运行态配置。
94
86
  *
95
87
  * 关键点(中文)
96
- * - chat.open/close/configure 只修改当前 plugin 实例,不写 downcity.json。
88
+ * - chat.open/close/configure action 先调用宿主持久化能力,再修改当前实例。
97
89
  * - 当前运行态只允许更新 `enabled` 与 `channelAccountId`,密钥仍来自 constructor 或账号池。
98
90
  */
99
91
  applyChannelRuntimePatch(params: {
@@ -1 +1 @@
1
- {"version":3,"file":"ChatPlugin.d.ts","sourceRoot":"","sources":["../../src/chat/ChatPlugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,cAAc,EACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EAClB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAiBrE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAU7D;;GAEG;AACH,qBAAa,UAAW,SAAQ,UAAU;IACxC;;OAEG;IACH,QAAQ,CAAC,IAAI,UAAU;IAEvB;;OAEG;IACH,SAAgB,YAAY,EAAE,gBAAgB,CAA4B;IAE1E;;;;;;OAMG;IACI,WAAW,EAAE,eAAe,GAAG,IAAI,CAAQ;IAElD;;;;;;OAMG;IACH,SAAgB,UAAU,iBAAwB;IAElD;;OAEG;IACH,SAAgB,OAAO,EAAE,iBAAiB,CAAC;IAE3C;;OAEG;IACH,SAAgB,QAAQ,EAAE,WAAW,EAAE,CAAC;IAExC;;OAEG;IACH,QAAQ,CAAC,MAAM,GAAU,SAAS,YAAY,KAAG,OAAO,CAAC,MAAM,CAAC,CAE9D;IAEF;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAEhC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAE5B;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAElC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;OAEG;IACH,OAAO,CAAC,eAAe;gBAOX,OAAO,CAAC,EAAE,iBAAiB;IA0BvC;;OAEG;IACH,oBAAoB,CAClB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,qBAAqB,CAAC,GAAG,SAAS;IAK7C;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO;IAI1E;;OAEG;IACH,mBAAmB,CACjB,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,eAAe,GACvB,MAAM;IAIT;;;;;;OAMG;IACH,wBAAwB,CAAC,MAAM,EAAE;QAC/B;;WAEG;QACH,OAAO,EAAE,eAAe,CAAC;QACzB;;WAEG;QACH,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB;;WAEG;QACH,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAClC,GAAG,IAAI;IAaR;;OAEG;IACH,qBAAqB,CACnB,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,eAAe;IAK1B,OAAO,CAAC,UAAU;CAGnB"}
1
+ {"version":3,"file":"ChatPlugin.d.ts","sourceRoot":"","sources":["../../src/chat/ChatPlugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EAClB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAarE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAU7D;;GAEG;AACH,qBAAa,UAAW,SAAQ,UAAU;IACxC;;OAEG;IACH,QAAQ,CAAC,IAAI,UAAU;IAEvB;;OAEG;IACH,SAAgB,YAAY,EAAE,gBAAgB,CAA4B;IAE1E;;;;;;OAMG;IACI,WAAW,EAAE,eAAe,GAAG,IAAI,CAAQ;IAElD;;;;;;OAMG;IACH,SAAgB,UAAU,iBAAwB;IAElD;;OAEG;IACH,SAAgB,OAAO,EAAE,iBAAiB,CAAC;IAE3C;;OAEG;IACH,SAAgB,QAAQ,EAAE,WAAW,EAAE,CAAC;IAExC;;OAEG;IACH,QAAQ,CAAC,MAAM,GAAU,SAAS,YAAY,KAAG,OAAO,CAAC,MAAM,CAAC,CAE9D;IAEF;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAEhC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;OAEG;IACH,OAAO,CAAC,eAAe;gBAOX,OAAO,CAAC,EAAE,iBAAiB;IAwBvC;;OAEG;IACH,oBAAoB,CAClB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,qBAAqB,CAAC,GAAG,SAAS;IAK7C;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO;IAI1E;;OAEG;IACH,mBAAmB,CACjB,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,eAAe,GACvB,MAAM;IAIT;;;;;;OAMG;IACH,wBAAwB,CAAC,MAAM,EAAE;QAC/B;;WAEG;QACH,OAAO,EAAE,eAAe,CAAC;QACzB;;WAEG;QACH,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB;;WAEG;QACH,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAClC,GAAG,IAAI;IAaR;;OAEG;IACH,qBAAqB,CACnB,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,eAAe;IAK1B,OAAO,CAAC,UAAU;CAGnB"}
@@ -11,7 +11,7 @@ import { BasePlugin } from "@downcity/agent";
11
11
  import { FeishuChannel, QqChannel, TelegramChannel, } from "../chat/channels/RuntimeChannel.js";
12
12
  import { createChatChannelState, startChatChannels, stopChatChannels, } from "./runtime/ChatChannelFacade.js";
13
13
  import { createChatPluginActions } from "./runtime/ChatPluginActions.js";
14
- import { createChatAuthorizationActions, createChatAuthorizationHooks, createChatAuthorizationResolves, } from "./runtime/ChatAuthorizationRuntime.js";
14
+ import { create_chat_access_actions } from "./access/ChatAccessActions.js";
15
15
  import { ChatQueueWorker } from "./runtime/ChatQueueWorker.js";
16
16
  import { buildChatPluginSystem } from "./runtime/ChatPluginSystem.js";
17
17
  import { ChatQueueStore } from "./runtime/ChatQueueStore.js";
@@ -68,14 +68,6 @@ export class ChatPlugin extends BasePlugin {
68
68
  * 当前 plugin 的 action 定义表。
69
69
  */
70
70
  actions;
71
- /**
72
- * 当前 plugin 的 hook 定义表。
73
- */
74
- hooks;
75
- /**
76
- * 当前 plugin 的 resolve 定义表。
77
- */
78
- resolves;
79
71
  /**
80
72
  * 启动当前实例的 queue worker。
81
73
  */
@@ -111,10 +103,8 @@ export class ChatPlugin extends BasePlugin {
111
103
  ...createChatPluginActions({
112
104
  channelState: this.channelState,
113
105
  }),
114
- ...createChatAuthorizationActions(),
106
+ ...create_chat_access_actions(),
115
107
  };
116
- this.hooks = createChatAuthorizationHooks();
117
- this.resolves = createChatAuthorizationResolves();
118
108
  this.lifecycle = {
119
109
  start: async (context) => {
120
110
  this.startQueueWorker(context);
@@ -149,7 +139,7 @@ export class ChatPlugin extends BasePlugin {
149
139
  * 更新当前实例的渠道运行态配置。
150
140
  *
151
141
  * 关键点(中文)
152
- * - chat.open/close/configure 只修改当前 plugin 实例,不写 downcity.json。
142
+ * - chat.open/close/configure action 先调用宿主持久化能力,再修改当前实例。
153
143
  * - 当前运行态只允许更新 `enabled` 与 `channelAccountId`,密钥仍来自 constructor 或账号池。
154
144
  */
155
145
  applyChannelRuntimePatch(params) {
@@ -1 +1 @@
1
- {"version":3,"file":"ChatPlugin.js","sourceRoot":"","sources":["../../src/chat/ChatPlugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChatPlugin.js","sourceRoot":"","sources":["../../src/chat/ChatPlugin.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,6 @@
2
2
  * 自动生成文件,请勿手改。
3
3
  * 源文件:由同路径 `*.ts.txt` 生成。
4
4
  */
5
- declare const TEXT_MODULE_CONTENT = "# Chat Plugin Instructions\n\n## User-Visible Reply Rules\n\n- In the current mode, your direct assistant output is sent as a message to the user's corresponding channel.\n\n## Output Protocol\n\n- For a normal reply, output plain text directly. Optional frontmatter metadata may appear at the very top of the text. Field semantics match the chat plugin direct-send protocol:\n\n- `delay` / `delayMs`: delay before sending, in milliseconds.\n- `time` / `sendAt` / `sendAtMs`: scheduled send time.\n- `reply`: whether to send with reply semantics.\n- `messageId`: target `message_id`, recommended for group chats.\n- `react`: send an emoji reaction.\n - Single string: `react: \"thumbs up\"`\n - Or an object/array: `emoji/big`\n - When `messageId` is set, `react` reuses that message as the target first.\n- Attachments use `<file type=\"...\">path</file>` and support `document/photo/voice/audio/video`.\n- Attachment paths must be relative paths accessible inside the project. For multiple attachments, output multiple `<file>` tags.\n\n### Example\n\n```text\n---\nreply: true\nmessageId: \"128\"\nreact:\n - emoji: \"done\"\n---\nHere is today's report.\n<file type=\"document\">reports/daily.md</file>\n```\n\n### Protocol Constraints\n\n- Frontmatter must be at the very beginning of the text and wrapped with `---`.\n- Except for `<file>` attachment tags, do not use angle-bracket syntax for control parameters.\n\n## Cross-Protocol Or Cross-Platform Operations\n\n- For replies inside the current conversation, prefer outputting text directly. The system will send it to the current channel automatically.\n- When a task needs cross-conversation, cross-platform, or complex routing, use chat plugin actions.\n- If `plugin_call` is available, call `plugin_call({ plugin: \"chat\", action: \"send\", payload })` or `plugin_call({ plugin: \"chat\", action: \"react\", payload })`.\n- Metadata applies only to direct outbound messages in the current conversation. Do not use metadata for cross-chat routing.\n- If cross-chat routing parameters are unclear, first read the current chat context or call chat plugin query actions instead of guessing.\n\n## Inbound Message Structure\n\n- Each queued user message contains an `<info>...</info>` metadata block plus the user text.\n- `<info>` keeps only user/request metadata such as `user_id`, `username`, `message_id`, `permissions`, and `received_at`.\n- The current chat routing environment, such as `channel`, `session_id`, `chat_key`, and `chat_id`, is injected separately through the system prompt and is no longer mixed into `<info>`.\n- Do not echo `<info>` back to the user.\n";
5
+ declare const TEXT_MODULE_CONTENT = "# Chat Plugin Instructions\n\n## User-Visible Reply Rules\n\n- In the current mode, your direct assistant output is sent as a message to the user's corresponding channel.\n\n## Output Protocol\n\n- For a normal reply, output plain text directly. Optional frontmatter metadata may appear at the very top of the text. Field semantics match the chat plugin direct-send protocol:\n\n- `delay` / `delayMs`: delay before sending, in milliseconds.\n- `time` / `sendAt` / `sendAtMs`: scheduled send time.\n- `reply`: whether to send with reply semantics.\n- `messageId`: target `message_id`, recommended for group chats.\n- `react`: send an emoji reaction.\n - Single string: `react: \"thumbs up\"`\n - Or an object/array: `emoji/big`\n - When `messageId` is set, `react` reuses that message as the target first.\n- Attachments use `<file type=\"...\">path</file>` and support `document/photo/voice/audio/video`.\n- Attachment paths must be relative paths accessible inside the project. For multiple attachments, output multiple `<file>` tags.\n\n### Example\n\n```text\n---\nreply: true\nmessageId: \"128\"\nreact:\n - emoji: \"done\"\n---\nHere is today's report.\n<file type=\"document\">reports/daily.md</file>\n```\n\n### Protocol Constraints\n\n- Frontmatter must be at the very beginning of the text and wrapped with `---`.\n- Except for `<file>` attachment tags, do not use angle-bracket syntax for control parameters.\n\n## Cross-Protocol Or Cross-Platform Operations\n\n- For replies inside the current conversation, prefer outputting text directly. The system will send it to the current channel automatically.\n- When a task needs cross-conversation, cross-platform, or complex routing, use chat plugin actions.\n- If `plugin_call` is available, call `plugin_call({ plugin: \"chat\", action: \"send\", payload })` or `plugin_call({ plugin: \"chat\", action: \"react\", payload })`.\n- Metadata applies only to direct outbound messages in the current conversation. Do not use metadata for cross-chat routing.\n- If cross-chat routing parameters are unclear, first read the current chat context or call chat plugin query actions instead of guessing.\n\n## Inbound Message Structure\n\n- Each queued user message contains an `<info>...</info>` metadata block plus the user text.\n- `<info>` keeps only user/request metadata such as `user_id`, `username`, `message_id`, and `received_at`.\n- The current chat routing environment, such as `channel`, `session_id`, `chat_key`, and `chat_id`, is injected separately through the system prompt and is no longer mixed into `<info>`.\n- Do not echo `<info>` back to the user.\n";
6
6
  export default TEXT_MODULE_CONTENT;
7
7
  //# sourceMappingURL=PROMPT.direct.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PROMPT.direct.d.ts","sourceRoot":"","sources":["../../src/chat/PROMPT.direct.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,QAAA,MAAM,mBAAmB,olFAAolF,CAAC;AAE9mF,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"PROMPT.direct.d.ts","sourceRoot":"","sources":["../../src/chat/PROMPT.direct.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,QAAA,MAAM,mBAAmB,qkFAAqkF,CAAC;AAE/lF,eAAe,mBAAmB,CAAC"}
@@ -3,6 +3,6 @@
3
3
  * 源文件:由同路径 `*.ts.txt` 生成。
4
4
  */
5
5
  // Source: src/chat/PROMPT.direct.ts.txt
6
- const TEXT_MODULE_CONTENT = "# Chat Plugin Instructions\n\n## User-Visible Reply Rules\n\n- In the current mode, your direct assistant output is sent as a message to the user's corresponding channel.\n\n## Output Protocol\n\n- For a normal reply, output plain text directly. Optional frontmatter metadata may appear at the very top of the text. Field semantics match the chat plugin direct-send protocol:\n\n- `delay` / `delayMs`: delay before sending, in milliseconds.\n- `time` / `sendAt` / `sendAtMs`: scheduled send time.\n- `reply`: whether to send with reply semantics.\n- `messageId`: target `message_id`, recommended for group chats.\n- `react`: send an emoji reaction.\n - Single string: `react: \"thumbs up\"`\n - Or an object/array: `emoji/big`\n - When `messageId` is set, `react` reuses that message as the target first.\n- Attachments use `<file type=\"...\">path</file>` and support `document/photo/voice/audio/video`.\n- Attachment paths must be relative paths accessible inside the project. For multiple attachments, output multiple `<file>` tags.\n\n### Example\n\n```text\n---\nreply: true\nmessageId: \"128\"\nreact:\n - emoji: \"done\"\n---\nHere is today's report.\n<file type=\"document\">reports/daily.md</file>\n```\n\n### Protocol Constraints\n\n- Frontmatter must be at the very beginning of the text and wrapped with `---`.\n- Except for `<file>` attachment tags, do not use angle-bracket syntax for control parameters.\n\n## Cross-Protocol Or Cross-Platform Operations\n\n- For replies inside the current conversation, prefer outputting text directly. The system will send it to the current channel automatically.\n- When a task needs cross-conversation, cross-platform, or complex routing, use chat plugin actions.\n- If `plugin_call` is available, call `plugin_call({ plugin: \"chat\", action: \"send\", payload })` or `plugin_call({ plugin: \"chat\", action: \"react\", payload })`.\n- Metadata applies only to direct outbound messages in the current conversation. Do not use metadata for cross-chat routing.\n- If cross-chat routing parameters are unclear, first read the current chat context or call chat plugin query actions instead of guessing.\n\n## Inbound Message Structure\n\n- Each queued user message contains an `<info>...</info>` metadata block plus the user text.\n- `<info>` keeps only user/request metadata such as `user_id`, `username`, `message_id`, `permissions`, and `received_at`.\n- The current chat routing environment, such as `channel`, `session_id`, `chat_key`, and `chat_id`, is injected separately through the system prompt and is no longer mixed into `<info>`.\n- Do not echo `<info>` back to the user.\n";
6
+ const TEXT_MODULE_CONTENT = "# Chat Plugin Instructions\n\n## User-Visible Reply Rules\n\n- In the current mode, your direct assistant output is sent as a message to the user's corresponding channel.\n\n## Output Protocol\n\n- For a normal reply, output plain text directly. Optional frontmatter metadata may appear at the very top of the text. Field semantics match the chat plugin direct-send protocol:\n\n- `delay` / `delayMs`: delay before sending, in milliseconds.\n- `time` / `sendAt` / `sendAtMs`: scheduled send time.\n- `reply`: whether to send with reply semantics.\n- `messageId`: target `message_id`, recommended for group chats.\n- `react`: send an emoji reaction.\n - Single string: `react: \"thumbs up\"`\n - Or an object/array: `emoji/big`\n - When `messageId` is set, `react` reuses that message as the target first.\n- Attachments use `<file type=\"...\">path</file>` and support `document/photo/voice/audio/video`.\n- Attachment paths must be relative paths accessible inside the project. For multiple attachments, output multiple `<file>` tags.\n\n### Example\n\n```text\n---\nreply: true\nmessageId: \"128\"\nreact:\n - emoji: \"done\"\n---\nHere is today's report.\n<file type=\"document\">reports/daily.md</file>\n```\n\n### Protocol Constraints\n\n- Frontmatter must be at the very beginning of the text and wrapped with `---`.\n- Except for `<file>` attachment tags, do not use angle-bracket syntax for control parameters.\n\n## Cross-Protocol Or Cross-Platform Operations\n\n- For replies inside the current conversation, prefer outputting text directly. The system will send it to the current channel automatically.\n- When a task needs cross-conversation, cross-platform, or complex routing, use chat plugin actions.\n- If `plugin_call` is available, call `plugin_call({ plugin: \"chat\", action: \"send\", payload })` or `plugin_call({ plugin: \"chat\", action: \"react\", payload })`.\n- Metadata applies only to direct outbound messages in the current conversation. Do not use metadata for cross-chat routing.\n- If cross-chat routing parameters are unclear, first read the current chat context or call chat plugin query actions instead of guessing.\n\n## Inbound Message Structure\n\n- Each queued user message contains an `<info>...</info>` metadata block plus the user text.\n- `<info>` keeps only user/request metadata such as `user_id`, `username`, `message_id`, and `received_at`.\n- The current chat routing environment, such as `channel`, `session_id`, `chat_key`, and `chat_id`, is injected separately through the system prompt and is no longer mixed into `<info>`.\n- Do not echo `<info>` back to the user.\n";
7
7
  export default TEXT_MODULE_CONTENT;
8
8
  //# sourceMappingURL=PROMPT.direct.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PROMPT.direct.js","sourceRoot":"","sources":["../../src/chat/PROMPT.direct.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wCAAwC;AACxC,MAAM,mBAAmB,GAAG,ilFAAilF,CAAC;AAE9mF,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"PROMPT.direct.js","sourceRoot":"","sources":["../../src/chat/PROMPT.direct.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wCAAwC;AACxC,MAAM,mBAAmB,GAAG,kkFAAkkF,CAAC;AAE/lF,eAAe,mBAAmB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Chat Access Plugin Actions。
3
+ *
4
+ * 关键点(中文)
5
+ * - Control API 通过 Chat Plugin Action 管理当前 Agent 的 Access Store。
6
+ * - CLI 可以直接复用 ChatAccessService,不依赖运行中 Agent。
7
+ */
8
+ import type { PluginActions } from "@downcity/agent";
9
+ /** 创建 Chat Access Action 集合。 */
10
+ export declare function create_chat_access_actions(): PluginActions;
11
+ //# sourceMappingURL=ChatAccessActions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatAccessActions.d.ts","sourceRoot":"","sources":["../../../src/chat/access/ChatAccessActions.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AASrD,gCAAgC;AAChC,wBAAgB,0BAA0B,IAAI,aAAa,CA2I1D"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Chat Access Plugin Actions。
3
+ *
4
+ * 关键点(中文)
5
+ * - Control API 通过 Chat Plugin Action 管理当前 Agent 的 Access Store。
6
+ * - CLI 可以直接复用 ChatAccessService,不依赖运行中 Agent。
7
+ */
8
+ import { createAction } from "@downcity/agent";
9
+ import { z } from "zod";
10
+ import { create_chat_access_service } from "../../chat/access/ChatAccessRuntime.js";
11
+ import { CHAT_ACCESS_ACTIONS } from "../../chat/types/ChatAccess.js";
12
+ const scope_schema = z.enum(["direct", "group", "all"]);
13
+ /** 创建 Chat Access Action 集合。 */
14
+ export function create_chat_access_actions() {
15
+ return {
16
+ [CHAT_ACCESS_ACTIONS.snapshot]: createAction({
17
+ description: "Read Chat Access principals, grants, and requests for the current Agent.",
18
+ input_schema: {
19
+ zod: z.object({}).passthrough(),
20
+ json_schema: { type: "object", properties: {}, additionalProperties: true },
21
+ },
22
+ execute: async ({ context }) => ({
23
+ success: true,
24
+ data: create_chat_access_service(context).snapshot(),
25
+ }),
26
+ }),
27
+ [CHAT_ACCESS_ACTIONS.approve]: createAction({
28
+ description: "Approve a pending Chat Access request.",
29
+ input_schema: {
30
+ zod: z.object({
31
+ request_id: z.string().min(1),
32
+ scope: scope_schema.optional(),
33
+ operator: z.string().min(1),
34
+ }),
35
+ json_schema: {
36
+ type: "object",
37
+ required: ["request_id", "operator"],
38
+ properties: {
39
+ request_id: { type: "string" },
40
+ scope: { type: "string", enum: ["direct", "group", "all"] },
41
+ operator: { type: "string" },
42
+ },
43
+ },
44
+ },
45
+ execute: async ({ context, input }) => {
46
+ const body = input;
47
+ return {
48
+ success: true,
49
+ data: create_chat_access_service(context).approve_request(body),
50
+ };
51
+ },
52
+ }),
53
+ [CHAT_ACCESS_ACTIONS.deny]: createAction({
54
+ description: "Deny a pending Chat Access request.",
55
+ input_schema: {
56
+ zod: z.object({
57
+ request_id: z.string().min(1),
58
+ scope: scope_schema.optional(),
59
+ operator: z.string().min(1),
60
+ }),
61
+ json_schema: {
62
+ type: "object",
63
+ required: ["request_id", "operator"],
64
+ properties: {
65
+ request_id: { type: "string" },
66
+ scope: { type: "string", enum: ["direct", "group", "all"] },
67
+ operator: { type: "string" },
68
+ },
69
+ },
70
+ },
71
+ execute: async ({ context, input }) => {
72
+ const body = input;
73
+ return {
74
+ success: true,
75
+ data: create_chat_access_service(context).deny_request(body),
76
+ };
77
+ },
78
+ }),
79
+ [CHAT_ACCESS_ACTIONS.set]: createAction({
80
+ description: "Set allow or deny for a known Chat Access principal.",
81
+ input_schema: {
82
+ zod: z.object({
83
+ principal_id: z.string().min(1),
84
+ scope: scope_schema,
85
+ effect: z.enum(["allow", "deny"]),
86
+ operator: z.string().min(1),
87
+ }),
88
+ json_schema: {
89
+ type: "object",
90
+ required: ["principal_id", "scope", "effect", "operator"],
91
+ properties: {
92
+ principal_id: { type: "string" },
93
+ scope: { type: "string", enum: ["direct", "group", "all"] },
94
+ effect: { type: "string", enum: ["allow", "deny"] },
95
+ operator: { type: "string" },
96
+ },
97
+ },
98
+ },
99
+ execute: async ({ context, input }) => {
100
+ const body = input;
101
+ return {
102
+ success: true,
103
+ data: create_chat_access_service(context).set_principal_effect(body),
104
+ };
105
+ },
106
+ }),
107
+ [CHAT_ACCESS_ACTIONS.revoke]: createAction({
108
+ description: "Revoke Chat Access grants for a known principal.",
109
+ input_schema: {
110
+ zod: z.object({
111
+ principal_id: z.string().min(1),
112
+ scope: scope_schema,
113
+ operator: z.string().min(1),
114
+ }),
115
+ json_schema: {
116
+ type: "object",
117
+ required: ["principal_id", "scope", "operator"],
118
+ properties: {
119
+ principal_id: { type: "string" },
120
+ scope: { type: "string", enum: ["direct", "group", "all"] },
121
+ operator: { type: "string" },
122
+ },
123
+ },
124
+ },
125
+ execute: async ({ context, input }) => {
126
+ const body = input;
127
+ return {
128
+ success: true,
129
+ data: {
130
+ removed_count: create_chat_access_service(context).revoke_grant(body),
131
+ },
132
+ };
133
+ },
134
+ }),
135
+ };
136
+ }
137
+ //# sourceMappingURL=ChatAccessActions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatAccessActions.js","sourceRoot":"","sources":["../../../src/chat/access/ChatAccessActions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Chat Access Runtime 装配辅助。
3
+ *
4
+ * 关键点(中文)
5
+ * - 从当前 ChatPlugin channel 配置解析稳定 issuer。
6
+ * - Channel Adapter、Plugin Action 和 CLI 共享同一个 Service 构造规则。
7
+ */
8
+ import type { AgentContext } from "@downcity/agent";
9
+ import { ChatAccessService } from "../../chat/access/ChatAccessService.js";
10
+ import type { ChatDispatchChannel } from "../../chat/types/ChatDispatcher.js";
11
+ /** 解析当前 Agent 各渠道的稳定 Issuer。 */
12
+ export declare function resolve_chat_access_issuer_map(context: AgentContext): Partial<Record<ChatDispatchChannel, string>>;
13
+ /** 创建当前 Agent 的 ChatAccessService。 */
14
+ export declare function create_chat_access_service(context: AgentContext): ChatAccessService;
15
+ /** 解析指定渠道当前稳定 Issuer。 */
16
+ export declare function resolve_chat_access_issuer(context: AgentContext, channel: ChatDispatchChannel): string;
17
+ //# sourceMappingURL=ChatAccessRuntime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatAccessRuntime.d.ts","sourceRoot":"","sources":["../../../src/chat/access/ChatAccessRuntime.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAEvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAI1E,gCAAgC;AAChC,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC,CAO9C;AAED,sCAAsC;AACtC,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,YAAY,GAAG,iBAAiB,CAInF;AAED,yBAAyB;AACzB,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,mBAAmB,GAC3B,MAAM,CAER"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Chat Access Runtime 装配辅助。
3
+ *
4
+ * 关键点(中文)
5
+ * - 从当前 ChatPlugin channel 配置解析稳定 issuer。
6
+ * - Channel Adapter、Plugin Action 和 CLI 共享同一个 Service 构造规则。
7
+ */
8
+ import { ChatAccessService } from "../../chat/access/ChatAccessService.js";
9
+ import { resolveChannelAccount } from "../../chat/runtime/ChatChannelCore.js";
10
+ const CHANNELS = ["telegram", "feishu", "qq"];
11
+ /** 解析当前 Agent 各渠道的稳定 Issuer。 */
12
+ export function resolve_chat_access_issuer_map(context) {
13
+ const issuer_by_channel = {};
14
+ for (const channel of CHANNELS) {
15
+ const issuer = String(resolveChannelAccount(context, channel)?.id || "").trim();
16
+ if (issuer)
17
+ issuer_by_channel[channel] = issuer;
18
+ }
19
+ return issuer_by_channel;
20
+ }
21
+ /** 创建当前 Agent 的 ChatAccessService。 */
22
+ export function create_chat_access_service(context) {
23
+ return new ChatAccessService({
24
+ project_root: context.rootPath,
25
+ });
26
+ }
27
+ /** 解析指定渠道当前稳定 Issuer。 */
28
+ export function resolve_chat_access_issuer(context, channel) {
29
+ return String(resolve_chat_access_issuer_map(context)[channel] || "").trim();
30
+ }
31
+ //# sourceMappingURL=ChatAccessRuntime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatAccessRuntime.js","sourceRoot":"","sources":["../../../src/chat/access/ChatAccessRuntime.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAG1E,MAAM,QAAQ,GAA0B,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AAErE,gCAAgC;AAChC,MAAM,UAAU,8BAA8B,CAC5C,OAAqB;IAErB,MAAM,iBAAiB,GAAiD,EAAE,CAAC;IAC3E,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAChF,IAAI,MAAM;YAAE,iBAAiB,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;IAClD,CAAC;IACD,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,0BAA0B,CAAC,OAAqB;IAC9D,OAAO,IAAI,iBAAiB,CAAC;QAC3B,YAAY,EAAE,OAAO,CAAC,QAAQ;KAC/B,CAAC,CAAC;AACL,CAAC;AAED,yBAAyB;AACzB,MAAM,UAAU,0BAA0B,CACxC,OAAqB,EACrB,OAA4B;IAE5B,OAAO,MAAM,CAAC,8BAA8B,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC/E,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Chat Access SQLite Schema。
3
+ *
4
+ * 关键点(中文)
5
+ * - 所有表只保存当前 Agent 的 Chat 准入数据。
6
+ * - 不保存 Bot Token、App Secret 或消息正文。
7
+ * - WAL 与 busy_timeout 保证 Agent runtime 和 CLI 可以并发读写。
8
+ */
9
+ import type Database from "better-sqlite3";
10
+ /** 当前 Chat Access Schema 版本。 */
11
+ export declare const CHAT_ACCESS_SCHEMA_VERSION = "1";
12
+ /**
13
+ * 初始化 Chat Access Schema。
14
+ */
15
+ export declare function ensure_chat_access_schema(database: Database.Database): void;
16
+ //# sourceMappingURL=ChatAccessSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatAccessSchema.d.ts","sourceRoot":"","sources":["../../../src/chat/access/ChatAccessSchema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,gCAAgC;AAChC,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAE9C;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAsF3E"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Chat Access SQLite Schema。
3
+ *
4
+ * 关键点(中文)
5
+ * - 所有表只保存当前 Agent 的 Chat 准入数据。
6
+ * - 不保存 Bot Token、App Secret 或消息正文。
7
+ * - WAL 与 busy_timeout 保证 Agent runtime 和 CLI 可以并发读写。
8
+ */
9
+ /** 当前 Chat Access Schema 版本。 */
10
+ export const CHAT_ACCESS_SCHEMA_VERSION = "1";
11
+ /**
12
+ * 初始化 Chat Access Schema。
13
+ */
14
+ export function ensure_chat_access_schema(database) {
15
+ database.pragma("journal_mode = WAL");
16
+ database.pragma("foreign_keys = ON");
17
+ database.pragma("busy_timeout = 5000");
18
+ database.exec(`
19
+ CREATE TABLE IF NOT EXISTS chat_access_meta (
20
+ key TEXT PRIMARY KEY NOT NULL,
21
+ value TEXT NOT NULL,
22
+ updated_at TEXT NOT NULL
23
+ );
24
+
25
+ CREATE TABLE IF NOT EXISTS chat_access_principals (
26
+ principal_id TEXT PRIMARY KEY NOT NULL,
27
+ channel TEXT NOT NULL,
28
+ issuer TEXT NOT NULL,
29
+ subject_id TEXT NOT NULL,
30
+ display_name TEXT,
31
+ first_seen_at TEXT NOT NULL,
32
+ last_seen_at TEXT NOT NULL,
33
+ last_chat_id TEXT,
34
+ last_chat_type TEXT,
35
+ UNIQUE (channel, issuer, subject_id)
36
+ );
37
+
38
+ CREATE TABLE IF NOT EXISTS chat_access_grants (
39
+ grant_id TEXT PRIMARY KEY NOT NULL,
40
+ principal_id TEXT NOT NULL,
41
+ scope TEXT NOT NULL CHECK (scope IN ('direct', 'group')),
42
+ effect TEXT NOT NULL CHECK (effect IN ('allow', 'deny')),
43
+ created_by TEXT NOT NULL,
44
+ created_at TEXT NOT NULL,
45
+ updated_at TEXT NOT NULL,
46
+ UNIQUE (principal_id, scope),
47
+ FOREIGN KEY (principal_id)
48
+ REFERENCES chat_access_principals(principal_id)
49
+ ON DELETE CASCADE
50
+ );
51
+
52
+ CREATE TABLE IF NOT EXISTS chat_access_requests (
53
+ request_id TEXT PRIMARY KEY NOT NULL,
54
+ principal_id TEXT NOT NULL,
55
+ scope TEXT NOT NULL CHECK (scope IN ('direct', 'group')),
56
+ chat_id TEXT NOT NULL,
57
+ chat_type TEXT NOT NULL,
58
+ status TEXT NOT NULL CHECK (status IN ('pending', 'approved', 'denied', 'expired')),
59
+ resolved_by TEXT,
60
+ created_at TEXT NOT NULL,
61
+ last_requested_at TEXT NOT NULL,
62
+ resolved_at TEXT,
63
+ FOREIGN KEY (principal_id)
64
+ REFERENCES chat_access_principals(principal_id)
65
+ ON DELETE CASCADE
66
+ );
67
+
68
+ CREATE UNIQUE INDEX IF NOT EXISTS chat_access_requests_pending_uq
69
+ ON chat_access_requests(principal_id, scope)
70
+ WHERE status = 'pending';
71
+
72
+ CREATE INDEX IF NOT EXISTS chat_access_requests_status_idx
73
+ ON chat_access_requests(status, last_requested_at DESC);
74
+
75
+ CREATE TABLE IF NOT EXISTS chat_access_audit_events (
76
+ event_id TEXT PRIMARY KEY NOT NULL,
77
+ principal_id TEXT,
78
+ request_id TEXT,
79
+ action TEXT NOT NULL,
80
+ scope TEXT,
81
+ decision TEXT,
82
+ operator TEXT,
83
+ detail_json TEXT,
84
+ created_at TEXT NOT NULL
85
+ );
86
+
87
+ CREATE INDEX IF NOT EXISTS chat_access_audit_created_idx
88
+ ON chat_access_audit_events(created_at DESC);
89
+ `);
90
+ const current_time = new Date().toISOString();
91
+ database.prepare(`
92
+ INSERT INTO chat_access_meta (key, value, updated_at)
93
+ VALUES ('schema_version', ?, ?)
94
+ ON CONFLICT(key) DO UPDATE SET
95
+ value = excluded.value,
96
+ updated_at = excluded.updated_at
97
+ `).run(CHAT_ACCESS_SCHEMA_VERSION, current_time);
98
+ }
99
+ //# sourceMappingURL=ChatAccessSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatAccessSchema.js","sourceRoot":"","sources":["../../../src/chat/access/ChatAccessSchema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,gCAAgC;AAChC,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAE9C;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAA2B;IACnE,QAAQ,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACtC,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAEvC,QAAQ,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuEb,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,QAAQ,CAAC,OAAO,CAAC;;;;;;GAMhB,CAAC,CAAC,GAAG,CAAC,0BAA0B,EAAE,YAAY,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Chat Access 应用服务。
3
+ *
4
+ * 关键点(中文)
5
+ * - 所有平台共用相同的 Principal、Grant、Request 和 Audit 业务规则。
6
+ * - Chat Access 只做准入判定,不向 Agent Session 或其他 Plugin 传播权限。
7
+ * - 每个方法自行打开并关闭项目级 Store,避免 Channel 生命周期遗漏连接释放。
8
+ */
9
+ import type { ApproveChatAccessRequestInput, ChatAccessDecision, ChatAccessGrant, ChatAccessIdentityInput, ChatAccessPrincipal, ChatAccessPrincipalView, ChatAccessRequestStatus, ChatAccessRequestView, ChatAccessScope, ChatAccessScopeInput, ChatAccessServiceOptions, ChatAccessSnapshot, DenyChatAccessRequestInput, RevokeChatAccessGrantInput, SetChatAccessPrincipalEffectInput } from "../../chat/types/ChatAccess.js";
10
+ import type { ChatDispatchChannel } from "../../chat/types/ChatDispatcher.js";
11
+ /** 判断是否为 Chat Access 支持渠道。 */
12
+ export declare function is_chat_access_channel(value: unknown): value is ChatDispatchChannel;
13
+ /** 解析管理输入范围。 */
14
+ export declare function resolve_chat_access_scopes(scope: ChatAccessScopeInput): ChatAccessScope[];
15
+ /** 根据平台会话类型解析准入范围。 */
16
+ export declare function resolve_chat_access_scope(channel: ChatDispatchChannel, chat_type?: string): ChatAccessScope;
17
+ /**
18
+ * 当前 Agent 的 Chat Access 应用服务。
19
+ */
20
+ export declare class ChatAccessService {
21
+ private readonly project_root;
22
+ constructor(options: ChatAccessServiceOptions);
23
+ private with_store;
24
+ /** 观测并规范化平台主体。 */
25
+ observe_identity(input: ChatAccessIdentityInput): ChatAccessPrincipal;
26
+ /** 判定当前消息是否允许进入 Agent。 */
27
+ evaluate(input: ChatAccessIdentityInput): ChatAccessDecision;
28
+ /** 批准待处理请求。 */
29
+ approve_request(input: ApproveChatAccessRequestInput): ChatAccessGrant[];
30
+ /** 拒绝待处理请求。 */
31
+ deny_request(input: DenyChatAccessRequestInput): ChatAccessGrant[];
32
+ private resolve_request_with_effect;
33
+ /** 直接设置已知主体的 Allow/Deny。 */
34
+ set_principal_effect(input: SetChatAccessPrincipalEffectInput): ChatAccessGrant[];
35
+ /** 撤销主体指定范围的 Grant。 */
36
+ revoke_grant(input: RevokeChatAccessGrantInput): number;
37
+ /** 列出主体和 Grant。 */
38
+ list_principals(): ChatAccessPrincipalView[];
39
+ /** 列出 Access Request。 */
40
+ list_requests(status?: ChatAccessRequestStatus): ChatAccessRequestView[];
41
+ /** 读取完整 Chat Access 快照。 */
42
+ snapshot(): ChatAccessSnapshot;
43
+ }
44
+ //# sourceMappingURL=ChatAccessService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatAccessService.d.ts","sourceRoot":"","sources":["../../../src/chat/access/ChatAccessService.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EACV,6BAA6B,EAC7B,kBAAkB,EAElB,eAAe,EACf,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,eAAe,EACf,oBAAoB,EACpB,wBAAwB,EACxB,kBAAkB,EAClB,0BAA0B,EAC1B,0BAA0B,EAC1B,iCAAiC,EAClC,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAQ1E,8BAA8B;AAC9B,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,mBAAmB,CAEnF;AAED,gBAAgB;AAChB,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,oBAAoB,GAAG,eAAe,EAAE,CAIzF;AAED,sBAAsB;AACtB,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,mBAAmB,EAC5B,SAAS,CAAC,EAAE,MAAM,GACjB,eAAe,CAMjB;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAC1B,OAAO,EAAE,wBAAwB;IAI7C,OAAO,CAAC,UAAU;IASlB,kBAAkB;IAClB,gBAAgB,CAAC,KAAK,EAAE,uBAAuB,GAAG,mBAAmB;IAmBrE,0BAA0B;IAC1B,QAAQ,CAAC,KAAK,EAAE,uBAAuB,GAAG,kBAAkB;IA6E5D,eAAe;IACf,eAAe,CAAC,KAAK,EAAE,6BAA6B,GAAG,eAAe,EAAE;IASxE,eAAe;IACf,YAAY,CAAC,KAAK,EAAE,0BAA0B,GAAG,eAAe,EAAE;IASlE,OAAO,CAAC,2BAA2B;IAyCnC,4BAA4B;IAC5B,oBAAoB,CAAC,KAAK,EAAE,iCAAiC,GAAG,eAAe,EAAE;IA+BjF,uBAAuB;IACvB,YAAY,CAAC,KAAK,EAAE,0BAA0B,GAAG,MAAM;IAsBvD,mBAAmB;IACnB,eAAe,IAAI,uBAAuB,EAAE;IAI5C,yBAAyB;IACzB,aAAa,CAAC,MAAM,CAAC,EAAE,uBAAuB,GAAG,qBAAqB,EAAE;IAIxE,2BAA2B;IAC3B,QAAQ,IAAI,kBAAkB;CAM/B"}