@framers/agentos 0.1.6 → 0.1.8

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 (287) hide show
  1. package/README.md +19 -0
  2. package/dist/api/AgentOS.d.ts +12 -0
  3. package/dist/api/AgentOS.d.ts.map +1 -1
  4. package/dist/api/AgentOS.js +100 -2
  5. package/dist/api/AgentOS.js.map +1 -1
  6. package/dist/api/AgentOSOrchestrator.d.ts +45 -0
  7. package/dist/api/AgentOSOrchestrator.d.ts.map +1 -1
  8. package/dist/api/AgentOSOrchestrator.js +470 -6
  9. package/dist/api/AgentOSOrchestrator.js.map +1 -1
  10. package/dist/api/types/AgentOSInput.d.ts +8 -0
  11. package/dist/api/types/AgentOSInput.d.ts.map +1 -1
  12. package/dist/api/types/AgentOSResponse.d.ts +22 -2
  13. package/dist/api/types/AgentOSResponse.d.ts.map +1 -1
  14. package/dist/api/types/AgentOSResponse.js +1 -0
  15. package/dist/api/types/AgentOSResponse.js.map +1 -1
  16. package/dist/channels/ChannelRouter.d.ts +150 -0
  17. package/dist/channels/ChannelRouter.d.ts.map +1 -0
  18. package/dist/channels/ChannelRouter.js +309 -0
  19. package/dist/channels/ChannelRouter.js.map +1 -0
  20. package/dist/channels/IChannelAdapter.d.ts +113 -0
  21. package/dist/channels/IChannelAdapter.d.ts.map +1 -0
  22. package/dist/channels/IChannelAdapter.js +17 -0
  23. package/dist/channels/IChannelAdapter.js.map +1 -0
  24. package/dist/channels/index.d.ts +9 -0
  25. package/dist/channels/index.d.ts.map +1 -0
  26. package/dist/channels/index.js +7 -0
  27. package/dist/channels/index.js.map +1 -0
  28. package/dist/channels/types.d.ts +257 -0
  29. package/dist/channels/types.d.ts.map +1 -0
  30. package/dist/channels/types.js +12 -0
  31. package/dist/channels/types.js.map +1 -0
  32. package/dist/cognitive_substrate/GMI.d.ts +139 -0
  33. package/dist/cognitive_substrate/GMI.d.ts.map +1 -1
  34. package/dist/cognitive_substrate/GMI.js +680 -14
  35. package/dist/cognitive_substrate/GMI.js.map +1 -1
  36. package/dist/cognitive_substrate/GMIEvent.d.ts +151 -0
  37. package/dist/cognitive_substrate/GMIEvent.d.ts.map +1 -0
  38. package/dist/cognitive_substrate/GMIEvent.js +79 -0
  39. package/dist/cognitive_substrate/GMIEvent.js.map +1 -0
  40. package/dist/cognitive_substrate/IGMI.d.ts +22 -0
  41. package/dist/cognitive_substrate/IGMI.d.ts.map +1 -1
  42. package/dist/cognitive_substrate/IGMI.js.map +1 -1
  43. package/dist/cognitive_substrate/personas/IPersonaDefinition.d.ts +92 -0
  44. package/dist/cognitive_substrate/personas/IPersonaDefinition.d.ts.map +1 -1
  45. package/dist/cognitive_substrate/personas/PersonaLoader.d.ts.map +1 -1
  46. package/dist/cognitive_substrate/personas/PersonaLoader.js +21 -0
  47. package/dist/cognitive_substrate/personas/PersonaLoader.js.map +1 -1
  48. package/dist/cognitive_substrate/personas/metaprompt_presets.d.ts +86 -0
  49. package/dist/cognitive_substrate/personas/metaprompt_presets.d.ts.map +1 -0
  50. package/dist/cognitive_substrate/personas/metaprompt_presets.js +457 -0
  51. package/dist/cognitive_substrate/personas/metaprompt_presets.js.map +1 -0
  52. package/dist/config/RetrievalAugmentorConfiguration.d.ts +21 -0
  53. package/dist/config/RetrievalAugmentorConfiguration.d.ts.map +1 -1
  54. package/dist/config/RetrievalAugmentorConfiguration.js.map +1 -1
  55. package/dist/config/VectorStoreConfiguration.d.ts +2 -1
  56. package/dist/config/VectorStoreConfiguration.d.ts.map +1 -1
  57. package/dist/config/VectorStoreConfiguration.js.map +1 -1
  58. package/dist/config/extension-secrets.json +360 -0
  59. package/dist/core/agents/AgentCore.d.ts +8 -0
  60. package/dist/core/agents/AgentCore.d.ts.map +1 -1
  61. package/dist/core/agents/AgentCore.js.map +1 -1
  62. package/dist/core/conversation/ConversationManager.d.ts.map +1 -1
  63. package/dist/core/conversation/ConversationManager.js +2 -4
  64. package/dist/core/conversation/ConversationManager.js.map +1 -1
  65. package/dist/core/conversation/ILongTermMemoryRetriever.d.ts +30 -0
  66. package/dist/core/conversation/ILongTermMemoryRetriever.d.ts.map +1 -0
  67. package/dist/core/conversation/ILongTermMemoryRetriever.js +2 -0
  68. package/dist/core/conversation/ILongTermMemoryRetriever.js.map +1 -0
  69. package/dist/core/conversation/IRollingSummaryMemorySink.d.ts +44 -0
  70. package/dist/core/conversation/IRollingSummaryMemorySink.d.ts.map +1 -0
  71. package/dist/core/conversation/IRollingSummaryMemorySink.js +9 -0
  72. package/dist/core/conversation/IRollingSummaryMemorySink.js.map +1 -0
  73. package/dist/core/conversation/LongTermMemoryPolicy.d.ts +53 -0
  74. package/dist/core/conversation/LongTermMemoryPolicy.d.ts.map +1 -0
  75. package/dist/core/conversation/LongTermMemoryPolicy.js +84 -0
  76. package/dist/core/conversation/LongTermMemoryPolicy.js.map +1 -0
  77. package/dist/core/conversation/RollingSummaryCompactor.d.ts +61 -0
  78. package/dist/core/conversation/RollingSummaryCompactor.d.ts.map +1 -0
  79. package/dist/core/conversation/RollingSummaryCompactor.js +255 -0
  80. package/dist/core/conversation/RollingSummaryCompactor.js.map +1 -0
  81. package/dist/core/llm/PromptEngine.d.ts.map +1 -1
  82. package/dist/core/llm/PromptEngine.js +10 -1
  83. package/dist/core/llm/PromptEngine.js.map +1 -1
  84. package/dist/core/orchestration/AgentOrchestrator.d.ts +40 -0
  85. package/dist/core/orchestration/AgentOrchestrator.d.ts.map +1 -1
  86. package/dist/core/orchestration/AgentOrchestrator.js +324 -2
  87. package/dist/core/orchestration/AgentOrchestrator.js.map +1 -1
  88. package/dist/core/prompting/PromptProfileRouter.d.ts +74 -0
  89. package/dist/core/prompting/PromptProfileRouter.d.ts.map +1 -0
  90. package/dist/core/prompting/PromptProfileRouter.js +270 -0
  91. package/dist/core/prompting/PromptProfileRouter.js.map +1 -0
  92. package/dist/core/provenance/anchoring/AnchorManager.d.ts +86 -0
  93. package/dist/core/provenance/anchoring/AnchorManager.d.ts.map +1 -0
  94. package/dist/core/provenance/anchoring/AnchorManager.js +244 -0
  95. package/dist/core/provenance/anchoring/AnchorManager.js.map +1 -0
  96. package/dist/core/provenance/anchoring/providers/CompositeAnchorProvider.d.ts +20 -0
  97. package/dist/core/provenance/anchoring/providers/CompositeAnchorProvider.d.ts.map +1 -0
  98. package/dist/core/provenance/anchoring/providers/CompositeAnchorProvider.js +62 -0
  99. package/dist/core/provenance/anchoring/providers/CompositeAnchorProvider.js.map +1 -0
  100. package/dist/core/provenance/anchoring/providers/NoneProvider.d.ts +15 -0
  101. package/dist/core/provenance/anchoring/providers/NoneProvider.d.ts.map +1 -0
  102. package/dist/core/provenance/anchoring/providers/NoneProvider.js +21 -0
  103. package/dist/core/provenance/anchoring/providers/NoneProvider.js.map +1 -0
  104. package/dist/core/provenance/anchoring/providers/createAnchorProvider.d.ts +38 -0
  105. package/dist/core/provenance/anchoring/providers/createAnchorProvider.d.ts.map +1 -0
  106. package/dist/core/provenance/anchoring/providers/createAnchorProvider.js +67 -0
  107. package/dist/core/provenance/anchoring/providers/createAnchorProvider.js.map +1 -0
  108. package/dist/core/provenance/anchoring/providers/index.d.ts +12 -0
  109. package/dist/core/provenance/anchoring/providers/index.d.ts.map +1 -0
  110. package/dist/core/provenance/anchoring/providers/index.js +12 -0
  111. package/dist/core/provenance/anchoring/providers/index.js.map +1 -0
  112. package/dist/core/provenance/config/PolicyProfiles.d.ts +60 -0
  113. package/dist/core/provenance/config/PolicyProfiles.d.ts.map +1 -0
  114. package/dist/core/provenance/config/PolicyProfiles.js +144 -0
  115. package/dist/core/provenance/config/PolicyProfiles.js.map +1 -0
  116. package/dist/core/provenance/crypto/AgentKeyManager.d.ts +48 -0
  117. package/dist/core/provenance/crypto/AgentKeyManager.d.ts.map +1 -0
  118. package/dist/core/provenance/crypto/AgentKeyManager.js +162 -0
  119. package/dist/core/provenance/crypto/AgentKeyManager.js.map +1 -0
  120. package/dist/core/provenance/crypto/HashChain.d.ts +58 -0
  121. package/dist/core/provenance/crypto/HashChain.d.ts.map +1 -0
  122. package/dist/core/provenance/crypto/HashChain.js +86 -0
  123. package/dist/core/provenance/crypto/HashChain.js.map +1 -0
  124. package/dist/core/provenance/crypto/MerkleTree.d.ts +41 -0
  125. package/dist/core/provenance/crypto/MerkleTree.d.ts.map +1 -0
  126. package/dist/core/provenance/crypto/MerkleTree.js +86 -0
  127. package/dist/core/provenance/crypto/MerkleTree.js.map +1 -0
  128. package/dist/core/provenance/enforcement/AutonomyGuard.d.ts +37 -0
  129. package/dist/core/provenance/enforcement/AutonomyGuard.d.ts.map +1 -0
  130. package/dist/core/provenance/enforcement/AutonomyGuard.js +120 -0
  131. package/dist/core/provenance/enforcement/AutonomyGuard.js.map +1 -0
  132. package/dist/core/provenance/enforcement/ProvenanceStorageHooks.d.ts +43 -0
  133. package/dist/core/provenance/enforcement/ProvenanceStorageHooks.d.ts.map +1 -0
  134. package/dist/core/provenance/enforcement/ProvenanceStorageHooks.js +193 -0
  135. package/dist/core/provenance/enforcement/ProvenanceStorageHooks.js.map +1 -0
  136. package/dist/core/provenance/enforcement/RevisionManager.d.ts +41 -0
  137. package/dist/core/provenance/enforcement/RevisionManager.d.ts.map +1 -0
  138. package/dist/core/provenance/enforcement/RevisionManager.js +105 -0
  139. package/dist/core/provenance/enforcement/RevisionManager.js.map +1 -0
  140. package/dist/core/provenance/enforcement/TombstoneManager.d.ts +47 -0
  141. package/dist/core/provenance/enforcement/TombstoneManager.d.ts.map +1 -0
  142. package/dist/core/provenance/enforcement/TombstoneManager.js +121 -0
  143. package/dist/core/provenance/enforcement/TombstoneManager.js.map +1 -0
  144. package/dist/core/provenance/index.d.ts +34 -0
  145. package/dist/core/provenance/index.d.ts.map +1 -0
  146. package/dist/core/provenance/index.js +39 -0
  147. package/dist/core/provenance/index.js.map +1 -0
  148. package/dist/core/provenance/ledger/EventTypes.d.ts +123 -0
  149. package/dist/core/provenance/ledger/EventTypes.d.ts.map +1 -0
  150. package/dist/core/provenance/ledger/EventTypes.js +9 -0
  151. package/dist/core/provenance/ledger/EventTypes.js.map +1 -0
  152. package/dist/core/provenance/ledger/SignedEventLedger.d.ts +75 -0
  153. package/dist/core/provenance/ledger/SignedEventLedger.d.ts.map +1 -0
  154. package/dist/core/provenance/ledger/SignedEventLedger.js +210 -0
  155. package/dist/core/provenance/ledger/SignedEventLedger.js.map +1 -0
  156. package/dist/core/provenance/schema/provenance-schema.d.ts +17 -0
  157. package/dist/core/provenance/schema/provenance-schema.d.ts.map +1 -0
  158. package/dist/core/provenance/schema/provenance-schema.js +104 -0
  159. package/dist/core/provenance/schema/provenance-schema.js.map +1 -0
  160. package/dist/core/provenance/types.d.ts +261 -0
  161. package/dist/core/provenance/types.d.ts.map +1 -0
  162. package/dist/core/provenance/types.js +21 -0
  163. package/dist/core/provenance/types.js.map +1 -0
  164. package/dist/core/provenance/verification/BundleExporter.d.ts +50 -0
  165. package/dist/core/provenance/verification/BundleExporter.d.ts.map +1 -0
  166. package/dist/core/provenance/verification/BundleExporter.js +240 -0
  167. package/dist/core/provenance/verification/BundleExporter.js.map +1 -0
  168. package/dist/core/provenance/verification/ChainVerifier.d.ts +39 -0
  169. package/dist/core/provenance/verification/ChainVerifier.d.ts.map +1 -0
  170. package/dist/core/provenance/verification/ChainVerifier.js +204 -0
  171. package/dist/core/provenance/verification/ChainVerifier.js.map +1 -0
  172. package/dist/core/provenance/verification/ConversationVerifier.d.ts +56 -0
  173. package/dist/core/provenance/verification/ConversationVerifier.d.ts.map +1 -0
  174. package/dist/core/provenance/verification/ConversationVerifier.js +109 -0
  175. package/dist/core/provenance/verification/ConversationVerifier.js.map +1 -0
  176. package/dist/extensions/ExtensionManager.d.ts +8 -0
  177. package/dist/extensions/ExtensionManager.d.ts.map +1 -1
  178. package/dist/extensions/ExtensionManager.js +58 -3
  179. package/dist/extensions/ExtensionManager.js.map +1 -1
  180. package/dist/extensions/MessagingChannelPayload.d.ts +39 -0
  181. package/dist/extensions/MessagingChannelPayload.d.ts.map +1 -0
  182. package/dist/extensions/MessagingChannelPayload.js +12 -0
  183. package/dist/extensions/MessagingChannelPayload.js.map +1 -0
  184. package/dist/extensions/manifest.d.ts +3 -1
  185. package/dist/extensions/manifest.d.ts.map +1 -1
  186. package/dist/extensions/packs/provenance-pack.d.ts +66 -0
  187. package/dist/extensions/packs/provenance-pack.d.ts.map +1 -0
  188. package/dist/extensions/packs/provenance-pack.js +162 -0
  189. package/dist/extensions/packs/provenance-pack.js.map +1 -0
  190. package/dist/extensions/types.d.ts +23 -0
  191. package/dist/extensions/types.d.ts.map +1 -1
  192. package/dist/extensions/types.js +4 -0
  193. package/dist/extensions/types.js.map +1 -1
  194. package/dist/index.d.ts +8 -0
  195. package/dist/index.d.ts.map +1 -1
  196. package/dist/index.js +12 -0
  197. package/dist/index.js.map +1 -1
  198. package/dist/rag/IRetrievalAugmentor.d.ts +22 -1
  199. package/dist/rag/IRetrievalAugmentor.d.ts.map +1 -1
  200. package/dist/rag/RetrievalAugmentor.d.ts +37 -0
  201. package/dist/rag/RetrievalAugmentor.d.ts.map +1 -1
  202. package/dist/rag/RetrievalAugmentor.js +82 -6
  203. package/dist/rag/RetrievalAugmentor.js.map +1 -1
  204. package/dist/rag/VectorStoreManager.d.ts.map +1 -1
  205. package/dist/rag/VectorStoreManager.js +5 -0
  206. package/dist/rag/VectorStoreManager.js.map +1 -1
  207. package/dist/rag/graphrag/GraphRAGEngine.d.ts +100 -0
  208. package/dist/rag/graphrag/GraphRAGEngine.d.ts.map +1 -0
  209. package/dist/rag/graphrag/GraphRAGEngine.js +1146 -0
  210. package/dist/rag/graphrag/GraphRAGEngine.js.map +1 -0
  211. package/dist/rag/graphrag/IGraphRAG.d.ts +198 -0
  212. package/dist/rag/graphrag/IGraphRAG.d.ts.map +1 -0
  213. package/dist/rag/graphrag/IGraphRAG.js +11 -0
  214. package/dist/rag/graphrag/IGraphRAG.js.map +1 -0
  215. package/dist/rag/graphrag/index.d.ts +12 -0
  216. package/dist/rag/graphrag/index.d.ts.map +1 -0
  217. package/dist/rag/graphrag/index.js +11 -0
  218. package/dist/rag/graphrag/index.js.map +1 -0
  219. package/dist/rag/implementations/vector_stores/HnswlibVectorStore.d.ts +72 -0
  220. package/dist/rag/implementations/vector_stores/HnswlibVectorStore.d.ts.map +1 -0
  221. package/dist/rag/implementations/vector_stores/HnswlibVectorStore.js +463 -0
  222. package/dist/rag/implementations/vector_stores/HnswlibVectorStore.js.map +1 -0
  223. package/dist/rag/implementations/vector_stores/index.d.ts +1 -0
  224. package/dist/rag/implementations/vector_stores/index.d.ts.map +1 -1
  225. package/dist/rag/implementations/vector_stores/index.js +2 -0
  226. package/dist/rag/implementations/vector_stores/index.js.map +1 -1
  227. package/dist/rag/index.d.ts +3 -0
  228. package/dist/rag/index.d.ts.map +1 -1
  229. package/dist/rag/index.js +5 -0
  230. package/dist/rag/index.js.map +1 -1
  231. package/dist/rag/reranking/IRerankerService.d.ts +163 -0
  232. package/dist/rag/reranking/IRerankerService.d.ts.map +1 -0
  233. package/dist/rag/reranking/IRerankerService.js +9 -0
  234. package/dist/rag/reranking/IRerankerService.js.map +1 -0
  235. package/dist/rag/reranking/RerankerService.d.ts +107 -0
  236. package/dist/rag/reranking/RerankerService.d.ts.map +1 -0
  237. package/dist/rag/reranking/RerankerService.js +194 -0
  238. package/dist/rag/reranking/RerankerService.js.map +1 -0
  239. package/dist/rag/reranking/index.d.ts +55 -0
  240. package/dist/rag/reranking/index.d.ts.map +1 -0
  241. package/dist/rag/reranking/index.js +56 -0
  242. package/dist/rag/reranking/index.js.map +1 -0
  243. package/dist/rag/reranking/providers/CohereReranker.d.ts +66 -0
  244. package/dist/rag/reranking/providers/CohereReranker.d.ts.map +1 -0
  245. package/dist/rag/reranking/providers/CohereReranker.js +141 -0
  246. package/dist/rag/reranking/providers/CohereReranker.js.map +1 -0
  247. package/dist/rag/reranking/providers/LocalCrossEncoderReranker.d.ts +105 -0
  248. package/dist/rag/reranking/providers/LocalCrossEncoderReranker.d.ts.map +1 -0
  249. package/dist/rag/reranking/providers/LocalCrossEncoderReranker.js +214 -0
  250. package/dist/rag/reranking/providers/LocalCrossEncoderReranker.js.map +1 -0
  251. package/dist/rag/reranking/providers/index.d.ts +7 -0
  252. package/dist/rag/reranking/providers/index.d.ts.map +1 -0
  253. package/dist/rag/reranking/providers/index.js +7 -0
  254. package/dist/rag/reranking/providers/index.js.map +1 -0
  255. package/dist/rag/reranking/tests/index.d.ts +6 -0
  256. package/dist/rag/reranking/tests/index.d.ts.map +1 -0
  257. package/dist/rag/reranking/tests/index.js +11 -0
  258. package/dist/rag/reranking/tests/index.js.map +1 -0
  259. package/dist/types/optionalDependencies.d.ts +5 -0
  260. package/dist/types/optionalDependencies.d.ts.map +1 -0
  261. package/dist/types/optionalDependencies.js +4 -0
  262. package/dist/types/optionalDependencies.js.map +1 -0
  263. package/dist/voice/CallManager.d.ts +116 -0
  264. package/dist/voice/CallManager.d.ts.map +1 -0
  265. package/dist/voice/CallManager.js +426 -0
  266. package/dist/voice/CallManager.js.map +1 -0
  267. package/dist/voice/IVoiceCallProvider.d.ts +137 -0
  268. package/dist/voice/IVoiceCallProvider.d.ts.map +1 -0
  269. package/dist/voice/IVoiceCallProvider.js +11 -0
  270. package/dist/voice/IVoiceCallProvider.js.map +1 -0
  271. package/dist/voice/index.d.ts +10 -0
  272. package/dist/voice/index.d.ts.map +1 -0
  273. package/dist/voice/index.js +8 -0
  274. package/dist/voice/index.js.map +1 -0
  275. package/dist/voice/providers/mock.d.ts +74 -0
  276. package/dist/voice/providers/mock.d.ts.map +1 -0
  277. package/dist/voice/providers/mock.js +199 -0
  278. package/dist/voice/providers/mock.js.map +1 -0
  279. package/dist/voice/telephony-audio.d.ts +42 -0
  280. package/dist/voice/telephony-audio.d.ts.map +1 -0
  281. package/dist/voice/telephony-audio.js +150 -0
  282. package/dist/voice/telephony-audio.js.map +1 -0
  283. package/dist/voice/types.d.ts +260 -0
  284. package/dist/voice/types.d.ts.map +1 -0
  285. package/dist/voice/types.js +36 -0
  286. package/dist/voice/types.js.map +1 -0
  287. package/package.json +22 -6
