@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 @@
1
+ {"version":3,"file":"channel-history.d.ts","sourceRoot":"","sources":["../../src/gateways/channel-history.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,WAAW,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAClC,oCAAoC;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAKD;;;;GAIG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAA0C;IAC3D,OAAO,CAAC,MAAM,CAAiC;gBAEnC,MAAM,GAAE,oBAAyB;IAO7C;;OAEG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI;IAiBpD;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE;IAQ7C;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE;IAI9E;;OAEG;IACH,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,iBAAiB,EAAE;IAmB7E;;;OAGG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM;IA8BtE;;OAEG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAI9B;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IASzC;;OAEG;IACH,QAAQ,IAAI,IAAI;IAIhB;;OAEG;IACH,aAAa,IAAI,MAAM,EAAE;IAIzB;;OAEG;IACH,OAAO,IAAI,MAAM;CAmBlB;AAOD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAKlD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAE/D"}
@@ -0,0 +1,181 @@
1
+ "use strict";
2
+ /**
3
+ * Channel History Manager
4
+ *
5
+ * In-memory storage of recent messages per channel, similar to OpenClaw's
6
+ * guildHistories map. Stores message history with attachments for context
7
+ * injection and skill matching.
8
+ *
9
+ * Features:
10
+ * - FIFO ring buffer with configurable limit
11
+ * - Attachment references preserved
12
+ * - History formatting for Claude context
13
+ * - Automatic cleanup of old entries
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.ChannelHistory = void 0;
17
+ exports.getChannelHistory = getChannelHistory;
18
+ exports.setChannelHistory = setChannelHistory;
19
+ const DEFAULT_LIMIT = 20;
20
+ const DEFAULT_MAX_AGE_MS = 10 * 60 * 1000; // 10 minutes
21
+ /**
22
+ * Channel History Manager
23
+ *
24
+ * Manages per-channel message history in memory.
25
+ */
26
+ class ChannelHistory {
27
+ histories = new Map();
28
+ config;
29
+ constructor(config = {}) {
30
+ this.config = {
31
+ limit: config.limit ?? DEFAULT_LIMIT,
32
+ maxAgeMs: config.maxAgeMs ?? DEFAULT_MAX_AGE_MS,
33
+ };
34
+ }
35
+ /**
36
+ * Record a message to channel history
37
+ */
38
+ record(channelId, entry) {
39
+ let history = this.histories.get(channelId);
40
+ if (!history) {
41
+ history = [];
42
+ this.histories.set(channelId, history);
43
+ }
44
+ // Add entry
45
+ history.push(entry);
46
+ // FIFO: Remove oldest if over limit
47
+ while (history.length > this.config.limit) {
48
+ history.shift();
49
+ }
50
+ }
51
+ /**
52
+ * Get history for a channel
53
+ */
54
+ getHistory(channelId) {
55
+ const history = this.histories.get(channelId) || [];
56
+ const cutoff = Date.now() - this.config.maxAgeMs;
57
+ // Filter out old entries
58
+ return history.filter((entry) => entry.timestamp > cutoff);
59
+ }
60
+ /**
61
+ * Get recent history excluding the current message
62
+ */
63
+ getRecentHistory(channelId, excludeMessageId) {
64
+ return this.getHistory(channelId).filter((entry) => entry.messageId !== excludeMessageId);
65
+ }
66
+ /**
67
+ * Get recent attachments from history (for skill matching)
68
+ */
69
+ getRecentAttachments(channelId, userId) {
70
+ const history = this.getHistory(channelId);
71
+ const attachments = [];
72
+ // Look for attachments from same user in recent history
73
+ for (const entry of history.slice().reverse()) {
74
+ // Only consider attachments from same user (if specified)
75
+ if (userId && entry.userId !== userId)
76
+ continue;
77
+ if (entry.attachments && entry.attachments.length > 0) {
78
+ attachments.push(...entry.attachments);
79
+ // Only get attachments from most recent message with attachments
80
+ break;
81
+ }
82
+ }
83
+ return attachments;
84
+ }
85
+ /**
86
+ * Format history for Claude context injection
87
+ * Similar to OpenClaw's "[Chat messages since your last reply - for context]"
88
+ */
89
+ formatForContext(channelId, excludeMessageId) {
90
+ const history = this.getRecentHistory(channelId, excludeMessageId);
91
+ if (history.length === 0) {
92
+ return '';
93
+ }
94
+ const lines = history.map((entry) => {
95
+ let line = `- ${entry.sender}: ${entry.body}`;
96
+ // Add attachment indicators
97
+ if (entry.attachments && entry.attachments.length > 0) {
98
+ const imageCount = entry.attachments.filter((a) => a.type === 'image').length;
99
+ const fileCount = entry.attachments.filter((a) => a.type === 'file').length;
100
+ if (imageCount > 0) {
101
+ line += ` <media:image>${imageCount > 1 ? ` (${imageCount} images)` : ''}`;
102
+ }
103
+ if (fileCount > 0) {
104
+ line += ` <media:document>${fileCount > 1 ? ` (${fileCount} files)` : ''}`;
105
+ }
106
+ }
107
+ return line;
108
+ });
109
+ return `[Chat messages since your last reply - for context]
110
+ ${lines.join('\n')}`;
111
+ }
112
+ /**
113
+ * Clear history for a channel (after bot reply, like OpenClaw)
114
+ */
115
+ clear(channelId) {
116
+ this.histories.delete(channelId);
117
+ }
118
+ /**
119
+ * Clear attachments from history while keeping text for conversation context
120
+ */
121
+ clearAttachments(channelId) {
122
+ const history = this.histories.get(channelId);
123
+ if (!history)
124
+ return;
125
+ for (const entry of history) {
126
+ delete entry.attachments;
127
+ }
128
+ }
129
+ /**
130
+ * Clear all histories
131
+ */
132
+ clearAll() {
133
+ this.histories.clear();
134
+ }
135
+ /**
136
+ * Get all channel IDs with history
137
+ */
138
+ getChannelIds() {
139
+ return Array.from(this.histories.keys());
140
+ }
141
+ /**
142
+ * Cleanup old entries across all channels
143
+ */
144
+ cleanup() {
145
+ const cutoff = Date.now() - this.config.maxAgeMs;
146
+ let cleaned = 0;
147
+ for (const [channelId, history] of this.histories.entries()) {
148
+ const before = history.length;
149
+ const filtered = history.filter((entry) => entry.timestamp > cutoff);
150
+ if (filtered.length === 0) {
151
+ this.histories.delete(channelId);
152
+ }
153
+ else if (filtered.length !== before) {
154
+ this.histories.set(channelId, filtered);
155
+ }
156
+ cleaned += before - filtered.length;
157
+ }
158
+ return cleaned;
159
+ }
160
+ }
161
+ exports.ChannelHistory = ChannelHistory;
162
+ /**
163
+ * Global channel history instance
164
+ */
165
+ let globalChannelHistory = null;
166
+ /**
167
+ * Get global channel history instance
168
+ */
169
+ function getChannelHistory() {
170
+ if (!globalChannelHistory) {
171
+ globalChannelHistory = new ChannelHistory();
172
+ }
173
+ return globalChannelHistory;
174
+ }
175
+ /**
176
+ * Set global channel history instance (for testing)
177
+ */
178
+ function setChannelHistory(history) {
179
+ globalChannelHistory = history;
180
+ }
181
+ //# sourceMappingURL=channel-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-history.js","sourceRoot":"","sources":["../../src/gateways/channel-history.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Context Injector for proactive decision retrieval
3
+ *
4
+ * Searches MAMA's decision graph for relevant context
5
+ * and formats it for injection into system prompts.
6
+ */
7
+ import type { RelatedDecision, MessageRouterConfig } from './types.js';
8
+ /**
9
+ * MAMA API interface for context injection
10
+ *
11
+ * This interface abstracts the MAMA API calls,
12
+ * allowing for easy mocking in tests.
13
+ */
14
+ export interface MamaApiClient {
15
+ /**
16
+ * Search for decisions related to a query
17
+ */
18
+ search(query: string, limit?: number): Promise<SearchResult[]>;
19
+ }
20
+ /**
21
+ * Search result from MAMA API
22
+ */
23
+ export interface SearchResult {
24
+ id: string;
25
+ topic?: string;
26
+ decision?: string;
27
+ reasoning?: string;
28
+ outcome?: string;
29
+ similarity: number;
30
+ }
31
+ /**
32
+ * Context injection result
33
+ */
34
+ export interface InjectedContext {
35
+ /** Formatted context string for system prompt */
36
+ prompt: string;
37
+ /** Related decisions that were found */
38
+ decisions: RelatedDecision[];
39
+ /** Whether any relevant context was found */
40
+ hasContext: boolean;
41
+ }
42
+ /**
43
+ * Context Injector class
44
+ *
45
+ * Retrieves relevant decisions from MAMA memory and formats
46
+ * them for injection into the agent's system prompt.
47
+ */
48
+ export declare class ContextInjector {
49
+ private mamaApi;
50
+ private similarityThreshold;
51
+ private maxDecisions;
52
+ constructor(mamaApi: MamaApiClient, config?: Pick<MessageRouterConfig, 'similarityThreshold' | 'maxDecisions'>);
53
+ /**
54
+ * Get relevant context for a user message
55
+ */
56
+ getRelevantContext(query: string): Promise<InjectedContext>;
57
+ /**
58
+ * Format decisions into a system prompt section
59
+ */
60
+ private formatPrompt;
61
+ /**
62
+ * Parse outcome string to typed value
63
+ */
64
+ private parseOutcome;
65
+ /**
66
+ * Update configuration
67
+ */
68
+ setConfig(config: Pick<MessageRouterConfig, 'similarityThreshold' | 'maxDecisions'>): void;
69
+ }
70
+ /**
71
+ * Create a mock MAMA API client for testing
72
+ */
73
+ export declare function createMockMamaApi(decisions?: SearchResult[]): MamaApiClient;
74
+ //# sourceMappingURL=context-injector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-injector.d.ts","sourceRoot":"","sources":["../../src/gateways/context-injector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEvE;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;CAChE;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,6CAA6C;IAC7C,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;;GAKG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,YAAY,CAAS;gBAG3B,OAAO,EAAE,aAAa,EACtB,MAAM,GAAE,IAAI,CAAC,mBAAmB,EAAE,qBAAqB,GAAG,cAAc,CAAM;IAOhF;;OAEG;IACG,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAsCjE;;OAEG;IACH,OAAO,CAAC,YAAY;IAwBpB;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,mBAAmB,EAAE,qBAAqB,GAAG,cAAc,CAAC,GAAG,IAAI;CAQ3F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,GAAE,YAAY,EAAO,GAAG,aAAa,CAM/E"}
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ /**
3
+ * Context Injector for proactive decision retrieval
4
+ *
5
+ * Searches MAMA's decision graph for relevant context
6
+ * and formats it for injection into system prompts.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ContextInjector = void 0;
10
+ exports.createMockMamaApi = createMockMamaApi;
11
+ /**
12
+ * Context Injector class
13
+ *
14
+ * Retrieves relevant decisions from MAMA memory and formats
15
+ * them for injection into the agent's system prompt.
16
+ */
17
+ class ContextInjector {
18
+ mamaApi;
19
+ similarityThreshold;
20
+ maxDecisions;
21
+ constructor(mamaApi, config = {}) {
22
+ this.mamaApi = mamaApi;
23
+ this.similarityThreshold = config.similarityThreshold ?? 0.7;
24
+ this.maxDecisions = config.maxDecisions ?? 3;
25
+ }
26
+ /**
27
+ * Get relevant context for a user message
28
+ */
29
+ async getRelevantContext(query) {
30
+ if (!query.trim()) {
31
+ return { prompt: '', decisions: [], hasContext: false };
32
+ }
33
+ try {
34
+ const results = await this.mamaApi.search(query, this.maxDecisions + 2);
35
+ // Filter by similarity threshold
36
+ const relevant = results
37
+ .filter((r) => r.similarity >= this.similarityThreshold)
38
+ .slice(0, this.maxDecisions);
39
+ if (relevant.length === 0) {
40
+ return { prompt: '', decisions: [], hasContext: false };
41
+ }
42
+ // Convert to RelatedDecision format
43
+ const decisions = relevant.map((r) => ({
44
+ id: r.id,
45
+ topic: r.topic || 'unknown',
46
+ decision: r.decision || '',
47
+ reasoning: r.reasoning,
48
+ outcome: this.parseOutcome(r.outcome),
49
+ similarity: r.similarity,
50
+ }));
51
+ // Format prompt
52
+ const prompt = this.formatPrompt(decisions);
53
+ return { prompt, decisions, hasContext: true };
54
+ }
55
+ catch (error) {
56
+ // Log error but don't fail - context is optional
57
+ console.error('Failed to get relevant context:', error);
58
+ return { prompt: '', decisions: [], hasContext: false };
59
+ }
60
+ }
61
+ /**
62
+ * Format decisions into a system prompt section
63
+ */
64
+ formatPrompt(decisions) {
65
+ const sections = decisions.map((d) => {
66
+ let section = `### ${d.topic}\n`;
67
+ section += `- **Decision:** ${d.decision}\n`;
68
+ if (d.reasoning) {
69
+ section += `- **Reasoning:** ${d.reasoning}\n`;
70
+ }
71
+ section += `- **Outcome:** ${d.outcome || 'pending'}\n`;
72
+ section += `- **Relevance:** ${Math.round(d.similarity * 100)}%`;
73
+ return section;
74
+ });
75
+ return `
76
+ ## Related decisions from your memory:
77
+
78
+ ${sections.join('\n\n')}
79
+
80
+ Consider these previous decisions when responding. Reference them if relevant.
81
+ `;
82
+ }
83
+ /**
84
+ * Parse outcome string to typed value
85
+ */
86
+ parseOutcome(outcome) {
87
+ if (!outcome)
88
+ return 'pending';
89
+ const lower = outcome.toLowerCase();
90
+ if (lower === 'success')
91
+ return 'success';
92
+ if (lower === 'failed')
93
+ return 'failed';
94
+ if (lower === 'partial')
95
+ return 'partial';
96
+ return 'pending';
97
+ }
98
+ /**
99
+ * Update configuration
100
+ */
101
+ setConfig(config) {
102
+ if (config.similarityThreshold !== undefined) {
103
+ this.similarityThreshold = config.similarityThreshold;
104
+ }
105
+ if (config.maxDecisions !== undefined) {
106
+ this.maxDecisions = config.maxDecisions;
107
+ }
108
+ }
109
+ }
110
+ exports.ContextInjector = ContextInjector;
111
+ /**
112
+ * Create a mock MAMA API client for testing
113
+ */
114
+ function createMockMamaApi(decisions = []) {
115
+ return {
116
+ async search(_query, limit) {
117
+ return decisions.slice(0, limit || decisions.length);
118
+ },
119
+ };
120
+ }
121
+ //# sourceMappingURL=context-injector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-injector.js","sourceRoot":"","sources":["../../src/gateways/context-injector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Discord Gateway for MAMA Standalone
3
+ *
4
+ * Provides Discord bot integration for receiving and responding to messages.
5
+ * Supports both DM and channel mentions with configurable filtering.
6
+ */
7
+ import { Message } from 'discord.js';
8
+ import { MessageRouter } from './message-router.js';
9
+ import type { Gateway, GatewayEventHandler, DiscordGatewayConfig, DiscordGuildConfig, DiscordChannelConfig } from './types.js';
10
+ /**
11
+ * Discord Gateway options
12
+ */
13
+ export interface DiscordGatewayOptions {
14
+ /** Discord bot token */
15
+ token: string;
16
+ /** Message router for processing messages */
17
+ messageRouter: MessageRouter;
18
+ /** Gateway configuration */
19
+ config?: Partial<DiscordGatewayConfig>;
20
+ }
21
+ /**
22
+ * Discord Gateway class
23
+ *
24
+ * Connects to Discord via bot token and routes messages
25
+ * to the MessageRouter for processing.
26
+ */
27
+ export declare class DiscordGateway implements Gateway {
28
+ readonly source: "discord";
29
+ private client;
30
+ private token;
31
+ private messageRouter;
32
+ private config;
33
+ private eventHandlers;
34
+ private connected;
35
+ private lastEditTime;
36
+ private pendingEdit;
37
+ private editTimer;
38
+ constructor(options: DiscordGatewayOptions);
39
+ /**
40
+ * Set up Discord client event listeners
41
+ */
42
+ private setupEventListeners;
43
+ /**
44
+ * Handle incoming Discord message
45
+ */
46
+ private handleMessage;
47
+ /**
48
+ * Check if bot should respond to this message
49
+ */
50
+ private shouldRespond;
51
+ /**
52
+ * Clean message content (remove mentions)
53
+ */
54
+ private cleanMessageContent;
55
+ /**
56
+ * Edit message with 150ms throttle to respect Discord rate limits
57
+ */
58
+ editMessageThrottled(message: Message, content: string): Promise<void>;
59
+ /**
60
+ * Flush pending edit to Discord
61
+ */
62
+ private flushEdit;
63
+ /**
64
+ * Send response to Discord (handling length limits)
65
+ */
66
+ private sendResponse;
67
+ /**
68
+ * Emit event to registered handlers
69
+ */
70
+ private emitEvent;
71
+ /**
72
+ * Start the Discord gateway
73
+ */
74
+ start(): Promise<void>;
75
+ /**
76
+ * Stop the Discord gateway
77
+ */
78
+ stop(): Promise<void>;
79
+ /**
80
+ * Check if gateway is connected
81
+ */
82
+ isConnected(): boolean;
83
+ /**
84
+ * Register event handler
85
+ */
86
+ onEvent(handler: GatewayEventHandler): void;
87
+ /**
88
+ * Update gateway configuration
89
+ */
90
+ setConfig(config: Partial<DiscordGatewayConfig>): void;
91
+ /**
92
+ * Get current configuration
93
+ */
94
+ getConfig(): DiscordGatewayConfig;
95
+ /**
96
+ * Add guild configuration
97
+ */
98
+ addGuildConfig(guildId: string, config: DiscordGuildConfig): void;
99
+ /**
100
+ * Add channel configuration
101
+ */
102
+ addChannelConfig(guildId: string, channelId: string, config: DiscordChannelConfig): void;
103
+ /**
104
+ * Send a message to a specific channel
105
+ */
106
+ sendMessage(channelId: string, content: string): Promise<void>;
107
+ /**
108
+ * Download attachment to local file
109
+ */
110
+ private downloadAttachment;
111
+ private compressImage;
112
+ /**
113
+ * Build content blocks from attachments (OpenClaw-style)
114
+ * Converts images to base64-encoded content blocks for Claude
115
+ */
116
+ private buildContentBlocks;
117
+ /**
118
+ * Send an image file to a specific channel
119
+ */
120
+ sendImage(channelId: string, imagePath: string, caption?: string): Promise<void>;
121
+ }
122
+ //# sourceMappingURL=discord.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discord.d.ts","sourceRoot":"","sources":["../../src/gateways/discord.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAuC,OAAO,EAAuB,MAAM,YAAY,CAAC;AAC/F,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIpD,OAAO,KAAK,EACV,OAAO,EAEP,mBAAmB,EAEnB,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EAGrB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,aAAa,EAAE,aAAa,CAAC;IAC7B,4BAA4B;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACxC;AAED;;;;;GAKG;AACH,qBAAa,cAAe,YAAW,OAAO;IAC5C,QAAQ,CAAC,MAAM,EAAG,SAAS,CAAU;IAErC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,SAAS,CAAS;IAG1B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,SAAS,CAA+B;gBAEpC,OAAO,EAAE,qBAAqB;IAuB1C;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAkD3B;;OAEG;YACW,aAAa;IAsM3B;;OAEG;IACH,OAAO,CAAC,aAAa;IAyCrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;OAEG;IACG,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAc5E;;OAEG;YACW,SAAS;IAQvB;;OAEG;YACW,YAAY;IAiC1B;;OAEG;IACH,OAAO,CAAC,SAAS;IAcjB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAe3B;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAQ3C;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI;IAStD;;OAEG;IACH,SAAS,IAAI,oBAAoB;IAIjC;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAKjE;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,GAAG,IAAI;IASxF;;OAEG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBpE;;OAEG;YACW,kBAAkB;YA4BlB,aAAa;IA8B3B;;;OAGG;YACW,kBAAkB;IAgEhC;;OAEG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAsBvF"}