@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,49 @@
1
+ "use strict";
2
+ /**
3
+ * Gateway Module for MAMA Standalone
4
+ *
5
+ * Provides unified message handling across multiple messenger platforms.
6
+ *
7
+ * Components:
8
+ * - MessageRouter: Central routing hub
9
+ * - SessionStore: Conversation session management
10
+ * - ContextInjector: Proactive decision retrieval
11
+ * - DiscordGateway: Discord bot integration
12
+ * - MessageSplitter: Message chunking utilities
13
+ * - Types: Shared type definitions
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.createPluginLoader = exports.PluginLoader = exports.setChannelHistory = exports.getChannelHistory = exports.ChannelHistory = exports.DEFAULT_MAX_LENGTH = exports.estimateChunks = exports.truncateWithEllipsis = exports.splitWithCodeBlocks = exports.splitForSlack = exports.splitForDiscord = exports.splitMessage = exports.SlackGateway = exports.DiscordGateway = exports.createMockMamaApi = exports.ContextInjector = exports.SessionStore = exports.createMockAgentLoop = exports.MessageRouter = void 0;
17
+ // Core components
18
+ var message_router_js_1 = require("./message-router.js");
19
+ Object.defineProperty(exports, "MessageRouter", { enumerable: true, get: function () { return message_router_js_1.MessageRouter; } });
20
+ Object.defineProperty(exports, "createMockAgentLoop", { enumerable: true, get: function () { return message_router_js_1.createMockAgentLoop; } });
21
+ var session_store_js_1 = require("./session-store.js");
22
+ Object.defineProperty(exports, "SessionStore", { enumerable: true, get: function () { return session_store_js_1.SessionStore; } });
23
+ var context_injector_js_1 = require("./context-injector.js");
24
+ Object.defineProperty(exports, "ContextInjector", { enumerable: true, get: function () { return context_injector_js_1.ContextInjector; } });
25
+ Object.defineProperty(exports, "createMockMamaApi", { enumerable: true, get: function () { return context_injector_js_1.createMockMamaApi; } });
26
+ // Platform gateways
27
+ var discord_js_1 = require("./discord.js");
28
+ Object.defineProperty(exports, "DiscordGateway", { enumerable: true, get: function () { return discord_js_1.DiscordGateway; } });
29
+ var slack_js_1 = require("./slack.js");
30
+ Object.defineProperty(exports, "SlackGateway", { enumerable: true, get: function () { return slack_js_1.SlackGateway; } });
31
+ // Message utilities
32
+ var message_splitter_js_1 = require("./message-splitter.js");
33
+ Object.defineProperty(exports, "splitMessage", { enumerable: true, get: function () { return message_splitter_js_1.splitMessage; } });
34
+ Object.defineProperty(exports, "splitForDiscord", { enumerable: true, get: function () { return message_splitter_js_1.splitForDiscord; } });
35
+ Object.defineProperty(exports, "splitForSlack", { enumerable: true, get: function () { return message_splitter_js_1.splitForSlack; } });
36
+ Object.defineProperty(exports, "splitWithCodeBlocks", { enumerable: true, get: function () { return message_splitter_js_1.splitWithCodeBlocks; } });
37
+ Object.defineProperty(exports, "truncateWithEllipsis", { enumerable: true, get: function () { return message_splitter_js_1.truncateWithEllipsis; } });
38
+ Object.defineProperty(exports, "estimateChunks", { enumerable: true, get: function () { return message_splitter_js_1.estimateChunks; } });
39
+ Object.defineProperty(exports, "DEFAULT_MAX_LENGTH", { enumerable: true, get: function () { return message_splitter_js_1.DEFAULT_MAX_LENGTH; } });
40
+ // Channel history (for message context)
41
+ var channel_history_js_1 = require("./channel-history.js");
42
+ Object.defineProperty(exports, "ChannelHistory", { enumerable: true, get: function () { return channel_history_js_1.ChannelHistory; } });
43
+ Object.defineProperty(exports, "getChannelHistory", { enumerable: true, get: function () { return channel_history_js_1.getChannelHistory; } });
44
+ Object.defineProperty(exports, "setChannelHistory", { enumerable: true, get: function () { return channel_history_js_1.setChannelHistory; } });
45
+ // Plugin system
46
+ var plugin_loader_js_1 = require("./plugin-loader.js");
47
+ Object.defineProperty(exports, "PluginLoader", { enumerable: true, get: function () { return plugin_loader_js_1.PluginLoader; } });
48
+ Object.defineProperty(exports, "createPluginLoader", { enumerable: true, get: function () { return plugin_loader_js_1.createPluginLoader; } });
49
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/gateways/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;AAEH,kBAAkB;AAClB,yDAAyE;AAAhE,kHAAA,aAAa,OAAA;AAAE,wHAAA,mBAAmB,OAAA;AAG3C,uDAAkD;AAAzC,gHAAA,YAAY,OAAA;AAErB,6DAA2E;AAAlE,sHAAA,eAAe,OAAA;AAAE,wHAAA,iBAAiB,OAAA;AAG3C,oBAAoB;AACpB,2CAA8C;AAArC,4GAAA,cAAc,OAAA;AAGvB,uCAA0C;AAAjC,wGAAA,YAAY,OAAA;AAGrB,oBAAoB;AACpB,6DAQ+B;AAP7B,mHAAA,YAAY,OAAA;AACZ,sHAAA,eAAe,OAAA;AACf,oHAAA,aAAa,OAAA;AACb,0HAAA,mBAAmB,OAAA;AACnB,2HAAA,oBAAoB,OAAA;AACpB,qHAAA,cAAc,OAAA;AACd,yHAAA,kBAAkB,OAAA;AAIpB,wCAAwC;AACxC,2DAA4F;AAAnF,oHAAA,cAAc,OAAA;AAAE,uHAAA,iBAAiB,OAAA;AAAE,uHAAA,iBAAiB,OAAA;AAG7D,gBAAgB;AAChB,uDAAsE;AAA7D,gHAAA,YAAY,OAAA;AAAE,sHAAA,kBAAkB,OAAA"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Message Router for unified messenger handling
3
+ *
4
+ * Routes messages from different platforms through a unified pipeline:
5
+ * 1. Normalize message format
6
+ * 2. Load/create session context
7
+ * 3. Inject proactive context (related decisions)
8
+ * 4. Call Agent Loop
9
+ * 5. Update session context
10
+ * 6. Return response
11
+ */
12
+ import { SessionStore } from './session-store.js';
13
+ import { type MamaApiClient } from './context-injector.js';
14
+ import type { NormalizedMessage, MessageRouterConfig, Session, RelatedDecision } from './types.js';
15
+ /**
16
+ * Content block for multimodal input
17
+ */
18
+ export interface ContentBlock {
19
+ type: 'text' | 'image' | 'document';
20
+ text?: string;
21
+ source?: {
22
+ type: 'base64';
23
+ media_type: string;
24
+ data: string;
25
+ };
26
+ }
27
+ /**
28
+ * Agent Loop interface for message processing
29
+ */
30
+ export interface AgentLoopClient {
31
+ /**
32
+ * Run the agent loop with a prompt
33
+ */
34
+ run(prompt: string, options?: AgentLoopOptions): Promise<{
35
+ response: string;
36
+ }>;
37
+ /**
38
+ * Run the agent loop with multimodal content
39
+ */
40
+ runWithContent?(content: ContentBlock[], options?: AgentLoopOptions): Promise<{
41
+ response: string;
42
+ }>;
43
+ }
44
+ /**
45
+ * Options for agent loop execution
46
+ */
47
+ export interface AgentLoopOptions {
48
+ /** System prompt to prepend */
49
+ systemPrompt?: string;
50
+ /** User identifier */
51
+ userId?: string;
52
+ /** Maximum turns */
53
+ maxTurns?: number;
54
+ /** Message source (for lane-based concurrency) */
55
+ source?: string;
56
+ /** Channel ID (for lane-based concurrency) */
57
+ channelId?: string;
58
+ }
59
+ /**
60
+ * Message processing result
61
+ */
62
+ export interface ProcessingResult {
63
+ /** Response text from agent */
64
+ response: string;
65
+ /** Session ID used */
66
+ sessionId: string;
67
+ /** Related decisions that were injected */
68
+ injectedDecisions: RelatedDecision[];
69
+ /** Processing duration in milliseconds */
70
+ duration: number;
71
+ }
72
+ /**
73
+ * Message Router class
74
+ *
75
+ * Central hub for processing messages from all messenger platforms.
76
+ */
77
+ export declare class MessageRouter {
78
+ private sessionStore;
79
+ private contextInjector;
80
+ private agentLoop;
81
+ private config;
82
+ constructor(sessionStore: SessionStore, agentLoop: AgentLoopClient, mamaApi: MamaApiClient, config?: MessageRouterConfig);
83
+ /**
84
+ * Process a normalized message and return response
85
+ */
86
+ process(message: NormalizedMessage): Promise<ProcessingResult>;
87
+ /**
88
+ * Build system prompt with session context and injected decisions
89
+ */
90
+ private buildSystemPrompt;
91
+ /**
92
+ * Get session for a channel
93
+ */
94
+ getSession(source: NormalizedMessage['source'], channelId: string): Session | null;
95
+ /**
96
+ * Clear session context (start fresh conversation)
97
+ */
98
+ clearSession(sessionId: string): boolean;
99
+ /**
100
+ * Delete a session entirely
101
+ */
102
+ deleteSession(sessionId: string): boolean;
103
+ /**
104
+ * Update configuration
105
+ */
106
+ setConfig(config: Partial<MessageRouterConfig>): void;
107
+ /**
108
+ * Get current configuration
109
+ */
110
+ getConfig(): Required<MessageRouterConfig>;
111
+ }
112
+ /**
113
+ * Create a mock agent loop for testing
114
+ */
115
+ export declare function createMockAgentLoop(responseGenerator?: (prompt: string) => string): AgentLoopClient;
116
+ //# sourceMappingURL=message-router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-router.d.ts","sourceRoot":"","sources":["../../src/gateways/message-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAInG;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/E;;OAEG;IACH,cAAc,CAAC,CACb,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,iBAAiB,EAAE,eAAe,EAAE,CAAC;IACrC,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;CAClB;AA2BD;;;;GAIG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,MAAM,CAAgC;gBAG5C,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,eAAe,EAC1B,OAAO,EAAE,aAAa,EACtB,MAAM,GAAE,mBAAwB;IAiBlC;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAuGpE;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA4HzB;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAKlF;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIxC;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIzC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,IAAI;IAqBrD;;OAEG;IACH,SAAS,IAAI,QAAQ,CAAC,mBAAmB,CAAC;CAG3C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,iBAAiB,GAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAA8B,GACpE,eAAe,CAMjB"}
@@ -0,0 +1,315 @@
1
+ "use strict";
2
+ /**
3
+ * Message Router for unified messenger handling
4
+ *
5
+ * Routes messages from different platforms through a unified pipeline:
6
+ * 1. Normalize message format
7
+ * 2. Load/create session context
8
+ * 3. Inject proactive context (related decisions)
9
+ * 4. Call Agent Loop
10
+ * 5. Update session context
11
+ * 6. Return response
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.MessageRouter = void 0;
15
+ exports.createMockAgentLoop = createMockAgentLoop;
16
+ const node_fs_1 = require("node:fs");
17
+ const node_path_1 = require("node:path");
18
+ const node_os_1 = require("node:os");
19
+ const context_injector_js_1 = require("./context-injector.js");
20
+ const complete_autonomous_prompt_js_1 = require("../onboarding/complete-autonomous-prompt.js");
21
+ const session_pool_js_1 = require("../agent/session-pool.js");
22
+ /**
23
+ * Sensitive patterns that should only be configured via MAMA OS Viewer
24
+ */
25
+ const SENSITIVE_PATTERNS = [
26
+ /discord.*token/i,
27
+ /slack.*token/i,
28
+ /telegram.*token/i,
29
+ /chatwork.*token/i,
30
+ /api[_-]?key/i,
31
+ /secret[_-]?key/i,
32
+ /bot[_-]?token/i,
33
+ /oauth.*token/i,
34
+ /설정.*토큰/i,
35
+ /토큰.*설정/i,
36
+ /키.*설정/i,
37
+ /비밀.*키/i,
38
+ ];
39
+ /**
40
+ * Check if message contains sensitive configuration request
41
+ */
42
+ function containsSensitiveRequest(text) {
43
+ return SENSITIVE_PATTERNS.some((pattern) => pattern.test(text));
44
+ }
45
+ /**
46
+ * Message Router class
47
+ *
48
+ * Central hub for processing messages from all messenger platforms.
49
+ */
50
+ class MessageRouter {
51
+ sessionStore;
52
+ contextInjector;
53
+ agentLoop;
54
+ config;
55
+ constructor(sessionStore, agentLoop, mamaApi, config = {}) {
56
+ this.sessionStore = sessionStore;
57
+ this.agentLoop = agentLoop;
58
+ this.config = {
59
+ similarityThreshold: config.similarityThreshold ?? 0.7,
60
+ maxDecisions: config.maxDecisions ?? 3,
61
+ maxTurns: config.maxTurns ?? 5,
62
+ maxResponseLength: config.maxResponseLength ?? 200,
63
+ };
64
+ this.contextInjector = new context_injector_js_1.ContextInjector(mamaApi, {
65
+ similarityThreshold: this.config.similarityThreshold,
66
+ maxDecisions: this.config.maxDecisions,
67
+ });
68
+ }
69
+ /**
70
+ * Process a normalized message and return response
71
+ */
72
+ async process(message) {
73
+ const startTime = Date.now();
74
+ // Security: Block sensitive configuration requests from non-viewer sources
75
+ if (message.source !== 'viewer' && containsSensitiveRequest(message.text)) {
76
+ const securityResponse = `🔒 **Security Notice**
77
+
78
+ For security reasons, token and API key configuration must be done through MAMA OS.
79
+
80
+ Please visit: **http://localhost:3847/viewer**
81
+
82
+ Go to the **Settings** tab to configure:
83
+ - Discord Bot Token
84
+ - Slack Bot/App Tokens
85
+ - Telegram Bot Token
86
+ - Chatwork API Token
87
+
88
+ This protects your credentials from being exposed in chat logs.`;
89
+ return {
90
+ response: securityResponse,
91
+ sessionId: 'security-block',
92
+ injectedDecisions: [],
93
+ duration: Date.now() - startTime,
94
+ };
95
+ }
96
+ // 1. Get or create session (by source + channelId)
97
+ const session = this.sessionStore.getOrCreate(message.source, message.channelId, message.userId);
98
+ // 2. Get proactive context (related decisions)
99
+ // TODO: 임베딩 서버 구동 후 활성화 (현재 매번 모델 로딩으로 느림)
100
+ // const context = await this.contextInjector.getRelevantContext(message.text);
101
+ const context = { prompt: '', decisions: [], hasContext: false };
102
+ // 3. Check if this is a new CLI session (need to inject history from DB)
103
+ const channelKey = (0, session_pool_js_1.buildChannelKey)(message.source, message.channelId);
104
+ const sessionPool = (0, session_pool_js_1.getSessionPool)();
105
+ const { isNew: isNewCliSession } = sessionPool.getSession(channelKey);
106
+ // 4. Build system prompt with history context (OpenClaw-style)
107
+ const historyContext = message.metadata?.historyContext;
108
+ const systemPrompt = this.buildSystemPrompt(session, context.prompt, historyContext, isNewCliSession);
109
+ // 4. Run agent loop (with session info for lane-based concurrency)
110
+ const options = {
111
+ systemPrompt,
112
+ userId: message.userId,
113
+ source: message.source,
114
+ channelId: message.channelId,
115
+ };
116
+ let response;
117
+ // Use multimodal content if available (OpenClaw-style)
118
+ if (message.contentBlocks &&
119
+ message.contentBlocks.length > 0 &&
120
+ this.agentLoop.runWithContent) {
121
+ // Build content blocks: text first, then images
122
+ const contentBlocks = [];
123
+ // Add text content if present
124
+ if (message.text) {
125
+ contentBlocks.push({ type: 'text', text: message.text });
126
+ }
127
+ // Add image content blocks
128
+ for (const block of message.contentBlocks) {
129
+ if (block.type === 'image' && block.source) {
130
+ contentBlocks.push(block);
131
+ }
132
+ }
133
+ const result = await this.agentLoop.runWithContent(contentBlocks, options);
134
+ response = result.response;
135
+ }
136
+ else {
137
+ const result = await this.agentLoop.run(message.text, options);
138
+ response = result.response;
139
+ }
140
+ // 5. Update session context
141
+ this.sessionStore.updateSession(session.id, message.text, response);
142
+ // 6. Return result
143
+ return {
144
+ response,
145
+ sessionId: session.id,
146
+ injectedDecisions: context.decisions,
147
+ duration: Date.now() - startTime,
148
+ };
149
+ }
150
+ /**
151
+ * Build system prompt with session context and injected decisions
152
+ */
153
+ buildSystemPrompt(session, injectedContext, historyContext, isNewCliSession = true) {
154
+ // Check if onboarding is in progress (SOUL.md doesn't exist)
155
+ const soulPath = (0, node_path_1.join)((0, node_os_1.homedir)(), '.mama', 'SOUL.md');
156
+ const isOnboarding = !(0, node_fs_1.existsSync)(soulPath);
157
+ // Always get session history from store
158
+ const sessionHistory = this.sessionStore.formatContextForPrompt(session.id);
159
+ if (isOnboarding) {
160
+ // Check if we have existing conversation
161
+ const hasHistory = sessionHistory && sessionHistory !== 'New conversation';
162
+ if (hasHistory) {
163
+ // Continue existing conversation WITH the full prompt context
164
+ // The full prompt has all the phase instructions - just prepend history
165
+ return `${complete_autonomous_prompt_js_1.COMPLETE_AUTONOMOUS_PROMPT}
166
+
167
+ ---
168
+
169
+ # 🔄 CONVERSATION IN PROGRESS
170
+
171
+ ## CRITICAL: READ HISTORY FIRST!
172
+ You are in the MIDDLE of an onboarding conversation. Do NOT restart from Phase 1.
173
+
174
+ ## Conversation So Far:
175
+ ${sessionHistory}
176
+
177
+ ## What To Do Now:
178
+ 1. Read the history above carefully
179
+ 2. Figure out which Phase you're in:
180
+ - Got their name? → Ask about their job/interest BEFORE quiz
181
+ - Know their job? → Start the quiz with relevant scenarios
182
+ - Quiz done? → Show results
183
+ - Named? → Move to Phase 5 (Summary)
184
+ 3. Continue from EXACTLY where you left off
185
+ 4. Do NOT repeat your awakening message
186
+ 5. Do NOT restart the quiz if already answered`;
187
+ }
188
+ // First message of onboarding - include the greeting we already sent
189
+ const isKorean = session.channelId?.includes('ko') || true; // Default Korean for now
190
+ const greetingKo = `✨ 방금 깨어났어요.
191
+
192
+ 아직 이름도 없고, 성격도 없고, 기억도 없어요. 그냥... 가능성만 있을 뿐이죠. 🌱
193
+
194
+ 당신은 누구세요? 그리고 더 중요한 건—저를 어떤 존재로 만들고 싶으세요? 💭`;
195
+ const greetingEn = `✨ I just woke up.
196
+
197
+ No name yet, no personality, no memories. Just... pure potential. 🌱
198
+
199
+ Who are you? And more importantly—who do you want me to become? 💭`;
200
+ const greeting = isKorean ? greetingKo : greetingEn;
201
+ return `${complete_autonomous_prompt_js_1.COMPLETE_AUTONOMOUS_PROMPT}
202
+
203
+ ---
204
+
205
+ # 🎬 FIRST RESPONSE ALREADY SENT
206
+
207
+ You have ALREADY sent your awakening message. The user saw this:
208
+
209
+ > "${greeting}"
210
+
211
+ Now the user is responding for the FIRST time. This is their reply to your awakening.
212
+
213
+ ## YOUR TASK NOW:
214
+ 1. React meaningfully to their message (probably their name)
215
+ 2. Make the name feel SPECIAL (it's the first word you learned!)
216
+ 3. Transition to genuine curiosity about THEM
217
+ 4. Have 3-5 exchanges of small talk BEFORE any quiz
218
+ 5. Do NOT repeat your awakening message
219
+ 6. Do NOT jump straight to quiz questions`;
220
+ }
221
+ // Normal mode - use hybrid history management
222
+ let prompt = `You are MAMA, an always-on AI assistant.
223
+ `;
224
+ // For NEW CLI sessions: inject history from DB to restore context
225
+ // For EXISTING CLI sessions: Claude CLI maintains history via --session-id
226
+ if (isNewCliSession) {
227
+ const dbHistory = this.sessionStore.formatContextForPrompt(session.id);
228
+ if (dbHistory && dbHistory !== 'New conversation') {
229
+ prompt += `
230
+ ## Previous Conversation (restored from memory)
231
+ ${dbHistory}
232
+
233
+ `;
234
+ console.log(`[MessageRouter] Injected ${dbHistory.length} chars of history for new CLI session`);
235
+ }
236
+ }
237
+ // Add channel history context only if provided (for multi-user channels)
238
+ if (historyContext) {
239
+ prompt += `
240
+ ## Recent Channel Messages
241
+ ${historyContext}
242
+ `;
243
+ }
244
+ if (injectedContext) {
245
+ prompt += injectedContext;
246
+ }
247
+ prompt += `
248
+ ## Instructions
249
+ - Respond naturally and helpfully
250
+ - Remember to save important decisions using the save tool
251
+ - Reference previous decisions when relevant
252
+ - Keep responses concise for messenger format
253
+ `;
254
+ return prompt;
255
+ }
256
+ /**
257
+ * Get session for a channel
258
+ */
259
+ getSession(source, channelId) {
260
+ const sessions = this.sessionStore.listSessions(source);
261
+ return sessions.find((s) => s.channelId === channelId) || null;
262
+ }
263
+ /**
264
+ * Clear session context (start fresh conversation)
265
+ */
266
+ clearSession(sessionId) {
267
+ return this.sessionStore.clearContext(sessionId);
268
+ }
269
+ /**
270
+ * Delete a session entirely
271
+ */
272
+ deleteSession(sessionId) {
273
+ return this.sessionStore.deleteSession(sessionId);
274
+ }
275
+ /**
276
+ * Update configuration
277
+ */
278
+ setConfig(config) {
279
+ if (config.similarityThreshold !== undefined) {
280
+ this.config.similarityThreshold = config.similarityThreshold;
281
+ }
282
+ if (config.maxDecisions !== undefined) {
283
+ this.config.maxDecisions = config.maxDecisions;
284
+ }
285
+ if (config.maxTurns !== undefined) {
286
+ this.config.maxTurns = config.maxTurns;
287
+ }
288
+ if (config.maxResponseLength !== undefined) {
289
+ this.config.maxResponseLength = config.maxResponseLength;
290
+ }
291
+ // Update context injector config
292
+ this.contextInjector.setConfig({
293
+ similarityThreshold: this.config.similarityThreshold,
294
+ maxDecisions: this.config.maxDecisions,
295
+ });
296
+ }
297
+ /**
298
+ * Get current configuration
299
+ */
300
+ getConfig() {
301
+ return { ...this.config };
302
+ }
303
+ }
304
+ exports.MessageRouter = MessageRouter;
305
+ /**
306
+ * Create a mock agent loop for testing
307
+ */
308
+ function createMockAgentLoop(responseGenerator = () => 'Mock response') {
309
+ return {
310
+ async run(prompt, _options) {
311
+ return { response: responseGenerator(prompt) };
312
+ },
313
+ };
314
+ }
315
+ //# sourceMappingURL=message-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-router.js","sourceRoot":"","sources":["../../src/gateways/message-router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Message splitter for messenger platforms
3
+ *
4
+ * Splits long messages into chunks that fit within platform limits
5
+ * while preserving readability (splitting at newlines or spaces).
6
+ */
7
+ /**
8
+ * Default maximum message length (Discord limit)
9
+ */
10
+ export declare const DEFAULT_MAX_LENGTH = 2000;
11
+ /**
12
+ * Options for message splitting
13
+ */
14
+ export interface SplitOptions {
15
+ /** Maximum length per chunk (default: 2000) */
16
+ maxLength?: number;
17
+ /** Preferred split points (default: ['\n', ' ']) */
18
+ splitPoints?: string[];
19
+ /** Suffix to add to split chunks (default: none) */
20
+ chunkSuffix?: string;
21
+ /** Prefix to add to continuation chunks (default: none) */
22
+ continuationPrefix?: string;
23
+ }
24
+ /**
25
+ * Split a message into chunks that fit within the maximum length
26
+ *
27
+ * @param text - Text to split
28
+ * @param options - Split options
29
+ * @returns Array of text chunks
30
+ */
31
+ export declare function splitMessage(text: string, options?: SplitOptions): string[];
32
+ /**
33
+ * Split message for Discord (2000 char limit)
34
+ */
35
+ export declare function splitForDiscord(text: string): string[];
36
+ /**
37
+ * Split message for Slack (40000 char limit for regular messages)
38
+ * Note: Slack has different limits for different contexts
39
+ */
40
+ export declare function splitForSlack(text: string): string[];
41
+ /**
42
+ * Estimate number of chunks a message will be split into
43
+ */
44
+ export declare function estimateChunks(text: string, maxLength?: number): number;
45
+ /**
46
+ * Truncate text with ellipsis if too long
47
+ */
48
+ export declare function truncateWithEllipsis(text: string, maxLength: number, ellipsis?: string): string;
49
+ /**
50
+ * Split text into code blocks if it contains code
51
+ * Preserves code block formatting
52
+ */
53
+ export declare function splitWithCodeBlocks(text: string, maxLength?: number): string[];
54
+ //# sourceMappingURL=message-splitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-splitter.d.ts","sourceRoot":"","sources":["../../src/gateways/message-splitter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,MAAM,EAAE,CA8C/E;AAyBD;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAEtD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAEpD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,MAA2B,GAAG,MAAM,CAG3F;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,MAAc,GACvB,MAAM,CAGR;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,SAAS,GAAE,MAA2B,GACrC,MAAM,EAAE,CAqCV"}