@jungjaehoon/mama-os 0.1.1

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 (356) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/README.md +643 -0
  3. package/dist/agent/agent-loop.d.ts +98 -0
  4. package/dist/agent/agent-loop.d.ts.map +1 -0
  5. package/dist/agent/agent-loop.js +417 -0
  6. package/dist/agent/agent-loop.js.map +1 -0
  7. package/dist/agent/auto-recall.d.ts +48 -0
  8. package/dist/agent/auto-recall.d.ts.map +1 -0
  9. package/dist/agent/auto-recall.js +178 -0
  10. package/dist/agent/auto-recall.js.map +1 -0
  11. package/dist/agent/claude-cli-wrapper.d.ts +130 -0
  12. package/dist/agent/claude-cli-wrapper.d.ts.map +1 -0
  13. package/dist/agent/claude-cli-wrapper.js +227 -0
  14. package/dist/agent/claude-cli-wrapper.js.map +1 -0
  15. package/dist/agent/claude-client.d.ts +50 -0
  16. package/dist/agent/claude-client.d.ts.map +1 -0
  17. package/dist/agent/claude-client.js +214 -0
  18. package/dist/agent/claude-client.js.map +1 -0
  19. package/dist/agent/gateway-tool-executor.d.ts +75 -0
  20. package/dist/agent/gateway-tool-executor.d.ts.map +1 -0
  21. package/dist/agent/gateway-tool-executor.js +348 -0
  22. package/dist/agent/gateway-tool-executor.js.map +1 -0
  23. package/dist/agent/index.d.ts +13 -0
  24. package/dist/agent/index.d.ts.map +1 -0
  25. package/dist/agent/index.js +18 -0
  26. package/dist/agent/index.js.map +1 -0
  27. package/dist/agent/mcp-executor.d.ts +75 -0
  28. package/dist/agent/mcp-executor.d.ts.map +1 -0
  29. package/dist/agent/mcp-executor.js +307 -0
  30. package/dist/agent/mcp-executor.js.map +1 -0
  31. package/dist/agent/session-pool.d.ts +148 -0
  32. package/dist/agent/session-pool.d.ts.map +1 -0
  33. package/dist/agent/session-pool.js +272 -0
  34. package/dist/agent/session-pool.js.map +1 -0
  35. package/dist/agent/streaming-callback-manager.d.ts +85 -0
  36. package/dist/agent/streaming-callback-manager.d.ts.map +1 -0
  37. package/dist/agent/streaming-callback-manager.js +103 -0
  38. package/dist/agent/streaming-callback-manager.js.map +1 -0
  39. package/dist/agent/types.d.ts +437 -0
  40. package/dist/agent/types.d.ts.map +1 -0
  41. package/dist/agent/types.js +29 -0
  42. package/dist/agent/types.js.map +1 -0
  43. package/dist/api/cron-handler.d.ts +44 -0
  44. package/dist/api/cron-handler.d.ts.map +1 -0
  45. package/dist/api/cron-handler.js +195 -0
  46. package/dist/api/cron-handler.js.map +1 -0
  47. package/dist/api/error-handler.d.ts +22 -0
  48. package/dist/api/error-handler.d.ts.map +1 -0
  49. package/dist/api/error-handler.js +104 -0
  50. package/dist/api/error-handler.js.map +1 -0
  51. package/dist/api/heartbeat-handler.d.ts +49 -0
  52. package/dist/api/heartbeat-handler.d.ts.map +1 -0
  53. package/dist/api/heartbeat-handler.js +91 -0
  54. package/dist/api/heartbeat-handler.js.map +1 -0
  55. package/dist/api/index.d.ts +61 -0
  56. package/dist/api/index.d.ts.map +1 -0
  57. package/dist/api/index.js +145 -0
  58. package/dist/api/index.js.map +1 -0
  59. package/dist/api/types.d.ts +156 -0
  60. package/dist/api/types.d.ts.map +1 -0
  61. package/dist/api/types.js +62 -0
  62. package/dist/api/types.js.map +1 -0
  63. package/dist/auth/index.d.ts +7 -0
  64. package/dist/auth/index.d.ts.map +1 -0
  65. package/dist/auth/index.js +11 -0
  66. package/dist/auth/index.js.map +1 -0
  67. package/dist/auth/oauth-manager.d.ts +59 -0
  68. package/dist/auth/oauth-manager.d.ts.map +1 -0
  69. package/dist/auth/oauth-manager.js +237 -0
  70. package/dist/auth/oauth-manager.js.map +1 -0
  71. package/dist/auth/types.d.ts +92 -0
  72. package/dist/auth/types.d.ts.map +1 -0
  73. package/dist/auth/types.js +23 -0
  74. package/dist/auth/types.js.map +1 -0
  75. package/dist/cli/commands/init.d.ts +19 -0
  76. package/dist/cli/commands/init.d.ts.map +1 -0
  77. package/dist/cli/commands/init.js +155 -0
  78. package/dist/cli/commands/init.js.map +1 -0
  79. package/dist/cli/commands/run.d.ts +19 -0
  80. package/dist/cli/commands/run.d.ts.map +1 -0
  81. package/dist/cli/commands/run.js +89 -0
  82. package/dist/cli/commands/run.js.map +1 -0
  83. package/dist/cli/commands/setup.d.ts +19 -0
  84. package/dist/cli/commands/setup.d.ts.map +1 -0
  85. package/dist/cli/commands/setup.js +134 -0
  86. package/dist/cli/commands/setup.js.map +1 -0
  87. package/dist/cli/commands/start.d.ts +24 -0
  88. package/dist/cli/commands/start.d.ts.map +1 -0
  89. package/dist/cli/commands/start.js +1073 -0
  90. package/dist/cli/commands/start.js.map +1 -0
  91. package/dist/cli/commands/status.d.ts +10 -0
  92. package/dist/cli/commands/status.d.ts.map +1 -0
  93. package/dist/cli/commands/status.js +85 -0
  94. package/dist/cli/commands/status.js.map +1 -0
  95. package/dist/cli/commands/stop.d.ts +10 -0
  96. package/dist/cli/commands/stop.d.ts.map +1 -0
  97. package/dist/cli/commands/stop.js +65 -0
  98. package/dist/cli/commands/stop.js.map +1 -0
  99. package/dist/cli/config/config-manager.d.ts +51 -0
  100. package/dist/cli/config/config-manager.d.ts.map +1 -0
  101. package/dist/cli/config/config-manager.js +216 -0
  102. package/dist/cli/config/config-manager.js.map +1 -0
  103. package/dist/cli/config/types.d.ts +172 -0
  104. package/dist/cli/config/types.d.ts.map +1 -0
  105. package/dist/cli/config/types.js +48 -0
  106. package/dist/cli/config/types.js.map +1 -0
  107. package/dist/cli/index.d.ts +8 -0
  108. package/dist/cli/index.d.ts.map +1 -0
  109. package/dist/cli/index.js +92 -0
  110. package/dist/cli/index.js.map +1 -0
  111. package/dist/cli/utils/pid-manager.d.ts +66 -0
  112. package/dist/cli/utils/pid-manager.d.ts.map +1 -0
  113. package/dist/cli/utils/pid-manager.js +167 -0
  114. package/dist/cli/utils/pid-manager.js.map +1 -0
  115. package/dist/concurrency/index.d.ts +13 -0
  116. package/dist/concurrency/index.d.ts.map +1 -0
  117. package/dist/concurrency/index.js +22 -0
  118. package/dist/concurrency/index.js.map +1 -0
  119. package/dist/concurrency/lane-manager.d.ts +113 -0
  120. package/dist/concurrency/lane-manager.d.ts.map +1 -0
  121. package/dist/concurrency/lane-manager.js +245 -0
  122. package/dist/concurrency/lane-manager.js.map +1 -0
  123. package/dist/concurrency/session-key.d.ts +41 -0
  124. package/dist/concurrency/session-key.d.ts.map +1 -0
  125. package/dist/concurrency/session-key.js +61 -0
  126. package/dist/concurrency/session-key.js.map +1 -0
  127. package/dist/concurrency/types.d.ts +69 -0
  128. package/dist/concurrency/types.d.ts.map +1 -0
  129. package/dist/concurrency/types.js +16 -0
  130. package/dist/concurrency/types.js.map +1 -0
  131. package/dist/gateways/channel-history.d.ts +102 -0
  132. package/dist/gateways/channel-history.d.ts.map +1 -0
  133. package/dist/gateways/channel-history.js +181 -0
  134. package/dist/gateways/channel-history.js.map +1 -0
  135. package/dist/gateways/context-injector.d.ts +74 -0
  136. package/dist/gateways/context-injector.d.ts.map +1 -0
  137. package/dist/gateways/context-injector.js +121 -0
  138. package/dist/gateways/context-injector.js.map +1 -0
  139. package/dist/gateways/discord.d.ts +122 -0
  140. package/dist/gateways/discord.d.ts.map +1 -0
  141. package/dist/gateways/discord.js +602 -0
  142. package/dist/gateways/discord.js.map +1 -0
  143. package/dist/gateways/index.d.ts +30 -0
  144. package/dist/gateways/index.d.ts.map +1 -0
  145. package/dist/gateways/index.js +49 -0
  146. package/dist/gateways/index.js.map +1 -0
  147. package/dist/gateways/message-router.d.ts +116 -0
  148. package/dist/gateways/message-router.d.ts.map +1 -0
  149. package/dist/gateways/message-router.js +315 -0
  150. package/dist/gateways/message-router.js.map +1 -0
  151. package/dist/gateways/message-splitter.d.ts +54 -0
  152. package/dist/gateways/message-splitter.d.ts.map +1 -0
  153. package/dist/gateways/message-splitter.js +146 -0
  154. package/dist/gateways/message-splitter.js.map +1 -0
  155. package/dist/gateways/plugin-loader.d.ts +76 -0
  156. package/dist/gateways/plugin-loader.d.ts.map +1 -0
  157. package/dist/gateways/plugin-loader.js +221 -0
  158. package/dist/gateways/plugin-loader.js.map +1 -0
  159. package/dist/gateways/session-store.d.ts +77 -0
  160. package/dist/gateways/session-store.d.ts.map +1 -0
  161. package/dist/gateways/session-store.js +233 -0
  162. package/dist/gateways/session-store.js.map +1 -0
  163. package/dist/gateways/slack.d.ts +90 -0
  164. package/dist/gateways/slack.d.ts.map +1 -0
  165. package/dist/gateways/slack.js +281 -0
  166. package/dist/gateways/slack.js.map +1 -0
  167. package/dist/gateways/telegram.d.ts +79 -0
  168. package/dist/gateways/telegram.d.ts.map +1 -0
  169. package/dist/gateways/telegram.js +207 -0
  170. package/dist/gateways/telegram.js.map +1 -0
  171. package/dist/gateways/types.d.ts +340 -0
  172. package/dist/gateways/types.d.ts.map +1 -0
  173. package/dist/gateways/types.js +6 -0
  174. package/dist/gateways/types.js.map +1 -0
  175. package/dist/index.d.ts +7 -0
  176. package/dist/index.d.ts.map +1 -0
  177. package/dist/index.js +26 -0
  178. package/dist/index.js.map +1 -0
  179. package/dist/memory/memory-logger.d.ts +47 -0
  180. package/dist/memory/memory-logger.d.ts.map +1 -0
  181. package/dist/memory/memory-logger.js +126 -0
  182. package/dist/memory/memory-logger.js.map +1 -0
  183. package/dist/onboarding/all-tools.d.ts +18 -0
  184. package/dist/onboarding/all-tools.d.ts.map +1 -0
  185. package/dist/onboarding/all-tools.js +149 -0
  186. package/dist/onboarding/all-tools.js.map +1 -0
  187. package/dist/onboarding/autonomous-discovery-tools.d.ts +13 -0
  188. package/dist/onboarding/autonomous-discovery-tools.d.ts.map +1 -0
  189. package/dist/onboarding/autonomous-discovery-tools.js +268 -0
  190. package/dist/onboarding/autonomous-discovery-tools.js.map +1 -0
  191. package/dist/onboarding/bootstrap-template.d.ts +5 -0
  192. package/dist/onboarding/bootstrap-template.d.ts.map +1 -0
  193. package/dist/onboarding/bootstrap-template.js +142 -0
  194. package/dist/onboarding/bootstrap-template.js.map +1 -0
  195. package/dist/onboarding/complete-autonomous-prompt.d.ts +13 -0
  196. package/dist/onboarding/complete-autonomous-prompt.d.ts.map +1 -0
  197. package/dist/onboarding/complete-autonomous-prompt.js +1220 -0
  198. package/dist/onboarding/complete-autonomous-prompt.js.map +1 -0
  199. package/dist/onboarding/onboarding-state.d.ts +70 -0
  200. package/dist/onboarding/onboarding-state.d.ts.map +1 -0
  201. package/dist/onboarding/onboarding-state.js +184 -0
  202. package/dist/onboarding/onboarding-state.js.map +1 -0
  203. package/dist/onboarding/personality-quiz.d.ts +35 -0
  204. package/dist/onboarding/personality-quiz.d.ts.map +1 -0
  205. package/dist/onboarding/personality-quiz.js +219 -0
  206. package/dist/onboarding/personality-quiz.js.map +1 -0
  207. package/dist/onboarding/phase-5-summary.d.ts +22 -0
  208. package/dist/onboarding/phase-5-summary.d.ts.map +1 -0
  209. package/dist/onboarding/phase-5-summary.js +151 -0
  210. package/dist/onboarding/phase-5-summary.js.map +1 -0
  211. package/dist/onboarding/phase-6-security.d.ts +33 -0
  212. package/dist/onboarding/phase-6-security.d.ts.map +1 -0
  213. package/dist/onboarding/phase-6-security.js +473 -0
  214. package/dist/onboarding/phase-6-security.js.map +1 -0
  215. package/dist/onboarding/phase-7-integrations.d.ts +66 -0
  216. package/dist/onboarding/phase-7-integrations.d.ts.map +1 -0
  217. package/dist/onboarding/phase-7-integrations.js +619 -0
  218. package/dist/onboarding/phase-7-integrations.js.map +1 -0
  219. package/dist/onboarding/phase-8-demo.d.ts +43 -0
  220. package/dist/onboarding/phase-8-demo.d.ts.map +1 -0
  221. package/dist/onboarding/phase-8-demo.js +346 -0
  222. package/dist/onboarding/phase-8-demo.js.map +1 -0
  223. package/dist/onboarding/phase-9-finalization.d.ts +22 -0
  224. package/dist/onboarding/phase-9-finalization.d.ts.map +1 -0
  225. package/dist/onboarding/phase-9-finalization.js +375 -0
  226. package/dist/onboarding/phase-9-finalization.js.map +1 -0
  227. package/dist/onboarding/ritual-prompt.d.ts +2 -0
  228. package/dist/onboarding/ritual-prompt.d.ts.map +1 -0
  229. package/dist/onboarding/ritual-prompt.js +285 -0
  230. package/dist/onboarding/ritual-prompt.js.map +1 -0
  231. package/dist/onboarding/ritual-tools.d.ts +13 -0
  232. package/dist/onboarding/ritual-tools.d.ts.map +1 -0
  233. package/dist/onboarding/ritual-tools.js +93 -0
  234. package/dist/onboarding/ritual-tools.js.map +1 -0
  235. package/dist/runners/cli-runner.d.ts +59 -0
  236. package/dist/runners/cli-runner.d.ts.map +1 -0
  237. package/dist/runners/cli-runner.js +190 -0
  238. package/dist/runners/cli-runner.js.map +1 -0
  239. package/dist/runners/index.d.ts +11 -0
  240. package/dist/runners/index.d.ts.map +1 -0
  241. package/dist/runners/index.js +15 -0
  242. package/dist/runners/index.js.map +1 -0
  243. package/dist/runners/types.d.ts +81 -0
  244. package/dist/runners/types.d.ts.map +1 -0
  245. package/dist/runners/types.js +31 -0
  246. package/dist/runners/types.js.map +1 -0
  247. package/dist/scheduler/cron-scheduler.d.ts +115 -0
  248. package/dist/scheduler/cron-scheduler.d.ts.map +1 -0
  249. package/dist/scheduler/cron-scheduler.js +320 -0
  250. package/dist/scheduler/cron-scheduler.js.map +1 -0
  251. package/dist/scheduler/heartbeat.d.ts +53 -0
  252. package/dist/scheduler/heartbeat.d.ts.map +1 -0
  253. package/dist/scheduler/heartbeat.js +160 -0
  254. package/dist/scheduler/heartbeat.js.map +1 -0
  255. package/dist/scheduler/index.d.ts +22 -0
  256. package/dist/scheduler/index.d.ts.map +1 -0
  257. package/dist/scheduler/index.js +31 -0
  258. package/dist/scheduler/index.js.map +1 -0
  259. package/dist/scheduler/job-lock.d.ts +85 -0
  260. package/dist/scheduler/job-lock.d.ts.map +1 -0
  261. package/dist/scheduler/job-lock.js +137 -0
  262. package/dist/scheduler/job-lock.js.map +1 -0
  263. package/dist/scheduler/recovery.d.ts +78 -0
  264. package/dist/scheduler/recovery.d.ts.map +1 -0
  265. package/dist/scheduler/recovery.js +124 -0
  266. package/dist/scheduler/recovery.js.map +1 -0
  267. package/dist/scheduler/schedule-store.d.ts +112 -0
  268. package/dist/scheduler/schedule-store.d.ts.map +1 -0
  269. package/dist/scheduler/schedule-store.js +259 -0
  270. package/dist/scheduler/schedule-store.js.map +1 -0
  271. package/dist/scheduler/token-keep-alive.d.ts +49 -0
  272. package/dist/scheduler/token-keep-alive.d.ts.map +1 -0
  273. package/dist/scheduler/token-keep-alive.js +102 -0
  274. package/dist/scheduler/token-keep-alive.js.map +1 -0
  275. package/dist/scheduler/types.d.ts +96 -0
  276. package/dist/scheduler/types.d.ts.map +1 -0
  277. package/dist/scheduler/types.js +21 -0
  278. package/dist/scheduler/types.js.map +1 -0
  279. package/dist/setup/setup-prompt.d.ts +2 -0
  280. package/dist/setup/setup-prompt.d.ts.map +1 -0
  281. package/dist/setup/setup-prompt.js +138 -0
  282. package/dist/setup/setup-prompt.js.map +1 -0
  283. package/dist/setup/setup-server.d.ts +8 -0
  284. package/dist/setup/setup-server.d.ts.map +1 -0
  285. package/dist/setup/setup-server.js +71 -0
  286. package/dist/setup/setup-server.js.map +1 -0
  287. package/dist/setup/setup-tools.d.ts +13 -0
  288. package/dist/setup/setup-tools.d.ts.map +1 -0
  289. package/dist/setup/setup-tools.js +103 -0
  290. package/dist/setup/setup-tools.js.map +1 -0
  291. package/dist/setup/setup-websocket.d.ts +6 -0
  292. package/dist/setup/setup-websocket.d.ts.map +1 -0
  293. package/dist/setup/setup-websocket.js +312 -0
  294. package/dist/setup/setup-websocket.js.map +1 -0
  295. package/dist/skills/index.d.ts +10 -0
  296. package/dist/skills/index.d.ts.map +1 -0
  297. package/dist/skills/index.js +26 -0
  298. package/dist/skills/index.js.map +1 -0
  299. package/dist/skills/skill-executor.d.ts +48 -0
  300. package/dist/skills/skill-executor.d.ts.map +1 -0
  301. package/dist/skills/skill-executor.js +483 -0
  302. package/dist/skills/skill-executor.js.map +1 -0
  303. package/dist/skills/skill-loader.d.ts +40 -0
  304. package/dist/skills/skill-loader.d.ts.map +1 -0
  305. package/dist/skills/skill-loader.js +225 -0
  306. package/dist/skills/skill-loader.js.map +1 -0
  307. package/dist/skills/skill-matcher.d.ts +33 -0
  308. package/dist/skills/skill-matcher.d.ts.map +1 -0
  309. package/dist/skills/skill-matcher.js +190 -0
  310. package/dist/skills/skill-matcher.js.map +1 -0
  311. package/dist/skills/types.d.ts +123 -0
  312. package/dist/skills/types.d.ts.map +1 -0
  313. package/dist/skills/types.js +12 -0
  314. package/dist/skills/types.js.map +1 -0
  315. package/dist/tools/browser-tool.d.ts +149 -0
  316. package/dist/tools/browser-tool.d.ts.map +1 -0
  317. package/dist/tools/browser-tool.js +257 -0
  318. package/dist/tools/browser-tool.js.map +1 -0
  319. package/package.json +84 -0
  320. package/public/favicon.ico +0 -0
  321. package/public/setup.html +1026 -0
  322. package/public/viewer/icons/icon-192.png +0 -0
  323. package/public/viewer/icons/icon-512.png +0 -0
  324. package/public/viewer/js/modules/chat.js +1587 -0
  325. package/public/viewer/js/modules/dashboard.js +275 -0
  326. package/public/viewer/js/modules/graph.js +997 -0
  327. package/public/viewer/js/modules/memory.js +353 -0
  328. package/public/viewer/js/modules/settings.js +255 -0
  329. package/public/viewer/js/utils/api.js +169 -0
  330. package/public/viewer/js/utils/dom.js +92 -0
  331. package/public/viewer/js/utils/format.js +192 -0
  332. package/public/viewer/manifest.json +26 -0
  333. package/public/viewer/sw.js +131 -0
  334. package/public/viewer/viewer.css +500 -0
  335. package/public/viewer/viewer.html +1535 -0
  336. package/scripts/postinstall.js +118 -0
  337. package/templates/skills/document-analyze.md +63 -0
  338. package/templates/skills/heartbeat-report.md +75 -0
  339. package/templates/skills/image-translate.md +67 -0
  340. package/templates/workspace/skill-forge/DESIGN.md +115 -0
  341. package/templates/workspace/skill-forge/agents/architect.ts +295 -0
  342. package/templates/workspace/skill-forge/agents/developer.ts +364 -0
  343. package/templates/workspace/skill-forge/agents/qa.ts +313 -0
  344. package/templates/workspace/skill-forge/claude-api.ts +353 -0
  345. package/templates/workspace/skill-forge/discord-ui.ts +580 -0
  346. package/templates/workspace/skill-forge/error-handler.ts +354 -0
  347. package/templates/workspace/skill-forge/mama-integration.ts +357 -0
  348. package/templates/workspace/skill-forge/orchestrator.ts +495 -0
  349. package/templates/workspace/skill-forge/output/generated-skills/skills/hello-world/README.md +24 -0
  350. package/templates/workspace/skill-forge/output/generated-skills/skills/hello-world/index.ts +79 -0
  351. package/templates/workspace/skill-forge/output/generated-skills/skills/hello-world/types.ts +17 -0
  352. package/templates/workspace/skill-forge/package.json +21 -0
  353. package/templates/workspace/skill-forge/state/session.json +132 -0
  354. package/templates/workspace/skill-forge/test-e2e.ts +139 -0
  355. package/templates/workspace/skill-forge/tsconfig.json +20 -0
  356. package/templates/workspace/skill-forge/types.ts +159 -0