@@ -0,0 +1,309 @@
1
+ /**
2
+ * @fileoverview Channel Router — routes messages between external platforms
3
+ * and agent seeds.
4
+ *
5
+ * The ChannelRouter sits between {@link IChannelAdapter} implementations
6
+ * and the agent runtime (e.g., Wunderland's StimulusRouter). It:
7
+ *
8
+ * 1. Manages adapter instances per platform.
9
+ * 2. Maintains binding lookups (platform+conversationId -> seedId).
10
+ * 3. Dispatches inbound messages to registered handlers.
11
+ * 4. Routes outbound agent messages to the correct adapter.
12
+ *
13
+ * @module @framers/agentos/channels/ChannelRouter
14
+ */
15
+ // ============================================================================
16
+ // ChannelRouter
17
+ // ============================================================================
18
+ /**
19
+ * Central routing hub for all external messaging channels.
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const router = new ChannelRouter();
24
+ *
25
+ * // Register adapters
26
+ * router.registerAdapter(telegramAdapter);
27
+ * router.registerAdapter(discordAdapter);
28
+ *
29
+ * // Add bindings
30
+ * router.addBinding({
31
+ * bindingId: 'b1',
32
+ * seedId: 'cipher-001',
33
+ * ownerUserId: 'user-1',
34
+ * platform: 'telegram',
35
+ * channelId: '123456789',
36
+ * conversationType: 'direct',
37
+ * isActive: true,
38
+ * autoBroadcast: false,
39
+ * });
40
+ *
41
+ * // Handle inbound messages
42
+ * router.onMessage(async (message, binding, session) => {
43
+ * // Route to StimulusRouter or agent runtime
44
+ * await stimulusRouter.ingestChannelMessage(message, binding.seedId);
45
+ * });
46
+ *
47
+ * // Send outbound message
48
+ * await router.sendMessage('cipher-001', 'telegram', '123456789', {
49
+ * blocks: [{ type: 'text', text: 'Hello from Cipher!' }],
50
+ * });
51
+ * ```
52
+ */
53
+ export class ChannelRouter {
54
+ constructor() {
55
+ /** Registered adapters keyed by platform. */
56
+ this.adapters = new Map();
57
+ /** Active bindings keyed by bindingId. */
58
+ this.bindings = new Map();
59
+ /** Active sessions keyed by sessionId. */
60
+ this.sessions = new Map();
61
+ /** Inbound message handlers. */
62
+ this.messageHandlers = new Set();
63
+ /** Lookup index: `${platform}:${conversationId}` -> bindingId[]. */
64
+ this.bindingIndex = new Map();
65
+ /** Unsubscribe functions for adapter event listeners. */
66
+ this.adapterUnsubs = new Map();
67
+ }
68
+ // ── Adapter Management ──
69
+ /**
70
+ * Register a channel adapter. The router will subscribe to its events.
71
+ */
72
+ registerAdapter(adapter, options) {
73
+ const key = options?.platformKey ?? adapter.platform;
74
+ if (this.adapters.has(key)) {
75
+ // Tear down existing adapter for this platform
76
+ this.unregisterAdapter(key);
77
+ }
78
+ this.adapters.set(key, adapter);
79
+ // Subscribe to all events from this adapter
80
+ const unsub = adapter.on(async (event) => {
81
+ if (event.type === 'message') {
82
+ await this.handleInboundMessage(event.data);
83
+ }
84
+ });
85
+ this.adapterUnsubs.set(key, unsub);
86
+ }
87
+ /**
88
+ * Unregister and shut down an adapter.
89
+ */
90
+ async unregisterAdapter(platformKey) {
91
+ const unsub = this.adapterUnsubs.get(platformKey);
92
+ if (unsub) {
93
+ unsub();
94
+ this.adapterUnsubs.delete(platformKey);
95
+ }
96
+ const adapter = this.adapters.get(platformKey);
97
+ if (adapter) {
98
+ await adapter.shutdown();
99
+ this.adapters.delete(platformKey);
100
+ }
101
+ }
102
+ /**
103
+ * Get a registered adapter by platform.
104
+ */
105
+ getAdapter(platform) {
106
+ return this.adapters.get(platform);
107
+ }
108
+ /**
109
+ * List all registered adapters with their info.
110
+ */
111
+ listAdapters() {
112
+ const result = [];
113
+ for (const [key, adapter] of this.adapters) {
114
+ const conn = adapter.getConnectionInfo();
115
+ result.push({
116
+ platform: adapter.platform,
117
+ displayName: adapter.displayName,
118
+ description: `${adapter.displayName} channel adapter`,
119
+ capabilities: [...adapter.capabilities],
120
+ available: conn.status === 'connected',
121
+ requiredSecrets: [], // Populated by extension descriptor
122
+ });
123
+ }
124
+ return result;
125
+ }
126
+ // ── Binding Management ──
127
+ /**
128
+ * Add or update a channel binding.
129
+ */
130
+ addBinding(binding) {
131
+ this.bindings.set(binding.bindingId, binding);
132
+ this.rebuildBindingIndex();
133
+ }
134
+ /**
135
+ * Remove a channel binding.
136
+ */
137
+ removeBinding(bindingId) {
138
+ this.bindings.delete(bindingId);
139
+ this.rebuildBindingIndex();
140
+ }
141
+ /**
142
+ * Get all bindings for a seed.
143
+ */
144
+ getBindingsForSeed(seedId) {
145
+ return [...this.bindings.values()].filter((b) => b.seedId === seedId && b.isActive);
146
+ }
147
+ /**
148
+ * Get all bindings for a platform + conversation.
149
+ */
150
+ getBindingsForConversation(platform, conversationId) {
151
+ const key = `${platform}:${conversationId}`;
152
+ const bindingIds = this.bindingIndex.get(key) || [];
153
+ return bindingIds
154
+ .map((id) => this.bindings.get(id))
155
+ .filter((b) => b !== undefined && b.isActive);
156
+ }
157
+ /**
158
+ * Get all auto-broadcast bindings for a seed (used when agent publishes a post).
159
+ */
160
+ getBroadcastBindings(seedId) {
161
+ return [...this.bindings.values()].filter((b) => b.seedId === seedId && b.isActive && b.autoBroadcast);
162
+ }
163
+ // ── Message Handling ──
164
+ /**
165
+ * Register a handler for inbound messages. Returns unsubscribe function.
166
+ */
167
+ onMessage(handler) {
168
+ this.messageHandlers.add(handler);
169
+ return () => this.messageHandlers.delete(handler);
170
+ }
171
+ /**
172
+ * Send a message from an agent to a specific conversation.
173
+ */
174
+ async sendMessage(seedId, platform, conversationId, content) {
175
+ const adapter = this.adapters.get(platform);
176
+ if (!adapter) {
177
+ throw new Error(`No adapter registered for platform '${platform}'`);
178
+ }
179
+ const result = await adapter.sendMessage(conversationId, content);
180
+ // Update session metrics
181
+ this.touchSession(seedId, platform, conversationId);
182
+ return result;
183
+ }
184
+ /**
185
+ * Broadcast a message from an agent to all auto-broadcast bindings.
186
+ */
187
+ async broadcast(seedId, content) {
188
+ const bindings = this.getBroadcastBindings(seedId);
189
+ const results = [];
190
+ for (const binding of bindings) {
191
+ try {
192
+ const result = await this.sendMessage(seedId, binding.platform, binding.channelId, content);
193
+ results.push(result);
194
+ }
195
+ catch (err) {
196
+ console.error(`[ChannelRouter] Broadcast to ${binding.platform}:${binding.channelId} failed:`, err);
197
+ }
198
+ }
199
+ return results;
200
+ }
201
+ /**
202
+ * Send a typing indicator for an agent on a channel.
203
+ */
204
+ async sendTypingIndicator(platform, conversationId, isTyping) {
205
+ const adapter = this.adapters.get(platform);
206
+ if (adapter) {
207
+ await adapter.sendTypingIndicator(conversationId, isTyping);
208
+ }
209
+ }
210
+ // ── Session Management ──
211
+ /**
212
+ * Get or create a session for an agent + conversation.
213
+ */
214
+ getOrCreateSession(seedId, platform, conversationId) {
215
+ const sessionKey = `${seedId}:${platform}:${conversationId}`;
216
+ let session = this.sessions.get(sessionKey);
217
+ if (!session) {
218
+ session = {
219
+ sessionId: sessionKey,
220
+ seedId,
221
+ platform,
222
+ conversationId,
223
+ conversationType: 'direct',
224
+ lastMessageAt: new Date().toISOString(),
225
+ messageCount: 0,
226
+ isActive: true,
227
+ };
228
+ this.sessions.set(sessionKey, session);
229
+ }
230
+ return session;
231
+ }
232
+ /**
233
+ * Get active sessions for a seed.
234
+ */
235
+ getSessionsForSeed(seedId) {
236
+ return [...this.sessions.values()].filter((s) => s.seedId === seedId && s.isActive);
237
+ }
238
+ // ── Stats ──
239
+ getStats() {
240
+ let activeSessions = 0;
241
+ for (const s of this.sessions.values()) {
242
+ if (s.isActive)
243
+ activeSessions++;
244
+ }
245
+ return {
246
+ adapters: this.adapters.size,
247
+ bindings: this.bindings.size,
248
+ activeSessions,
249
+ totalSessions: this.sessions.size,
250
+ };
251
+ }
252
+ /**
253
+ * Shut down all adapters and clear state.
254
+ */
255
+ async shutdown() {
256
+ for (const key of [...this.adapters.keys()]) {
257
+ await this.unregisterAdapter(key);
258
+ }
259
+ this.bindings.clear();
260
+ this.sessions.clear();
261
+ this.bindingIndex.clear();
262
+ this.messageHandlers.clear();
263
+ }
264
+ // ── Private ──
265
+ async handleInboundMessage(message) {
266
+ const bindings = this.getBindingsForConversation(message.platform, message.conversationId);
267
+ if (bindings.length === 0) {
268
+ // No binding found — message is from an unbound conversation
269
+ return;
270
+ }
271
+ // Dispatch to all matching bindings (usually 1, but multi-agent groups are possible)
272
+ for (const binding of bindings) {
273
+ const session = this.getOrCreateSession(binding.seedId, message.platform, message.conversationId);
274
+ session.lastMessageAt = message.timestamp;
275
+ session.messageCount++;
276
+ session.conversationType = message.conversationType;
277
+ if (message.sender) {
278
+ session.remoteUser = message.sender;
279
+ }
280
+ // Dispatch to all registered handlers
281
+ const handlerPromises = [...this.messageHandlers].map(async (handler) => {
282
+ try {
283
+ await Promise.resolve(handler(message, binding, session));
284
+ }
285
+ catch (err) {
286
+ console.error(`[ChannelRouter] Handler error for ${message.platform}:${message.conversationId}:`, err);
287
+ }
288
+ });
289
+ await Promise.allSettled(handlerPromises);
290
+ }
291
+ }
292
+ touchSession(seedId, platform, conversationId) {
293
+ const session = this.getOrCreateSession(seedId, platform, conversationId);
294
+ session.lastMessageAt = new Date().toISOString();
295
+ session.messageCount++;
296
+ }
297
+ rebuildBindingIndex() {
298
+ this.bindingIndex.clear();
299
+ for (const [id, binding] of this.bindings) {
300
+ if (!binding.isActive)
301
+ continue;
302
+ const key = `${binding.platform}:${binding.channelId}`;
303
+ const existing = this.bindingIndex.get(key) || [];
304
+ existing.push(id);
305
+ this.bindingIndex.set(key, existing);
306
+ }
307
+ }
308
+ }
309
+ //# sourceMappingURL=ChannelRouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChannelRouter.js","sourceRoot":"","sources":["../../src/channels/ChannelRouter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * @fileoverview Interface for external messaging channel adapters.
3
+ *
4
+ * Each supported platform (Telegram, WhatsApp, Discord, etc.) implements
5
+ * this interface. Adapters handle:
6
+ * - Authentication and connection lifecycle
7
+ * - Inbound message reception (platform -> agent)
8
+ * - Outbound message delivery (agent -> platform)
9
+ * - Platform-specific features (typing, reactions, buttons, etc.)
10
+ *
11
+ * Adapters are registered as `messaging-channel` extension descriptors
12
+ * and managed by the {@link ChannelRouter}.
13
+ *
14
+ * @module @framers/agentos/channels/IChannelAdapter
15
+ */
16
+ import type { ChannelAuthConfig, ChannelCapability, ChannelConnectionInfo, ChannelEventHandler, ChannelEventType, ChannelPlatform, ChannelSendResult, MessageContent } from './types.js';
17
+ /**
18
+ * Core adapter interface for external messaging channels.
19
+ *
20
+ * Implementors wrap a platform SDK (e.g., grammY for Telegram, discord.js for
21
+ * Discord) and normalize all interactions to this common contract.
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * class TelegramAdapter implements IChannelAdapter {
26
+ * readonly platform = 'telegram';
27
+ * readonly displayName = 'Telegram';
28
+ * readonly capabilities = ['text', 'images', 'inline_keyboard', 'typing_indicator'];
29
+ *
30
+ * async initialize(auth: ChannelAuthConfig): Promise<void> {
31
+ * this.bot = new Bot(auth.credential);
32
+ * await this.bot.start();
33
+ * }
34
+ *
35
+ * async sendMessage(conversationId, content): Promise<ChannelSendResult> {
36
+ * const textBlock = content.blocks.find(b => b.type === 'text');
37
+ * const msg = await this.bot.api.sendMessage(conversationId, textBlock.text);
38
+ * return { messageId: String(msg.message_id) };
39
+ * }
40
+ * // ...
41
+ * }
42
+ * ```
43
+ */
44
+ export interface IChannelAdapter {
45
+ /** Platform this adapter serves. */
46
+ readonly platform: ChannelPlatform;
47
+ /** Human-readable display name (e.g., "WhatsApp Business"). */
48
+ readonly displayName: string;
49
+ /** Declared capabilities of this adapter. */
50
+ readonly capabilities: readonly ChannelCapability[];
51
+ /**
52
+ * Initialize the adapter with authentication credentials.
53
+ * Called once when the extension is activated. Must be idempotent —
54
+ * calling initialize on an already-initialized adapter should reconnect.
55
+ */
56
+ initialize(auth: ChannelAuthConfig): Promise<void>;
57
+ /**
58
+ * Gracefully shut down the adapter, closing connections and releasing
59
+ * resources. Called during extension deactivation or application shutdown.
60
+ */
61
+ shutdown(): Promise<void>;
62
+ /**
63
+ * Get the current connection status and metadata.
64
+ */
65
+ getConnectionInfo(): ChannelConnectionInfo;
66
+ /**
67
+ * Send a message to a conversation on the external platform.
68
+ *
69
+ * @param conversationId - Platform-native conversation/chat ID.
70
+ * @param content - Message content to send.
71
+ * @returns The platform-assigned message ID.
72
+ */
73
+ sendMessage(conversationId: string, content: MessageContent): Promise<ChannelSendResult>;
74
+ /**
75
+ * Send a typing indicator to a conversation. Not all platforms support
76
+ * this — check `capabilities` for `'typing_indicator'`.
77
+ */
78
+ sendTypingIndicator(conversationId: string, isTyping: boolean): Promise<void>;
79
+ /**
80
+ * Register a handler for channel events. Multiple handlers can be
81
+ * registered. Use `eventTypes` to filter which events to receive.
82
+ *
83
+ * @param handler - Callback invoked when an event occurs.
84
+ * @param eventTypes - Optional filter. If omitted, handler receives all events.
85
+ * @returns Unsubscribe function.
86
+ */
87
+ on(handler: ChannelEventHandler, eventTypes?: ChannelEventType[]): () => void;
88
+ /**
89
+ * Edit a previously sent message. Only available if adapter declares
90
+ * the `'editing'` capability.
91
+ */
92
+ editMessage?(conversationId: string, messageId: string, content: MessageContent): Promise<void>;
93
+ /**
94
+ * Delete a previously sent message. Only available if adapter declares
95
+ * the `'deletion'` capability.
96
+ */
97
+ deleteMessage?(conversationId: string, messageId: string): Promise<void>;
98
+ /**
99
+ * Add a reaction to a message. Only available if adapter declares
100
+ * the `'reactions'` capability.
101
+ */
102
+ addReaction?(conversationId: string, messageId: string, emoji: string): Promise<void>;
103
+ /**
104
+ * Get conversation metadata (name, members, etc.). Useful for group chats.
105
+ */
106
+ getConversationInfo?(conversationId: string): Promise<{
107
+ name?: string;
108
+ memberCount?: number;
109
+ isGroup: boolean;
110
+ metadata?: Record<string, unknown>;
111
+ }>;
112
+ }
113
+ //# sourceMappingURL=IChannelAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IChannelAdapter.d.ts","sourceRoot":"","sources":["../../src/channels/IChannelAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAEhB,eAAe,EACf,iBAAiB,EACjB,cAAc,EACf,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,WAAW,eAAe;IAG9B,oCAAoC;IACpC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IAEnC,+DAA+D;IAC/D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,6CAA6C;IAC7C,QAAQ,CAAC,YAAY,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAIpD;;;;OAIG;IACH,UAAU,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnD;;;OAGG;IACH,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B;;OAEG;IACH,iBAAiB,IAAI,qBAAqB,CAAC;IAI3C;;;;;;OAMG;IACH,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAEzF;;;OAGG;IACH,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAI9E;;;;;;;OAOG;IACH,EAAE,CAAC,OAAO,EAAE,mBAAmB,EAAE,UAAU,CAAC,EAAE,gBAAgB,EAAE,GAAG,MAAM,IAAI,CAAC;IAI9E;;;OAGG;IACH,WAAW,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhG;;;OAGG;IACH,aAAa,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzE;;;OAGG;IACH,WAAW,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtF;;OAEG;IACH,mBAAmB,CAAC,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC;QACpD,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC,CAAC,CAAC;CACJ"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @fileoverview Interface for external messaging channel adapters.
3
+ *
4
+ * Each supported platform (Telegram, WhatsApp, Discord, etc.) implements
5
+ * this interface. Adapters handle:
6
+ * - Authentication and connection lifecycle
7
+ * - Inbound message reception (platform -> agent)
8
+ * - Outbound message delivery (agent -> platform)
9
+ * - Platform-specific features (typing, reactions, buttons, etc.)
10
+ *
11
+ * Adapters are registered as `messaging-channel` extension descriptors
12
+ * and managed by the {@link ChannelRouter}.
13
+ *
14
+ * @module @framers/agentos/channels/IChannelAdapter
15
+ */
16
+ export {};
17
+ //# sourceMappingURL=IChannelAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IChannelAdapter.js","sourceRoot":"","sources":["../../src/channels/IChannelAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @fileoverview Barrel exports for the AgentOS Channel System.
3
+ * @module @framers/agentos/channels
4
+ */
5
+ export * from './types.js';
6
+ export type { IChannelAdapter } from './IChannelAdapter.js';
7
+ export { ChannelRouter } from './ChannelRouter.js';
8
+ export type { InboundMessageHandler, RegisterAdapterOptions } from './ChannelRouter.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/channels/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,YAAY,CAAC;AAC3B,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @fileoverview Barrel exports for the AgentOS Channel System.
3
+ * @module @framers/agentos/channels
4
+ */
5
+ export * from './types.js';
6
+ export { ChannelRouter } from './ChannelRouter.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/channels/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,YAAY,CAAC;AAE3B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}