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,448 @@
1
+ import { outputConfig } from '../config.js';
2
+ export * from './cards.js';
3
+ function escapeCodeBlockContent(text) {
4
+ return text.replace(/```/g, '` ` `');
5
+ }
6
+ function truncateText(text, limit) {
7
+ if (text.length <= limit) {
8
+ return text;
9
+ }
10
+ return `${text.slice(0, limit)}...`;
11
+ }
12
+ function truncateMiddleText(text, limit) {
13
+ if (text.length <= limit) {
14
+ return text;
15
+ }
16
+ const marker = `\n...(中间省略 ${text.length - limit} 字)...\n`;
17
+ const available = Math.max(limit - marker.length, 200);
18
+ const headLength = Math.max(Math.floor(available * 0.55), 120);
19
+ const tailLength = Math.max(available - headLength, 80);
20
+ return `${text.slice(0, headLength)}${marker}${text.slice(-tailLength)}`;
21
+ }
22
+ function getToolStatusLabel(status) {
23
+ if (status === 'running') {
24
+ return { icon: '⏳', text: '执行中' };
25
+ }
26
+ if (status === 'completed') {
27
+ return { icon: '✅', text: '已完成' };
28
+ }
29
+ if (status === 'failed') {
30
+ return { icon: '❌', text: '失败' };
31
+ }
32
+ return { icon: '⏸️', text: '等待中' };
33
+ }
34
+ function getRiskLabel(risk) {
35
+ if (risk === 'high')
36
+ return '⚠️ 高风险';
37
+ if (risk === 'medium')
38
+ return '⚡ 中风险';
39
+ return '✅ 低风险';
40
+ }
41
+ const DEFAULT_STREAM_CARD_COMPONENT_BUDGET = 180;
42
+ const MIN_STREAM_CARD_COMPONENT_BUDGET = 20;
43
+ const MAX_TIMELINE_SEGMENTS = 60;
44
+ const MAX_REASONING_SEGMENT_LENGTH = 2600;
45
+ const MAX_TOOL_OUTPUT_LENGTH = 4000;
46
+ const MAX_TEXT_SEGMENT_LENGTH = 5000;
47
+ const MAX_THINKING_PANEL_LENGTH = 2600;
48
+ const MAX_BODY_TEXT_LENGTH = 6000;
49
+ function isHrElement(element) {
50
+ const value = element;
51
+ return value.tag === 'hr';
52
+ }
53
+ function countComponentTags(node) {
54
+ if (Array.isArray(node)) {
55
+ let total = 0;
56
+ for (const item of node) {
57
+ total += countComponentTags(item);
58
+ }
59
+ return total;
60
+ }
61
+ if (!node || typeof node !== 'object') {
62
+ return 0;
63
+ }
64
+ const record = node;
65
+ let total = typeof record.tag === 'string' ? 1 : 0;
66
+ for (const value of Object.values(record)) {
67
+ total += countComponentTags(value);
68
+ }
69
+ return total;
70
+ }
71
+ function normalizeElementPage(elements) {
72
+ const normalized = [];
73
+ for (const element of elements) {
74
+ if (isHrElement(element)) {
75
+ if (normalized.length === 0) {
76
+ continue;
77
+ }
78
+ const last = normalized[normalized.length - 1];
79
+ if (isHrElement(last)) {
80
+ continue;
81
+ }
82
+ }
83
+ normalized.push(element);
84
+ }
85
+ while (normalized.length > 0 && isHrElement(normalized[normalized.length - 1])) {
86
+ normalized.pop();
87
+ }
88
+ return normalized;
89
+ }
90
+ function paginateElementsByComponentBudget(elements, componentBudget) {
91
+ const safeBudget = Math.max(componentBudget, MIN_STREAM_CARD_COMPONENT_BUDGET);
92
+ const budgetForBody = Math.max(1, safeBudget - 1);
93
+ const pages = [];
94
+ let currentPage = [];
95
+ let currentCount = 0;
96
+ for (const element of elements) {
97
+ const componentCount = Math.max(1, countComponentTags(element));
98
+ if (currentPage.length > 0 && currentCount + componentCount > budgetForBody) {
99
+ const normalized = normalizeElementPage(currentPage);
100
+ if (normalized.length > 0) {
101
+ pages.push(normalized);
102
+ }
103
+ currentPage = [];
104
+ currentCount = 0;
105
+ }
106
+ currentPage.push(element);
107
+ currentCount += componentCount;
108
+ }
109
+ const normalized = normalizeElementPage(currentPage);
110
+ if (normalized.length > 0) {
111
+ pages.push(normalized);
112
+ }
113
+ if (pages.length === 0) {
114
+ pages.push([{ tag: 'markdown', content: '(无输出)' }]);
115
+ }
116
+ return pages;
117
+ }
118
+ function buildTimelineElements(segments, options) {
119
+ const elements = [];
120
+ const visibleSegments = segments.slice(-MAX_TIMELINE_SEGMENTS);
121
+ for (const segment of visibleSegments) {
122
+ let nextElement = null;
123
+ if (segment.type === 'reasoning') {
124
+ if (options?.showThinking === false) {
125
+ continue;
126
+ }
127
+ const text = segment.text.trim();
128
+ if (!text) {
129
+ continue;
130
+ }
131
+ const rendered = truncateMiddleText(text, MAX_REASONING_SEGMENT_LENGTH);
132
+ nextElement = {
133
+ tag: 'collapsible_panel',
134
+ expanded: false,
135
+ header: {
136
+ title: {
137
+ tag: 'plain_text',
138
+ content: `🤔 思考过程 (${rendered.length}字)`,
139
+ },
140
+ },
141
+ elements: [
142
+ {
143
+ tag: 'markdown',
144
+ content: `\`\`\`\n${escapeCodeBlockContent(rendered)}\n\`\`\``,
145
+ },
146
+ ],
147
+ };
148
+ }
149
+ else if (segment.type === 'tool') {
150
+ if (options?.showTools === false) {
151
+ continue;
152
+ }
153
+ const statusInfo = getToolStatusLabel(segment.status);
154
+ const toolKindLabel = segment.kind === 'subtask' ? '子任务' : '工具';
155
+ const output = segment.output?.trim() ? truncateMiddleText(segment.output.trim(), MAX_TOOL_OUTPUT_LENGTH) : '';
156
+ const panelElements = [
157
+ {
158
+ tag: 'markdown',
159
+ content: `状态:**${statusInfo.text}**`,
160
+ },
161
+ ];
162
+ if (output) {
163
+ panelElements.push({
164
+ tag: 'markdown',
165
+ content: `\`\`\`\n${escapeCodeBlockContent(output)}\n\`\`\``,
166
+ });
167
+ }
168
+ else if (segment.status === 'running' || segment.status === 'pending') {
169
+ panelElements.push({
170
+ tag: 'markdown',
171
+ content: '等待工具输出...',
172
+ });
173
+ }
174
+ nextElement = {
175
+ tag: 'collapsible_panel',
176
+ expanded: false,
177
+ header: {
178
+ title: {
179
+ tag: 'plain_text',
180
+ content: `${statusInfo.icon} ${toolKindLabel} · ${segment.name}`,
181
+ },
182
+ },
183
+ elements: panelElements,
184
+ };
185
+ }
186
+ else if (segment.type === 'text') {
187
+ if (!segment.text.trim()) {
188
+ continue;
189
+ }
190
+ const text = truncateMiddleText(segment.text, MAX_TEXT_SEGMENT_LENGTH);
191
+ nextElement = {
192
+ tag: 'markdown',
193
+ content: text,
194
+ };
195
+ }
196
+ else if (segment.type === 'note') {
197
+ const text = segment.text.trim();
198
+ if (!text) {
199
+ continue;
200
+ }
201
+ nextElement = {
202
+ tag: 'markdown',
203
+ content: truncateText(text, 800),
204
+ };
205
+ }
206
+ if (!nextElement) {
207
+ continue;
208
+ }
209
+ if (elements.length > 0) {
210
+ elements.push({ tag: 'hr' });
211
+ }
212
+ elements.push(nextElement);
213
+ }
214
+ return elements;
215
+ }
216
+ function buildPendingPermissionElements(permission) {
217
+ const blocks = [];
218
+ const toolName = permission.tool.trim() || 'unknown';
219
+ const description = truncateMiddleText(permission.description.trim() || '(无描述)', 1600);
220
+ const pendingCountText = permission.pendingCount && permission.pendingCount > 1
221
+ ? `\n> 当前待确认权限:${permission.pendingCount} 项(仅展示最早一项)`
222
+ : '';
223
+ blocks.push({ tag: 'hr' });
224
+ blocks.push({
225
+ tag: 'collapsible_panel',
226
+ expanded: true,
227
+ header: {
228
+ title: {
229
+ tag: 'plain_text',
230
+ content: `🔐 权限确认 · ${toolName}`,
231
+ },
232
+ },
233
+ elements: [
234
+ {
235
+ tag: 'markdown',
236
+ content: `风险等级:**${getRiskLabel(permission.risk)}**${pendingCountText}`,
237
+ },
238
+ {
239
+ tag: 'markdown',
240
+ content: `\`\`\`\n${escapeCodeBlockContent(description)}\n\`\`\``,
241
+ },
242
+ {
243
+ tag: 'markdown',
244
+ content: '请在群里回复:`允许` / `拒绝` / `始终允许`(也支持 `y` / `n` / `always`)',
245
+ },
246
+ ],
247
+ });
248
+ return blocks;
249
+ }
250
+ function buildPendingQuestionElements(question) {
251
+ const blocks = [];
252
+ const labels = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
253
+ const options = question.options.slice(0, 20);
254
+ const optionLines = options.map((item, index) => {
255
+ const number = index + 1;
256
+ const prefix = index < labels.length ? `${labels[index]}(${number}).` : `${number}.`;
257
+ const description = item.description?.trim() ? `: ${truncateText(item.description.trim(), 100)}` : '';
258
+ return `${prefix} **${item.label}**${description}`;
259
+ });
260
+ if (question.options.length > options.length) {
261
+ optionLines.push(`... 其余 ${question.options.length - options.length} 个选项已省略显示`);
262
+ }
263
+ const title = `**问题 ${question.questionIndex + 1}/${question.totalQuestions}**`;
264
+ const headerLine = question.header.trim();
265
+ const questionLine = question.question.trim();
266
+ const bodyLines = [title, headerLine, questionLine, optionLines.join('\n')].filter(line => line && line.trim()).join('\n\n');
267
+ const hint = question.multiple
268
+ ? '请直接回复:可多选(例如 A,C 或 1 3),不匹配选项会按自定义答案处理。'
269
+ : '请直接回复:单选可用 A 或 1,不匹配选项会按自定义答案处理。';
270
+ blocks.push({ tag: 'hr' });
271
+ blocks.push({
272
+ tag: 'collapsible_panel',
273
+ expanded: true,
274
+ header: {
275
+ title: {
276
+ tag: 'plain_text',
277
+ content: '🤝 问答交互',
278
+ },
279
+ },
280
+ elements: [
281
+ {
282
+ tag: 'markdown',
283
+ content: truncateMiddleText(bodyLines, 2600),
284
+ },
285
+ {
286
+ tag: 'markdown',
287
+ content: hint,
288
+ },
289
+ {
290
+ tag: 'markdown',
291
+ content: '输入"跳过"可跳过本题。',
292
+ },
293
+ ],
294
+ });
295
+ return blocks;
296
+ }
297
+ function buildStreamCardElements(data, options) {
298
+ const elements = [];
299
+ const thinkingText = data.thinking.trim();
300
+ const timelineElements = Array.isArray(data.segments) && data.segments.length > 0
301
+ ? buildTimelineElements(data.segments, { showThinking: options?.showThinking, showTools: options?.showTools })
302
+ : [];
303
+ if (timelineElements.length > 0) {
304
+ elements.push(...timelineElements);
305
+ }
306
+ const showThinking = options?.showThinking ?? true;
307
+ const showTools = options?.showTools ?? true;
308
+ if (timelineElements.length === 0) {
309
+ // 1. 思考过程(原生折叠面板)
310
+ if (thinkingText && showThinking) {
311
+ const renderedThinking = truncateMiddleText(thinkingText, MAX_THINKING_PANEL_LENGTH);
312
+ elements.push({
313
+ tag: 'collapsible_panel',
314
+ expanded: false,
315
+ header: {
316
+ title: {
317
+ tag: 'plain_text',
318
+ content: `🤔 思考过程 (${renderedThinking.length}字)`,
319
+ },
320
+ },
321
+ elements: [
322
+ {
323
+ tag: 'markdown',
324
+ content: `\`\`\`\n${escapeCodeBlockContent(renderedThinking)}\n\`\`\``,
325
+ },
326
+ ],
327
+ });
328
+ }
329
+ // 2. 工具调用列表
330
+ if (data.tools.length > 0 && showTools) {
331
+ if (elements.length > 0) {
332
+ elements.push({ tag: 'hr' });
333
+ }
334
+ const toolLines = data.tools.map(tool => {
335
+ const icon = tool.status === 'running' ? '⏳' : tool.status === 'completed' ? '✅' : tool.status === 'failed' ? '❌' : '⏸️';
336
+ let line = `${icon} **${tool.name}**`;
337
+ if (tool.output) {
338
+ const output = tool.output.length > 200 ? tool.output.slice(0, 200) + '...' : tool.output;
339
+ line += `\n> ${output.replace(/\n/g, '\n> ')}`;
340
+ }
341
+ return line;
342
+ });
343
+ elements.push({
344
+ tag: 'markdown',
345
+ content: toolLines.join('\n\n'),
346
+ });
347
+ }
348
+ // 3. 正文
349
+ if (data.text) {
350
+ if (elements.length > 0) {
351
+ elements.push({ tag: 'hr' });
352
+ }
353
+ elements.push({
354
+ tag: 'markdown',
355
+ content: truncateMiddleText(data.text, MAX_BODY_TEXT_LENGTH),
356
+ });
357
+ }
358
+ else if (data.status === 'processing') {
359
+ if (elements.length > 0) {
360
+ elements.push({ tag: 'hr' });
361
+ }
362
+ elements.push({
363
+ tag: 'markdown',
364
+ content: '▋',
365
+ });
366
+ }
367
+ else if (elements.length === 0) {
368
+ elements.push({
369
+ tag: 'markdown',
370
+ content: '(无输出)',
371
+ });
372
+ }
373
+ }
374
+ else if (data.status === 'processing') {
375
+ if (elements.length > 0) {
376
+ elements.push({ tag: 'hr' });
377
+ }
378
+ elements.push({
379
+ tag: 'markdown',
380
+ content: '▋',
381
+ });
382
+ }
383
+ if (elements.length === 0) {
384
+ elements.push({
385
+ tag: 'markdown',
386
+ content: '(无输出)',
387
+ });
388
+ }
389
+ if (data.pendingPermission) {
390
+ elements.push(...buildPendingPermissionElements(data.pendingPermission));
391
+ }
392
+ if (data.pendingQuestion) {
393
+ elements.push(...buildPendingQuestionElements(data.pendingQuestion));
394
+ }
395
+ return elements;
396
+ }
397
+ function buildStreamCardPayload(elements, statusText, statusColor) {
398
+ const normalizedElements = elements.length > 0
399
+ ? elements
400
+ : [{ tag: 'markdown', content: '(无输出)' }];
401
+ return {
402
+ schema: '2.0',
403
+ config: {
404
+ wide_screen_mode: true,
405
+ },
406
+ header: {
407
+ title: {
408
+ tag: 'plain_text',
409
+ content: statusText,
410
+ },
411
+ template: statusColor,
412
+ },
413
+ body: {
414
+ elements: normalizedElements,
415
+ },
416
+ };
417
+ }
418
+ function getFeishuVisibilityOptions() {
419
+ return {
420
+ showThinking: outputConfig.feishu.showThinkingChain,
421
+ showTools: outputConfig.feishu.showToolChain,
422
+ };
423
+ }
424
+ export function buildStreamCards(data, options) {
425
+ const visibilityOptions = getFeishuVisibilityOptions();
426
+ const allElements = buildStreamCardElements(data, visibilityOptions);
427
+ const statusColor = data.status === 'processing'
428
+ ? 'blue'
429
+ : data.status === 'completed'
430
+ ? 'green'
431
+ : 'red';
432
+ const baseStatusText = data.status === 'processing' ? '处理中...' : data.status === 'completed' ? '已完成' : '失败';
433
+ const componentBudget = typeof options?.componentBudget === 'number' && Number.isFinite(options.componentBudget)
434
+ ? Math.floor(options.componentBudget)
435
+ : DEFAULT_STREAM_CARD_COMPONENT_BUDGET;
436
+ const pages = paginateElementsByComponentBudget(allElements, componentBudget);
437
+ if (pages.length <= 1) {
438
+ return [buildStreamCardPayload(pages[0], baseStatusText, statusColor)];
439
+ }
440
+ return pages.map((pageElements, index) => {
441
+ const statusText = `${baseStatusText}(${index + 1}/${pages.length})`;
442
+ return buildStreamCardPayload(pageElements, statusText, statusColor);
443
+ });
444
+ }
445
+ export function buildStreamCard(data) {
446
+ return buildStreamCards(data)[0];
447
+ }
448
+ //# sourceMappingURL=cards-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cards-stream.js","sourceRoot":"","sources":["../../src/feishu/cards-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,cAAc,YAAY,CAAC;AAsE3B,SAAS,sBAAsB,CAAC,IAAY;IAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,KAAa;IAC/C,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC;AACtC,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY,EAAE,KAAa;IACrD,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,IAAI,CAAC,MAAM,GAAG,KAAK,UAAU,CAAC;IAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,UAAU,EAAE,EAAE,CAAC,CAAC;IACxD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;AAC3E,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAiC;IAC3D,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACpC,CAAC;IACD,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QAC3B,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACpC,CAAC;IACD,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACnC,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACrC,CAAC;AAED,SAAS,YAAY,CAAC,IAAa;IACjC,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,QAAQ,CAAC;IACrC,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IACtC,OAAO,OAAO,CAAC;AACjB,CAAC;AAMD,MAAM,oCAAoC,GAAG,GAAG,CAAC;AACjD,MAAM,gCAAgC,GAAG,EAAE,CAAC;AAC5C,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACjC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAC1C,MAAM,sBAAsB,GAAG,IAAI,CAAC;AACpC,MAAM,uBAAuB,GAAG,IAAI,CAAC;AACrC,MAAM,yBAAyB,GAAG,IAAI,CAAC;AACvC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAElC,SAAS,WAAW,CAAC,OAAe;IAClC,MAAM,KAAK,GAAG,OAA4B,CAAC;IAC3C,OAAO,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC;AAC5B,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAa;IACvC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACxB,KAAK,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,MAAM,GAAG,IAA+B,CAAC;IAC/C,IAAI,KAAK,GAAG,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1C,KAAK,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAkB;IAC9C,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5B,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC/C,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtB,SAAS;YACX,CAAC;QACH,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,UAAU,CAAC,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,iCAAiC,CAAC,QAAkB,EAAE,eAAuB;IACpF,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,gCAAgC,CAAC,CAAC;IAC/E,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC;IAClD,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,IAAI,WAAW,GAAa,EAAE,CAAC;IAC/B,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;QAEhE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,GAAG,cAAc,GAAG,aAAa,EAAE,CAAC;YAC5E,MAAM,UAAU,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;YACrD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACzB,CAAC;YACD,WAAW,GAAG,EAAE,CAAC;YACjB,YAAY,GAAG,CAAC,CAAC;QACnB,CAAC;QAED,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1B,YAAY,IAAI,cAAc,CAAC;IACjC,CAAC;IAED,MAAM,UAAU,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACrD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,qBAAqB,CAC5B,QAA6B,EAC7B,OAAyD;IAEzD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,qBAAqB,CAAC,CAAC;IAE/D,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACtC,IAAI,WAAW,GAAkB,IAAI,CAAC;QAEtC,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACjC,IAAI,OAAO,EAAE,YAAY,KAAK,KAAK,EAAE,CAAC;gBACpC,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,SAAS;YACX,CAAC;YAED,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,EAAE,4BAA4B,CAAC,CAAC;YACxE,WAAW,GAAG;gBACZ,GAAG,EAAE,mBAAmB;gBACxB,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE;oBACN,KAAK,EAAE;wBACL,GAAG,EAAE,YAAY;wBACjB,OAAO,EAAE,YAAY,QAAQ,CAAC,MAAM,IAAI;qBACzC;iBACF;gBACD,QAAQ,EAAE;oBACR;wBACE,GAAG,EAAE,UAAU;wBACf,OAAO,EAAE,WAAW,sBAAsB,CAAC,QAAQ,CAAC,UAAU;qBAC/D;iBACF;aACF,CAAC;QACJ,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACnC,IAAI,OAAO,EAAE,SAAS,KAAK,KAAK,EAAE,CAAC;gBACjC,SAAS;YACX,CAAC;YACD,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACtD,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;YAChE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/G,MAAM,aAAa,GAAa;gBAC9B;oBACE,GAAG,EAAE,UAAU;oBACf,OAAO,EAAE,QAAQ,UAAU,CAAC,IAAI,IAAI;iBACrC;aACF,CAAC;YAEF,IAAI,MAAM,EAAE,CAAC;gBACX,aAAa,CAAC,IAAI,CAAC;oBACjB,GAAG,EAAE,UAAU;oBACf,OAAO,EAAE,WAAW,sBAAsB,CAAC,MAAM,CAAC,UAAU;iBAC7D,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACxE,aAAa,CAAC,IAAI,CAAC;oBACjB,GAAG,EAAE,UAAU;oBACf,OAAO,EAAE,WAAW;iBACrB,CAAC,CAAC;YACL,CAAC;YAED,WAAW,GAAG;gBACZ,GAAG,EAAE,mBAAmB;gBACxB,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE;oBACN,KAAK,EAAE;wBACL,GAAG,EAAE,YAAY;wBACjB,OAAO,EAAE,GAAG,UAAU,CAAC,IAAI,IAAI,aAAa,MAAM,OAAO,CAAC,IAAI,EAAE;qBACjE;iBACF;gBACD,QAAQ,EAAE,aAAa;aACxB,CAAC;QACJ,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBACzB,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;YACvE,WAAW,GAAG;gBACZ,GAAG,EAAE,UAAU;gBACf,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,SAAS;YACX,CAAC;YACD,WAAW,GAAG;gBACZ,GAAG,EAAE,UAAU;gBACf,OAAO,EAAE,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC;aACjC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,SAAS;QACX,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/B,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,8BAA8B,CAAC,UAAuC;IAC7E,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;IACrD,MAAM,WAAW,GAAG,kBAAkB,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,OAAO,EAAE,IAAI,CAAC,CAAC;IACvF,MAAM,gBAAgB,GAAG,UAAU,CAAC,YAAY,IAAI,UAAU,CAAC,YAAY,GAAG,CAAC;QAC7E,CAAC,CAAC,eAAe,UAAU,CAAC,YAAY,aAAa;QACrD,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3B,MAAM,CAAC,IAAI,CAAC;QACV,GAAG,EAAE,mBAAmB;QACxB,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE;YACN,KAAK,EAAE;gBACL,GAAG,EAAE,YAAY;gBACjB,OAAO,EAAE,aAAa,QAAQ,EAAE;aACjC;SACF;QACD,QAAQ,EAAE;YACR;gBACE,GAAG,EAAE,UAAU;gBACf,OAAO,EAAE,UAAU,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,gBAAgB,EAAE;aACxE;YACD;gBACE,GAAG,EAAE,UAAU;gBACf,OAAO,EAAE,WAAW,sBAAsB,CAAC,WAAW,CAAC,UAAU;aAClE;YACD;gBACE,GAAG,EAAE,UAAU;gBACf,OAAO,EAAE,uDAAuD;aACjE;SACF;KACF,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CAAC,QAAmC;IACvE,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,4BAA4B,CAAC;IAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC9C,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC;QACzB,MAAM,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC;QACrF,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtG,OAAO,GAAG,MAAM,MAAM,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;IACH,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC7C,WAAW,CAAC,IAAI,CAAC,UAAU,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,WAAW,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,QAAQ,CAAC,aAAa,GAAG,CAAC,IAAI,QAAQ,CAAC,cAAc,IAAI,CAAC;IAChF,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1C,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC9C,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7H,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ;QAC5B,CAAC,CAAC,yCAAyC;QAC3C,CAAC,CAAC,kCAAkC,CAAC;IAEvC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3B,MAAM,CAAC,IAAI,CAAC;QACV,GAAG,EAAE,mBAAmB;QACxB,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE;YACN,KAAK,EAAE;gBACL,GAAG,EAAE,YAAY;gBACjB,OAAO,EAAE,SAAS;aACnB;SACF;QACD,QAAQ,EAAE;YACR;gBACE,GAAG,EAAE,UAAU;gBACf,OAAO,EAAE,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC;aAC7C;YACD;gBACE,GAAG,EAAE,UAAU;gBACf,OAAO,EAAE,IAAI;aACd;YACD;gBACE,GAAG,EAAE,UAAU;gBACf,OAAO,EAAE,cAAc;aACxB;SACF;KACF,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,uBAAuB,CAC9B,IAAoB,EACpB,OAAyD;IAEzD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAE1C,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;QAC/E,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QAC9G,CAAC,CAAC,EAAE,CAAC;IAEP,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,QAAQ,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,IAAI,IAAI,CAAC;IACnD,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC;IAE7C,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,kBAAkB;QAClB,IAAI,YAAY,IAAI,YAAY,EAAE,CAAC;YACjC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,YAAY,EAAE,yBAAyB,CAAC,CAAC;YACrF,QAAQ,CAAC,IAAI,CAAC;gBACZ,GAAG,EAAE,mBAAmB;gBACxB,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE;oBACN,KAAK,EAAE;wBACL,GAAG,EAAE,YAAY;wBACjB,OAAO,EAAE,YAAY,gBAAgB,CAAC,MAAM,IAAI;qBACjD;iBACF;gBACD,QAAQ,EAAE;oBACR;wBACE,GAAG,EAAE,UAAU;wBACf,OAAO,EAAE,WAAW,sBAAsB,CAAC,gBAAgB,CAAC,UAAU;qBACvE;iBACF;aACF,CAAC,CAAC;QACL,CAAC;QAED,YAAY;QACZ,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,EAAE,CAAC;YACvC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/B,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACtC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;gBACzH,IAAI,IAAI,GAAG,GAAG,IAAI,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC;gBACtC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBAChB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;oBAC1F,IAAI,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;gBACjD,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,IAAI,CAAC;gBACZ,GAAG,EAAE,UAAU;gBACf,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;aAChC,CAAC,CAAC;QACL,CAAC;QAED,QAAQ;QACR,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/B,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC;gBACZ,GAAG,EAAE,UAAU;gBACf,OAAO,EAAE,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC;aAC7D,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YACxC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/B,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC;gBACZ,GAAG,EAAE,UAAU;gBACf,OAAO,EAAE,GAAG;aACb,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,QAAQ,CAAC,IAAI,CAAC;gBACZ,GAAG,EAAE,UAAU;gBACf,OAAO,EAAE,OAAO;aACjB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;SAAM,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;QACxC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/B,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC;YACZ,GAAG,EAAE,UAAU;YACf,OAAO,EAAE,GAAG;SACb,CAAC,CAAC;IACL,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,QAAQ,CAAC,IAAI,CAAC;YACZ,GAAG,EAAE,UAAU;YACf,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,GAAG,8BAA8B,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,QAAQ,CAAC,IAAI,CAAC,GAAG,4BAA4B,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,sBAAsB,CAC7B,QAAkB,EAClB,UAAkB,EAClB,WAAqC;IAErC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;QAC5C,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAE5C,OAAO;QACL,MAAM,EAAE,KAAK;QACb,MAAM,EAAE;YACN,gBAAgB,EAAE,IAAI;SACvB;QACD,MAAM,EAAE;YACN,KAAK,EAAE;gBACL,GAAG,EAAE,YAAY;gBACjB,OAAO,EAAE,UAAU;aACpB;YACD,QAAQ,EAAE,WAAW;SACtB;QACD,IAAI,EAAE;YACJ,QAAQ,EAAE,kBAAkB;SAC7B;KACF,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B;IACjC,OAAO;QACL,YAAY,EAAE,YAAY,CAAC,MAAM,CAAC,iBAAiB;QACnD,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC,aAAa;KAC7C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAoB,EAAE,OAAgC;IACrF,MAAM,iBAAiB,GAAG,0BAA0B,EAAE,CAAC;IACvD,MAAM,WAAW,GAAG,uBAAuB,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;IACrE,MAAM,WAAW,GAA6B,IAAI,CAAC,MAAM,KAAK,YAAY;QACxE,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,WAAW;YAC3B,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,KAAK,CAAC;IACZ,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAE5G,MAAM,eAAe,GAAG,OAAO,OAAO,EAAE,eAAe,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC;QAC9G,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;QACrC,CAAC,CAAC,oCAAoC,CAAC;IACzC,MAAM,KAAK,GAAG,iCAAiC,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAE9E,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE;QACvC,MAAM,UAAU,GAAG,GAAG,cAAc,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QACrE,OAAO,sBAAsB,CAAC,YAAY,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAoB;IAClD,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,81 @@
1
+ export interface PermissionCardData {
2
+ tool: string;
3
+ description: string;
4
+ risk?: string;
5
+ sessionId: string;
6
+ permissionId: string;
7
+ }
8
+ export declare function buildPermissionCard(data: PermissionCardData): object;
9
+ export interface StatusCardData {
10
+ status: 'running' | 'completed' | 'failed' | 'aborted';
11
+ sessionId: string;
12
+ currentTool?: string;
13
+ progress?: string;
14
+ output?: string;
15
+ }
16
+ export declare function buildStatusCard(data: StatusCardData): object;
17
+ export interface ControlCardData {
18
+ conversationKey: string;
19
+ chatId: string;
20
+ chatType: 'p2p' | 'group';
21
+ currentModel?: string;
22
+ currentAgent?: string;
23
+ currentEffort?: string;
24
+ models: Array<{
25
+ label: string;
26
+ value: string;
27
+ }>;
28
+ agents: Array<{
29
+ label: string;
30
+ value: string;
31
+ }>;
32
+ }
33
+ export declare function buildControlCard(data: ControlCardData): object;
34
+ export interface QuestionOption {
35
+ label: string;
36
+ description: string;
37
+ }
38
+ export interface QuestionInfo {
39
+ question: string;
40
+ header: string;
41
+ options: QuestionOption[];
42
+ multiple?: boolean;
43
+ custom?: boolean;
44
+ }
45
+ export interface QuestionCardData {
46
+ requestId: string;
47
+ sessionId: string;
48
+ questions: QuestionInfo[];
49
+ conversationKey: string;
50
+ chatId: string;
51
+ draftAnswers?: string[][];
52
+ draftCustomAnswers?: string[];
53
+ pendingCustomQuestionIndex?: number;
54
+ currentQuestionIndex?: number;
55
+ optionPageIndexes?: number[];
56
+ }
57
+ export declare const QUESTION_OPTION_PAGE_SIZE = 15;
58
+ export declare function buildQuestionCardV2(data: QuestionCardData): object;
59
+ export declare function buildQuestionAnsweredCard(answers: string[][]): object;
60
+ export declare function buildQuestionAnsweredCardSimple(answer: string): object;
61
+ export declare const CREATE_CHAT_NEW_SESSION_VALUE = "__new_session__";
62
+ export interface CreateChatSessionOption {
63
+ label: string;
64
+ value: string;
65
+ }
66
+ export interface CreateChatCardData {
67
+ selectedSessionId?: string;
68
+ sessionOptions: CreateChatSessionOption[];
69
+ totalSessionCount?: number;
70
+ manualBindEnabled: boolean;
71
+ projectOptions?: Array<{
72
+ name: string;
73
+ directory: string;
74
+ source: 'alias' | 'history';
75
+ }>;
76
+ allowCustomPath?: boolean;
77
+ chatNameInput?: string;
78
+ }
79
+ export declare function buildCreateChatCard(data: CreateChatCardData): object;
80
+ export declare function buildWelcomeCard(userName: string, createChatData?: CreateChatCardData): object;
81
+ //# sourceMappingURL=cards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cards.d.ts","sourceRoot":"","sources":["../../src/feishu/cards.ts"],"names":[],"mappings":"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"}