@@ -0,0 +1,602 @@
1
+ "use strict";
2
+ /**
3
+ * Discord Gateway for MAMA Standalone
4
+ *
5
+ * Provides Discord bot integration for receiving and responding to messages.
6
+ * Supports both DM and channel mentions with configurable filtering.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.DiscordGateway = void 0;
10
+ const discord_js_1 = require("discord.js");
11
+ const message_splitter_js_1 = require("./message-splitter.js");
12
+ const memory_logger_js_1 = require("../memory/memory-logger.js");
13
+ const channel_history_js_1 = require("./channel-history.js");
14
+ /**
15
+ * Discord Gateway class
16
+ *
17
+ * Connects to Discord via bot token and routes messages
18
+ * to the MessageRouter for processing.
19
+ */
20
+ class DiscordGateway {
21
+ source = 'discord';
22
+ client;
23
+ token;
24
+ messageRouter;
25
+ config;
26
+ eventHandlers = [];
27
+ connected = false;
28
+ // Message editing throttle state
29
+ lastEditTime = 0;
30
+ pendingEdit = null;
31
+ editTimer = null;
32
+ constructor(options) {
33
+ this.token = options.token;
34
+ this.messageRouter = options.messageRouter;
35
+ this.config = {
36
+ enabled: true,
37
+ token: options.token,
38
+ guilds: options.config?.guilds || {},
39
+ };
40
+ // Create Discord client with required intents
41
+ this.client = new discord_js_1.Client({
42
+ intents: [
43
+ discord_js_1.GatewayIntentBits.Guilds,
44
+ discord_js_1.GatewayIntentBits.GuildMessages,
45
+ discord_js_1.GatewayIntentBits.DirectMessages,
46
+ discord_js_1.GatewayIntentBits.MessageContent,
47
+ ],
48
+ partials: [discord_js_1.Partials.Channel], // Required for DM support
49
+ });
50
+ this.setupEventListeners();
51
+ }
52
+ /**
53
+ * Set up Discord client event listeners
54
+ */
55
+ setupEventListeners() {
56
+ // Ready event
57
+ this.client.once(discord_js_1.Events.ClientReady, (client) => {
58
+ console.log(`Discord bot logged in as ${client.user.tag}`);
59
+ this.connected = true;
60
+ this.emitEvent({
61
+ type: 'connected',
62
+ source: 'discord',
63
+ timestamp: new Date(),
64
+ data: { username: client.user.tag },
65
+ });
66
+ });
67
+ // Message event
68
+ this.client.on(discord_js_1.Events.MessageCreate, async (message) => {
69
+ try {
70
+ await this.handleMessage(message);
71
+ }
72
+ catch (error) {
73
+ console.error('Error handling Discord message:', error);
74
+ this.emitEvent({
75
+ type: 'error',
76
+ source: 'discord',
77
+ timestamp: new Date(),
78
+ error: error instanceof Error ? error : new Error(String(error)),
79
+ });
80
+ }
81
+ });
82
+ // Disconnect event
83
+ this.client.on(discord_js_1.Events.ShardDisconnect, () => {
84
+ this.connected = false;
85
+ this.emitEvent({
86
+ type: 'disconnected',
87
+ source: 'discord',
88
+ timestamp: new Date(),
89
+ });
90
+ });
91
+ // Error event
92
+ this.client.on(discord_js_1.Events.Error, (error) => {
93
+ console.error('Discord client error:', error);
94
+ this.emitEvent({
95
+ type: 'error',
96
+ source: 'discord',
97
+ timestamp: new Date(),
98
+ error,
99
+ });
100
+ });
101
+ }
102
+ /**
103
+ * Handle incoming Discord message
104
+ */
105
+ async handleMessage(message) {
106
+ // Ignore bot messages
107
+ if (message.author.bot)
108
+ return;
109
+ const isDM = message.channel.type === discord_js_1.ChannelType.DM;
110
+ const isMentioned = message.mentions.has(this.client.user);
111
+ // Debug logging
112
+ console.log(`[Discord] Message received: "${message.content.substring(0, 50)}..." from ${message.author.tag}`);
113
+ console.log(`[Discord] isDM: ${isDM}, isMentioned: ${isMentioned}, channelId: ${message.channel.id}`);
114
+ // Log incoming message
115
+ const memoryLogger = (0, memory_logger_js_1.getMemoryLogger)();
116
+ memoryLogger.logMessage('Discord', message.author.tag, message.content, false);
117
+ // Download attachments first (needed for both history and processing)
118
+ const attachments = [];
119
+ for (const [, attachment] of message.attachments) {
120
+ if (attachment.contentType?.startsWith('image/')) {
121
+ try {
122
+ const localPath = await this.downloadAttachment(attachment.url, attachment.name);
123
+ attachments.push({
124
+ type: 'image',
125
+ url: attachment.url,
126
+ localPath,
127
+ filename: attachment.name,
128
+ contentType: attachment.contentType,
129
+ size: attachment.size,
130
+ });
131
+ }
132
+ catch (err) {
133
+ console.error(`[Discord] Failed to download attachment: ${err}`);
134
+ }
135
+ }
136
+ }
137
+ // Record to channel history (always, for context)
138
+ const channelHistory = (0, channel_history_js_1.getChannelHistory)();
139
+ const historyEntry = {
140
+ messageId: message.id,
141
+ sender: message.author.username,
142
+ userId: message.author.id,
143
+ body: this.cleanMessageContent(message.content),
144
+ timestamp: Date.now(),
145
+ attachments: attachments.length > 0 ? attachments : undefined,
146
+ isBot: false,
147
+ };
148
+ channelHistory.record(message.channel.id, historyEntry);
149
+ console.log(`[Discord] Recorded to history: ${message.channel.id} (${channelHistory.getHistory(message.channel.id).length} entries)`);
150
+ // Check if we should respond to this message
151
+ if (!this.shouldRespond(message, isDM, isMentioned)) {
152
+ console.log('[Discord] Skipping - shouldRespond returned false');
153
+ return;
154
+ }
155
+ // Emit message received event
156
+ this.emitEvent({
157
+ type: 'message_received',
158
+ source: 'discord',
159
+ timestamp: new Date(),
160
+ data: {
161
+ channelId: message.channel.id,
162
+ userId: message.author.id,
163
+ isDM,
164
+ isMentioned,
165
+ },
166
+ });
167
+ // Remove mentions from message content
168
+ const cleanContent = this.cleanMessageContent(message.content);
169
+ // Get attachments from history if current message has none
170
+ // Only reuse attachments if message contains action keywords (번역, 분석, translate, etc.)
171
+ let effectiveAttachments = attachments;
172
+ if (attachments.length === 0) {
173
+ const lowerContent = cleanContent.toLowerCase();
174
+ const isMetaQuestion = lowerContent.includes('품질') ||
175
+ lowerContent.includes('어때') ||
176
+ lowerContent.includes('어떤가') ||
177
+ lowerContent.includes('어떻') ||
178
+ lowerContent.includes('결과') ||
179
+ lowerContent.includes('quality') ||
180
+ lowerContent.includes('how') ||
181
+ lowerContent.includes('result') ||
182
+ lowerContent.includes('어떠') ||
183
+ lowerContent.match(/어때[??]/) ||
184
+ lowerContent.match(/어떤가[??]/);
185
+ const hasActionKeyword = lowerContent.includes('번역') ||
186
+ lowerContent.includes('translate') ||
187
+ lowerContent.includes('분석') ||
188
+ lowerContent.includes('analyze') ||
189
+ lowerContent.includes('읽어') ||
190
+ lowerContent.includes('read') ||
191
+ lowerContent.includes('뭐라') ||
192
+ lowerContent.includes('무슨말');
193
+ if (hasActionKeyword && !isMetaQuestion) {
194
+ const historyAttachments = channelHistory.getRecentAttachments(message.channel.id, message.author.id);
195
+ if (historyAttachments.length > 0) {
196
+ effectiveAttachments = historyAttachments;
197
+ console.log(`[Discord] Using ${historyAttachments.length} attachments from history (action keyword detected)`);
198
+ }
199
+ }
200
+ else if (hasActionKeyword && isMetaQuestion) {
201
+ console.log(`[Discord] Action keyword found but meta question detected - NOT reusing attachments`);
202
+ }
203
+ }
204
+ if (!cleanContent.trim() && effectiveAttachments.length === 0) {
205
+ return; // Don't process empty messages without attachments
206
+ }
207
+ // Start typing indicator
208
+ const typingInterval = setInterval(() => {
209
+ if ('sendTyping' in message.channel) {
210
+ message.channel.sendTyping().catch(() => { });
211
+ }
212
+ }, 5000);
213
+ if ('sendTyping' in message.channel) {
214
+ await message.channel.sendTyping();
215
+ }
216
+ // Build message history context for Claude (OpenClaw style)
217
+ const historyContext = channelHistory.formatForContext(message.channel.id, message.id);
218
+ if (historyContext) {
219
+ console.log(`[Discord] Built historyContext (${historyContext.length} chars):`, historyContext.substring(0, 200));
220
+ }
221
+ else {
222
+ console.log(`[Discord] No historyContext - empty history`);
223
+ }
224
+ // Convert attachments to content blocks (OpenClaw-style)
225
+ const contentBlocks = await this.buildContentBlocks(effectiveAttachments);
226
+ // Normalize message for router - ALL messages go to Claude
227
+ const normalizedMessage = {
228
+ source: 'discord',
229
+ channelId: message.channel.id,
230
+ userId: message.author.id,
231
+ text: cleanContent,
232
+ contentBlocks: contentBlocks.length > 0 ? contentBlocks : undefined,
233
+ metadata: {
234
+ guildId: message.guild?.id,
235
+ username: message.author.username,
236
+ messageId: message.id,
237
+ historyContext,
238
+ attachments: effectiveAttachments.length > 0 ? effectiveAttachments : undefined,
239
+ },
240
+ };
241
+ try {
242
+ let response;
243
+ let duration;
244
+ const routerResult = await this.messageRouter.process(normalizedMessage);
245
+ response = routerResult.response;
246
+ duration = routerResult.duration;
247
+ await this.sendResponse(message, response);
248
+ this.emitEvent({
249
+ type: 'message_sent',
250
+ source: 'discord',
251
+ timestamp: new Date(),
252
+ data: {
253
+ channelId: message.channel.id,
254
+ responseLength: response.length,
255
+ duration,
256
+ },
257
+ });
258
+ channelHistory.clearAttachments(message.channel.id);
259
+ console.log(`[Discord] Cleared attachments after reply, kept text for conversation context: ${message.channel.id}`);
260
+ }
261
+ finally {
262
+ clearInterval(typingInterval);
263
+ }
264
+ }
265
+ /**
266
+ * Check if bot should respond to this message
267
+ */
268
+ shouldRespond(message, isDM, isMentioned) {
269
+ // Always respond to DMs
270
+ if (isDM)
271
+ return true;
272
+ // For guild messages, check configuration
273
+ const guildId = message.guild?.id;
274
+ const channelId = message.channel.id;
275
+ console.log(`[Discord] shouldRespond check - guildId: ${guildId}, channelId: ${channelId}`);
276
+ console.log(`[Discord] guilds config:`, JSON.stringify(this.config.guilds, null, 2));
277
+ if (!guildId)
278
+ return false;
279
+ // Get guild config (or wildcard config)
280
+ const guildConfig = this.config.guilds?.[guildId] || this.config.guilds?.['*'];
281
+ console.log(`[Discord] guildConfig:`, JSON.stringify(guildConfig, null, 2));
282
+ if (!guildConfig) {
283
+ // No config for this guild, only respond to mentions
284
+ return isMentioned;
285
+ }
286
+ // Get channel config
287
+ const channelConfig = guildConfig.channels?.[channelId];
288
+ if (channelConfig) {
289
+ // Channel-specific config
290
+ if (channelConfig.requireMention === false) {
291
+ return true; // No mention required for this channel
292
+ }
293
+ return isMentioned;
294
+ }
295
+ // Use guild default
296
+ if (guildConfig.requireMention === false) {
297
+ return true;
298
+ }
299
+ return isMentioned;
300
+ }
301
+ /**
302
+ * Clean message content (remove mentions)
303
+ */
304
+ cleanMessageContent(content) {
305
+ // Remove user mentions
306
+ return content
307
+ .replace(/<@!?\d+>/g, '')
308
+ .replace(/<@&\d+>/g, '') // Role mentions
309
+ .trim();
310
+ }
311
+ /**
312
+ * Edit message with 150ms throttle to respect Discord rate limits
313
+ */
314
+ async editMessageThrottled(message, content) {
315
+ this.pendingEdit = content;
316
+ const now = Date.now();
317
+ const timeSinceLastEdit = now - this.lastEditTime;
318
+ if (timeSinceLastEdit >= 150) {
319
+ await this.flushEdit(message);
320
+ }
321
+ else if (!this.editTimer) {
322
+ const delay = 150 - timeSinceLastEdit;
323
+ this.editTimer = setTimeout(() => this.flushEdit(message), delay);
324
+ }
325
+ }
326
+ /**
327
+ * Flush pending edit to Discord
328
+ */
329
+ async flushEdit(message) {
330
+ if (!this.pendingEdit)
331
+ return;
332
+ await message.edit(this.pendingEdit);
333
+ this.lastEditTime = Date.now();
334
+ this.pendingEdit = null;
335
+ this.editTimer = null;
336
+ }
337
+ /**
338
+ * Send response to Discord (handling length limits)
339
+ */
340
+ async sendResponse(originalMessage, response) {
341
+ const chunks = (0, message_splitter_js_1.splitForDiscord)(response);
342
+ const memoryLogger = (0, memory_logger_js_1.getMemoryLogger)();
343
+ memoryLogger.logMessage('Discord', 'MAMA', response, true);
344
+ for (let i = 0; i < chunks.length; i++) {
345
+ let sentMessage;
346
+ if (i === 0) {
347
+ sentMessage = await originalMessage.reply(chunks[i]);
348
+ }
349
+ else {
350
+ if ('send' in originalMessage.channel) {
351
+ sentMessage = await originalMessage.channel.send(chunks[i]);
352
+ }
353
+ }
354
+ if (sentMessage && this.client.user) {
355
+ const history = (0, channel_history_js_1.getChannelHistory)();
356
+ history.record(originalMessage.channel.id, {
357
+ messageId: sentMessage.id,
358
+ sender: this.client.user.username,
359
+ userId: this.client.user.id,
360
+ body: chunks[i],
361
+ timestamp: Date.now(),
362
+ isBot: true,
363
+ });
364
+ }
365
+ }
366
+ }
367
+ /**
368
+ * Emit event to registered handlers
369
+ */
370
+ emitEvent(event) {
371
+ for (const handler of this.eventHandlers) {
372
+ try {
373
+ handler(event);
374
+ }
375
+ catch (error) {
376
+ console.error('Error in gateway event handler:', error);
377
+ }
378
+ }
379
+ }
380
+ // ============================================================================
381
+ // Gateway Interface Implementation
382
+ // ============================================================================
383
+ /**
384
+ * Start the Discord gateway
385
+ */
386
+ async start() {
387
+ if (this.connected) {
388
+ console.log('Discord gateway already connected');
389
+ return;
390
+ }
391
+ await this.client.login(this.token);
392
+ }
393
+ /**
394
+ * Stop the Discord gateway
395
+ */
396
+ async stop() {
397
+ if (!this.connected) {
398
+ return;
399
+ }
400
+ await this.client.destroy();
401
+ this.connected = false;
402
+ this.emitEvent({
403
+ type: 'disconnected',
404
+ source: 'discord',
405
+ timestamp: new Date(),
406
+ });
407
+ }
408
+ /**
409
+ * Check if gateway is connected
410
+ */
411
+ isConnected() {
412
+ return this.connected;
413
+ }
414
+ /**
415
+ * Register event handler
416
+ */
417
+ onEvent(handler) {
418
+ this.eventHandlers.push(handler);
419
+ }
420
+ // ============================================================================
421
+ // Configuration
422
+ // ============================================================================
423
+ /**
424
+ * Update gateway configuration
425
+ */
426
+ setConfig(config) {
427
+ if (config.guilds) {
428
+ this.config.guilds = { ...this.config.guilds, ...config.guilds };
429
+ }
430
+ if (config.enabled !== undefined) {
431
+ this.config.enabled = config.enabled;
432
+ }
433
+ }
434
+ /**
435
+ * Get current configuration
436
+ */
437
+ getConfig() {
438
+ return { ...this.config };
439
+ }
440
+ /**
441
+ * Add guild configuration
442
+ */
443
+ addGuildConfig(guildId, config) {
444
+ this.config.guilds = this.config.guilds || {};
445
+ this.config.guilds[guildId] = config;
446
+ }
447
+ /**
448
+ * Add channel configuration
449
+ */
450
+ addChannelConfig(guildId, channelId, config) {
451
+ this.config.guilds = this.config.guilds || {};
452
+ if (!this.config.guilds[guildId]) {
453
+ this.config.guilds[guildId] = { channels: {} };
454
+ }
455
+ this.config.guilds[guildId].channels = this.config.guilds[guildId].channels || {};
456
+ this.config.guilds[guildId].channels[channelId] = config;
457
+ }
458
+ /**
459
+ * Send a message to a specific channel
460
+ */
461
+ async sendMessage(channelId, content) {
462
+ if (!this.connected) {
463
+ throw new Error('Discord gateway not connected');
464
+ }
465
+ const channel = await this.client.channels.fetch(channelId);
466
+ if (!channel) {
467
+ throw new Error(`Channel not found: ${channelId}`);
468
+ }
469
+ if (!('send' in channel)) {
470
+ throw new Error(`Channel ${channelId} is not a text channel`);
471
+ }
472
+ const chunks = (0, message_splitter_js_1.splitForDiscord)(content);
473
+ for (const chunk of chunks) {
474
+ await channel.send(chunk);
475
+ }
476
+ }
477
+ /**
478
+ * Download attachment to local file
479
+ */
480
+ async downloadAttachment(url, filename) {
481
+ const fs = await import('fs/promises');
482
+ const path = await import('path');
483
+ // Create media directory
484
+ const mediaDir = path.join(process.env.HOME || '', '.mama', 'workspace', 'media', 'inbound');
485
+ await fs.mkdir(mediaDir, { recursive: true });
486
+ // Generate unique filename
487
+ const timestamp = Date.now();
488
+ const localPath = path.join(mediaDir, `${timestamp}-${filename.replace(/[^a-zA-Z0-9.-]/g, '_')}`);
489
+ // Download file
490
+ const response = await fetch(url);
491
+ if (!response.ok) {
492
+ throw new Error(`Failed to download: ${response.status}`);
493
+ }
494
+ const buffer = Buffer.from(await response.arrayBuffer());
495
+ await fs.writeFile(localPath, buffer);
496
+ console.log(`[Discord] Downloaded attachment: ${localPath} (${buffer.length} bytes)`);
497
+ return localPath;
498
+ }
499
+ async compressImage(buffer, maxSizeBytes) {
500
+ try {
501
+ const sharp = (await import('sharp')).default;
502
+ let compressed = await sharp(buffer)
503
+ .resize(2048, 2048, { fit: 'inside', withoutEnlargement: true })
504
+ .jpeg({ quality: 85 })
505
+ .toBuffer();
506
+ if (compressed.length > maxSizeBytes) {
507
+ compressed = await sharp(buffer)
508
+ .resize(2048, 2048, { fit: 'inside', withoutEnlargement: true })
509
+ .jpeg({ quality: 75 })
510
+ .toBuffer();
511
+ }
512
+ if (compressed.length > maxSizeBytes) {
513
+ compressed = await sharp(buffer)
514
+ .resize(1600, 1600, { fit: 'inside', withoutEnlargement: true })
515
+ .jpeg({ quality: 70 })
516
+ .toBuffer();
517
+ }
518
+ return compressed;
519
+ }
520
+ catch (err) {
521
+ console.warn(`[Discord] sharp not available, cannot compress: ${err}`);
522
+ return buffer;
523
+ }
524
+ }
525
+ /**
526
+ * Build content blocks from attachments (OpenClaw-style)
527
+ * Converts images to base64-encoded content blocks for Claude
528
+ */
529
+ async buildContentBlocks(attachments) {
530
+ const contentBlocks = [];
531
+ // Supported Claude image types
532
+ const SUPPORTED_MEDIA_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'];
533
+ for (const attachment of attachments) {
534
+ if (attachment.type === 'image' && attachment.localPath) {
535
+ try {
536
+ const fs = await import('fs/promises');
537
+ let imageBuffer = await fs.readFile(attachment.localPath);
538
+ const originalSize = imageBuffer.length;
539
+ let wasCompressed = false;
540
+ // Compress image if needed (Claude limit: ~5MB base64)
541
+ // Higher quality for text recognition
542
+ const MAX_RAW_SIZE = 5 * 1024 * 1024; // 5MB raw = ~6.7MB base64 (compressed JPEG is smaller)
543
+ if (imageBuffer.length > MAX_RAW_SIZE) {
544
+ console.log(`[Discord] Image too large (${(originalSize / 1024 / 1024).toFixed(2)}MB), compressing...`);
545
+ const compressed = await this.compressImage(imageBuffer, MAX_RAW_SIZE);
546
+ imageBuffer = Buffer.from(compressed);
547
+ wasCompressed = true;
548
+ console.log(`[Discord] Compressed to ${(imageBuffer.length / 1024 / 1024).toFixed(2)}MB`);
549
+ }
550
+ const base64Data = imageBuffer.toString('base64');
551
+ let mediaType = wasCompressed ? 'image/jpeg' : attachment.contentType || 'image/png';
552
+ // Normalize media type to Claude-supported format
553
+ if (!SUPPORTED_MEDIA_TYPES.includes(mediaType)) {
554
+ // Convert common types
555
+ if (mediaType.startsWith('image/')) {
556
+ mediaType = 'image/png'; // Default fallback
557
+ }
558
+ else {
559
+ console.warn(`[Discord] Unsupported media type: ${mediaType}, skipping`);
560
+ continue;
561
+ }
562
+ }
563
+ contentBlocks.push({
564
+ type: 'image',
565
+ source: {
566
+ type: 'base64',
567
+ media_type: mediaType,
568
+ data: base64Data,
569
+ },
570
+ });
571
+ console.log(`[Discord] Built content block for image: ${attachment.filename} (${base64Data.length} chars base64)`);
572
+ }
573
+ catch (err) {
574
+ console.error(`[Discord] Failed to build content block: ${err}`);
575
+ }
576
+ }
577
+ }
578
+ return contentBlocks;
579
+ }
580
+ /**
581
+ * Send an image file to a specific channel
582
+ */
583
+ async sendImage(channelId, imagePath, caption) {
584
+ if (!this.connected) {
585
+ throw new Error('Discord gateway not connected');
586
+ }
587
+ const channel = await this.client.channels.fetch(channelId);
588
+ if (!channel) {
589
+ throw new Error(`Channel not found: ${channelId}`);
590
+ }
591
+ if (!('send' in channel)) {
592
+ throw new Error(`Channel ${channelId} is not a text channel`);
593
+ }
594
+ const sendFn = channel.send.bind(channel);
595
+ await sendFn({
596
+ content: caption,
597
+ files: [imagePath],
598
+ });
599
+ }
600
+ }
601
+ exports.DiscordGateway = DiscordGateway;
602
+ //# sourceMappingURL=discord.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discord.js","sourceRoot":"","sources":["../../src/gateways/discord.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Gateway Module for MAMA Standalone
3
+ *
4
+ * Provides unified message handling across multiple messenger platforms.
5
+ *
6
+ * Components:
7
+ * - MessageRouter: Central routing hub
8
+ * - SessionStore: Conversation session management
9
+ * - ContextInjector: Proactive decision retrieval
10
+ * - DiscordGateway: Discord bot integration
11
+ * - MessageSplitter: Message chunking utilities
12
+ * - Types: Shared type definitions
13
+ */
14
+ export { MessageRouter, createMockAgentLoop } from './message-router.js';
15
+ export type { AgentLoopClient, AgentLoopOptions, ProcessingResult } from './message-router.js';
16
+ export { SessionStore } from './session-store.js';
17
+ export { ContextInjector, createMockMamaApi } from './context-injector.js';
18
+ export type { MamaApiClient, SearchResult, InjectedContext } from './context-injector.js';
19
+ export { DiscordGateway } from './discord.js';
20
+ export type { DiscordGatewayOptions } from './discord.js';
21
+ export { SlackGateway } from './slack.js';
22
+ export type { SlackGatewayOptions } from './slack.js';
23
+ export { splitMessage, splitForDiscord, splitForSlack, splitWithCodeBlocks, truncateWithEllipsis, estimateChunks, DEFAULT_MAX_LENGTH, } from './message-splitter.js';
24
+ export type { SplitOptions } from './message-splitter.js';
25
+ export { ChannelHistory, getChannelHistory, setChannelHistory } from './channel-history.js';
26
+ export type { HistoryEntry, ChannelHistoryConfig } from './channel-history.js';
27
+ export { PluginLoader, createPluginLoader } from './plugin-loader.js';
28
+ export type { PluginLoaderConfig } from './plugin-loader.js';
29
+ export type { MessageSource, NormalizedMessage, MessageMetadata, MessageAttachment, Session, ConversationTurn, RelatedDecision, MessageRouterConfig, GatewayConfig, DiscordGatewayConfig, DiscordGuildConfig, DiscordChannelConfig, SlackGatewayConfig, SlackChannelConfig, ChatworkGatewayConfig, GatewayEventType, GatewayEvent, GatewayEventHandler, Gateway, PluginManifest, PluginApi, PluginLogger, AgentLoopInterface, ContentBlock, MessageHandler, GatewayPluginRegister, GatewayPluginModule, LoadedPlugin, } from './types.js';
30
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/gateways/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACzE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE/F,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG1F,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,YAAY,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGtD,OAAO,EACL,YAAY,EACZ,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAG1D,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC5F,YAAY,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAG/E,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACtE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAG7D,YAAY,EAEV,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EAGjB,OAAO,EACP,gBAAgB,EAGhB,eAAe,EAGf,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EAGrB,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,OAAO,EAGP,cAAc,EACd,SAAS,EACT,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,YAAY,GACb,MAAM,YAAY,CAAC"}