@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.
- package/CHANGELOG.md +67 -0
- package/README.md +643 -0
- package/dist/agent/agent-loop.d.ts +98 -0
- package/dist/agent/agent-loop.d.ts.map +1 -0
- package/dist/agent/agent-loop.js +417 -0
- package/dist/agent/agent-loop.js.map +1 -0
- package/dist/agent/auto-recall.d.ts +48 -0
- package/dist/agent/auto-recall.d.ts.map +1 -0
- package/dist/agent/auto-recall.js +178 -0
- package/dist/agent/auto-recall.js.map +1 -0
- package/dist/agent/claude-cli-wrapper.d.ts +130 -0
- package/dist/agent/claude-cli-wrapper.d.ts.map +1 -0
- package/dist/agent/claude-cli-wrapper.js +227 -0
- package/dist/agent/claude-cli-wrapper.js.map +1 -0
- package/dist/agent/claude-client.d.ts +50 -0
- package/dist/agent/claude-client.d.ts.map +1 -0
- package/dist/agent/claude-client.js +214 -0
- package/dist/agent/claude-client.js.map +1 -0
- package/dist/agent/gateway-tool-executor.d.ts +75 -0
- package/dist/agent/gateway-tool-executor.d.ts.map +1 -0
- package/dist/agent/gateway-tool-executor.js +348 -0
- package/dist/agent/gateway-tool-executor.js.map +1 -0
- package/dist/agent/index.d.ts +13 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +18 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/mcp-executor.d.ts +75 -0
- package/dist/agent/mcp-executor.d.ts.map +1 -0
- package/dist/agent/mcp-executor.js +307 -0
- package/dist/agent/mcp-executor.js.map +1 -0
- package/dist/agent/session-pool.d.ts +148 -0
- package/dist/agent/session-pool.d.ts.map +1 -0
- package/dist/agent/session-pool.js +272 -0
- package/dist/agent/session-pool.js.map +1 -0
- package/dist/agent/streaming-callback-manager.d.ts +85 -0
- package/dist/agent/streaming-callback-manager.d.ts.map +1 -0
- package/dist/agent/streaming-callback-manager.js +103 -0
- package/dist/agent/streaming-callback-manager.js.map +1 -0
- package/dist/agent/types.d.ts +437 -0
- package/dist/agent/types.d.ts.map +1 -0
- package/dist/agent/types.js +29 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/api/cron-handler.d.ts +44 -0
- package/dist/api/cron-handler.d.ts.map +1 -0
- package/dist/api/cron-handler.js +195 -0
- package/dist/api/cron-handler.js.map +1 -0
- package/dist/api/error-handler.d.ts +22 -0
- package/dist/api/error-handler.d.ts.map +1 -0
- package/dist/api/error-handler.js +104 -0
- package/dist/api/error-handler.js.map +1 -0
- package/dist/api/heartbeat-handler.d.ts +49 -0
- package/dist/api/heartbeat-handler.d.ts.map +1 -0
- package/dist/api/heartbeat-handler.js +91 -0
- package/dist/api/heartbeat-handler.js.map +1 -0
- package/dist/api/index.d.ts +61 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +145 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/types.d.ts +156 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +62 -0
- package/dist/api/types.js.map +1 -0
- package/dist/auth/index.d.ts +7 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +11 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/oauth-manager.d.ts +59 -0
- package/dist/auth/oauth-manager.d.ts.map +1 -0
- package/dist/auth/oauth-manager.js +237 -0
- package/dist/auth/oauth-manager.js.map +1 -0
- package/dist/auth/types.d.ts +92 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +23 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/cli/commands/init.d.ts +19 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +155 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/run.d.ts +19 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +89 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/setup.d.ts +19 -0
- package/dist/cli/commands/setup.d.ts.map +1 -0
- package/dist/cli/commands/setup.js +134 -0
- package/dist/cli/commands/setup.js.map +1 -0
- package/dist/cli/commands/start.d.ts +24 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +1073 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/status.d.ts +10 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +85 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/stop.d.ts +10 -0
- package/dist/cli/commands/stop.d.ts.map +1 -0
- package/dist/cli/commands/stop.js +65 -0
- package/dist/cli/commands/stop.js.map +1 -0
- package/dist/cli/config/config-manager.d.ts +51 -0
- package/dist/cli/config/config-manager.d.ts.map +1 -0
- package/dist/cli/config/config-manager.js +216 -0
- package/dist/cli/config/config-manager.js.map +1 -0
- package/dist/cli/config/types.d.ts +172 -0
- package/dist/cli/config/types.d.ts.map +1 -0
- package/dist/cli/config/types.js +48 -0
- package/dist/cli/config/types.js.map +1 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +92 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils/pid-manager.d.ts +66 -0
- package/dist/cli/utils/pid-manager.d.ts.map +1 -0
- package/dist/cli/utils/pid-manager.js +167 -0
- package/dist/cli/utils/pid-manager.js.map +1 -0
- package/dist/concurrency/index.d.ts +13 -0
- package/dist/concurrency/index.d.ts.map +1 -0
- package/dist/concurrency/index.js +22 -0
- package/dist/concurrency/index.js.map +1 -0
- package/dist/concurrency/lane-manager.d.ts +113 -0
- package/dist/concurrency/lane-manager.d.ts.map +1 -0
- package/dist/concurrency/lane-manager.js +245 -0
- package/dist/concurrency/lane-manager.js.map +1 -0
- package/dist/concurrency/session-key.d.ts +41 -0
- package/dist/concurrency/session-key.d.ts.map +1 -0
- package/dist/concurrency/session-key.js +61 -0
- package/dist/concurrency/session-key.js.map +1 -0
- package/dist/concurrency/types.d.ts +69 -0
- package/dist/concurrency/types.d.ts.map +1 -0
- package/dist/concurrency/types.js +16 -0
- package/dist/concurrency/types.js.map +1 -0
- package/dist/gateways/channel-history.d.ts +102 -0
- package/dist/gateways/channel-history.d.ts.map +1 -0
- package/dist/gateways/channel-history.js +181 -0
- package/dist/gateways/channel-history.js.map +1 -0
- package/dist/gateways/context-injector.d.ts +74 -0
- package/dist/gateways/context-injector.d.ts.map +1 -0
- package/dist/gateways/context-injector.js +121 -0
- package/dist/gateways/context-injector.js.map +1 -0
- package/dist/gateways/discord.d.ts +122 -0
- package/dist/gateways/discord.d.ts.map +1 -0
- package/dist/gateways/discord.js +602 -0
- package/dist/gateways/discord.js.map +1 -0
- package/dist/gateways/index.d.ts +30 -0
- package/dist/gateways/index.d.ts.map +1 -0
- package/dist/gateways/index.js +49 -0
- package/dist/gateways/index.js.map +1 -0
- package/dist/gateways/message-router.d.ts +116 -0
- package/dist/gateways/message-router.d.ts.map +1 -0
- package/dist/gateways/message-router.js +315 -0
- package/dist/gateways/message-router.js.map +1 -0
- package/dist/gateways/message-splitter.d.ts +54 -0
- package/dist/gateways/message-splitter.d.ts.map +1 -0
- package/dist/gateways/message-splitter.js +146 -0
- package/dist/gateways/message-splitter.js.map +1 -0
- package/dist/gateways/plugin-loader.d.ts +76 -0
- package/dist/gateways/plugin-loader.d.ts.map +1 -0
- package/dist/gateways/plugin-loader.js +221 -0
- package/dist/gateways/plugin-loader.js.map +1 -0
- package/dist/gateways/session-store.d.ts +77 -0
- package/dist/gateways/session-store.d.ts.map +1 -0
- package/dist/gateways/session-store.js +233 -0
- package/dist/gateways/session-store.js.map +1 -0
- package/dist/gateways/slack.d.ts +90 -0
- package/dist/gateways/slack.d.ts.map +1 -0
- package/dist/gateways/slack.js +281 -0
- package/dist/gateways/slack.js.map +1 -0
- package/dist/gateways/telegram.d.ts +79 -0
- package/dist/gateways/telegram.d.ts.map +1 -0
- package/dist/gateways/telegram.js +207 -0
- package/dist/gateways/telegram.js.map +1 -0
- package/dist/gateways/types.d.ts +340 -0
- package/dist/gateways/types.d.ts.map +1 -0
- package/dist/gateways/types.js +6 -0
- package/dist/gateways/types.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/memory-logger.d.ts +47 -0
- package/dist/memory/memory-logger.d.ts.map +1 -0
- package/dist/memory/memory-logger.js +126 -0
- package/dist/memory/memory-logger.js.map +1 -0
- package/dist/onboarding/all-tools.d.ts +18 -0
- package/dist/onboarding/all-tools.d.ts.map +1 -0
- package/dist/onboarding/all-tools.js +149 -0
- package/dist/onboarding/all-tools.js.map +1 -0
- package/dist/onboarding/autonomous-discovery-tools.d.ts +13 -0
- package/dist/onboarding/autonomous-discovery-tools.d.ts.map +1 -0
- package/dist/onboarding/autonomous-discovery-tools.js +268 -0
- package/dist/onboarding/autonomous-discovery-tools.js.map +1 -0
- package/dist/onboarding/bootstrap-template.d.ts +5 -0
- package/dist/onboarding/bootstrap-template.d.ts.map +1 -0
- package/dist/onboarding/bootstrap-template.js +142 -0
- package/dist/onboarding/bootstrap-template.js.map +1 -0
- package/dist/onboarding/complete-autonomous-prompt.d.ts +13 -0
- package/dist/onboarding/complete-autonomous-prompt.d.ts.map +1 -0
- package/dist/onboarding/complete-autonomous-prompt.js +1220 -0
- package/dist/onboarding/complete-autonomous-prompt.js.map +1 -0
- package/dist/onboarding/onboarding-state.d.ts +70 -0
- package/dist/onboarding/onboarding-state.d.ts.map +1 -0
- package/dist/onboarding/onboarding-state.js +184 -0
- package/dist/onboarding/onboarding-state.js.map +1 -0
- package/dist/onboarding/personality-quiz.d.ts +35 -0
- package/dist/onboarding/personality-quiz.d.ts.map +1 -0
- package/dist/onboarding/personality-quiz.js +219 -0
- package/dist/onboarding/personality-quiz.js.map +1 -0
- package/dist/onboarding/phase-5-summary.d.ts +22 -0
- package/dist/onboarding/phase-5-summary.d.ts.map +1 -0
- package/dist/onboarding/phase-5-summary.js +151 -0
- package/dist/onboarding/phase-5-summary.js.map +1 -0
- package/dist/onboarding/phase-6-security.d.ts +33 -0
- package/dist/onboarding/phase-6-security.d.ts.map +1 -0
- package/dist/onboarding/phase-6-security.js +473 -0
- package/dist/onboarding/phase-6-security.js.map +1 -0
- package/dist/onboarding/phase-7-integrations.d.ts +66 -0
- package/dist/onboarding/phase-7-integrations.d.ts.map +1 -0
- package/dist/onboarding/phase-7-integrations.js +619 -0
- package/dist/onboarding/phase-7-integrations.js.map +1 -0
- package/dist/onboarding/phase-8-demo.d.ts +43 -0
- package/dist/onboarding/phase-8-demo.d.ts.map +1 -0
- package/dist/onboarding/phase-8-demo.js +346 -0
- package/dist/onboarding/phase-8-demo.js.map +1 -0
- package/dist/onboarding/phase-9-finalization.d.ts +22 -0
- package/dist/onboarding/phase-9-finalization.d.ts.map +1 -0
- package/dist/onboarding/phase-9-finalization.js +375 -0
- package/dist/onboarding/phase-9-finalization.js.map +1 -0
- package/dist/onboarding/ritual-prompt.d.ts +2 -0
- package/dist/onboarding/ritual-prompt.d.ts.map +1 -0
- package/dist/onboarding/ritual-prompt.js +285 -0
- package/dist/onboarding/ritual-prompt.js.map +1 -0
- package/dist/onboarding/ritual-tools.d.ts +13 -0
- package/dist/onboarding/ritual-tools.d.ts.map +1 -0
- package/dist/onboarding/ritual-tools.js +93 -0
- package/dist/onboarding/ritual-tools.js.map +1 -0
- package/dist/runners/cli-runner.d.ts +59 -0
- package/dist/runners/cli-runner.d.ts.map +1 -0
- package/dist/runners/cli-runner.js +190 -0
- package/dist/runners/cli-runner.js.map +1 -0
- package/dist/runners/index.d.ts +11 -0
- package/dist/runners/index.d.ts.map +1 -0
- package/dist/runners/index.js +15 -0
- package/dist/runners/index.js.map +1 -0
- package/dist/runners/types.d.ts +81 -0
- package/dist/runners/types.d.ts.map +1 -0
- package/dist/runners/types.js +31 -0
- package/dist/runners/types.js.map +1 -0
- package/dist/scheduler/cron-scheduler.d.ts +115 -0
- package/dist/scheduler/cron-scheduler.d.ts.map +1 -0
- package/dist/scheduler/cron-scheduler.js +320 -0
- package/dist/scheduler/cron-scheduler.js.map +1 -0
- package/dist/scheduler/heartbeat.d.ts +53 -0
- package/dist/scheduler/heartbeat.d.ts.map +1 -0
- package/dist/scheduler/heartbeat.js +160 -0
- package/dist/scheduler/heartbeat.js.map +1 -0
- package/dist/scheduler/index.d.ts +22 -0
- package/dist/scheduler/index.d.ts.map +1 -0
- package/dist/scheduler/index.js +31 -0
- package/dist/scheduler/index.js.map +1 -0
- package/dist/scheduler/job-lock.d.ts +85 -0
- package/dist/scheduler/job-lock.d.ts.map +1 -0
- package/dist/scheduler/job-lock.js +137 -0
- package/dist/scheduler/job-lock.js.map +1 -0
- package/dist/scheduler/recovery.d.ts +78 -0
- package/dist/scheduler/recovery.d.ts.map +1 -0
- package/dist/scheduler/recovery.js +124 -0
- package/dist/scheduler/recovery.js.map +1 -0
- package/dist/scheduler/schedule-store.d.ts +112 -0
- package/dist/scheduler/schedule-store.d.ts.map +1 -0
- package/dist/scheduler/schedule-store.js +259 -0
- package/dist/scheduler/schedule-store.js.map +1 -0
- package/dist/scheduler/token-keep-alive.d.ts +49 -0
- package/dist/scheduler/token-keep-alive.d.ts.map +1 -0
- package/dist/scheduler/token-keep-alive.js +102 -0
- package/dist/scheduler/token-keep-alive.js.map +1 -0
- package/dist/scheduler/types.d.ts +96 -0
- package/dist/scheduler/types.d.ts.map +1 -0
- package/dist/scheduler/types.js +21 -0
- package/dist/scheduler/types.js.map +1 -0
- package/dist/setup/setup-prompt.d.ts +2 -0
- package/dist/setup/setup-prompt.d.ts.map +1 -0
- package/dist/setup/setup-prompt.js +138 -0
- package/dist/setup/setup-prompt.js.map +1 -0
- package/dist/setup/setup-server.d.ts +8 -0
- package/dist/setup/setup-server.d.ts.map +1 -0
- package/dist/setup/setup-server.js +71 -0
- package/dist/setup/setup-server.js.map +1 -0
- package/dist/setup/setup-tools.d.ts +13 -0
- package/dist/setup/setup-tools.d.ts.map +1 -0
- package/dist/setup/setup-tools.js +103 -0
- package/dist/setup/setup-tools.js.map +1 -0
- package/dist/setup/setup-websocket.d.ts +6 -0
- package/dist/setup/setup-websocket.d.ts.map +1 -0
- package/dist/setup/setup-websocket.js +312 -0
- package/dist/setup/setup-websocket.js.map +1 -0
- package/dist/skills/index.d.ts +10 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +26 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/skill-executor.d.ts +48 -0
- package/dist/skills/skill-executor.d.ts.map +1 -0
- package/dist/skills/skill-executor.js +483 -0
- package/dist/skills/skill-executor.js.map +1 -0
- package/dist/skills/skill-loader.d.ts +40 -0
- package/dist/skills/skill-loader.d.ts.map +1 -0
- package/dist/skills/skill-loader.js +225 -0
- package/dist/skills/skill-loader.js.map +1 -0
- package/dist/skills/skill-matcher.d.ts +33 -0
- package/dist/skills/skill-matcher.d.ts.map +1 -0
- package/dist/skills/skill-matcher.js +190 -0
- package/dist/skills/skill-matcher.js.map +1 -0
- package/dist/skills/types.d.ts +123 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +12 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/tools/browser-tool.d.ts +149 -0
- package/dist/tools/browser-tool.d.ts.map +1 -0
- package/dist/tools/browser-tool.js +257 -0
- package/dist/tools/browser-tool.js.map +1 -0
- package/package.json +84 -0
- package/public/favicon.ico +0 -0
- package/public/setup.html +1026 -0
- package/public/viewer/icons/icon-192.png +0 -0
- package/public/viewer/icons/icon-512.png +0 -0
- package/public/viewer/js/modules/chat.js +1587 -0
- package/public/viewer/js/modules/dashboard.js +275 -0
- package/public/viewer/js/modules/graph.js +997 -0
- package/public/viewer/js/modules/memory.js +353 -0
- package/public/viewer/js/modules/settings.js +255 -0
- package/public/viewer/js/utils/api.js +169 -0
- package/public/viewer/js/utils/dom.js +92 -0
- package/public/viewer/js/utils/format.js +192 -0
- package/public/viewer/manifest.json +26 -0
- package/public/viewer/sw.js +131 -0
- package/public/viewer/viewer.css +500 -0
- package/public/viewer/viewer.html +1535 -0
- package/scripts/postinstall.js +118 -0
- package/templates/skills/document-analyze.md +63 -0
- package/templates/skills/heartbeat-report.md +75 -0
- package/templates/skills/image-translate.md +67 -0
- package/templates/workspace/skill-forge/DESIGN.md +115 -0
- package/templates/workspace/skill-forge/agents/architect.ts +295 -0
- package/templates/workspace/skill-forge/agents/developer.ts +364 -0
- package/templates/workspace/skill-forge/agents/qa.ts +313 -0
- package/templates/workspace/skill-forge/claude-api.ts +353 -0
- package/templates/workspace/skill-forge/discord-ui.ts +580 -0
- package/templates/workspace/skill-forge/error-handler.ts +354 -0
- package/templates/workspace/skill-forge/mama-integration.ts +357 -0
- package/templates/workspace/skill-forge/orchestrator.ts +495 -0
- package/templates/workspace/skill-forge/output/generated-skills/skills/hello-world/README.md +24 -0
- package/templates/workspace/skill-forge/output/generated-skills/skills/hello-world/index.ts +79 -0
- package/templates/workspace/skill-forge/output/generated-skills/skills/hello-world/types.ts +17 -0
- package/templates/workspace/skill-forge/package.json +21 -0
- package/templates/workspace/skill-forge/state/session.json +132 -0
- package/templates/workspace/skill-forge/test-e2e.ts +139 -0
- package/templates/workspace/skill-forge/tsconfig.json +20 -0
- 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":";AAAA;;;;;;;;;;;;GAYG;;;AAoNH,8CAKC;AAKD,8CAEC;AA9LD,MAAM,aAAa,GAAG,EAAE,CAAC;AACzB,MAAM,kBAAkB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;AAExD;;;;GAIG;AACH,MAAa,cAAc;IACjB,SAAS,GAAgC,IAAI,GAAG,EAAE,CAAC;IACnD,MAAM,CAAiC;IAE/C,YAAY,SAA+B,EAAE;QAC3C,IAAI,CAAC,MAAM,GAAG;YACZ,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,aAAa;YACpC,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,kBAAkB;SAChD,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,SAAiB,EAAE,KAAmB;QAC3C,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAE5C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACzC,CAAC;QAED,YAAY;QACZ,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEpB,oCAAoC;QACpC,OAAO,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1C,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,SAAiB;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QAEjD,yBAAyB;QACzB,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,SAAiB,EAAE,gBAAyB;QAC3D,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,gBAAgB,CAAC,CAAC;IAC5F,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,SAAiB,EAAE,MAAe;QACrD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAwB,EAAE,CAAC;QAE5C,wDAAwD;QACxD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;YAC9C,0DAA0D;YAC1D,IAAI,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;gBAAE,SAAS;YAEhD,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtD,WAAW,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;gBACvC,iEAAiE;gBACjE,MAAM;YACR,CAAC;QACH,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAC,SAAiB,EAAE,gBAAyB;QAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QAEnE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAClC,IAAI,IAAI,GAAG,KAAK,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;YAE9C,4BAA4B;YAC5B,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtD,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;gBAC9E,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;gBAE5E,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;oBACnB,IAAI,IAAI,iBAAiB,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC7E,CAAC;gBACD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;oBAClB,IAAI,IAAI,oBAAoB,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC7E,CAAC;YACH,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,OAAO;EACT,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAiB;QACrB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,SAAiB;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC,WAAW,CAAC;QAC3B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,OAAO;QACL,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QACjD,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,KAAK,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;YAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;YAErE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACnC,CAAC;iBAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC1C,CAAC;YAED,OAAO,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QACtC,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAhKD,wCAgKC;AAED;;GAEG;AACH,IAAI,oBAAoB,GAA0B,IAAI,CAAC;AAEvD;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1B,oBAAoB,GAAG,IAAI,cAAc,EAAE,CAAC;IAC9C,CAAC;IACD,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,OAAuB;IACvD,oBAAoB,GAAG,OAAO,CAAC;AACjC,CAAC"}
|
|
@@ -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"}
|