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,31 @@
1
+ #!/usr/bin/env node
2
+
3
+ import path from 'node:path';
4
+
5
+ const argv = process.argv.slice(2);
6
+ const passthroughArgs = [];
7
+ let configDir = '';
8
+
9
+ for (let index = 0; index < argv.length; index += 1) {
10
+ const current = argv[index];
11
+ if (current === '--config-dir') {
12
+ configDir = argv[index + 1] || '';
13
+ index += 1;
14
+ continue;
15
+ }
16
+
17
+ if (current.startsWith('--config-dir=')) {
18
+ configDir = current.slice('--config-dir='.length);
19
+ continue;
20
+ }
21
+
22
+ passthroughArgs.push(current);
23
+ }
24
+
25
+ if (configDir) {
26
+ process.env.OPENCODE_BRIDGE_CONFIG_DIR = path.resolve(configDir);
27
+ }
28
+
29
+ process.argv = [process.argv[0], process.argv[1], ...passthroughArgs];
30
+
31
+ await import('../dist/index.js');
@@ -0,0 +1,9 @@
1
+ export declare const KNOWN_EFFORT_LEVELS: readonly ["none", "minimal", "low", "medium", "high", "max", "xhigh"];
2
+ export type EffortLevel = typeof KNOWN_EFFORT_LEVELS[number];
3
+ export declare function normalizeEffortLevel(value: string): EffortLevel | undefined;
4
+ export interface PromptEffortPrefixResult {
5
+ text: string;
6
+ effort?: EffortLevel;
7
+ }
8
+ export declare function stripPromptEffortPrefix(text: string): PromptEffortPrefixResult;
9
+ //# sourceMappingURL=effort.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effort.d.ts","sourceRoot":"","sources":["../../src/commands/effort.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,uEAQtB,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAqB7D,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAgB3E;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,wBAAwB,CAiB9E"}
@@ -0,0 +1,56 @@
1
+ export const KNOWN_EFFORT_LEVELS = [
2
+ 'none',
3
+ 'minimal',
4
+ 'low',
5
+ 'medium',
6
+ 'high',
7
+ 'max',
8
+ 'xhigh',
9
+ ];
10
+ const EFFORT_ALIAS_MAP = {
11
+ none: 'none',
12
+ minimal: 'minimal',
13
+ low: 'low',
14
+ medium: 'medium',
15
+ high: 'high',
16
+ max: 'max',
17
+ xhigh: 'xhigh',
18
+ fast: 'low',
19
+ balanced: 'high',
20
+ deep: 'xhigh',
21
+ };
22
+ const KNOWN_EFFORT_LEVEL_SET = new Set(KNOWN_EFFORT_LEVELS);
23
+ function normalizeToken(value) {
24
+ return value.normalize('NFKC').trim().toLowerCase();
25
+ }
26
+ export function normalizeEffortLevel(value) {
27
+ const normalized = normalizeToken(value);
28
+ if (!normalized) {
29
+ return undefined;
30
+ }
31
+ const mapped = EFFORT_ALIAS_MAP[normalized];
32
+ if (mapped) {
33
+ return mapped;
34
+ }
35
+ if (KNOWN_EFFORT_LEVEL_SET.has(normalized)) {
36
+ return normalized;
37
+ }
38
+ return undefined;
39
+ }
40
+ export function stripPromptEffortPrefix(text) {
41
+ const trimmed = text.trim();
42
+ const matched = trimmed.match(/^#([^\s#]+)(?:\s+|$)/u);
43
+ if (!matched) {
44
+ return { text: trimmed };
45
+ }
46
+ const effort = normalizeEffortLevel(matched[1]);
47
+ if (!effort) {
48
+ return { text: trimmed };
49
+ }
50
+ const stripped = trimmed.slice(matched[0].length).trimStart();
51
+ return {
52
+ text: stripped,
53
+ effort,
54
+ };
55
+ }
56
+ //# sourceMappingURL=effort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effort.js","sourceRoot":"","sources":["../../src/commands/effort.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,MAAM;IACN,SAAS;IACT,KAAK;IACL,QAAQ;IACR,MAAM;IACN,KAAK;IACL,OAAO;CACC,CAAC;AAIX,MAAM,gBAAgB,GAAgC;IACpD,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,KAAK;IACX,QAAQ,EAAE,MAAM;IAChB,IAAI,EAAE,OAAO;CACd,CAAC;AAEF,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAS,mBAAmB,CAAC,CAAC;AAEpE,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,MAAM,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC5C,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3C,OAAO,UAAyB,CAAC;IACnC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAOD,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACvD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;IAC9D,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,MAAM;KACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { type EffortLevel } from './effort.js';
2
+ import { type CronIntentAction } from '../reliability/cron-control.js';
3
+ export type CommandType = 'prompt' | 'stop' | 'undo' | 'compact' | 'model' | 'agent' | 'role' | 'session' | 'project' | 'sessions' | 'clear' | 'panel' | 'effort' | 'admin' | 'help' | 'status' | 'command' | 'permission' | 'send' | 'rename' | 'cron' | 'restart';
4
+ export interface ParsedCommand {
5
+ type: CommandType;
6
+ text?: string;
7
+ modelName?: string;
8
+ agentName?: string;
9
+ roleAction?: 'create';
10
+ roleSpec?: string;
11
+ sessionAction?: 'new' | 'switch';
12
+ sessionId?: string;
13
+ sessionDirectory?: string;
14
+ sessionName?: string;
15
+ listAll?: boolean;
16
+ projectAction?: 'list' | 'default_set' | 'default_clear' | 'default_show';
17
+ projectValue?: string;
18
+ clearScope?: 'all' | 'free_session';
19
+ clearSessionId?: string;
20
+ permissionResponse?: 'y' | 'n' | 'yes' | 'no';
21
+ commandName?: string;
22
+ commandArgs?: string;
23
+ commandPrefix?: '/' | '!';
24
+ effortLevel?: EffortLevel;
25
+ effortRaw?: string;
26
+ effortReset?: boolean;
27
+ promptEffort?: EffortLevel;
28
+ adminAction?: 'add';
29
+ renameTitle?: string;
30
+ cronAction?: CronIntentAction;
31
+ cronArgs?: string;
32
+ cronSource?: 'slash' | 'natural';
33
+ restartTarget?: string;
34
+ }
35
+ export declare function parseCommand(text: string): ParsedCommand;
36
+ export declare function getHelpText(): string;
37
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/commands/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiD,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAC9F,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,gCAAgC,CAAC;AAGxC,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,MAAM,GACN,MAAM,GACN,SAAS,GACT,OAAO,GACP,OAAO,GACP,MAAM,GACN,SAAS,GACT,SAAS,GACT,UAAU,GACV,OAAO,GACP,OAAO,GACP,QAAQ,GACR,OAAO,GACP,MAAM,GACN,QAAQ,GACR,SAAS,GACT,YAAY,GACZ,MAAM,GACN,QAAQ,GACR,MAAM,GACN,SAAS,CAAC;AAGd,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,QAAQ,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,eAAe,GAAG,cAAc,CAAC;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,KAAK,GAAG,cAAc,CAAC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;IAC1B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAuED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAoRxD;AAGD,wBAAgB,WAAW,IAAI,MAAM,CAoDpC"}
@@ -0,0 +1,355 @@
1
+ import { normalizeEffortLevel, stripPromptEffortPrefix } from './effort.js';
2
+ import { buildCronHelpText, parseCronSlashIntent, } from '../reliability/cron-control.js';
3
+ const BANG_SHELL_ALLOWED_COMMANDS = new Set([
4
+ 'cd', 'ls', 'pwd', 'mkdir', 'rmdir',
5
+ 'touch', 'cp', 'mv', 'rm',
6
+ 'cat', 'head', 'tail', 'wc', 'sort', 'uniq', 'cut',
7
+ 'grep', 'find', 'tree',
8
+ 'du', 'df', 'which', 'whereis', 'whoami',
9
+ 'ps', 'kill', 'date', 'echo', 'env', 'printenv',
10
+ 'chmod', 'chown', 'ln', 'stat',
11
+ 'tar', 'zip', 'unzip', 'gzip', 'gunzip',
12
+ 'git',
13
+ ]);
14
+ const BANG_SHELL_BLOCKED_COMMANDS = new Set([
15
+ 'vi', 'vim', 'nvim', 'nano',
16
+ ]);
17
+ // 命令解析器
18
+ function isSlashCommandToken(token) {
19
+ const normalized = token.trim();
20
+ if (!normalized) {
21
+ return false;
22
+ }
23
+ // 路径通常包含 / 或 \\,应当按普通文本处理
24
+ if (normalized.includes('/') || normalized.includes('\\')) {
25
+ return false;
26
+ }
27
+ // 仅允许常见命令字符:字母/数字/下划线/连字符/点/问号/中文
28
+ return /^[\p{L}\p{N}_.?-]+$/u.test(normalized);
29
+ }
30
+ function parseBangShellCommand(trimmed) {
31
+ if (!trimmed.startsWith('!')) {
32
+ return null;
33
+ }
34
+ const body = trimmed.slice(1).trimStart();
35
+ if (!body || body.includes('\n')) {
36
+ return null;
37
+ }
38
+ const parts = body.split(/\s+/);
39
+ const first = parts[0]?.trim().toLowerCase() || '';
40
+ if (!first) {
41
+ return null;
42
+ }
43
+ // 路径/复杂 token(如 !/tmp/a.sh)按普通文本处理,避免误判
44
+ if (!/^[a-z][a-z0-9._-]*$/i.test(first)) {
45
+ return null;
46
+ }
47
+ if (BANG_SHELL_BLOCKED_COMMANDS.has(first)) {
48
+ return null;
49
+ }
50
+ if (!BANG_SHELL_ALLOWED_COMMANDS.has(first)) {
51
+ return null;
52
+ }
53
+ return {
54
+ type: 'command',
55
+ commandName: '!',
56
+ commandArgs: body,
57
+ commandPrefix: '!',
58
+ };
59
+ }
60
+ export function parseCommand(text) {
61
+ const trimmed = text.trim();
62
+ const lower = trimmed.toLowerCase();
63
+ // ! 开头的 shell 透传(白名单)
64
+ const bangCommand = parseBangShellCommand(trimmed);
65
+ if (bangCommand) {
66
+ return bangCommand;
67
+ }
68
+ // 中文自然语言创建角色(不带 /)
69
+ const textRoleCreateMatch = trimmed.match(/^创建角色\s+([\s\S]+)$/);
70
+ if (textRoleCreateMatch) {
71
+ return {
72
+ type: 'role',
73
+ roleAction: 'create',
74
+ roleSpec: textRoleCreateMatch[1].trim(),
75
+ };
76
+ }
77
+ // 中文自然语言发送文件(不带 /)
78
+ const sendFileMatch = trimmed.match(/^发送文件\s+([\s\S]+)$/);
79
+ if (sendFileMatch) {
80
+ return { type: 'send', text: sendFileMatch[1].trim() };
81
+ }
82
+ // 中文自然语言新建会话窗口(不带 /)
83
+ if (trimmed === '新建会话窗口' || trimmed === '创建新会话') {
84
+ return {
85
+ type: 'session',
86
+ sessionAction: 'new',
87
+ };
88
+ }
89
+ // 权限响应(单独处理y/n)
90
+ if (lower === 'y' || lower === 'yes') {
91
+ return { type: 'permission', permissionResponse: 'y' };
92
+ }
93
+ if (lower === 'n' || lower === 'no') {
94
+ return { type: 'permission', permissionResponse: 'n' };
95
+ }
96
+ // 斜杠命令
97
+ if (trimmed.startsWith('/')) {
98
+ const body = trimmed.slice(1).trimStart();
99
+ if (!body) {
100
+ return { type: 'prompt', text: trimmed };
101
+ }
102
+ const parts = body.split(/\s+/);
103
+ if (!isSlashCommandToken(parts[0])) {
104
+ return { type: 'prompt', text: trimmed };
105
+ }
106
+ const cmd = parts[0].toLowerCase();
107
+ const args = parts.slice(1);
108
+ const rawArgsText = body.slice(parts[0].length).trim();
109
+ if (cmd === 'cron') {
110
+ const cronIntent = parseCronSlashIntent(rawArgsText);
111
+ return {
112
+ type: 'cron',
113
+ cronAction: cronIntent.action,
114
+ cronArgs: cronIntent.argsText,
115
+ cronSource: 'slash',
116
+ };
117
+ }
118
+ if (cmd === 'restart') {
119
+ return {
120
+ type: 'restart',
121
+ restartTarget: args[0]?.trim().toLowerCase() || '',
122
+ };
123
+ }
124
+ switch (cmd) {
125
+ case 'stop':
126
+ case 'abort':
127
+ case 'cancel':
128
+ return { type: 'stop' };
129
+ case 'undo':
130
+ case 'revert':
131
+ return { type: 'undo' };
132
+ case 'model':
133
+ if (args.length > 0) {
134
+ return { type: 'model', modelName: args.join(' ') };
135
+ }
136
+ return { type: 'model' }; // 无参数时显示当前模型
137
+ case 'agent':
138
+ if (args.length > 0) {
139
+ return { type: 'agent', agentName: args.join(' ') };
140
+ }
141
+ return { type: 'agent' }; // 无参数时显示当前agent
142
+ case 'role':
143
+ case '角色': {
144
+ if (args.length > 0 && (args[0].toLowerCase() === 'create' || args[0] === '创建')) {
145
+ return {
146
+ type: 'role',
147
+ roleAction: 'create',
148
+ roleSpec: args.slice(1).join(' ').trim(),
149
+ };
150
+ }
151
+ return { type: 'role' };
152
+ }
153
+ case 'session':
154
+ if (args.length === 0) {
155
+ // 无参数的 /session 直接等同于 /sessions(向后兼容)
156
+ return { type: 'sessions', listAll: false };
157
+ }
158
+ if (args[0].toLowerCase() === 'new') {
159
+ const rest = args.slice(1);
160
+ // 解析可选的 --name <名称> 参数
161
+ let sessionName;
162
+ const nameIndex = rest.findIndex(arg => arg.toLowerCase() === '--name');
163
+ let remainingArgs = rest;
164
+ if (nameIndex !== -1) {
165
+ sessionName = rest.slice(nameIndex + 1).join(' ').trim() || undefined;
166
+ remainingArgs = rest.slice(0, nameIndex);
167
+ }
168
+ const sessionDirectory = remainingArgs.join(' ').trim();
169
+ return {
170
+ type: 'session',
171
+ sessionAction: 'new',
172
+ ...(sessionDirectory ? { sessionDirectory } : {}),
173
+ ...(sessionName ? { sessionName } : {}),
174
+ };
175
+ }
176
+ // 切换到指定会话
177
+ return { type: 'session', sessionAction: 'switch', sessionId: args[0] };
178
+ case 'sessions':
179
+ case 'list':
180
+ return { type: 'sessions', listAll: args.length > 0 && args[0].toLowerCase() === 'all' };
181
+ case 'project':
182
+ if (args.length === 0) {
183
+ return { type: 'project', projectAction: 'list' };
184
+ }
185
+ if (args[0].toLowerCase() === 'list') {
186
+ return { type: 'project', projectAction: 'list' };
187
+ }
188
+ if (args[0].toLowerCase() === 'default') {
189
+ if (args.length === 1) {
190
+ return { type: 'project', projectAction: 'default_show' };
191
+ }
192
+ const action = args[1].toLowerCase();
193
+ if (action === 'set') {
194
+ const projectValue = args.slice(2).join(' ').trim();
195
+ return {
196
+ type: 'project',
197
+ projectAction: 'default_set',
198
+ ...(projectValue ? { projectValue } : {}),
199
+ };
200
+ }
201
+ if (action === 'clear') {
202
+ return { type: 'project', projectAction: 'default_clear' };
203
+ }
204
+ return { type: 'project', projectAction: 'default_show' };
205
+ }
206
+ return { type: 'project' };
207
+ case 'clear':
208
+ case 'reset':
209
+ if (args.length > 0 && args[0].toLowerCase() === 'free' && args[1]?.toLowerCase() === 'session') {
210
+ return {
211
+ type: 'clear',
212
+ clearScope: 'free_session',
213
+ ...(args[2] ? { clearSessionId: args[2] } : {}),
214
+ };
215
+ }
216
+ if (args.length > 0 && args[0].toLowerCase() === 'free_session') {
217
+ return {
218
+ type: 'clear',
219
+ clearScope: 'free_session',
220
+ ...(args[1] ? { clearSessionId: args[1] } : {}),
221
+ };
222
+ }
223
+ return { type: 'clear' };
224
+ case 'clear_free_session':
225
+ case 'clear-free-session':
226
+ return {
227
+ type: 'clear',
228
+ clearScope: 'free_session',
229
+ ...(args[0] ? { clearSessionId: args[0] } : {}),
230
+ };
231
+ case 'panel':
232
+ case 'controls':
233
+ return { type: 'panel' };
234
+ case 'effort':
235
+ case 'strength': {
236
+ if (args.length === 0) {
237
+ return { type: 'effort' };
238
+ }
239
+ const rawEffort = args[0].trim();
240
+ const normalized = rawEffort.toLowerCase();
241
+ if (normalized === 'off' || normalized === 'reset' || normalized === 'default' || normalized === 'auto') {
242
+ return { type: 'effort', effortReset: true };
243
+ }
244
+ const effort = normalizeEffortLevel(rawEffort);
245
+ if (effort) {
246
+ return { type: 'effort', effortLevel: effort };
247
+ }
248
+ return {
249
+ type: 'effort',
250
+ effortRaw: rawEffort,
251
+ };
252
+ }
253
+ case 'fast':
254
+ return { type: 'effort', effortLevel: 'low' };
255
+ case 'balanced':
256
+ return { type: 'effort', effortLevel: 'high' };
257
+ case 'deep':
258
+ return { type: 'effort', effortLevel: 'xhigh' };
259
+ case 'make_admin':
260
+ case 'add_admin':
261
+ return { type: 'admin', adminAction: 'add' };
262
+ case 'help':
263
+ case 'h':
264
+ case '?':
265
+ return { type: 'help' };
266
+ case 'status':
267
+ return { type: 'status' };
268
+ case 'compact':
269
+ case 'session.compact':
270
+ return { type: 'compact' };
271
+ case 'send':
272
+ case 'send-file':
273
+ case 'sendfile':
274
+ case 'send_file':
275
+ return { type: 'send', text: args.join(' ') };
276
+ case 'rename': {
277
+ const renameTitle = args.join(' ').trim();
278
+ return {
279
+ type: 'rename',
280
+ ...(renameTitle ? { renameTitle } : {}),
281
+ };
282
+ }
283
+ default:
284
+ // 未知命令透传到OpenCode
285
+ return {
286
+ type: 'command',
287
+ commandName: cmd,
288
+ commandArgs: args.join(' '),
289
+ commandPrefix: '/',
290
+ };
291
+ }
292
+ }
293
+ // 普通消息
294
+ const promptResult = stripPromptEffortPrefix(trimmed);
295
+ return {
296
+ type: 'prompt',
297
+ text: promptResult.text,
298
+ ...(promptResult.effort ? { promptEffort: promptResult.effort } : {}),
299
+ };
300
+ }
301
+ // 生成帮助文本
302
+ export function getHelpText() {
303
+ const cronHelpBlock = buildCronHelpText('feishu');
304
+ return `📖 **飞书 × OpenCode 机器人指南**
305
+
306
+ 💬 **如何对话**
307
+ 群聊中 @机器人 或回复机器人消息,私聊中直接发送内容,即可与 AI 对话。
308
+
309
+ 🪄 **私聊首次使用**
310
+ 首次私聊会自动完成会话绑定(标题:私聊-MM-DD-HH-MM),并推送建群卡片、帮助文档和 /panel 卡片。
311
+
312
+ 🛠️ **常用命令**
313
+ • \`/model\` 查看当前模型
314
+ • \`/model <名称>\` 切换模型 (e.g. \`/model gpt-4\`)
315
+ • \`/agent\` 查看当前角色
316
+ • \`/agent <名称>\` 切换角色 (e.g. \`/agent general\`)
317
+ • \`/agent off\` 切回默认角色
318
+ • \`/effort\` 查看当前强度
319
+ • \`/effort <档位>\` 设置会话默认强度 (e.g. \`/effort high\`)
320
+ • \`/effort default\` 清除会话强度,恢复模型默认
321
+ • \`#xhigh 帮我深度分析这段代码\` 仅当前消息临时覆盖强度
322
+ • \`创建角色 名称=旅行助手; 描述=帮我做行程规划; 类型=主; 工具=webfetch\` 新建自定义角色
323
+ • \`/panel\` 推送交互式控制面板卡片 ✨
324
+ • \`/undo\` 撤回上一轮对话 (如果你发错或 AI 答错)
325
+ • \`/stop\` 停止当前正在生成的回答
326
+ • \`/compact\` 压缩当前会话上下文(调用 OpenCode summarize)
327
+
328
+ ⚙️ **会话管理**
329
+ • \`/session\` 或 \`/sessions\` 列出当前项目的会话;\`/sessions all\` 列出全部项目
330
+ • \`/session new\` 开启新话题(重置上下文);\`/session new <别名或路径>\` 指定项目
331
+ • \`/session new --name <名称>\` 创建时直接命名 (e.g. \`/session new --name 技术架构评审\`)
332
+ • \`/rename <新名称>\` 随时重命名当前会话 (e.g. \`/rename Q3后端API设计讨论\`)
333
+ • \`/session <sessionId>\` 手动绑定已有会话(需开启 \`ENABLE_MANUAL_SESSION_BIND\`)
334
+ • \`/create_chat\` 或 \`/建群\` 私聊中调出建群卡片(新建或绑定已有会话)
335
+ • \`/project list\` 列出可用项目;\`/project default\` 查看/设置/清除群默认项目
336
+ • \`/clear\` 等价 \`/session new\`;\`/clear free session\` 清理空闲群聊并手动扫描僵尸 Cron
337
+ • \`/status\` 查看当前绑定状态和群聊生命周期信息
338
+
339
+ 💡 **提示**
340
+ • 切换的模型/角色仅对**当前会话**生效。
341
+ • 强度优先级:\`#临时覆盖\` > \`/effort 会话默认\` > OpenCode 默认。
342
+ • \`/cron\` 支持自然语言,复杂语义默认交给 OpenCode 解析后再落盘为调度任务。
343
+ • Cron 默认绑定创建它的聊天窗口与当前 OpenCode 会话;如果当前聊天没有绑定会话,将拒绝创建。
344
+ • 其他未知 \`/xxx\` 命令会自动透传给 OpenCode(会话已绑定时生效)。
345
+ • 支持透传白名单 shell 命令:\`!cd\`、\`!ls\`、\`!mkdir\`、\`!rm\`、\`!cp\`、\`!mv\`、\`!git\` 等;\`!vi\` / \`!vim\` / \`!nano\` 不会透传。
346
+ • 如果遇到问题,试着使用 \`/panel\` 面板操作更方便。
347
+
348
+ 📤 **文件发送**
349
+ • \`/send <绝对路径>\` 直接发送文件到群聊 (e.g. \`/send /path/to/file.png\` 或 \`/send C:\\Users\\你\\Desktop\\图片.jpg\`)
350
+ • \`发送文件 <路径或描述>\` 中文自然语言触发(同上)
351
+ • \`/restart opencode\` 重启本地 OpenCode 进程(仅 loopback)
352
+
353
+ ${cronHelpBlock}`;
354
+ }
355
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/commands/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ export declare const routerConfig: {
2
+ mode: "legacy" | "dual" | "router";
3
+ enabledPlatforms: string[];
4
+ isPlatformEnabled(platformId: string): boolean;
5
+ };
6
+ export declare const feishuConfig: {
7
+ appId: string;
8
+ appSecret: string;
9
+ encryptKey: string | undefined;
10
+ verificationToken: string | undefined;
11
+ };
12
+ export declare const discordConfig: {
13
+ enabled: boolean;
14
+ token: string;
15
+ clientId: string;
16
+ allowedBotIds: string[];
17
+ };
18
+ export declare const groupConfig: {
19
+ requireMentionInGroup: boolean;
20
+ };
21
+ export declare const opencodeConfig: {
22
+ host: string;
23
+ port: number;
24
+ serverUsername: string;
25
+ serverPassword: string | undefined;
26
+ readonly baseUrl: string;
27
+ };
28
+ export declare const userConfig: {
29
+ allowedUsers: string[];
30
+ enableManualSessionBind: boolean;
31
+ readonly isWhitelistEnabled: boolean;
32
+ };
33
+ export declare const modelConfig: {
34
+ defaultProvider: string | undefined;
35
+ defaultModel: string | undefined;
36
+ };
37
+ export declare const permissionConfig: {
38
+ toolWhitelist: string[];
39
+ requestTimeout: number;
40
+ };
41
+ export declare const outputConfig: {
42
+ updateInterval: number;
43
+ maxMessageLength: number;
44
+ showThinkingChain: boolean;
45
+ showToolChain: boolean;
46
+ feishu: {
47
+ showThinkingChain: boolean;
48
+ showToolChain: boolean;
49
+ };
50
+ discord: {
51
+ showThinkingChain: boolean;
52
+ showToolChain: boolean;
53
+ };
54
+ };
55
+ export declare const attachmentConfig: {
56
+ maxSize: number;
57
+ };
58
+ export declare const directoryConfig: {
59
+ allowedDirectories: string[];
60
+ defaultWorkDirectory: string | undefined;
61
+ projectAliases: Record<string, string>;
62
+ gitRootNormalization: boolean;
63
+ maxPathLength: number;
64
+ readonly isAllowlistEnforced: boolean;
65
+ };
66
+ export declare const reliabilityConfig: {
67
+ cronEnabled: boolean;
68
+ cronApiEnabled: boolean;
69
+ cronApiHost: string;
70
+ cronApiPort: number;
71
+ cronApiToken: string | undefined;
72
+ cronJobsFile: string | undefined;
73
+ cronOrphanAutoCleanup: boolean;
74
+ cronForwardToPrivateChat: boolean;
75
+ cronFallbackFeishuChatId: string | undefined;
76
+ cronFallbackDiscordConversationId: string | undefined;
77
+ proactiveHeartbeatEnabled: boolean;
78
+ inboundHeartbeatEnabled: boolean;
79
+ heartbeatIntervalMs: number;
80
+ heartbeatAgent: string | undefined;
81
+ heartbeatPrompt: string | undefined;
82
+ heartbeatAlertChats: string[];
83
+ failureThreshold: number;
84
+ windowMs: number;
85
+ cooldownMs: number;
86
+ repairBudget: number;
87
+ mode: "observe" | "shadow" | "active";
88
+ loopbackOnly: boolean;
89
+ };
90
+ export declare function validateConfig(): void;
91
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAsFA,eAAO,MAAM,YAAY;;;kCAwBO,MAAM,GAAG,OAAO;CAO/C,CAAC;AAGF,eAAO,MAAM,YAAY;;;;;CAKxB,CAAC;AAGF,eAAO,MAAM,aAAa;;;;;CA2BvB,CAAC;AAGJ,eAAO,MAAM,WAAW;;CAOvB,CAAC;AAGF,eAAO,MAAM,cAAc;;;;;;CAQ1B,CAAC;AAGF,eAAO,MAAM,UAAU;;;;CActB,CAAC;AAOF,eAAO,MAAM,WAAW;;;CAIvB,CAAC;AAGF,eAAO,MAAM,gBAAgB;;;CAM5B,CAAC;AAMF,eAAO,MAAM,YAAY;;;;;;;;;;;;;CAwBxB,CAAC;AAEF,eAAO,MAAM,gBAAgB;;CAE5B,CAAC;AA+BF,eAAO,MAAM,eAAe;;;;;;;CAY3B,CAAC;AAGF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;CAyF7B,CAAC;AAGF,wBAAgB,cAAc,IAAI,IAAI,CAarC"}