keyring-agent-core 0.1.0
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 +169 -0
- package/dist/agent/AgentCore.d.ts +220 -0
- package/dist/agent/AgentCore.d.ts.map +1 -0
- package/dist/agent/AgentCore.js +950 -0
- package/dist/agent/AgentCore.js.map +1 -0
- package/dist/agent/QueryRewriter.d.ts +67 -0
- package/dist/agent/QueryRewriter.d.ts.map +1 -0
- package/dist/agent/QueryRewriter.js +262 -0
- package/dist/agent/QueryRewriter.js.map +1 -0
- package/dist/agent/Router.d.ts +33 -0
- package/dist/agent/Router.d.ts.map +1 -0
- package/dist/agent/Router.js +191 -0
- package/dist/agent/Router.js.map +1 -0
- package/dist/agent/Subagent.d.ts +63 -0
- package/dist/agent/Subagent.d.ts.map +1 -0
- package/dist/agent/Subagent.js +240 -0
- package/dist/agent/Subagent.js.map +1 -0
- package/dist/agent/Synthesizer.d.ts +11 -0
- package/dist/agent/Synthesizer.d.ts.map +1 -0
- package/dist/agent/Synthesizer.js +86 -0
- package/dist/agent/Synthesizer.js.map +1 -0
- package/dist/agent/index.d.ts +10 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +24 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/subagents/AiAgent.d.ts +6 -0
- package/dist/agent/subagents/AiAgent.d.ts.map +1 -0
- package/dist/agent/subagents/AiAgent.js +48 -0
- package/dist/agent/subagents/AiAgent.js.map +1 -0
- package/dist/agent/subagents/NftAgent.d.ts +6 -0
- package/dist/agent/subagents/NftAgent.d.ts.map +1 -0
- package/dist/agent/subagents/NftAgent.js +69 -0
- package/dist/agent/subagents/NftAgent.js.map +1 -0
- package/dist/agent/subagents/PoolAgent.d.ts +6 -0
- package/dist/agent/subagents/PoolAgent.d.ts.map +1 -0
- package/dist/agent/subagents/PoolAgent.js +184 -0
- package/dist/agent/subagents/PoolAgent.js.map +1 -0
- package/dist/agent/subagents/TokenAgent.d.ts +6 -0
- package/dist/agent/subagents/TokenAgent.d.ts.map +1 -0
- package/dist/agent/subagents/TokenAgent.js +75 -0
- package/dist/agent/subagents/TokenAgent.js.map +1 -0
- package/dist/agent/subagents/WalletAgent.d.ts +6 -0
- package/dist/agent/subagents/WalletAgent.d.ts.map +1 -0
- package/dist/agent/subagents/WalletAgent.js +92 -0
- package/dist/agent/subagents/WalletAgent.js.map +1 -0
- package/dist/agent/subagents/index.d.ts +14 -0
- package/dist/agent/subagents/index.d.ts.map +1 -0
- package/dist/agent/subagents/index.js +38 -0
- package/dist/agent/subagents/index.js.map +1 -0
- package/dist/constants/abi.d.ts +520 -0
- package/dist/constants/abi.d.ts.map +1 -0
- package/dist/constants/abi.js +667 -0
- package/dist/constants/abi.js.map +1 -0
- package/dist/functions/pool.d.ts +25 -0
- package/dist/functions/pool.d.ts.map +1 -0
- package/dist/functions/pool.js +151 -0
- package/dist/functions/pool.js.map +1 -0
- package/dist/functions/web3.d.ts +32 -0
- package/dist/functions/web3.d.ts.map +1 -0
- package/dist/functions/web3.js +277 -0
- package/dist/functions/web3.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +65 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/GeminiProvider.d.ts +16 -0
- package/dist/llm/GeminiProvider.d.ts.map +1 -0
- package/dist/llm/GeminiProvider.js +248 -0
- package/dist/llm/GeminiProvider.js.map +1 -0
- package/dist/llm/index.d.ts +2 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +6 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/memory/ChatHistory.d.ts +83 -0
- package/dist/memory/ChatHistory.d.ts.map +1 -0
- package/dist/memory/ChatHistory.js +143 -0
- package/dist/memory/ChatHistory.js.map +1 -0
- package/dist/memory/KnowledgeBase.d.ts +38 -0
- package/dist/memory/KnowledgeBase.d.ts.map +1 -0
- package/dist/memory/KnowledgeBase.js +139 -0
- package/dist/memory/KnowledgeBase.js.map +1 -0
- package/dist/memory/Summarizer.d.ts +12 -0
- package/dist/memory/Summarizer.d.ts.map +1 -0
- package/dist/memory/Summarizer.js +39 -0
- package/dist/memory/Summarizer.js.map +1 -0
- package/dist/memory/UpstashKnowledgeBase.d.ts +124 -0
- package/dist/memory/UpstashKnowledgeBase.d.ts.map +1 -0
- package/dist/memory/UpstashKnowledgeBase.js +152 -0
- package/dist/memory/UpstashKnowledgeBase.js.map +1 -0
- package/dist/memory/historyUtils.d.ts +58 -0
- package/dist/memory/historyUtils.d.ts.map +1 -0
- package/dist/memory/historyUtils.js +190 -0
- package/dist/memory/historyUtils.js.map +1 -0
- package/dist/memory/index.d.ts +7 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +12 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/ingestKnowledgeBase.d.ts +17 -0
- package/dist/memory/ingestKnowledgeBase.d.ts.map +1 -0
- package/dist/memory/ingestKnowledgeBase.js +35 -0
- package/dist/memory/ingestKnowledgeBase.js.map +1 -0
- package/dist/services/MoralisService.d.ts +1350 -0
- package/dist/services/MoralisService.d.ts.map +1 -0
- package/dist/services/MoralisService.js +1364 -0
- package/dist/services/MoralisService.js.map +1 -0
- package/dist/services/PantographService.d.ts +38 -0
- package/dist/services/PantographService.d.ts.map +1 -0
- package/dist/services/PantographService.js +199 -0
- package/dist/services/PantographService.js.map +1 -0
- package/dist/services/PoolService.d.ts +241 -0
- package/dist/services/PoolService.d.ts.map +1 -0
- package/dist/services/PoolService.js +507 -0
- package/dist/services/PoolService.js.map +1 -0
- package/dist/services/UniswapService.d.ts +289 -0
- package/dist/services/UniswapService.d.ts.map +1 -0
- package/dist/services/UniswapService.js +585 -0
- package/dist/services/UniswapService.js.map +1 -0
- package/dist/services/swap/BaseSwapService.d.ts +17 -0
- package/dist/services/swap/BaseSwapService.d.ts.map +1 -0
- package/dist/services/swap/BaseSwapService.js +19 -0
- package/dist/services/swap/BaseSwapService.js.map +1 -0
- package/dist/services/swap/DebridgeAdapter.d.ts +20 -0
- package/dist/services/swap/DebridgeAdapter.d.ts.map +1 -0
- package/dist/services/swap/DebridgeAdapter.js +175 -0
- package/dist/services/swap/DebridgeAdapter.js.map +1 -0
- package/dist/services/swap/RelayAdapter.d.ts +19 -0
- package/dist/services/swap/RelayAdapter.d.ts.map +1 -0
- package/dist/services/swap/RelayAdapter.js +189 -0
- package/dist/services/swap/RelayAdapter.js.map +1 -0
- package/dist/services/swap/SwapServiceFactory.d.ts +24 -0
- package/dist/services/swap/SwapServiceFactory.d.ts.map +1 -0
- package/dist/services/swap/SwapServiceFactory.js +74 -0
- package/dist/services/swap/SwapServiceFactory.js.map +1 -0
- package/dist/services/swap/addresses.d.ts +3 -0
- package/dist/services/swap/addresses.d.ts.map +1 -0
- package/dist/services/swap/addresses.js +68 -0
- package/dist/services/swap/addresses.js.map +1 -0
- package/dist/services/swap/affiliate.d.ts +17 -0
- package/dist/services/swap/affiliate.d.ts.map +1 -0
- package/dist/services/swap/affiliate.js +126 -0
- package/dist/services/swap/affiliate.js.map +1 -0
- package/dist/services/swap/config.d.ts +9 -0
- package/dist/services/swap/config.d.ts.map +1 -0
- package/dist/services/swap/config.js +19 -0
- package/dist/services/swap/config.js.map +1 -0
- package/dist/services/swap/index.d.ts +10 -0
- package/dist/services/swap/index.d.ts.map +1 -0
- package/dist/services/swap/index.js +22 -0
- package/dist/services/swap/index.js.map +1 -0
- package/dist/services/swap/types.d.ts +89 -0
- package/dist/services/swap/types.d.ts.map +1 -0
- package/dist/services/swap/types.js +6 -0
- package/dist/services/swap/types.js.map +1 -0
- package/dist/tools/BaseTool.d.ts +15 -0
- package/dist/tools/BaseTool.d.ts.map +1 -0
- package/dist/tools/BaseTool.js +35 -0
- package/dist/tools/BaseTool.js.map +1 -0
- package/dist/tools/ToolRegistry.d.ts +27 -0
- package/dist/tools/ToolRegistry.d.ts.map +1 -0
- package/dist/tools/ToolRegistry.js +80 -0
- package/dist/tools/ToolRegistry.js.map +1 -0
- package/dist/tools/builtin/ai/MoralisCortexTool.d.ts +33 -0
- package/dist/tools/builtin/ai/MoralisCortexTool.d.ts.map +1 -0
- package/dist/tools/builtin/ai/MoralisCortexTool.js +76 -0
- package/dist/tools/builtin/ai/MoralisCortexTool.js.map +1 -0
- package/dist/tools/builtin/ai/SolanaCortexTool.d.ts +22 -0
- package/dist/tools/builtin/ai/SolanaCortexTool.d.ts.map +1 -0
- package/dist/tools/builtin/ai/SolanaCortexTool.js +80 -0
- package/dist/tools/builtin/ai/SolanaCortexTool.js.map +1 -0
- package/dist/tools/builtin/ai/index.d.ts +5 -0
- package/dist/tools/builtin/ai/index.d.ts.map +1 -0
- package/dist/tools/builtin/ai/index.js +8 -0
- package/dist/tools/builtin/ai/index.js.map +1 -0
- package/dist/tools/builtin/index.d.ts +6 -0
- package/dist/tools/builtin/index.d.ts.map +1 -0
- package/dist/tools/builtin/index.js +22 -0
- package/dist/tools/builtin/index.js.map +1 -0
- package/dist/tools/builtin/nft/NFTContractInfoTool.d.ts +21 -0
- package/dist/tools/builtin/nft/NFTContractInfoTool.d.ts.map +1 -0
- package/dist/tools/builtin/nft/NFTContractInfoTool.js +54 -0
- package/dist/tools/builtin/nft/NFTContractInfoTool.js.map +1 -0
- package/dist/tools/builtin/nft/NFTMetadataTool.d.ts +121 -0
- package/dist/tools/builtin/nft/NFTMetadataTool.d.ts.map +1 -0
- package/dist/tools/builtin/nft/NFTMetadataTool.js +159 -0
- package/dist/tools/builtin/nft/NFTMetadataTool.js.map +1 -0
- package/dist/tools/builtin/nft/WalletNFTsTool.d.ts +82 -0
- package/dist/tools/builtin/nft/WalletNFTsTool.d.ts.map +1 -0
- package/dist/tools/builtin/nft/WalletNFTsTool.js +172 -0
- package/dist/tools/builtin/nft/WalletNFTsTool.js.map +1 -0
- package/dist/tools/builtin/nft/index.d.ts +7 -0
- package/dist/tools/builtin/nft/index.d.ts.map +1 -0
- package/dist/tools/builtin/nft/index.js +10 -0
- package/dist/tools/builtin/nft/index.js.map +1 -0
- package/dist/tools/builtin/pool/EstimatePoolYieldTool.d.ts +124 -0
- package/dist/tools/builtin/pool/EstimatePoolYieldTool.d.ts.map +1 -0
- package/dist/tools/builtin/pool/EstimatePoolYieldTool.js +235 -0
- package/dist/tools/builtin/pool/EstimatePoolYieldTool.js.map +1 -0
- package/dist/tools/builtin/pool/OpenAddLiquidityFormTool.d.ts +127 -0
- package/dist/tools/builtin/pool/OpenAddLiquidityFormTool.d.ts.map +1 -0
- package/dist/tools/builtin/pool/OpenAddLiquidityFormTool.js +517 -0
- package/dist/tools/builtin/pool/OpenAddLiquidityFormTool.js.map +1 -0
- package/dist/tools/builtin/pool/PoolByAddressTool.d.ts +127 -0
- package/dist/tools/builtin/pool/PoolByAddressTool.d.ts.map +1 -0
- package/dist/tools/builtin/pool/PoolByAddressTool.js +237 -0
- package/dist/tools/builtin/pool/PoolByAddressTool.js.map +1 -0
- package/dist/tools/builtin/pool/PoolDetailTool.d.ts +127 -0
- package/dist/tools/builtin/pool/PoolDetailTool.d.ts.map +1 -0
- package/dist/tools/builtin/pool/PoolDetailTool.js +272 -0
- package/dist/tools/builtin/pool/PoolDetailTool.js.map +1 -0
- package/dist/tools/builtin/pool/PoolSearchTool.d.ts +50 -0
- package/dist/tools/builtin/pool/PoolSearchTool.d.ts.map +1 -0
- package/dist/tools/builtin/pool/PoolSearchTool.js +159 -0
- package/dist/tools/builtin/pool/PoolSearchTool.js.map +1 -0
- package/dist/tools/builtin/pool/PreviewAddLiquidityTool.d.ts +123 -0
- package/dist/tools/builtin/pool/PreviewAddLiquidityTool.d.ts.map +1 -0
- package/dist/tools/builtin/pool/PreviewAddLiquidityTool.js +380 -0
- package/dist/tools/builtin/pool/PreviewAddLiquidityTool.js.map +1 -0
- package/dist/tools/builtin/pool/TopPoolsTool.d.ts +68 -0
- package/dist/tools/builtin/pool/TopPoolsTool.d.ts.map +1 -0
- package/dist/tools/builtin/pool/TopPoolsTool.js +158 -0
- package/dist/tools/builtin/pool/TopPoolsTool.js.map +1 -0
- package/dist/tools/builtin/pool/index.d.ts +15 -0
- package/dist/tools/builtin/pool/index.d.ts.map +1 -0
- package/dist/tools/builtin/pool/index.js +18 -0
- package/dist/tools/builtin/pool/index.js.map +1 -0
- package/dist/tools/builtin/token/TokenAnalyticsTool.d.ts +71 -0
- package/dist/tools/builtin/token/TokenAnalyticsTool.d.ts.map +1 -0
- package/dist/tools/builtin/token/TokenAnalyticsTool.js +146 -0
- package/dist/tools/builtin/token/TokenAnalyticsTool.js.map +1 -0
- package/dist/tools/builtin/token/TokenHoldersTool.d.ts +81 -0
- package/dist/tools/builtin/token/TokenHoldersTool.d.ts.map +1 -0
- package/dist/tools/builtin/token/TokenHoldersTool.js +138 -0
- package/dist/tools/builtin/token/TokenHoldersTool.js.map +1 -0
- package/dist/tools/builtin/token/TokenInfoTool.d.ts +36 -0
- package/dist/tools/builtin/token/TokenInfoTool.d.ts.map +1 -0
- package/dist/tools/builtin/token/TokenInfoTool.js +163 -0
- package/dist/tools/builtin/token/TokenInfoTool.js.map +1 -0
- package/dist/tools/builtin/token/TokenScoreTool.d.ts +63 -0
- package/dist/tools/builtin/token/TokenScoreTool.d.ts.map +1 -0
- package/dist/tools/builtin/token/TokenScoreTool.js +147 -0
- package/dist/tools/builtin/token/TokenScoreTool.js.map +1 -0
- package/dist/tools/builtin/token/TopGainersTool.d.ts +46 -0
- package/dist/tools/builtin/token/TopGainersTool.d.ts.map +1 -0
- package/dist/tools/builtin/token/TopGainersTool.js +110 -0
- package/dist/tools/builtin/token/TopGainersTool.js.map +1 -0
- package/dist/tools/builtin/token/TopLosersTool.d.ts +66 -0
- package/dist/tools/builtin/token/TopLosersTool.d.ts.map +1 -0
- package/dist/tools/builtin/token/TopLosersTool.js +128 -0
- package/dist/tools/builtin/token/TopLosersTool.js.map +1 -0
- package/dist/tools/builtin/token/TrendingTokensTool.d.ts +39 -0
- package/dist/tools/builtin/token/TrendingTokensTool.d.ts.map +1 -0
- package/dist/tools/builtin/token/TrendingTokensTool.js +75 -0
- package/dist/tools/builtin/token/TrendingTokensTool.js.map +1 -0
- package/dist/tools/builtin/token/index.d.ts +15 -0
- package/dist/tools/builtin/token/index.d.ts.map +1 -0
- package/dist/tools/builtin/token/index.js +18 -0
- package/dist/tools/builtin/token/index.js.map +1 -0
- package/dist/tools/builtin/wallet/TransactionByHashTool.d.ts +70 -0
- package/dist/tools/builtin/wallet/TransactionByHashTool.d.ts.map +1 -0
- package/dist/tools/builtin/wallet/TransactionByHashTool.js +110 -0
- package/dist/tools/builtin/wallet/TransactionByHashTool.js.map +1 -0
- package/dist/tools/builtin/wallet/WalletApprovalsTool.d.ts +107 -0
- package/dist/tools/builtin/wallet/WalletApprovalsTool.d.ts.map +1 -0
- package/dist/tools/builtin/wallet/WalletApprovalsTool.js +163 -0
- package/dist/tools/builtin/wallet/WalletApprovalsTool.js.map +1 -0
- package/dist/tools/builtin/wallet/WalletDefiPositionsTool.d.ts +61 -0
- package/dist/tools/builtin/wallet/WalletDefiPositionsTool.d.ts.map +1 -0
- package/dist/tools/builtin/wallet/WalletDefiPositionsTool.js +99 -0
- package/dist/tools/builtin/wallet/WalletDefiPositionsTool.js.map +1 -0
- package/dist/tools/builtin/wallet/WalletDefiProtocolPositionsTool.d.ts +68 -0
- package/dist/tools/builtin/wallet/WalletDefiProtocolPositionsTool.d.ts.map +1 -0
- package/dist/tools/builtin/wallet/WalletDefiProtocolPositionsTool.js +114 -0
- package/dist/tools/builtin/wallet/WalletDefiProtocolPositionsTool.js.map +1 -0
- package/dist/tools/builtin/wallet/WalletDefiSummaryTool.d.ts +50 -0
- package/dist/tools/builtin/wallet/WalletDefiSummaryTool.d.ts.map +1 -0
- package/dist/tools/builtin/wallet/WalletDefiSummaryTool.js +79 -0
- package/dist/tools/builtin/wallet/WalletDefiSummaryTool.js.map +1 -0
- package/dist/tools/builtin/wallet/WalletHistoryTool.d.ts +31 -0
- package/dist/tools/builtin/wallet/WalletHistoryTool.d.ts.map +1 -0
- package/dist/tools/builtin/wallet/WalletHistoryTool.js +153 -0
- package/dist/tools/builtin/wallet/WalletHistoryTool.js.map +1 -0
- package/dist/tools/builtin/wallet/WalletNetWorthTool.d.ts +44 -0
- package/dist/tools/builtin/wallet/WalletNetWorthTool.d.ts.map +1 -0
- package/dist/tools/builtin/wallet/WalletNetWorthTool.js +122 -0
- package/dist/tools/builtin/wallet/WalletNetWorthTool.js.map +1 -0
- package/dist/tools/builtin/wallet/WalletNftTransfersTool.d.ts +86 -0
- package/dist/tools/builtin/wallet/WalletNftTransfersTool.d.ts.map +1 -0
- package/dist/tools/builtin/wallet/WalletNftTransfersTool.js +264 -0
- package/dist/tools/builtin/wallet/WalletNftTransfersTool.js.map +1 -0
- package/dist/tools/builtin/wallet/WalletPnlSummaryTool.d.ts +43 -0
- package/dist/tools/builtin/wallet/WalletPnlSummaryTool.d.ts.map +1 -0
- package/dist/tools/builtin/wallet/WalletPnlSummaryTool.js +88 -0
- package/dist/tools/builtin/wallet/WalletPnlSummaryTool.js.map +1 -0
- package/dist/tools/builtin/wallet/WalletPnlTool.d.ts +43 -0
- package/dist/tools/builtin/wallet/WalletPnlTool.d.ts.map +1 -0
- package/dist/tools/builtin/wallet/WalletPnlTool.js +174 -0
- package/dist/tools/builtin/wallet/WalletPnlTool.js.map +1 -0
- package/dist/tools/builtin/wallet/WalletTokenBalancesTool.d.ts +35 -0
- package/dist/tools/builtin/wallet/WalletTokenBalancesTool.d.ts.map +1 -0
- package/dist/tools/builtin/wallet/WalletTokenBalancesTool.js +67 -0
- package/dist/tools/builtin/wallet/WalletTokenBalancesTool.js.map +1 -0
- package/dist/tools/builtin/wallet/WalletTokenTransfersTool.d.ts +109 -0
- package/dist/tools/builtin/wallet/WalletTokenTransfersTool.d.ts.map +1 -0
- package/dist/tools/builtin/wallet/WalletTokenTransfersTool.js +353 -0
- package/dist/tools/builtin/wallet/WalletTokenTransfersTool.js.map +1 -0
- package/dist/tools/builtin/wallet/index.d.ts +25 -0
- package/dist/tools/builtin/wallet/index.d.ts.map +1 -0
- package/dist/tools/builtin/wallet/index.js +28 -0
- package/dist/tools/builtin/wallet/index.js.map +1 -0
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +23 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/types/index.d.ts +566 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentCore.js","sourceRoot":"","sources":["../../src/agent/AgentCore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { ChatMessage, LLMProvider } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Structured result of rewriting a user turn into a standalone query.
|
|
4
|
+
*
|
|
5
|
+
* We follow the 2025 "Contextualizer" pattern (Alhena RAG) + the findings of
|
|
6
|
+
* "LLMs Get Lost in Multi-Turn Conversation" (ICLR 2025): a dedicated, narrow
|
|
7
|
+
* LLM pass resolves coreferences and ellipsis BEFORE routing, so downstream
|
|
8
|
+
* components (Router, Subagent) can operate on a fully-specified question.
|
|
9
|
+
*/
|
|
10
|
+
export interface RewriteResult {
|
|
11
|
+
/** True if the user message depends on prior turns (pronoun, ellipsis, confirmation, continuation). */
|
|
12
|
+
isFollowUp: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* The fully-resolved, self-contained version of the user query in the user's
|
|
15
|
+
* language. Equal to the original message when `isFollowUp` is false.
|
|
16
|
+
*/
|
|
17
|
+
rewrittenQuery: string;
|
|
18
|
+
/** True if the user has clearly switched topics vs recent turns (reset preferences). */
|
|
19
|
+
topicChanged: boolean;
|
|
20
|
+
/** One-line explanation, for debug only. */
|
|
21
|
+
reasoning: string;
|
|
22
|
+
/**
|
|
23
|
+
* BCP-47 language tag of the user's CURRENT message (e.g. "en", "vi", "ja",
|
|
24
|
+
* "zh", "ko"). Empty string when the LLM cannot decide. Used by AgentCore
|
|
25
|
+
* to stamp `language` on UIPayloads so FE renders components in the same
|
|
26
|
+
* language the user just typed in.
|
|
27
|
+
*/
|
|
28
|
+
language: string;
|
|
29
|
+
}
|
|
30
|
+
export interface QueryRewriterOptions {
|
|
31
|
+
/** How many recent messages to feed the rewriter. Default: 8 */
|
|
32
|
+
historyMessages?: number;
|
|
33
|
+
/** Enable debug logging. Default: false */
|
|
34
|
+
debug?: boolean;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Dedicated query-rewriting stage — runs BEFORE the Router.
|
|
38
|
+
*
|
|
39
|
+
* Why a separate component (vs inlining in Router prompt):
|
|
40
|
+
* - Single responsibility → smaller, more reliable prompt for a small model.
|
|
41
|
+
* - Easy to test and log (you see the rewrite before routing happens).
|
|
42
|
+
* - Graceful degradation: any failure falls back to the original message.
|
|
43
|
+
* - Reusable: the rewritten query can also feed KB search later.
|
|
44
|
+
*
|
|
45
|
+
* References:
|
|
46
|
+
* - Alhena "Contextualizer" pattern (2025 production RAG)
|
|
47
|
+
* - "LLMs Get Lost in Multi-Turn Conversation" (ICLR 2025)
|
|
48
|
+
* - QuReTeC query resolution for conversational search
|
|
49
|
+
*/
|
|
50
|
+
export declare class QueryRewriter {
|
|
51
|
+
private llm;
|
|
52
|
+
private historyMessages;
|
|
53
|
+
private debug;
|
|
54
|
+
constructor(llm: LLMProvider, options?: QueryRewriterOptions);
|
|
55
|
+
/**
|
|
56
|
+
* Rewrite the user message into a self-contained query. On any failure
|
|
57
|
+
* (LLM error, invalid JSON, empty output), returns the original message
|
|
58
|
+
* as a non-follow-up so the caller never has to handle errors.
|
|
59
|
+
*
|
|
60
|
+
* @param lastSubagents Names of the subagent(s) that handled the previous
|
|
61
|
+
* assistant turn. Used as a strong domain hint — short follow-ups almost
|
|
62
|
+
* always belong to the same domain.
|
|
63
|
+
*/
|
|
64
|
+
rewrite(userMessage: string, conversationHistory: ChatMessage[], lastSubagents?: string[]): Promise<RewriteResult>;
|
|
65
|
+
private parseJSON;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=QueryRewriter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryRewriter.d.ts","sourceRoot":"","sources":["../../src/agent/QueryRewriter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGzD;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,uGAAuG;IACvG,UAAU,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,wFAAwF;IACxF,YAAY,EAAE,OAAO,CAAC;IACtB,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB;AAqHD,MAAM,WAAW,oBAAoB;IACnC,gEAAgE;IAChE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,KAAK,CAAU;gBAEX,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,oBAAoB;IAM5D;;;;;;;;OAQG;IACG,OAAO,CACX,WAAW,EAAE,MAAM,EACnB,mBAAmB,EAAE,WAAW,EAAE,EAClC,aAAa,GAAE,MAAM,EAAO,GAC3B,OAAO,CAAC,aAAa,CAAC;IA4GzB,OAAO,CAAC,SAAS;CAUlB"}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.QueryRewriter = void 0;
|
|
4
|
+
const historyUtils_1 = require("../memory/historyUtils");
|
|
5
|
+
const REWRITER_SYSTEM_PROMPT = `You are a CONTEXTUALIZER.
|
|
6
|
+
|
|
7
|
+
Your ONLY job: read the conversation history + the user's latest message,
|
|
8
|
+
and produce a SELF-CONTAINED version of that message.
|
|
9
|
+
|
|
10
|
+
Output STRICT JSON with this shape (no prose, no code fences):
|
|
11
|
+
|
|
12
|
+
{
|
|
13
|
+
"isFollowUp": <true|false>,
|
|
14
|
+
"rewrittenQuery": "<self-contained question in the user's language>",
|
|
15
|
+
"topicChanged": <true|false>,
|
|
16
|
+
"reasoning": "<one short line, user's language>"
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
## DEFINITIONS
|
|
20
|
+
|
|
21
|
+
- "Self-contained" = a reader with ZERO access to prior turns can still
|
|
22
|
+
understand exactly what the user is asking.
|
|
23
|
+
- "Follow-up" = the message depends on prior turns (pronoun, ellipsis,
|
|
24
|
+
short confirmation/negation, ordinal reference, continuation cue, or
|
|
25
|
+
any elliptical reply to a question the assistant just asked).
|
|
26
|
+
|
|
27
|
+
## RULES
|
|
28
|
+
|
|
29
|
+
1. If the message is ALREADY self-contained, set isFollowUp=false and
|
|
30
|
+
copy the message verbatim into rewrittenQuery.
|
|
31
|
+
2. If it's a follow-up, REWRITE it using the most recent relevant turn.
|
|
32
|
+
- Replace pronouns and deictics with their concrete antecedent.
|
|
33
|
+
- Fold in the verb/subject that was implied.
|
|
34
|
+
- Preserve the user's language and tone.
|
|
35
|
+
- Do NOT invent facts not present in history.
|
|
36
|
+
3. If you cannot resolve the reference from history, set isFollowUp=true,
|
|
37
|
+
topicChanged=false, and copy the message verbatim — downstream code
|
|
38
|
+
will ask the user for clarification.
|
|
39
|
+
4. topicChanged=true ONLY when the user clearly pivots away from the
|
|
40
|
+
active subject (e.g. after discussing tokens, they suddenly ask about
|
|
41
|
+
a random NFT collection).
|
|
42
|
+
5. Never answer the user. Never produce tool calls. JSON ONLY.
|
|
43
|
+
|
|
44
|
+
## EXAMPLES
|
|
45
|
+
|
|
46
|
+
History: assistant listed "1. USDC 2. ETH 3. PEPE"
|
|
47
|
+
User: "detail the first"
|
|
48
|
+
→ {"isFollowUp": true, "rewrittenQuery": "show details for USDC",
|
|
49
|
+
"topicChanged": false, "reasoning": "resolved 'the first' → USDC"}
|
|
50
|
+
|
|
51
|
+
History: assistant showed transaction list page 1.
|
|
52
|
+
User: "xem nửa còn lại"
|
|
53
|
+
→ {"isFollowUp": true,
|
|
54
|
+
"rewrittenQuery": "xem phần còn lại của lịch sử giao dịch (trang tiếp theo)",
|
|
55
|
+
"topicChanged": false,
|
|
56
|
+
"reasoning": "tiếp tục phân trang lịch sử giao dịch"}
|
|
57
|
+
|
|
58
|
+
History: assistant asked "do you want to see your PnL?"
|
|
59
|
+
User: "yes"
|
|
60
|
+
→ {"isFollowUp": true, "rewrittenQuery": "show my PnL",
|
|
61
|
+
"topicChanged": false, "reasoning": "affirmation of PnL question"}
|
|
62
|
+
|
|
63
|
+
History: tool result contained transaction with hash "0x4296cab7553c6ead42c70918fc921f28cae58cdfbf776d2553486f812710f0f3", assistant summarised it.
|
|
64
|
+
User: "Details of this transaction?"
|
|
65
|
+
→ {"isFollowUp": true,
|
|
66
|
+
"rewrittenQuery": "Get details of transaction hash 0x4296cab7553c6ead42c70918fc921f28cae58cdfbf776d2553486f812710f0f3",
|
|
67
|
+
"topicChanged": false,
|
|
68
|
+
"reasoning": "resolved 'this transaction' → exact hash from previous tool result"}
|
|
69
|
+
|
|
70
|
+
History: tool result contained wallet history page 1 with cursor "eyJhbGci…", assistant showed transactions.
|
|
71
|
+
User: "show more" / "next page" / "tiếp theo"
|
|
72
|
+
→ {"isFollowUp": true,
|
|
73
|
+
"rewrittenQuery": "get next page of wallet history using cursor eyJhbGci…",
|
|
74
|
+
"topicChanged": false,
|
|
75
|
+
"reasoning": "pagination follow-up — cursor extracted from last tool result"}
|
|
76
|
+
|
|
77
|
+
History: discussing wallet tokens.
|
|
78
|
+
User: "what is the floor price of Bored Apes?"
|
|
79
|
+
→ {"isFollowUp": false, "rewrittenQuery": "what is the floor price of Bored Apes?",
|
|
80
|
+
"topicChanged": true, "reasoning": "already self-contained; topic pivot to NFTs"}
|
|
81
|
+
|
|
82
|
+
## IMPORTANT FOR TRANSACTION REFERENCES
|
|
83
|
+
|
|
84
|
+
When the user references "this transaction", "that tx", "the transaction above", "chi tiết giao dịch này", etc.:
|
|
85
|
+
- Scan the conversation history for tool results (role: "tool") that contain transaction data.
|
|
86
|
+
- Extract the EXACT hash value (starts with "0x", 66 chars) from the most recent such result.
|
|
87
|
+
- Include it verbatim in rewrittenQuery. NEVER invent or modify a hash.
|
|
88
|
+
- If no hash is found in history, set rewrittenQuery to the original message verbatim so the subagent knows to fetch it.`;
|
|
89
|
+
const LANGUAGE_DETECTOR_SYSTEM_PROMPT = `You detect the language of a single user message.
|
|
90
|
+
|
|
91
|
+
Output STRICT JSON, no prose, no code fences:
|
|
92
|
+
{"language": "<BCP-47 tag>"}
|
|
93
|
+
|
|
94
|
+
Allowed values: "en", "vi", "ja", "zh", "ko", "ru", "th", "ar", "fr", "es",
|
|
95
|
+
"de", "pt", "it", "id", "hi", "tr". Use "" only when the message has NO
|
|
96
|
+
decidable script signal (e.g. pure numbers, emojis, or empty).
|
|
97
|
+
|
|
98
|
+
Rules:
|
|
99
|
+
- Decide from the CURRENT message text only. Ignore any context.
|
|
100
|
+
- Latin-only short replies ("ok", "yes", "no", "sure") → "en".
|
|
101
|
+
- Vietnamese is detected by diacritics (ă â đ ê ô ơ ư, tone marks) OR
|
|
102
|
+
common Vietnamese words ("không", "có", "xem", "giúp", "làm", "tiếp").
|
|
103
|
+
- Chinese (Han only) → "zh". Japanese (Hiragana/Katakana present) → "ja".
|
|
104
|
+
- Korean (Hangul) → "ko". Cyrillic → "ru". Thai script → "th". Arabic → "ar".
|
|
105
|
+
- Never output anything other than the JSON object above.
|
|
106
|
+
|
|
107
|
+
Examples:
|
|
108
|
+
"hello" → {"language":"en"}
|
|
109
|
+
"xin chào" → {"language":"vi"}
|
|
110
|
+
"bạn có thể giúp mình" → {"language":"vi"}
|
|
111
|
+
"ok" → {"language":"en"}
|
|
112
|
+
"你好" → {"language":"zh"}
|
|
113
|
+
"こんにちは" → {"language":"ja"}
|
|
114
|
+
"안녕하세요" → {"language":"ko"}
|
|
115
|
+
"привет" → {"language":"ru"}
|
|
116
|
+
"สวัสดี" → {"language":"th"}
|
|
117
|
+
"123" → {"language":""}`;
|
|
118
|
+
/**
|
|
119
|
+
* Dedicated query-rewriting stage — runs BEFORE the Router.
|
|
120
|
+
*
|
|
121
|
+
* Why a separate component (vs inlining in Router prompt):
|
|
122
|
+
* - Single responsibility → smaller, more reliable prompt for a small model.
|
|
123
|
+
* - Easy to test and log (you see the rewrite before routing happens).
|
|
124
|
+
* - Graceful degradation: any failure falls back to the original message.
|
|
125
|
+
* - Reusable: the rewritten query can also feed KB search later.
|
|
126
|
+
*
|
|
127
|
+
* References:
|
|
128
|
+
* - Alhena "Contextualizer" pattern (2025 production RAG)
|
|
129
|
+
* - "LLMs Get Lost in Multi-Turn Conversation" (ICLR 2025)
|
|
130
|
+
* - QuReTeC query resolution for conversational search
|
|
131
|
+
*/
|
|
132
|
+
class QueryRewriter {
|
|
133
|
+
llm;
|
|
134
|
+
historyMessages;
|
|
135
|
+
debug;
|
|
136
|
+
constructor(llm, options) {
|
|
137
|
+
this.llm = llm;
|
|
138
|
+
this.historyMessages = options?.historyMessages ?? 8;
|
|
139
|
+
this.debug = options?.debug ?? false;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Rewrite the user message into a self-contained query. On any failure
|
|
143
|
+
* (LLM error, invalid JSON, empty output), returns the original message
|
|
144
|
+
* as a non-follow-up so the caller never has to handle errors.
|
|
145
|
+
*
|
|
146
|
+
* @param lastSubagents Names of the subagent(s) that handled the previous
|
|
147
|
+
* assistant turn. Used as a strong domain hint — short follow-ups almost
|
|
148
|
+
* always belong to the same domain.
|
|
149
|
+
*/
|
|
150
|
+
async rewrite(userMessage, conversationHistory, lastSubagents = []) {
|
|
151
|
+
// When there is no prior turn, a follow-up is definitionally impossible —
|
|
152
|
+
// BUT we still want the rewriter to run so it can detect the message's
|
|
153
|
+
// language (used to stamp UIPayload.language). We just clamp isFollowUp /
|
|
154
|
+
// topicChanged to false after parsing so the model can't fabricate context.
|
|
155
|
+
const hasPriorTurn = conversationHistory.some((m) => m.role === 'user' || m.role === 'assistant');
|
|
156
|
+
// Extract key data (hashes, cursors) from recent tool results as plain text
|
|
157
|
+
// so the rewriter can resolve references like "details of this tx" or
|
|
158
|
+
// "next page" without receiving raw functionResponse messages (which would
|
|
159
|
+
// cause Gemini errors since no tool schemas are declared here).
|
|
160
|
+
const toolDataHint = (0, historyUtils_1.extractRecentToolDataHint)(conversationHistory);
|
|
161
|
+
// No tools declared here → strip tool messages to avoid orphan
|
|
162
|
+
// functionResponse parts. Then slice a recent window, keeping tool pairs
|
|
163
|
+
// intact (though there should be none after stripping).
|
|
164
|
+
const clean = (0, historyUtils_1.stripToolMessages)(conversationHistory);
|
|
165
|
+
const windowed = (0, historyUtils_1.sliceRecentKeepingToolPairs)(clean, this.historyMessages);
|
|
166
|
+
const hintParts = [];
|
|
167
|
+
if (lastSubagents.length > 0) {
|
|
168
|
+
hintParts.push(`Domain hint: the previous assistant turn was handled by ${lastSubagents.join(', ')}. ` +
|
|
169
|
+
`A short follow-up almost certainly still belongs to that domain — preserve it in the rewrite.`);
|
|
170
|
+
}
|
|
171
|
+
if (toolDataHint) {
|
|
172
|
+
hintParts.push(toolDataHint);
|
|
173
|
+
}
|
|
174
|
+
const hintLine = hintParts.length > 0 ? `\n\n${hintParts.join('\n\n')}` : '';
|
|
175
|
+
const t0 = Date.now();
|
|
176
|
+
const rewriteMessages = [
|
|
177
|
+
{ role: 'system', content: REWRITER_SYSTEM_PROMPT, timestamp: 0 },
|
|
178
|
+
...windowed,
|
|
179
|
+
{
|
|
180
|
+
role: 'user',
|
|
181
|
+
content: `Latest user message to contextualize:\n${userMessage}${hintLine}\n\nReturn JSON only.`,
|
|
182
|
+
timestamp: Date.now(),
|
|
183
|
+
},
|
|
184
|
+
];
|
|
185
|
+
// Run rewriting and language detection in parallel. Language detection
|
|
186
|
+
// gets ONLY the current message (no history, no hints) so it can't be
|
|
187
|
+
// confused by prior turns in a different language. Splitting the two
|
|
188
|
+
// jobs makes each prompt smaller and far more reliable on small models.
|
|
189
|
+
const detectMessages = [
|
|
190
|
+
{ role: 'system', content: LANGUAGE_DETECTOR_SYSTEM_PROMPT, timestamp: 0 },
|
|
191
|
+
{ role: 'user', content: userMessage, timestamp: Date.now() },
|
|
192
|
+
];
|
|
193
|
+
const [rewriteRes, detectRes] = await Promise.allSettled([
|
|
194
|
+
this.llm.chat(rewriteMessages),
|
|
195
|
+
this.llm.chat(detectMessages),
|
|
196
|
+
]);
|
|
197
|
+
let parsedRewrite = {};
|
|
198
|
+
if (rewriteRes.status === 'fulfilled') {
|
|
199
|
+
try {
|
|
200
|
+
parsedRewrite = this.parseJSON(rewriteRes.value.text);
|
|
201
|
+
}
|
|
202
|
+
catch (err) {
|
|
203
|
+
if (this.debug)
|
|
204
|
+
console.log(`[QueryRewriter] rewrite parse fail: ${err}`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
else if (this.debug) {
|
|
208
|
+
console.log(`[QueryRewriter] rewrite call fail: ${rewriteRes.reason}`);
|
|
209
|
+
}
|
|
210
|
+
let detectedLang = '';
|
|
211
|
+
if (detectRes.status === 'fulfilled') {
|
|
212
|
+
try {
|
|
213
|
+
const parsedDetect = this.parseJSON(detectRes.value.text);
|
|
214
|
+
if (typeof parsedDetect.language === 'string') {
|
|
215
|
+
detectedLang = parsedDetect.language.trim().toLowerCase();
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
catch (err) {
|
|
219
|
+
if (this.debug)
|
|
220
|
+
console.log(`[QueryRewriter] detect parse fail: ${err}`);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
else if (this.debug) {
|
|
224
|
+
console.log(`[QueryRewriter] detect call fail: ${detectRes.reason}`);
|
|
225
|
+
}
|
|
226
|
+
const result = {
|
|
227
|
+
// Without a prior turn there is nothing to follow up on — clamp regardless of what the model said.
|
|
228
|
+
isFollowUp: hasPriorTurn && typeof parsedRewrite.isFollowUp === 'boolean' ? parsedRewrite.isFollowUp : false,
|
|
229
|
+
rewrittenQuery: typeof parsedRewrite.rewrittenQuery === 'string' && parsedRewrite.rewrittenQuery.trim()
|
|
230
|
+
? parsedRewrite.rewrittenQuery.trim()
|
|
231
|
+
: userMessage,
|
|
232
|
+
topicChanged: hasPriorTurn && typeof parsedRewrite.topicChanged === 'boolean' ? parsedRewrite.topicChanged : false,
|
|
233
|
+
reasoning: typeof parsedRewrite.reasoning === 'string' ? parsedRewrite.reasoning : '',
|
|
234
|
+
language: detectedLang,
|
|
235
|
+
};
|
|
236
|
+
if (this.debug) {
|
|
237
|
+
const ms = Date.now() - t0;
|
|
238
|
+
const changed = result.rewrittenQuery !== userMessage;
|
|
239
|
+
console.log(`\n[QueryRewriter] (${ms}ms)`);
|
|
240
|
+
console.log(` original : "${userMessage}"`);
|
|
241
|
+
console.log(` rewritten : "${result.rewrittenQuery}"${changed ? '' : ' (unchanged)'}`);
|
|
242
|
+
console.log(` followUp : ${result.isFollowUp} topicChanged: ${result.topicChanged}`);
|
|
243
|
+
if (result.reasoning)
|
|
244
|
+
console.log(` reasoning : ${result.reasoning}`);
|
|
245
|
+
console.log(` language : ${result.language}`);
|
|
246
|
+
}
|
|
247
|
+
return result;
|
|
248
|
+
}
|
|
249
|
+
parseJSON(text) {
|
|
250
|
+
let clean = text.trim();
|
|
251
|
+
if (clean.startsWith('```')) {
|
|
252
|
+
clean = clean.replace(/^```(?:json)?\s*/, '').replace(/```\s*$/, '');
|
|
253
|
+
}
|
|
254
|
+
// Some models prefix with "Here is the JSON:" — extract the first {...} block.
|
|
255
|
+
const match = clean.match(/\{[\s\S]*\}/);
|
|
256
|
+
if (match)
|
|
257
|
+
clean = match[0];
|
|
258
|
+
return JSON.parse(clean);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
exports.QueryRewriter = QueryRewriter;
|
|
262
|
+
//# sourceMappingURL=QueryRewriter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryRewriter.js","sourceRoot":"","sources":["../../src/agent/QueryRewriter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { ChatMessage, LLMProvider, RouterDecision, SubagentCard, SubagentResult, UserContext } from '../types';
|
|
2
|
+
import type { Subagent } from './Subagent';
|
|
3
|
+
/**
|
|
4
|
+
* Router — top-level orchestrator in the Router → Subagent → Tool architecture.
|
|
5
|
+
*
|
|
6
|
+
* The router's LLM sees only subagent "cards" (name + one-liner), which keeps
|
|
7
|
+
* the planning prompt small and predictable regardless of how many tools
|
|
8
|
+
* each subagent owns.
|
|
9
|
+
*/
|
|
10
|
+
export declare class Router {
|
|
11
|
+
private llm;
|
|
12
|
+
private historyMessages;
|
|
13
|
+
private debug;
|
|
14
|
+
constructor(llm: LLMProvider, options?: {
|
|
15
|
+
historyMessages?: number;
|
|
16
|
+
debug?: boolean;
|
|
17
|
+
});
|
|
18
|
+
/**
|
|
19
|
+
* Ask the LLM to decide which subagent(s) should handle the query.
|
|
20
|
+
* Returns `{ assignments: [] }` when no subagent is needed.
|
|
21
|
+
*
|
|
22
|
+
* @param lastSubagents Subagent(s) that handled the previous assistant
|
|
23
|
+
* turn. Passed as a "sticky" hint — useful for short follow-ups.
|
|
24
|
+
*/
|
|
25
|
+
route(userQuery: string, conversationHistory: ChatMessage[], cards: SubagentCard[], userContext?: UserContext, lastSubagents?: string[]): Promise<RouterDecision>;
|
|
26
|
+
/**
|
|
27
|
+
* Dispatch assignments to the matching subagents in parallel.
|
|
28
|
+
* Each subagent runs its own ReAct loop and returns a SubagentResult.
|
|
29
|
+
*/
|
|
30
|
+
dispatch(decision: RouterDecision, subagents: Map<string, Subagent>, conversationHistory: ChatMessage[], userContext?: UserContext): Promise<SubagentResult[]>;
|
|
31
|
+
private parseJSON;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=Router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Router.d.ts","sourceRoot":"","sources":["../../src/agent/Router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EAEX,cAAc,EACd,YAAY,EACZ,cAAc,EACd,WAAW,EACZ,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AA2C3C;;;;;;GAMG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,KAAK,CAAU;gBAEX,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;IAQrF;;;;;;OAMG;IACG,KAAK,CACT,SAAS,EAAE,MAAM,EACjB,mBAAmB,EAAE,WAAW,EAAE,EAClC,KAAK,EAAE,YAAY,EAAE,EACrB,WAAW,CAAC,EAAE,WAAW,EACzB,aAAa,GAAE,MAAM,EAAO,GAC3B,OAAO,CAAC,cAAc,CAAC;IAmF1B;;;OAGG;IACG,QAAQ,CACZ,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,EAChC,mBAAmB,EAAE,WAAW,EAAE,EAClC,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,cAAc,EAAE,CAAC;IAoC5B,OAAO,CAAC,SAAS;CAOlB"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Router = void 0;
|
|
4
|
+
const historyUtils_1 = require("../memory/historyUtils");
|
|
5
|
+
const ROUTER_SYSTEM_PROMPT = `You are a ROUTER.
|
|
6
|
+
|
|
7
|
+
The incoming user query has ALREADY been contextualized upstream — it is a
|
|
8
|
+
self-contained, standalone question. Your ONLY job: decide which subagent(s)
|
|
9
|
+
to call. You MUST NOT answer the user — output JSON only.
|
|
10
|
+
|
|
11
|
+
## OUTPUT FORMAT
|
|
12
|
+
|
|
13
|
+
{
|
|
14
|
+
"analysis": "<one-line intent summary in user's language>",
|
|
15
|
+
"assignments": [
|
|
16
|
+
{
|
|
17
|
+
"subagent": "<exact subagent name>",
|
|
18
|
+
"query": "<focused sub-query for that subagent, user's language>",
|
|
19
|
+
"reasoning": "<one-line reason>"
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
## HOW TO DECIDE
|
|
25
|
+
|
|
26
|
+
Read each subagent's description carefully — they fully define what each agent handles and what it does NOT handle.
|
|
27
|
+
Apply this priority order:
|
|
28
|
+
|
|
29
|
+
1. Does the query match a specific subagent's described scope? → assign it.
|
|
30
|
+
2. Does it span multiple subagent scopes? → emit MULTIPLE assignments (they run in PARALLEL).
|
|
31
|
+
3. No specific subagent matches BUT the query is about blockchain / crypto / token / NFT / wallet / DeFi / on-chain data / smart contracts / any chain (EVM or Solana) → assign "ai-agent" with the user's original query.
|
|
32
|
+
4. Only return "assignments": [] for pure general knowledge, small-talk, or clearly non-crypto queries.
|
|
33
|
+
|
|
34
|
+
NOTE: wallet-agent / token-agent / nft-agent each have an internal AI Cortex fallback,
|
|
35
|
+
so it is safe to route a wallet/token/NFT-shaped query to its matching domain agent even
|
|
36
|
+
if no specific structured tool obviously fits — the agent will fall back to Cortex on its own.
|
|
37
|
+
|
|
38
|
+
## HARD RULES
|
|
39
|
+
|
|
40
|
+
- ONLY use subagent names from the provided list. NEVER invent names.
|
|
41
|
+
- Keep each "query" focused and concise — do not copy the full user message if only part belongs to that subagent.
|
|
42
|
+
- Do NOT include tool names, chain ids, or implementation details in the query field.
|
|
43
|
+
- Match the user's language in all fields.`;
|
|
44
|
+
/**
|
|
45
|
+
* Router — top-level orchestrator in the Router → Subagent → Tool architecture.
|
|
46
|
+
*
|
|
47
|
+
* The router's LLM sees only subagent "cards" (name + one-liner), which keeps
|
|
48
|
+
* the planning prompt small and predictable regardless of how many tools
|
|
49
|
+
* each subagent owns.
|
|
50
|
+
*/
|
|
51
|
+
class Router {
|
|
52
|
+
llm;
|
|
53
|
+
historyMessages;
|
|
54
|
+
debug;
|
|
55
|
+
constructor(llm, options) {
|
|
56
|
+
this.llm = llm;
|
|
57
|
+
// Wider default window so follow-ups ("the first one", "yes") can still
|
|
58
|
+
// see the previous assistant reply even after a couple of short turns.
|
|
59
|
+
this.historyMessages = options?.historyMessages ?? 10;
|
|
60
|
+
this.debug = options?.debug ?? false;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Ask the LLM to decide which subagent(s) should handle the query.
|
|
64
|
+
* Returns `{ assignments: [] }` when no subagent is needed.
|
|
65
|
+
*
|
|
66
|
+
* @param lastSubagents Subagent(s) that handled the previous assistant
|
|
67
|
+
* turn. Passed as a "sticky" hint — useful for short follow-ups.
|
|
68
|
+
*/
|
|
69
|
+
async route(userQuery, conversationHistory, cards, userContext, lastSubagents = []) {
|
|
70
|
+
const cardsText = cards.map((c) => `### ${c.name} (domain: ${c.domain})\n${c.description}`).join('\n\n');
|
|
71
|
+
const contextParts = [];
|
|
72
|
+
if (userContext?.walletAddress)
|
|
73
|
+
contextParts.push(`Connected wallet: ${userContext.walletAddress}`);
|
|
74
|
+
if (userContext?.chain)
|
|
75
|
+
contextParts.push(`Current chain: ${userContext.chain}`);
|
|
76
|
+
const contextSection = contextParts.length > 0 ? `\n\nUser context:\n${contextParts.join('\n')}` : '';
|
|
77
|
+
// Sticky-routing hint: if the previous turn was handled by subagent X,
|
|
78
|
+
// a follow-up very likely belongs to X too. The router is free to
|
|
79
|
+
// override when the query clearly belongs elsewhere.
|
|
80
|
+
const stickyHint = lastSubagents.length > 0
|
|
81
|
+
? `\n\nPrevious turn handled by: ${lastSubagents.join(', ')}. ` +
|
|
82
|
+
`If this query is a natural continuation (same topic), prefer the same subagent(s). ` +
|
|
83
|
+
`Override only if the query clearly belongs to a different domain.`
|
|
84
|
+
: '';
|
|
85
|
+
// Router has NO tools declared, so strip tool messages (otherwise Gemini
|
|
86
|
+
// sees orphan functionResponse parts). Then keep the recent window
|
|
87
|
+
// without splitting any remaining tool-call group.
|
|
88
|
+
const cleanHistory = (0, historyUtils_1.stripToolMessages)(conversationHistory);
|
|
89
|
+
const windowed = (0, historyUtils_1.sliceRecentKeepingToolPairs)(cleanHistory, this.historyMessages);
|
|
90
|
+
if (this.debug) {
|
|
91
|
+
console.log(`\n[Router] history window (${windowed.length} msg${windowed.length === 1 ? '' : 's'}):`);
|
|
92
|
+
console.log(`[Router] user query: "${userQuery}"`);
|
|
93
|
+
}
|
|
94
|
+
const messages = [
|
|
95
|
+
{ role: 'system', content: ROUTER_SYSTEM_PROMPT, timestamp: 0 },
|
|
96
|
+
...windowed,
|
|
97
|
+
{
|
|
98
|
+
role: 'user',
|
|
99
|
+
content: `Available subagents:\n${cardsText}${contextSection}${stickyHint}\n\nUser query: ${userQuery}`,
|
|
100
|
+
timestamp: Date.now(),
|
|
101
|
+
},
|
|
102
|
+
];
|
|
103
|
+
const t0 = Date.now();
|
|
104
|
+
const response = await this.llm.chat(messages);
|
|
105
|
+
const routerMs = Date.now() - t0;
|
|
106
|
+
try {
|
|
107
|
+
const parsed = this.parseJSON(response.text);
|
|
108
|
+
const validNames = new Set(cards.map((c) => c.name));
|
|
109
|
+
const assignments = Array.isArray(parsed.assignments)
|
|
110
|
+
? parsed.assignments
|
|
111
|
+
.filter((a) => !!a && typeof a.subagent === 'string')
|
|
112
|
+
.filter((a) => validNames.has(a.subagent))
|
|
113
|
+
.map((a) => ({
|
|
114
|
+
subagent: a.subagent,
|
|
115
|
+
query: typeof a.query === 'string' && a.query ? a.query : userQuery,
|
|
116
|
+
reasoning: typeof a.reasoning === 'string' ? a.reasoning : '',
|
|
117
|
+
}))
|
|
118
|
+
: [];
|
|
119
|
+
if (this.debug) {
|
|
120
|
+
const label = assignments.length > 0 ? assignments.map((a) => a.subagent).join(', ') : '(none — direct answer)';
|
|
121
|
+
console.log(`\n[Router] (${routerMs}ms)`);
|
|
122
|
+
console.log(` analysis : ${parsed.analysis ?? ''}`);
|
|
123
|
+
console.log(` dispatch : ${label}`);
|
|
124
|
+
if (assignments.length > 0) {
|
|
125
|
+
for (const a of assignments) {
|
|
126
|
+
console.log(` → ${a.subagent}: "${a.query}"`);
|
|
127
|
+
console.log(` reason: ${a.reasoning}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return {
|
|
132
|
+
analysis: typeof parsed.analysis === 'string' ? parsed.analysis : '',
|
|
133
|
+
assignments,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
catch (err) {
|
|
137
|
+
if (this.debug) {
|
|
138
|
+
console.log(`[Router] JSON parse failed: ${err}`);
|
|
139
|
+
console.log(`[Router] raw response: ${response.text.slice(0, 300)}`);
|
|
140
|
+
}
|
|
141
|
+
return { analysis: 'Router could not parse response.', assignments: [] };
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Dispatch assignments to the matching subagents in parallel.
|
|
146
|
+
* Each subagent runs its own ReAct loop and returns a SubagentResult.
|
|
147
|
+
*/
|
|
148
|
+
async dispatch(decision, subagents, conversationHistory, userContext) {
|
|
149
|
+
if (decision.assignments.length === 0)
|
|
150
|
+
return [];
|
|
151
|
+
if (this.debug) {
|
|
152
|
+
console.log(`\n[Router] dispatching ${decision.assignments.length} subagent(s) in parallel…`);
|
|
153
|
+
}
|
|
154
|
+
const t0 = Date.now();
|
|
155
|
+
const runs = decision.assignments.map(async (a) => {
|
|
156
|
+
const agent = subagents.get(a.subagent);
|
|
157
|
+
if (!agent) {
|
|
158
|
+
if (this.debug)
|
|
159
|
+
console.log(`[Router] WARN: subagent "${a.subagent}" not registered`);
|
|
160
|
+
return {
|
|
161
|
+
subagentName: a.subagent,
|
|
162
|
+
steps: [],
|
|
163
|
+
finalAnswer: `Subagent "${a.subagent}" is not registered.`,
|
|
164
|
+
toolResults: [],
|
|
165
|
+
toolMessages: [],
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
const t1 = Date.now();
|
|
169
|
+
const result = await agent.run({ query: a.query, reasoning: a.reasoning }, conversationHistory, userContext);
|
|
170
|
+
if (this.debug) {
|
|
171
|
+
const toolNames = result.toolResults.map((r) => r.toolName).join(', ') || '—';
|
|
172
|
+
console.log(`[Router] ${a.subagent} done in ${Date.now() - t1}ms | tools: ${toolNames}`);
|
|
173
|
+
}
|
|
174
|
+
return result;
|
|
175
|
+
});
|
|
176
|
+
const results = await Promise.all(runs);
|
|
177
|
+
if (this.debug) {
|
|
178
|
+
console.log(`[Router] all subagents done in ${Date.now() - t0}ms total`);
|
|
179
|
+
}
|
|
180
|
+
return results;
|
|
181
|
+
}
|
|
182
|
+
parseJSON(text) {
|
|
183
|
+
let clean = text.trim();
|
|
184
|
+
if (clean.startsWith('```')) {
|
|
185
|
+
clean = clean.replace(/^```(?:json)?\s*/, '').replace(/```\s*$/, '');
|
|
186
|
+
}
|
|
187
|
+
return JSON.parse(clean);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
exports.Router = Router;
|
|
191
|
+
//# sourceMappingURL=Router.js.map
|