@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.
- package/README.md +19 -0
- package/dist/api/AgentOS.d.ts +12 -0
- package/dist/api/AgentOS.d.ts.map +1 -1
- package/dist/api/AgentOS.js +100 -2
- package/dist/api/AgentOS.js.map +1 -1
- package/dist/api/AgentOSOrchestrator.d.ts +45 -0
- package/dist/api/AgentOSOrchestrator.d.ts.map +1 -1
- package/dist/api/AgentOSOrchestrator.js +470 -6
- package/dist/api/AgentOSOrchestrator.js.map +1 -1
- package/dist/api/types/AgentOSInput.d.ts +8 -0
- package/dist/api/types/AgentOSInput.d.ts.map +1 -1
- package/dist/api/types/AgentOSResponse.d.ts +22 -2
- package/dist/api/types/AgentOSResponse.d.ts.map +1 -1
- package/dist/api/types/AgentOSResponse.js +1 -0
- package/dist/api/types/AgentOSResponse.js.map +1 -1
- package/dist/channels/ChannelRouter.d.ts +150 -0
- package/dist/channels/ChannelRouter.d.ts.map +1 -0
- package/dist/channels/ChannelRouter.js +309 -0
- package/dist/channels/ChannelRouter.js.map +1 -0
- package/dist/channels/IChannelAdapter.d.ts +113 -0
- package/dist/channels/IChannelAdapter.d.ts.map +1 -0
- package/dist/channels/IChannelAdapter.js +17 -0
- package/dist/channels/IChannelAdapter.js.map +1 -0
- package/dist/channels/index.d.ts +9 -0
- package/dist/channels/index.d.ts.map +1 -0
- package/dist/channels/index.js +7 -0
- package/dist/channels/index.js.map +1 -0
- package/dist/channels/types.d.ts +257 -0
- package/dist/channels/types.d.ts.map +1 -0
- package/dist/channels/types.js +12 -0
- package/dist/channels/types.js.map +1 -0
- package/dist/cognitive_substrate/GMI.d.ts +139 -0
- package/dist/cognitive_substrate/GMI.d.ts.map +1 -1
- package/dist/cognitive_substrate/GMI.js +680 -14
- package/dist/cognitive_substrate/GMI.js.map +1 -1
- package/dist/cognitive_substrate/GMIEvent.d.ts +151 -0
- package/dist/cognitive_substrate/GMIEvent.d.ts.map +1 -0
- package/dist/cognitive_substrate/GMIEvent.js +79 -0
- package/dist/cognitive_substrate/GMIEvent.js.map +1 -0
- package/dist/cognitive_substrate/IGMI.d.ts +22 -0
- package/dist/cognitive_substrate/IGMI.d.ts.map +1 -1
- package/dist/cognitive_substrate/IGMI.js.map +1 -1
- package/dist/cognitive_substrate/personas/IPersonaDefinition.d.ts +92 -0
- package/dist/cognitive_substrate/personas/IPersonaDefinition.d.ts.map +1 -1
- package/dist/cognitive_substrate/personas/PersonaLoader.d.ts.map +1 -1
- package/dist/cognitive_substrate/personas/PersonaLoader.js +21 -0
- package/dist/cognitive_substrate/personas/PersonaLoader.js.map +1 -1
- package/dist/cognitive_substrate/personas/metaprompt_presets.d.ts +86 -0
- package/dist/cognitive_substrate/personas/metaprompt_presets.d.ts.map +1 -0
- package/dist/cognitive_substrate/personas/metaprompt_presets.js +457 -0
- package/dist/cognitive_substrate/personas/metaprompt_presets.js.map +1 -0
- package/dist/config/RetrievalAugmentorConfiguration.d.ts +21 -0
- package/dist/config/RetrievalAugmentorConfiguration.d.ts.map +1 -1
- package/dist/config/RetrievalAugmentorConfiguration.js.map +1 -1
- package/dist/config/VectorStoreConfiguration.d.ts +2 -1
- package/dist/config/VectorStoreConfiguration.d.ts.map +1 -1
- package/dist/config/VectorStoreConfiguration.js.map +1 -1
- package/dist/config/extension-secrets.json +360 -0
- package/dist/core/agents/AgentCore.d.ts +8 -0
- package/dist/core/agents/AgentCore.d.ts.map +1 -1
- package/dist/core/agents/AgentCore.js.map +1 -1
- package/dist/core/conversation/ConversationManager.d.ts.map +1 -1
- package/dist/core/conversation/ConversationManager.js +2 -4
- package/dist/core/conversation/ConversationManager.js.map +1 -1
- package/dist/core/conversation/ILongTermMemoryRetriever.d.ts +30 -0
- package/dist/core/conversation/ILongTermMemoryRetriever.d.ts.map +1 -0
- package/dist/core/conversation/ILongTermMemoryRetriever.js +2 -0
- package/dist/core/conversation/ILongTermMemoryRetriever.js.map +1 -0
- package/dist/core/conversation/IRollingSummaryMemorySink.d.ts +44 -0
- package/dist/core/conversation/IRollingSummaryMemorySink.d.ts.map +1 -0
- package/dist/core/conversation/IRollingSummaryMemorySink.js +9 -0
- package/dist/core/conversation/IRollingSummaryMemorySink.js.map +1 -0
- package/dist/core/conversation/LongTermMemoryPolicy.d.ts +53 -0
- package/dist/core/conversation/LongTermMemoryPolicy.d.ts.map +1 -0
- package/dist/core/conversation/LongTermMemoryPolicy.js +84 -0
- package/dist/core/conversation/LongTermMemoryPolicy.js.map +1 -0
- package/dist/core/conversation/RollingSummaryCompactor.d.ts +61 -0
- package/dist/core/conversation/RollingSummaryCompactor.d.ts.map +1 -0
- package/dist/core/conversation/RollingSummaryCompactor.js +255 -0
- package/dist/core/conversation/RollingSummaryCompactor.js.map +1 -0
- package/dist/core/llm/PromptEngine.d.ts.map +1 -1
- package/dist/core/llm/PromptEngine.js +10 -1
- package/dist/core/llm/PromptEngine.js.map +1 -1
- package/dist/core/orchestration/AgentOrchestrator.d.ts +40 -0
- package/dist/core/orchestration/AgentOrchestrator.d.ts.map +1 -1
- package/dist/core/orchestration/AgentOrchestrator.js +324 -2
- package/dist/core/orchestration/AgentOrchestrator.js.map +1 -1
- package/dist/core/prompting/PromptProfileRouter.d.ts +74 -0
- package/dist/core/prompting/PromptProfileRouter.d.ts.map +1 -0
- package/dist/core/prompting/PromptProfileRouter.js +270 -0
- package/dist/core/prompting/PromptProfileRouter.js.map +1 -0
- package/dist/core/provenance/anchoring/AnchorManager.d.ts +86 -0
- package/dist/core/provenance/anchoring/AnchorManager.d.ts.map +1 -0
- package/dist/core/provenance/anchoring/AnchorManager.js +244 -0
- package/dist/core/provenance/anchoring/AnchorManager.js.map +1 -0
- package/dist/core/provenance/anchoring/providers/CompositeAnchorProvider.d.ts +20 -0
- package/dist/core/provenance/anchoring/providers/CompositeAnchorProvider.d.ts.map +1 -0
- package/dist/core/provenance/anchoring/providers/CompositeAnchorProvider.js +62 -0
- package/dist/core/provenance/anchoring/providers/CompositeAnchorProvider.js.map +1 -0
- package/dist/core/provenance/anchoring/providers/NoneProvider.d.ts +15 -0
- package/dist/core/provenance/anchoring/providers/NoneProvider.d.ts.map +1 -0
- package/dist/core/provenance/anchoring/providers/NoneProvider.js +21 -0
- package/dist/core/provenance/anchoring/providers/NoneProvider.js.map +1 -0
- package/dist/core/provenance/anchoring/providers/createAnchorProvider.d.ts +38 -0
- package/dist/core/provenance/anchoring/providers/createAnchorProvider.d.ts.map +1 -0
- package/dist/core/provenance/anchoring/providers/createAnchorProvider.js +67 -0
- package/dist/core/provenance/anchoring/providers/createAnchorProvider.js.map +1 -0
- package/dist/core/provenance/anchoring/providers/index.d.ts +12 -0
- package/dist/core/provenance/anchoring/providers/index.d.ts.map +1 -0
- package/dist/core/provenance/anchoring/providers/index.js +12 -0
- package/dist/core/provenance/anchoring/providers/index.js.map +1 -0
- package/dist/core/provenance/config/PolicyProfiles.d.ts +60 -0
- package/dist/core/provenance/config/PolicyProfiles.d.ts.map +1 -0
- package/dist/core/provenance/config/PolicyProfiles.js +144 -0
- package/dist/core/provenance/config/PolicyProfiles.js.map +1 -0
- package/dist/core/provenance/crypto/AgentKeyManager.d.ts +48 -0
- package/dist/core/provenance/crypto/AgentKeyManager.d.ts.map +1 -0
- package/dist/core/provenance/crypto/AgentKeyManager.js +162 -0
- package/dist/core/provenance/crypto/AgentKeyManager.js.map +1 -0
- package/dist/core/provenance/crypto/HashChain.d.ts +58 -0
- package/dist/core/provenance/crypto/HashChain.d.ts.map +1 -0
- package/dist/core/provenance/crypto/HashChain.js +86 -0
- package/dist/core/provenance/crypto/HashChain.js.map +1 -0
- package/dist/core/provenance/crypto/MerkleTree.d.ts +41 -0
- package/dist/core/provenance/crypto/MerkleTree.d.ts.map +1 -0
- package/dist/core/provenance/crypto/MerkleTree.js +86 -0
- package/dist/core/provenance/crypto/MerkleTree.js.map +1 -0
- package/dist/core/provenance/enforcement/AutonomyGuard.d.ts +37 -0
- package/dist/core/provenance/enforcement/AutonomyGuard.d.ts.map +1 -0
- package/dist/core/provenance/enforcement/AutonomyGuard.js +120 -0
- package/dist/core/provenance/enforcement/AutonomyGuard.js.map +1 -0
- package/dist/core/provenance/enforcement/ProvenanceStorageHooks.d.ts +43 -0
- package/dist/core/provenance/enforcement/ProvenanceStorageHooks.d.ts.map +1 -0
- package/dist/core/provenance/enforcement/ProvenanceStorageHooks.js +193 -0
- package/dist/core/provenance/enforcement/ProvenanceStorageHooks.js.map +1 -0
- package/dist/core/provenance/enforcement/RevisionManager.d.ts +41 -0
- package/dist/core/provenance/enforcement/RevisionManager.d.ts.map +1 -0
- package/dist/core/provenance/enforcement/RevisionManager.js +105 -0
- package/dist/core/provenance/enforcement/RevisionManager.js.map +1 -0
- package/dist/core/provenance/enforcement/TombstoneManager.d.ts +47 -0
- package/dist/core/provenance/enforcement/TombstoneManager.d.ts.map +1 -0
- package/dist/core/provenance/enforcement/TombstoneManager.js +121 -0
- package/dist/core/provenance/enforcement/TombstoneManager.js.map +1 -0
- package/dist/core/provenance/index.d.ts +34 -0
- package/dist/core/provenance/index.d.ts.map +1 -0
- package/dist/core/provenance/index.js +39 -0
- package/dist/core/provenance/index.js.map +1 -0
- package/dist/core/provenance/ledger/EventTypes.d.ts +123 -0
- package/dist/core/provenance/ledger/EventTypes.d.ts.map +1 -0
- package/dist/core/provenance/ledger/EventTypes.js +9 -0
- package/dist/core/provenance/ledger/EventTypes.js.map +1 -0
- package/dist/core/provenance/ledger/SignedEventLedger.d.ts +75 -0
- package/dist/core/provenance/ledger/SignedEventLedger.d.ts.map +1 -0
- package/dist/core/provenance/ledger/SignedEventLedger.js +210 -0
- package/dist/core/provenance/ledger/SignedEventLedger.js.map +1 -0
- package/dist/core/provenance/schema/provenance-schema.d.ts +17 -0
- package/dist/core/provenance/schema/provenance-schema.d.ts.map +1 -0
- package/dist/core/provenance/schema/provenance-schema.js +104 -0
- package/dist/core/provenance/schema/provenance-schema.js.map +1 -0
- package/dist/core/provenance/types.d.ts +261 -0
- package/dist/core/provenance/types.d.ts.map +1 -0
- package/dist/core/provenance/types.js +21 -0
- package/dist/core/provenance/types.js.map +1 -0
- package/dist/core/provenance/verification/BundleExporter.d.ts +50 -0
- package/dist/core/provenance/verification/BundleExporter.d.ts.map +1 -0
- package/dist/core/provenance/verification/BundleExporter.js +240 -0
- package/dist/core/provenance/verification/BundleExporter.js.map +1 -0
- package/dist/core/provenance/verification/ChainVerifier.d.ts +39 -0
- package/dist/core/provenance/verification/ChainVerifier.d.ts.map +1 -0
- package/dist/core/provenance/verification/ChainVerifier.js +204 -0
- package/dist/core/provenance/verification/ChainVerifier.js.map +1 -0
- package/dist/core/provenance/verification/ConversationVerifier.d.ts +56 -0
- package/dist/core/provenance/verification/ConversationVerifier.d.ts.map +1 -0
- package/dist/core/provenance/verification/ConversationVerifier.js +109 -0
- package/dist/core/provenance/verification/ConversationVerifier.js.map +1 -0
- package/dist/extensions/ExtensionManager.d.ts +8 -0
- package/dist/extensions/ExtensionManager.d.ts.map +1 -1
- package/dist/extensions/ExtensionManager.js +58 -3
- package/dist/extensions/ExtensionManager.js.map +1 -1
- package/dist/extensions/MessagingChannelPayload.d.ts +39 -0
- package/dist/extensions/MessagingChannelPayload.d.ts.map +1 -0
- package/dist/extensions/MessagingChannelPayload.js +12 -0
- package/dist/extensions/MessagingChannelPayload.js.map +1 -0
- package/dist/extensions/manifest.d.ts +3 -1
- package/dist/extensions/manifest.d.ts.map +1 -1
- package/dist/extensions/packs/provenance-pack.d.ts +66 -0
- package/dist/extensions/packs/provenance-pack.d.ts.map +1 -0
- package/dist/extensions/packs/provenance-pack.js +162 -0
- package/dist/extensions/packs/provenance-pack.js.map +1 -0
- package/dist/extensions/types.d.ts +23 -0
- package/dist/extensions/types.d.ts.map +1 -1
- package/dist/extensions/types.js +4 -0
- package/dist/extensions/types.js.map +1 -1
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/dist/rag/IRetrievalAugmentor.d.ts +22 -1
- package/dist/rag/IRetrievalAugmentor.d.ts.map +1 -1
- package/dist/rag/RetrievalAugmentor.d.ts +37 -0
- package/dist/rag/RetrievalAugmentor.d.ts.map +1 -1
- package/dist/rag/RetrievalAugmentor.js +82 -6
- package/dist/rag/RetrievalAugmentor.js.map +1 -1
- package/dist/rag/VectorStoreManager.d.ts.map +1 -1
- package/dist/rag/VectorStoreManager.js +5 -0
- package/dist/rag/VectorStoreManager.js.map +1 -1
- package/dist/rag/graphrag/GraphRAGEngine.d.ts +100 -0
- package/dist/rag/graphrag/GraphRAGEngine.d.ts.map +1 -0
- package/dist/rag/graphrag/GraphRAGEngine.js +1146 -0
- package/dist/rag/graphrag/GraphRAGEngine.js.map +1 -0
- package/dist/rag/graphrag/IGraphRAG.d.ts +198 -0
- package/dist/rag/graphrag/IGraphRAG.d.ts.map +1 -0
- package/dist/rag/graphrag/IGraphRAG.js +11 -0
- package/dist/rag/graphrag/IGraphRAG.js.map +1 -0
- package/dist/rag/graphrag/index.d.ts +12 -0
- package/dist/rag/graphrag/index.d.ts.map +1 -0
- package/dist/rag/graphrag/index.js +11 -0
- package/dist/rag/graphrag/index.js.map +1 -0
- package/dist/rag/implementations/vector_stores/HnswlibVectorStore.d.ts +72 -0
- package/dist/rag/implementations/vector_stores/HnswlibVectorStore.d.ts.map +1 -0
- package/dist/rag/implementations/vector_stores/HnswlibVectorStore.js +463 -0
- package/dist/rag/implementations/vector_stores/HnswlibVectorStore.js.map +1 -0
- package/dist/rag/implementations/vector_stores/index.d.ts +1 -0
- package/dist/rag/implementations/vector_stores/index.d.ts.map +1 -1
- package/dist/rag/implementations/vector_stores/index.js +2 -0
- package/dist/rag/implementations/vector_stores/index.js.map +1 -1
- package/dist/rag/index.d.ts +3 -0
- package/dist/rag/index.d.ts.map +1 -1
- package/dist/rag/index.js +5 -0
- package/dist/rag/index.js.map +1 -1
- package/dist/rag/reranking/IRerankerService.d.ts +163 -0
- package/dist/rag/reranking/IRerankerService.d.ts.map +1 -0
- package/dist/rag/reranking/IRerankerService.js +9 -0
- package/dist/rag/reranking/IRerankerService.js.map +1 -0
- package/dist/rag/reranking/RerankerService.d.ts +107 -0
- package/dist/rag/reranking/RerankerService.d.ts.map +1 -0
- package/dist/rag/reranking/RerankerService.js +194 -0
- package/dist/rag/reranking/RerankerService.js.map +1 -0
- package/dist/rag/reranking/index.d.ts +55 -0
- package/dist/rag/reranking/index.d.ts.map +1 -0
- package/dist/rag/reranking/index.js +56 -0
- package/dist/rag/reranking/index.js.map +1 -0
- package/dist/rag/reranking/providers/CohereReranker.d.ts +66 -0
- package/dist/rag/reranking/providers/CohereReranker.d.ts.map +1 -0
- package/dist/rag/reranking/providers/CohereReranker.js +141 -0
- package/dist/rag/reranking/providers/CohereReranker.js.map +1 -0
- package/dist/rag/reranking/providers/LocalCrossEncoderReranker.d.ts +105 -0
- package/dist/rag/reranking/providers/LocalCrossEncoderReranker.d.ts.map +1 -0
- package/dist/rag/reranking/providers/LocalCrossEncoderReranker.js +214 -0
- package/dist/rag/reranking/providers/LocalCrossEncoderReranker.js.map +1 -0
- package/dist/rag/reranking/providers/index.d.ts +7 -0
- package/dist/rag/reranking/providers/index.d.ts.map +1 -0
- package/dist/rag/reranking/providers/index.js +7 -0
- package/dist/rag/reranking/providers/index.js.map +1 -0
- package/dist/rag/reranking/tests/index.d.ts +6 -0
- package/dist/rag/reranking/tests/index.d.ts.map +1 -0
- package/dist/rag/reranking/tests/index.js +11 -0
- package/dist/rag/reranking/tests/index.js.map +1 -0
- package/dist/types/optionalDependencies.d.ts +5 -0
- package/dist/types/optionalDependencies.d.ts.map +1 -0
- package/dist/types/optionalDependencies.js +4 -0
- package/dist/types/optionalDependencies.js.map +1 -0
- package/dist/voice/CallManager.d.ts +116 -0
- package/dist/voice/CallManager.d.ts.map +1 -0
- package/dist/voice/CallManager.js +426 -0
- package/dist/voice/CallManager.js.map +1 -0
- package/dist/voice/IVoiceCallProvider.d.ts +137 -0
- package/dist/voice/IVoiceCallProvider.d.ts.map +1 -0
- package/dist/voice/IVoiceCallProvider.js +11 -0
- package/dist/voice/IVoiceCallProvider.js.map +1 -0
- package/dist/voice/index.d.ts +10 -0
- package/dist/voice/index.d.ts.map +1 -0
- package/dist/voice/index.js +8 -0
- package/dist/voice/index.js.map +1 -0
- package/dist/voice/providers/mock.d.ts +74 -0
- package/dist/voice/providers/mock.d.ts.map +1 -0
- package/dist/voice/providers/mock.js +199 -0
- package/dist/voice/providers/mock.js.map +1 -0
- package/dist/voice/telephony-audio.d.ts +42 -0
- package/dist/voice/telephony-audio.d.ts.map +1 -0
- package/dist/voice/telephony-audio.js +150 -0
- package/dist/voice/telephony-audio.js.map +1 -0
- package/dist/voice/types.d.ts +260 -0
- package/dist/voice/types.d.ts.map +1 -0
- package/dist/voice/types.js +36 -0
- package/dist/voice/types.js.map +1 -0
- 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 @@
|
|
|
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"}
|