opencode-bridge 2.9.0-beta

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 (237) hide show
  1. package/.env.example +131 -0
  2. package/LICENSE +674 -0
  3. package/README.md +1195 -0
  4. package/bin/opencode-bridge.js +31 -0
  5. package/dist/commands/effort.d.ts +9 -0
  6. package/dist/commands/effort.d.ts.map +1 -0
  7. package/dist/commands/effort.js +56 -0
  8. package/dist/commands/effort.js.map +1 -0
  9. package/dist/commands/parser.d.ts +37 -0
  10. package/dist/commands/parser.d.ts.map +1 -0
  11. package/dist/commands/parser.js +355 -0
  12. package/dist/commands/parser.js.map +1 -0
  13. package/dist/config.d.ts +91 -0
  14. package/dist/config.d.ts.map +1 -0
  15. package/dist/config.js +340 -0
  16. package/dist/config.js.map +1 -0
  17. package/dist/feishu/cards-stream.d.ts +65 -0
  18. package/dist/feishu/cards-stream.d.ts.map +1 -0
  19. package/dist/feishu/cards-stream.js +448 -0
  20. package/dist/feishu/cards-stream.js.map +1 -0
  21. package/dist/feishu/cards.d.ts +81 -0
  22. package/dist/feishu/cards.d.ts.map +1 -0
  23. package/dist/feishu/cards.js +560 -0
  24. package/dist/feishu/cards.js.map +1 -0
  25. package/dist/feishu/client.d.ts +132 -0
  26. package/dist/feishu/client.d.ts.map +1 -0
  27. package/dist/feishu/client.js +952 -0
  28. package/dist/feishu/client.js.map +1 -0
  29. package/dist/feishu/streamer.d.ts +30 -0
  30. package/dist/feishu/streamer.d.ts.map +1 -0
  31. package/dist/feishu/streamer.js +95 -0
  32. package/dist/feishu/streamer.js.map +1 -0
  33. package/dist/handlers/card-action.d.ts +12 -0
  34. package/dist/handlers/card-action.d.ts.map +1 -0
  35. package/dist/handlers/card-action.js +154 -0
  36. package/dist/handlers/card-action.js.map +1 -0
  37. package/dist/handlers/command.d.ts +76 -0
  38. package/dist/handlers/command.d.ts.map +1 -0
  39. package/dist/handlers/command.js +1773 -0
  40. package/dist/handlers/command.js.map +1 -0
  41. package/dist/handlers/discord.d.ts +78 -0
  42. package/dist/handlers/discord.d.ts.map +1 -0
  43. package/dist/handlers/discord.js +1832 -0
  44. package/dist/handlers/discord.js.map +1 -0
  45. package/dist/handlers/file-sender.d.ts +22 -0
  46. package/dist/handlers/file-sender.d.ts.map +1 -0
  47. package/dist/handlers/file-sender.js +183 -0
  48. package/dist/handlers/file-sender.js.map +1 -0
  49. package/dist/handlers/group.d.ts +21 -0
  50. package/dist/handlers/group.d.ts.map +1 -0
  51. package/dist/handlers/group.js +414 -0
  52. package/dist/handlers/group.js.map +1 -0
  53. package/dist/handlers/lifecycle.d.ts +17 -0
  54. package/dist/handlers/lifecycle.d.ts.map +1 -0
  55. package/dist/handlers/lifecycle.js +129 -0
  56. package/dist/handlers/lifecycle.js.map +1 -0
  57. package/dist/handlers/p2p.d.ts +44 -0
  58. package/dist/handlers/p2p.d.ts.map +1 -0
  59. package/dist/handlers/p2p.js +625 -0
  60. package/dist/handlers/p2p.js.map +1 -0
  61. package/dist/index.d.ts +33 -0
  62. package/dist/index.d.ts.map +1 -0
  63. package/dist/index.js +1562 -0
  64. package/dist/index.js.map +1 -0
  65. package/dist/opencode/client.d.ts +176 -0
  66. package/dist/opencode/client.d.ts.map +1 -0
  67. package/dist/opencode/client.js +1126 -0
  68. package/dist/opencode/client.js.map +1 -0
  69. package/dist/opencode/delayed-handler.d.ts +33 -0
  70. package/dist/opencode/delayed-handler.d.ts.map +1 -0
  71. package/dist/opencode/delayed-handler.js +74 -0
  72. package/dist/opencode/delayed-handler.js.map +1 -0
  73. package/dist/opencode/output-buffer.d.ts +56 -0
  74. package/dist/opencode/output-buffer.d.ts.map +1 -0
  75. package/dist/opencode/output-buffer.js +202 -0
  76. package/dist/opencode/output-buffer.js.map +1 -0
  77. package/dist/opencode/question-handler.d.ts +61 -0
  78. package/dist/opencode/question-handler.d.ts.map +1 -0
  79. package/dist/opencode/question-handler.js +183 -0
  80. package/dist/opencode/question-handler.js.map +1 -0
  81. package/dist/opencode/question-parser.d.ts +9 -0
  82. package/dist/opencode/question-parser.d.ts.map +1 -0
  83. package/dist/opencode/question-parser.js +69 -0
  84. package/dist/opencode/question-parser.js.map +1 -0
  85. package/dist/opencode/session-queue.d.ts +16 -0
  86. package/dist/opencode/session-queue.d.ts.map +1 -0
  87. package/dist/opencode/session-queue.js +41 -0
  88. package/dist/opencode/session-queue.js.map +1 -0
  89. package/dist/permissions/handler.d.ts +36 -0
  90. package/dist/permissions/handler.d.ts.map +1 -0
  91. package/dist/permissions/handler.js +141 -0
  92. package/dist/permissions/handler.js.map +1 -0
  93. package/dist/platform/adapters/discord-adapter.d.ts +45 -0
  94. package/dist/platform/adapters/discord-adapter.d.ts.map +1 -0
  95. package/dist/platform/adapters/discord-adapter.js +497 -0
  96. package/dist/platform/adapters/discord-adapter.js.map +1 -0
  97. package/dist/platform/adapters/feishu-adapter.d.ts +29 -0
  98. package/dist/platform/adapters/feishu-adapter.d.ts.map +1 -0
  99. package/dist/platform/adapters/feishu-adapter.js +150 -0
  100. package/dist/platform/adapters/feishu-adapter.js.map +1 -0
  101. package/dist/platform/registry.d.ts +41 -0
  102. package/dist/platform/registry.d.ts.map +1 -0
  103. package/dist/platform/registry.js +87 -0
  104. package/dist/platform/registry.js.map +1 -0
  105. package/dist/platform/types.d.ts +92 -0
  106. package/dist/platform/types.d.ts.map +1 -0
  107. package/dist/platform/types.js +4 -0
  108. package/dist/platform/types.js.map +1 -0
  109. package/dist/reliability/audit-log.d.ts +93 -0
  110. package/dist/reliability/audit-log.d.ts.map +1 -0
  111. package/dist/reliability/audit-log.js +248 -0
  112. package/dist/reliability/audit-log.js.map +1 -0
  113. package/dist/reliability/config-guard.d.ts +42 -0
  114. package/dist/reliability/config-guard.d.ts.map +1 -0
  115. package/dist/reliability/config-guard.js +264 -0
  116. package/dist/reliability/config-guard.js.map +1 -0
  117. package/dist/reliability/conversation-heartbeat.d.ts +37 -0
  118. package/dist/reliability/conversation-heartbeat.d.ts.map +1 -0
  119. package/dist/reliability/conversation-heartbeat.js +179 -0
  120. package/dist/reliability/conversation-heartbeat.js.map +1 -0
  121. package/dist/reliability/cron-api-server.d.ts +13 -0
  122. package/dist/reliability/cron-api-server.d.ts.map +1 -0
  123. package/dist/reliability/cron-api-server.js +247 -0
  124. package/dist/reliability/cron-api-server.js.map +1 -0
  125. package/dist/reliability/cron-control.d.ts +34 -0
  126. package/dist/reliability/cron-control.d.ts.map +1 -0
  127. package/dist/reliability/cron-control.js +864 -0
  128. package/dist/reliability/cron-control.js.map +1 -0
  129. package/dist/reliability/cron-semantic.d.ts +9 -0
  130. package/dist/reliability/cron-semantic.d.ts.map +1 -0
  131. package/dist/reliability/cron-semantic.js +208 -0
  132. package/dist/reliability/cron-semantic.js.map +1 -0
  133. package/dist/reliability/environment-doctor.d.ts +56 -0
  134. package/dist/reliability/environment-doctor.d.ts.map +1 -0
  135. package/dist/reliability/environment-doctor.js +213 -0
  136. package/dist/reliability/environment-doctor.js.map +1 -0
  137. package/dist/reliability/job-registry.d.ts +26 -0
  138. package/dist/reliability/job-registry.d.ts.map +1 -0
  139. package/dist/reliability/job-registry.js +77 -0
  140. package/dist/reliability/job-registry.js.map +1 -0
  141. package/dist/reliability/opencode-probe.d.ts +37 -0
  142. package/dist/reliability/opencode-probe.d.ts.map +1 -0
  143. package/dist/reliability/opencode-probe.js +195 -0
  144. package/dist/reliability/opencode-probe.js.map +1 -0
  145. package/dist/reliability/opencode-restart.d.ts +42 -0
  146. package/dist/reliability/opencode-restart.d.ts.map +1 -0
  147. package/dist/reliability/opencode-restart.js +155 -0
  148. package/dist/reliability/opencode-restart.js.map +1 -0
  149. package/dist/reliability/proactive-heartbeat.d.ts +39 -0
  150. package/dist/reliability/proactive-heartbeat.d.ts.map +1 -0
  151. package/dist/reliability/proactive-heartbeat.js +147 -0
  152. package/dist/reliability/proactive-heartbeat.js.map +1 -0
  153. package/dist/reliability/process-check-job.d.ts +73 -0
  154. package/dist/reliability/process-check-job.d.ts.map +1 -0
  155. package/dist/reliability/process-check-job.js +254 -0
  156. package/dist/reliability/process-check-job.js.map +1 -0
  157. package/dist/reliability/process-guard.d.ts +53 -0
  158. package/dist/reliability/process-guard.d.ts.map +1 -0
  159. package/dist/reliability/process-guard.js +344 -0
  160. package/dist/reliability/process-guard.js.map +1 -0
  161. package/dist/reliability/recovery-reporter.d.ts +37 -0
  162. package/dist/reliability/recovery-reporter.d.ts.map +1 -0
  163. package/dist/reliability/recovery-reporter.js +161 -0
  164. package/dist/reliability/recovery-reporter.js.map +1 -0
  165. package/dist/reliability/rescue-executor.d.ts +52 -0
  166. package/dist/reliability/rescue-executor.d.ts.map +1 -0
  167. package/dist/reliability/rescue-executor.js +244 -0
  168. package/dist/reliability/rescue-executor.js.map +1 -0
  169. package/dist/reliability/rescue-policy.d.ts +39 -0
  170. package/dist/reliability/rescue-policy.d.ts.map +1 -0
  171. package/dist/reliability/rescue-policy.js +85 -0
  172. package/dist/reliability/rescue-policy.js.map +1 -0
  173. package/dist/reliability/runtime-cron-dispatcher.d.ts +30 -0
  174. package/dist/reliability/runtime-cron-dispatcher.d.ts.map +1 -0
  175. package/dist/reliability/runtime-cron-dispatcher.js +100 -0
  176. package/dist/reliability/runtime-cron-dispatcher.js.map +1 -0
  177. package/dist/reliability/runtime-cron-orphan.d.ts +18 -0
  178. package/dist/reliability/runtime-cron-orphan.d.ts.map +1 -0
  179. package/dist/reliability/runtime-cron-orphan.js +87 -0
  180. package/dist/reliability/runtime-cron-orphan.js.map +1 -0
  181. package/dist/reliability/runtime-cron-registry.d.ts +4 -0
  182. package/dist/reliability/runtime-cron-registry.d.ts.map +1 -0
  183. package/dist/reliability/runtime-cron-registry.js +8 -0
  184. package/dist/reliability/runtime-cron-registry.js.map +1 -0
  185. package/dist/reliability/runtime-cron.d.ts +75 -0
  186. package/dist/reliability/runtime-cron.d.ts.map +1 -0
  187. package/dist/reliability/runtime-cron.js +309 -0
  188. package/dist/reliability/runtime-cron.js.map +1 -0
  189. package/dist/reliability/scheduler.d.ts +38 -0
  190. package/dist/reliability/scheduler.d.ts.map +1 -0
  191. package/dist/reliability/scheduler.js +174 -0
  192. package/dist/reliability/scheduler.js.map +1 -0
  193. package/dist/reliability/types.d.ts +151 -0
  194. package/dist/reliability/types.d.ts.map +1 -0
  195. package/dist/reliability/types.js +178 -0
  196. package/dist/reliability/types.js.map +1 -0
  197. package/dist/router/action-handlers.d.ts +27 -0
  198. package/dist/router/action-handlers.d.ts.map +1 -0
  199. package/dist/router/action-handlers.js +226 -0
  200. package/dist/router/action-handlers.js.map +1 -0
  201. package/dist/router/opencode-event-hub.d.ts +159 -0
  202. package/dist/router/opencode-event-hub.d.ts.map +1 -0
  203. package/dist/router/opencode-event-hub.js +589 -0
  204. package/dist/router/opencode-event-hub.js.map +1 -0
  205. package/dist/router/root-router.d.ts +94 -0
  206. package/dist/router/root-router.d.ts.map +1 -0
  207. package/dist/router/root-router.js +214 -0
  208. package/dist/router/root-router.js.map +1 -0
  209. package/dist/store/chat-session.d.ts +150 -0
  210. package/dist/store/chat-session.d.ts.map +1 -0
  211. package/dist/store/chat-session.js +640 -0
  212. package/dist/store/chat-session.js.map +1 -0
  213. package/dist/store/session-directory.d.ts +12 -0
  214. package/dist/store/session-directory.d.ts.map +1 -0
  215. package/dist/store/session-directory.js +47 -0
  216. package/dist/store/session-directory.js.map +1 -0
  217. package/dist/store/session-group.d.ts +19 -0
  218. package/dist/store/session-group.d.ts.map +1 -0
  219. package/dist/store/session-group.js +92 -0
  220. package/dist/store/session-group.js.map +1 -0
  221. package/dist/store/user-session.d.ts +19 -0
  222. package/dist/store/user-session.d.ts.map +1 -0
  223. package/dist/store/user-session.js +112 -0
  224. package/dist/store/user-session.js.map +1 -0
  225. package/dist/utils/async-queue.d.ts +12 -0
  226. package/dist/utils/async-queue.d.ts.map +1 -0
  227. package/dist/utils/async-queue.js +51 -0
  228. package/dist/utils/async-queue.js.map +1 -0
  229. package/dist/utils/directory-policy.d.ts +50 -0
  230. package/dist/utils/directory-policy.d.ts.map +1 -0
  231. package/dist/utils/directory-policy.js +379 -0
  232. package/dist/utils/directory-policy.js.map +1 -0
  233. package/dist/utils/session-title.d.ts +2 -0
  234. package/dist/utils/session-title.d.ts.map +1 -0
  235. package/dist/utils/session-title.js +10 -0
  236. package/dist/utils/session-title.js.map +1 -0
  237. package/package.json +73 -0
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Feishu 平台适配器
3
+ *
4
+ * 将现有 feishuClient 包装为 PlatformAdapter 接口,
5
+ * 提供事件映射和行为透传,不修改原有行为。
6
+ */
7
+ import { feishuClient } from '../../feishu/client.js';
8
+ /**
9
+ * Feishu 平台发送器实现
10
+ *
11
+ * 委托给 feishuClient 的发送方法
12
+ */
13
+ class FeishuSender {
14
+ async sendText(conversationId, text) {
15
+ return feishuClient.sendText(conversationId, text);
16
+ }
17
+ async sendCard(conversationId, card) {
18
+ return feishuClient.sendCard(conversationId, card);
19
+ }
20
+ async updateCard(messageId, card) {
21
+ return feishuClient.updateCard(messageId, card);
22
+ }
23
+ async deleteMessage(messageId) {
24
+ return feishuClient.deleteMessage(messageId);
25
+ }
26
+ async reply(messageId, text) {
27
+ return feishuClient.reply(messageId, text);
28
+ }
29
+ async replyCard(messageId, card) {
30
+ return feishuClient.replyCard(messageId, card);
31
+ }
32
+ }
33
+ /**
34
+ * 将 Feishu 消息事件映射为平台通用事件
35
+ */
36
+ function mapMessageEvent(event) {
37
+ // 映射附件
38
+ let attachments;
39
+ if (event.attachments && event.attachments.length > 0) {
40
+ attachments = event.attachments.map(att => ({
41
+ type: att.type,
42
+ fileKey: att.fileKey,
43
+ fileName: att.fileName,
44
+ fileType: att.fileType,
45
+ fileSize: att.fileSize,
46
+ }));
47
+ }
48
+ // 映射提及
49
+ let mentions;
50
+ if (event.mentions && event.mentions.length > 0) {
51
+ mentions = event.mentions.map(m => ({
52
+ key: m.key,
53
+ id: m.id,
54
+ name: m.name,
55
+ }));
56
+ }
57
+ return {
58
+ platform: 'feishu',
59
+ // chatId -> conversationId
60
+ conversationId: event.chatId,
61
+ messageId: event.messageId,
62
+ // openId -> senderId (已在 FeishuMessageEvent 中提取)
63
+ senderId: event.senderId,
64
+ senderType: event.senderType,
65
+ content: event.content,
66
+ msgType: event.msgType,
67
+ threadId: event.threadId,
68
+ chatType: event.chatType,
69
+ attachments,
70
+ mentions,
71
+ rawEvent: event.rawEvent,
72
+ };
73
+ }
74
+ /**
75
+ * 将 Feishu 卡片动作事件映射为平台通用事件
76
+ */
77
+ function mapActionEvent(event) {
78
+ return {
79
+ platform: 'feishu',
80
+ // openId -> senderId
81
+ senderId: event.openId,
82
+ action: event.action,
83
+ token: event.token,
84
+ messageId: event.messageId,
85
+ // chatId -> conversationId
86
+ conversationId: event.chatId,
87
+ threadId: event.threadId,
88
+ rawEvent: event.rawEvent,
89
+ };
90
+ }
91
+ /**
92
+ * Feishu 平台适配器实现
93
+ *
94
+ * 通过包装 feishuClient 实现 PlatformAdapter 接口。
95
+ * 所有行为透传到底层客户端,不做额外处理。
96
+ */
97
+ export class FeishuAdapter {
98
+ platform = 'feishu';
99
+ sender;
100
+ constructor() {
101
+ this.sender = new FeishuSender();
102
+ }
103
+ async start() {
104
+ await feishuClient.start();
105
+ }
106
+ stop() {
107
+ feishuClient.stop();
108
+ }
109
+ getSender() {
110
+ return this.sender;
111
+ }
112
+ onMessage(callback) {
113
+ feishuClient.on('message', (feishuEvent) => {
114
+ const platformEvent = mapMessageEvent(feishuEvent);
115
+ callback(platformEvent);
116
+ });
117
+ }
118
+ onAction(callback) {
119
+ feishuClient.setCardActionHandler(async (feishuEvent) => {
120
+ const platformEvent = mapActionEvent(feishuEvent);
121
+ callback(platformEvent);
122
+ // 卡片处理器不需要返回值时返回 void
123
+ return;
124
+ });
125
+ }
126
+ onChatUnavailable(callback) {
127
+ feishuClient.on('chatUnavailable', (chatId) => {
128
+ // chatId -> conversationId
129
+ callback(chatId);
130
+ });
131
+ }
132
+ onMessageRecalled(callback) {
133
+ feishuClient.onMessageRecalled(callback);
134
+ }
135
+ onMemberLeft(callback) {
136
+ feishuClient.onMemberLeft((chatId, memberId) => {
137
+ // chatId -> conversationId
138
+ callback(chatId, memberId);
139
+ });
140
+ }
141
+ onChatDisbanded(callback) {
142
+ feishuClient.onChatDisbanded((chatId) => {
143
+ // chatId -> conversationId
144
+ callback(chatId);
145
+ });
146
+ }
147
+ }
148
+ // 单例导出
149
+ export const feishuAdapter = new FeishuAdapter();
150
+ //# sourceMappingURL=feishu-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feishu-adapter.js","sourceRoot":"","sources":["../../../src/platform/adapters/feishu-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * 平台注册中心
3
+ *
4
+ * 用于注册和管理不同平台的适配器,支持按环境变量过滤启用的平台。
5
+ * 默认保持 Feishu 启用以确保向后兼容。
6
+ */
7
+ import type { PlatformAdapter } from './types.js';
8
+ /**
9
+ * 注册平台适配器
10
+ *
11
+ * @param adapter - 平台适配器实例
12
+ * @throws Error - 如果 platformId 已存在
13
+ */
14
+ export declare function register(adapter: PlatformAdapter): void;
15
+ /**
16
+ * 获取平台适配器
17
+ *
18
+ * @param platformId - 平台唯一标识
19
+ * @returns 平台适配器,如果不存在则返回 undefined
20
+ */
21
+ export declare function get(platformId: string): PlatformAdapter | undefined;
22
+ /**
23
+ * 列出所有已注册的平台
24
+ *
25
+ * @returns 平台适配器列表
26
+ */
27
+ export declare function list(): PlatformAdapter[];
28
+ /**
29
+ * 列出启用的平台
30
+ *
31
+ * @returns 启用的平台适配器列表
32
+ */
33
+ export declare function listEnabled(): PlatformAdapter[];
34
+ /**
35
+ * 检查平台是否启用
36
+ *
37
+ * @param platformId - 平台唯一标识
38
+ * @returns 是否启用
39
+ */
40
+ export declare function isEnabled(platformId: string): boolean;
41
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/platform/registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AASlD;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAYvD;AAED;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAEnE;AAED;;;;GAIG;AACH,wBAAgB,IAAI,IAAI,eAAe,EAAE,CAExC;AA0BD;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,eAAe,EAAE,CAI/C;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAMrD"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * 平台注册中心
3
+ *
4
+ * 用于注册和管理不同平台的适配器,支持按环境变量过滤启用的平台。
5
+ * 默认保持 Feishu 启用以确保向后兼容。
6
+ */
7
+ // 环境变量前缀
8
+ const PLATFORM_ENV_PREFIX = 'PLATFORM_';
9
+ const ENABLED_SUFFIX = '_ENABLED';
10
+ // 注册表
11
+ const registry = new Map();
12
+ /**
13
+ * 注册平台适配器
14
+ *
15
+ * @param adapter - 平台适配器实例
16
+ * @throws Error - 如果 platformId 已存在
17
+ */
18
+ export function register(adapter) {
19
+ const platformId = adapter.platform;
20
+ if (!platformId || typeof platformId !== 'string') {
21
+ throw new Error('无效的 platformId');
22
+ }
23
+ if (registry.has(platformId)) {
24
+ throw new Error(`平台 ${platformId} 已注册`);
25
+ }
26
+ registry.set(platformId, adapter);
27
+ }
28
+ /**
29
+ * 获取平台适配器
30
+ *
31
+ * @param platformId - 平台唯一标识
32
+ * @returns 平台适配器,如果不存在则返回 undefined
33
+ */
34
+ export function get(platformId) {
35
+ return registry.get(platformId);
36
+ }
37
+ /**
38
+ * 列出所有已注册的平台
39
+ *
40
+ * @returns 平台适配器列表
41
+ */
42
+ export function list() {
43
+ return Array.from(registry.values());
44
+ }
45
+ /**
46
+ * 解析环境变量判断平台是否启用
47
+ *
48
+ * 优先级:
49
+ * 1. 环境变量 PLATFORM_{PLATFORM_ID}_ENABLED
50
+ * 2. 默认值(feishu 默认启用,其他默认禁用)
51
+ *
52
+ * @param platformId - 平台唯一标识
53
+ * @returns 是否启用
54
+ */
55
+ function isPlatformEnabled(platformId) {
56
+ const envKey = `${PLATFORM_ENV_PREFIX}${platformId.toUpperCase()}${ENABLED_SUFFIX}`;
57
+ const envValue = process.env[envKey];
58
+ // 如果有环境变量配置,优先使用
59
+ if (envValue !== undefined) {
60
+ const normalized = envValue.trim().toLowerCase();
61
+ return ['1', 'true', 'yes', 'on'].includes(normalized);
62
+ }
63
+ // 默认策略:feishu 默认启用,其他默认禁用
64
+ return platformId.toLowerCase() === 'feishu';
65
+ }
66
+ /**
67
+ * 列出启用的平台
68
+ *
69
+ * @returns 启用的平台适配器列表
70
+ */
71
+ export function listEnabled() {
72
+ return Array.from(registry.values()).filter(adapter => isPlatformEnabled(adapter.platform));
73
+ }
74
+ /**
75
+ * 检查平台是否启用
76
+ *
77
+ * @param platformId - 平台唯一标识
78
+ * @returns 是否启用
79
+ */
80
+ export function isEnabled(platformId) {
81
+ // 未注册的平台视为禁用
82
+ if (!registry.has(platformId)) {
83
+ return false;
84
+ }
85
+ return isPlatformEnabled(platformId);
86
+ }
87
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/platform/registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,SAAS;AACT,MAAM,mBAAmB,GAAG,WAAW,CAAC;AACxC,MAAM,cAAc,GAAG,UAAU,CAAC;AAElC,MAAM;AACN,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAwB;IAC/C,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC;IAEpC,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,MAAM,UAAU,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACpC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,GAAG,CAAC,UAAkB;IACpC,OAAO,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAClC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,IAAI;IAClB,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;AACvC,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,iBAAiB,CAAC,UAAkB;IAC3C,MAAM,MAAM,GAAG,GAAG,mBAAmB,GAAG,UAAU,CAAC,WAAW,EAAE,GAAG,cAAc,EAAE,CAAC;IACpF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAErC,iBAAiB;IACjB,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACjD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACzD,CAAC;IAED,0BAA0B;IAC1B,OAAO,UAAU,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC;AAC/C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW;IACzB,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CACzC,OAAO,CAAC,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAC/C,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,UAAkB;IAC1C,aAAa;IACb,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,iBAAiB,CAAC,UAAU,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * 平台标识符
3
+ */
4
+ export type PlatformId = 'feishu' | 'discord' | string;
5
+ /**
6
+ * 聊天类型
7
+ */
8
+ export type ChatType = 'p2p' | 'group';
9
+ /**
10
+ * 发送者类型
11
+ */
12
+ export type SenderType = 'user' | 'bot';
13
+ /**
14
+ * 平台消息事件(入站消息的通用抽象)
15
+ */
16
+ export interface PlatformMessageEvent {
17
+ platform: PlatformId;
18
+ conversationId: string;
19
+ messageId: string;
20
+ senderId: string;
21
+ senderType: SenderType;
22
+ content: string;
23
+ msgType: string;
24
+ threadId?: string;
25
+ chatType?: ChatType;
26
+ attachments?: PlatformAttachment[];
27
+ mentions?: PlatformMention[];
28
+ rawEvent: unknown;
29
+ }
30
+ /**
31
+ * 平台附件
32
+ */
33
+ export interface PlatformAttachment {
34
+ type: 'image' | 'file';
35
+ fileKey: string;
36
+ fileName?: string;
37
+ fileType?: string;
38
+ fileSize?: number;
39
+ }
40
+ /**
41
+ * 平台提及信息
42
+ */
43
+ export interface PlatformMention {
44
+ key: string;
45
+ id: {
46
+ [key: string]: string;
47
+ };
48
+ name: string;
49
+ }
50
+ /**
51
+ * 平台动作事件(卡片/按钮点击等交互)
52
+ */
53
+ export interface PlatformActionEvent {
54
+ platform: PlatformId;
55
+ senderId: string;
56
+ action: {
57
+ tag: string;
58
+ value: Record<string, unknown>;
59
+ };
60
+ token: string;
61
+ messageId?: string;
62
+ conversationId?: string;
63
+ threadId?: string;
64
+ rawEvent: unknown;
65
+ }
66
+ /**
67
+ * 平台输出发送器接口(出站消息抽象)
68
+ */
69
+ export interface PlatformSender {
70
+ sendText(conversationId: string, text: string): Promise<string | null>;
71
+ sendCard(conversationId: string, card: object): Promise<string | null>;
72
+ updateCard(messageId: string, card: object): Promise<boolean>;
73
+ deleteMessage(messageId: string): Promise<boolean>;
74
+ reply?(messageId: string, text: string): Promise<string | null>;
75
+ replyCard?(messageId: string, card: object): Promise<string | null>;
76
+ }
77
+ /**
78
+ * 平台适配器接口(入站事件接收 + 出站发送)
79
+ */
80
+ export interface PlatformAdapter {
81
+ readonly platform: PlatformId;
82
+ start(): Promise<void>;
83
+ stop(): void;
84
+ getSender(): PlatformSender;
85
+ onMessage(callback: (event: PlatformMessageEvent) => void): void;
86
+ onAction(callback: (event: PlatformActionEvent) => void): void;
87
+ onChatUnavailable?(callback: (conversationId: string) => void): void;
88
+ onMessageRecalled?(callback: (event: unknown) => void): void;
89
+ onMemberLeft?(callback: (conversationId: string, memberId: string) => void): void;
90
+ onChatDisbanded?(callback: (conversationId: string) => void): void;
91
+ }
92
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/platform/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ // 平台通用事件与适配器接口定义
2
+ // 保持最小化字段集合,支持 Feishu 事件 1:1 映射
3
+ export {};
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/platform/types.ts"],"names":[],"mappings":"AAAA,iBAAiB;AACjB,gCAAgC"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * 结构化审计日志模块
3
+ *
4
+ * 功能特性:
5
+ * - JSONL 格式(每行一个 JSON 对象),便于追加和解析
6
+ * - 原子写入模式(先写 tmp 文件,再 rename),防止崩溃导致数据损坏
7
+ * - 敏感字段自动脱敏(password、token、OPENCODE_SERVER_PASSWORD 等)
8
+ * - 支持按日期滚动的文件命名
9
+ * - 完整的字段完整性保证
10
+ */
11
+ /**
12
+ * 审计事件分类
13
+ */
14
+ export type AuditClassification = 'permission' | 'question' | 'config' | 'session' | 'security' | 'system' | 'error';
15
+ /**
16
+ * 审计决策类型
17
+ */
18
+ export type AuditDecision = 'allow' | 'deny' | 'answer' | 'skip' | 'update' | 'create' | 'delete' | 'rollback';
19
+ /**
20
+ * 审计结果状态
21
+ */
22
+ export type AuditResult = 'success' | 'failed' | 'rejected' | 'timeout' | 'error';
23
+ /**
24
+ * 审计事件接口
25
+ */
26
+ export interface AuditEvent {
27
+ /** 唯一事件 ID */
28
+ incidentId: string;
29
+ /** 事件分类 */
30
+ classification: AuditClassification;
31
+ /** 决策类型 */
32
+ decision: AuditDecision;
33
+ /** 动作描述 */
34
+ action: string;
35
+ /** 结果状态 */
36
+ result: AuditResult;
37
+ /** ISO 8601 时间戳 */
38
+ timestamp: string;
39
+ /** 可选元数据(会自动脱敏敏感字段) */
40
+ metadata?: Record<string, unknown>;
41
+ }
42
+ /**
43
+ * 生成唯一的 incident ID
44
+ * @returns 格式:inc_<uuid>(去掉连字符)
45
+ */
46
+ export declare function generateIncidentId(): string;
47
+ /**
48
+ * 递归脱敏敏感字段
49
+ * @param data 原始数据对象
50
+ * @returns 脱敏后的新对象(不修改原对象)
51
+ */
52
+ export declare function redactSensitiveFields<T extends Record<string, unknown>>(data: T): T;
53
+ /**
54
+ * 审计日志记录器接口
55
+ */
56
+ export interface AuditLogger {
57
+ /**
58
+ * 记录审计事件
59
+ * @param event 审计事件
60
+ */
61
+ log(event: AuditEvent): Promise<void>;
62
+ }
63
+ /**
64
+ * 创建审计日志记录器
65
+ * @param logFilePath 日志文件路径
66
+ * @param useDateRotation 是否启用日期滚动(默认 false)
67
+ * @returns 审计日志记录器
68
+ */
69
+ export declare function auditLogger(logFilePath: string, useDateRotation?: boolean): AuditLogger;
70
+ /**
71
+ * 验证审计事件字段完整性
72
+ * @param event 审计事件
73
+ * @returns 验证结果(包含错误信息)
74
+ */
75
+ export declare function validateAuditEvent(event: Partial<AuditEvent>): {
76
+ valid: boolean;
77
+ errors: string[];
78
+ };
79
+ /**
80
+ * 解析 JSONL 日志文件
81
+ * @param filePath 日志文件路径
82
+ * @returns 审计事件数组
83
+ */
84
+ export declare function parseAuditLogFile(filePath: string): Promise<AuditEvent[]>;
85
+ declare const _default: {
86
+ auditLogger: typeof auditLogger;
87
+ generateIncidentId: typeof generateIncidentId;
88
+ redactSensitiveFields: typeof redactSensitiveFields;
89
+ validateAuditEvent: typeof validateAuditEvent;
90
+ parseAuditLogFile: typeof parseAuditLogFile;
91
+ };
92
+ export default _default;
93
+ //# sourceMappingURL=audit-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-log.d.ts","sourceRoot":"","sources":["../../src/reliability/audit-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAC3B,YAAY,GACZ,UAAU,GACV,QAAQ,GACR,SAAS,GACT,UAAU,GACV,QAAQ,GACR,OAAO,CAAC;AAEZ;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,OAAO,GACP,MAAM,GACN,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,UAAU,CAAC;AAEf;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB,SAAS,GACT,QAAQ,GACR,UAAU,GACV,SAAS,GACT,OAAO,CAAC;AAEZ;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,cAAc;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW;IACX,cAAc,EAAE,mBAAmB,CAAC;IACpC,WAAW;IACX,QAAQ,EAAE,aAAa,CAAC;IACxB,WAAW;IACX,MAAM,EAAE,MAAM,CAAC;IACf,WAAW;IACX,MAAM,EAAE,WAAW,CAAC;IACpB,mBAAmB;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAoBD;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAG3C;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAkCnF;AAoFD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,WAAW,EAAE,MAAM,EACnB,eAAe,GAAE,OAAe,GAC/B,WAAW,CAoCb;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CA0BnG;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAoB/E;;;;;;;;AAGD,wBAME"}