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
package/README.md
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# keyring-agent-core
|
|
2
|
+
|
|
3
|
+
Core AI chat agent package with **multi-agent architecture**, **ReAct agentic pattern**, and a modular tool system — powered by Google Gemini.
|
|
4
|
+
|
|
5
|
+
## Architecture
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
User Message
|
|
9
|
+
│
|
|
10
|
+
▼
|
|
11
|
+
┌─────────────────┐
|
|
12
|
+
│ AgentCore │ ← Orchestrator
|
|
13
|
+
│ (chat history) │
|
|
14
|
+
└────────┬────────┘
|
|
15
|
+
│
|
|
16
|
+
▼
|
|
17
|
+
┌─────────────────┐
|
|
18
|
+
│ Planner │ ← Analyses query, decides which tools to call
|
|
19
|
+
└────────┬────────┘
|
|
20
|
+
│ ExecutionPlan
|
|
21
|
+
▼
|
|
22
|
+
┌─────────────────┐
|
|
23
|
+
│ Executor │ ← ReAct loop: Think → Act → Observe
|
|
24
|
+
│ (Tool calls) │
|
|
25
|
+
└────────┬────────┘
|
|
26
|
+
│ ReActTrace
|
|
27
|
+
▼
|
|
28
|
+
┌─────────────────┐
|
|
29
|
+
│ Synthesizer │ ← Produces polished user-facing answer
|
|
30
|
+
└─────────────────┘
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Key patterns
|
|
34
|
+
- **Plan → Task → Get Data → Answer**: The Planner creates a structured execution plan; the Executor runs tools and gathers data; the Synthesizer produces the answer.
|
|
35
|
+
- **ReAct (Reason + Act)**: The Executor uses a Think → Act → Observe loop, allowing multi-step reasoning with tool calls.
|
|
36
|
+
- **Multi-agent**: Planner, Executor, and Synthesizer are independent agents, each with specialised system prompts.
|
|
37
|
+
- **Conversation memory**: Automatic chat history management with LLM-based summarisation when the conversation grows too long.
|
|
38
|
+
|
|
39
|
+
## Installation
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
npm install keyring-agent-core @google/generative-ai
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Quick Start
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
import { AgentCore, BaseTool, ToolParameter } from 'keyring-agent-core';
|
|
49
|
+
|
|
50
|
+
// 1. Create a tool
|
|
51
|
+
class FaqTool extends BaseTool {
|
|
52
|
+
name = 'get-faq';
|
|
53
|
+
description = 'Fetch FAQ data from the CoinPool API';
|
|
54
|
+
parameters: ToolParameter[] = [
|
|
55
|
+
{
|
|
56
|
+
name: 'query',
|
|
57
|
+
type: 'string',
|
|
58
|
+
description: 'Search query for FAQ',
|
|
59
|
+
required: false,
|
|
60
|
+
},
|
|
61
|
+
];
|
|
62
|
+
|
|
63
|
+
protected async run(args: Record<string, unknown>) {
|
|
64
|
+
const res = await fetch('https://api.coinpool.app/faq');
|
|
65
|
+
return res.json();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// 2. Initialise the agent
|
|
70
|
+
const agent = new AgentCore({
|
|
71
|
+
llm: {
|
|
72
|
+
apiKey: process.env.GEMINI_API_KEY!,
|
|
73
|
+
model: 'gemini-2.5-flash-lite',
|
|
74
|
+
},
|
|
75
|
+
maxIterations: 8,
|
|
76
|
+
maxHistoryMessages: 40,
|
|
77
|
+
systemPrompt: 'You are the CoinPool assistant. Help users with their questions.',
|
|
78
|
+
debug: true,
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
// 3. Register tools
|
|
82
|
+
agent.registerTool(new FaqTool());
|
|
83
|
+
|
|
84
|
+
// 4. Chat
|
|
85
|
+
const response = await agent.chat('What are the fees on CoinPool?');
|
|
86
|
+
console.log(response.answer);
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Creating Custom Tools
|
|
90
|
+
|
|
91
|
+
Extend `BaseTool` and implement the `run()` method:
|
|
92
|
+
|
|
93
|
+
```typescript
|
|
94
|
+
import { BaseTool, ToolParameter } from 'keyring-agent-core';
|
|
95
|
+
|
|
96
|
+
class MoralisAITool extends BaseTool {
|
|
97
|
+
name = 'moralis-ai';
|
|
98
|
+
description = 'Call Moralis AI for blockchain analysis';
|
|
99
|
+
category = 'ai';
|
|
100
|
+
parameters: ToolParameter[] = [
|
|
101
|
+
{ name: 'prompt', type: 'string', description: 'Prompt for Moralis AI', required: true },
|
|
102
|
+
];
|
|
103
|
+
|
|
104
|
+
protected async run(args: Record<string, unknown>) {
|
|
105
|
+
const response = await fetch('https://your-moralis-endpoint.com/ai', {
|
|
106
|
+
method: 'POST',
|
|
107
|
+
headers: { 'Content-Type': 'application/json' },
|
|
108
|
+
body: JSON.stringify({ prompt: args.prompt }),
|
|
109
|
+
});
|
|
110
|
+
return response.json();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Each tool is **independent** — add or remove tools without affecting others.
|
|
116
|
+
|
|
117
|
+
## Chat History & Summarisation
|
|
118
|
+
|
|
119
|
+
The agent automatically manages conversation history:
|
|
120
|
+
- Messages are stored in a `ChatHistory` instance
|
|
121
|
+
- When the history exceeds `maxHistoryMessages`, it is automatically summarised using the LLM and compacted
|
|
122
|
+
- You can persist/restore history:
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
// Save
|
|
126
|
+
const data = agent.serialiseHistory();
|
|
127
|
+
await saveToDatabase(data);
|
|
128
|
+
|
|
129
|
+
// Restore
|
|
130
|
+
const saved = await loadFromDatabase();
|
|
131
|
+
agent.restoreHistory(saved);
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## API Reference
|
|
135
|
+
|
|
136
|
+
### `AgentCore`
|
|
137
|
+
|
|
138
|
+
| Method | Description |
|
|
139
|
+
|---|---|
|
|
140
|
+
| `chat(message: string)` | Process a user message and get an answer |
|
|
141
|
+
| `registerTool(tool)` | Register a tool |
|
|
142
|
+
| `registerTools(tools)` | Register multiple tools |
|
|
143
|
+
| `unregisterTool(name)` | Remove a tool |
|
|
144
|
+
| `listTools()` | List registered tool names |
|
|
145
|
+
| `getHistory()` | Get full conversation history |
|
|
146
|
+
| `clearHistory()` | Clear conversation history |
|
|
147
|
+
| `serialiseHistory()` | Serialise history for persistence |
|
|
148
|
+
| `restoreHistory(messages)` | Restore history from saved data |
|
|
149
|
+
|
|
150
|
+
### `AgentConfig`
|
|
151
|
+
|
|
152
|
+
```typescript
|
|
153
|
+
{
|
|
154
|
+
llm: {
|
|
155
|
+
apiKey: string;
|
|
156
|
+
model?: string; // default: 'gemini-2.5-flash-lite'
|
|
157
|
+
maxTokens?: number; // default: 4096
|
|
158
|
+
temperature?: number; // default: 0.7
|
|
159
|
+
};
|
|
160
|
+
maxIterations?: number; // default: 10
|
|
161
|
+
maxHistoryMessages?: number; // default: 50
|
|
162
|
+
systemPrompt?: string;
|
|
163
|
+
debug?: boolean;
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## License
|
|
168
|
+
|
|
169
|
+
MIT
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import type { AgentConfig, ChatMessage, KnowledgeBaseEntry, LLMProvider, ReActTrace, RouterDecision, SubagentResult, Tool, UIPayload, UserContext } from '../types';
|
|
2
|
+
import { ToolRegistry } from '../tools/ToolRegistry';
|
|
3
|
+
import type { Subagent } from './Subagent';
|
|
4
|
+
import { type RewriteResult } from './QueryRewriter';
|
|
5
|
+
export interface AgentResponse {
|
|
6
|
+
/** The final user-facing answer */
|
|
7
|
+
answer: string;
|
|
8
|
+
/**
|
|
9
|
+
* Stable id for this response turn. The FE can use this as a key to persist
|
|
10
|
+
* `uiActions` alongside the message — e.g. `storage.set(messageId, JSON.stringify(uiActions))`.
|
|
11
|
+
* Format: 8-char hex derived from timestamp + random — unique within a session.
|
|
12
|
+
*/
|
|
13
|
+
messageId: string;
|
|
14
|
+
/** Suggested follow-up prompts for the user */
|
|
15
|
+
suggestedPrompts?: string[];
|
|
16
|
+
/**
|
|
17
|
+
* UI components the FE should render this turn. Each entry is emitted by a
|
|
18
|
+
* tool with kind='ui' or 'action'. Order preserved (subagent execution order).
|
|
19
|
+
* The FE switches on `component` and forwards `props` verbatim.
|
|
20
|
+
*/
|
|
21
|
+
uiActions?: UIPayload[];
|
|
22
|
+
/** Full ReAct trace (for debugging / logging) — flattened across all subagents */
|
|
23
|
+
trace?: ReActTrace;
|
|
24
|
+
/** The router's decision for this turn (for debugging) */
|
|
25
|
+
routerDecision?: RouterDecision;
|
|
26
|
+
/** Per-subagent results (for debugging / richer UIs) */
|
|
27
|
+
subagentResults?: SubagentResult[];
|
|
28
|
+
/** Query-rewrite result (standalone version of the user message, for debugging) */
|
|
29
|
+
rewrite?: RewriteResult;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Top-level orchestrator. Two-layer architecture:
|
|
33
|
+
*
|
|
34
|
+
* User query
|
|
35
|
+
* → Router (picks 0..N domain subagents)
|
|
36
|
+
* → Subagent(s) (each runs its own ReAct loop over a narrow tool set, in parallel)
|
|
37
|
+
* → Synthesizer (merges subagent answers into the final reply)
|
|
38
|
+
*
|
|
39
|
+
* Compared to a flat planner that sees every tool, this keeps per-call prompt
|
|
40
|
+
* size bounded regardless of how many tools are registered.
|
|
41
|
+
*/
|
|
42
|
+
export declare class AgentCore {
|
|
43
|
+
private llm;
|
|
44
|
+
private registry;
|
|
45
|
+
private history;
|
|
46
|
+
private summarizer;
|
|
47
|
+
private router;
|
|
48
|
+
private rewriter;
|
|
49
|
+
private subagents;
|
|
50
|
+
private synthesizer;
|
|
51
|
+
private systemPrompt;
|
|
52
|
+
private debug;
|
|
53
|
+
private userContext;
|
|
54
|
+
private storage;
|
|
55
|
+
private storageKey;
|
|
56
|
+
private persistHistoryEnabled;
|
|
57
|
+
/** Active KB used at search time. May be the legacy LLM matcher or a vector backend. */
|
|
58
|
+
private kb;
|
|
59
|
+
/** Always-present in-memory KB that holds the original entries (used for autoIngest + as fallback). */
|
|
60
|
+
private kbEntries;
|
|
61
|
+
private vectorKB;
|
|
62
|
+
private vectorKBAutoIngested;
|
|
63
|
+
private vectorKBAutoIngestPromise;
|
|
64
|
+
private autoIngestEnabled;
|
|
65
|
+
private kbAnswerThreshold;
|
|
66
|
+
private suggestionsEnabled;
|
|
67
|
+
private historyLoaded;
|
|
68
|
+
private historyLoadingPromise;
|
|
69
|
+
/**
|
|
70
|
+
* Resolves once the initial persisted-history load attempt has finished
|
|
71
|
+
* (success or failure). Only meaningful when `persistHistory: true` and a
|
|
72
|
+
* `storage` provider is configured — in that case consumers rendering a
|
|
73
|
+
* chat list on mount should `await agent.historyReady` before calling
|
|
74
|
+
* {@link getHistory} / {@link getDisplayHistory}, otherwise the first read
|
|
75
|
+
* happens before storage has been hydrated and returns an empty array.
|
|
76
|
+
* With persistence disabled this still resolves (immediately), so it is
|
|
77
|
+
* always safe to await.
|
|
78
|
+
*/
|
|
79
|
+
readonly historyReady: Promise<void>;
|
|
80
|
+
constructor(config: AgentConfig);
|
|
81
|
+
/** Register a tool so the agent can use it. */
|
|
82
|
+
registerTool(tool: Tool): void;
|
|
83
|
+
/** Register multiple tools at once. */
|
|
84
|
+
registerTools(tools: Tool[]): void;
|
|
85
|
+
/** Unregister a tool by name. */
|
|
86
|
+
unregisterTool(name: string): boolean;
|
|
87
|
+
/** List registered tool names. */
|
|
88
|
+
listTools(): string[];
|
|
89
|
+
/**
|
|
90
|
+
* Directly invoke a tool with structured args, bypassing the LLM/router.
|
|
91
|
+
*
|
|
92
|
+
* Use this from the FE for **deterministic actions** where the user has
|
|
93
|
+
* already supplied structured input via a UI form (e.g. confirming an
|
|
94
|
+
* AddLiquidityForm with a chosen strategy + amount). It is faster, cheaper,
|
|
95
|
+
* and removes the risk of the LLM mis-parsing numeric values from form data.
|
|
96
|
+
*
|
|
97
|
+
* The result is returned with the same `AgentResponse` shape as `chat()` —
|
|
98
|
+
* including `uiActions` collected from the tool's UI payload — so the FE
|
|
99
|
+
* renders it uniformly. The interaction is also recorded in chat history so
|
|
100
|
+
* subsequent conversational turns retain context.
|
|
101
|
+
*
|
|
102
|
+
* Use `chat()` (the LLM-driven path) for free-form natural-language input.
|
|
103
|
+
*/
|
|
104
|
+
invokeTool(name: string, args: Record<string, unknown>, options?: {
|
|
105
|
+
userMessage?: string;
|
|
106
|
+
}): Promise<AgentResponse>;
|
|
107
|
+
/**
|
|
108
|
+
* Register a custom subagent. Replaces any existing subagent with the same name.
|
|
109
|
+
* Advanced: most consumers should rely on the default wallet/token/nft/ai agents.
|
|
110
|
+
*/
|
|
111
|
+
registerSubagent(agent: Subagent): void;
|
|
112
|
+
/** Unregister a subagent by name. */
|
|
113
|
+
unregisterSubagent(name: string): boolean;
|
|
114
|
+
/** List registered subagent names. */
|
|
115
|
+
listSubagents(): string[];
|
|
116
|
+
/**
|
|
117
|
+
* Replace all in-memory KB entries. When vector mode is enabled, the new
|
|
118
|
+
* entries become the source of truth for the next `ingestKnowledgeBase()`
|
|
119
|
+
* call but are NOT auto-pushed to the remote index — call that explicitly.
|
|
120
|
+
*/
|
|
121
|
+
setKnowledgeBase(entries: KnowledgeBaseEntry[]): void;
|
|
122
|
+
addKnowledgeBase(entries: KnowledgeBaseEntry[]): void;
|
|
123
|
+
/**
|
|
124
|
+
* Push the current in-memory KB entries to the configured vector backend.
|
|
125
|
+
* Idempotent. No-op when vector mode is disabled or there are no entries.
|
|
126
|
+
*/
|
|
127
|
+
ingestKnowledgeBase(): Promise<{
|
|
128
|
+
count: number;
|
|
129
|
+
}>;
|
|
130
|
+
private maybeAutoIngest;
|
|
131
|
+
setUserContext(ctx: UserContext): void;
|
|
132
|
+
getUserContext(): UserContext;
|
|
133
|
+
loadHistory(): Promise<void>;
|
|
134
|
+
private _doLoadHistory;
|
|
135
|
+
private persistHistory;
|
|
136
|
+
/**
|
|
137
|
+
* Process a user message and return an answer. Main entry point.
|
|
138
|
+
*/
|
|
139
|
+
chat(userMessage: string, options?: {
|
|
140
|
+
generateSuggestions?: boolean;
|
|
141
|
+
}): Promise<AgentResponse>;
|
|
142
|
+
/**
|
|
143
|
+
* Aggregate UI payloads from this turn's tool calls. Tools with kind='ui' or
|
|
144
|
+
* 'action' attach a `ui` field to their ToolResult; the FE renders one
|
|
145
|
+
* component per entry in the order they were produced.
|
|
146
|
+
*/
|
|
147
|
+
private collectUiActions;
|
|
148
|
+
/**
|
|
149
|
+
* Stamp the rewriter-detected user-message language onto a UIPayload so FE
|
|
150
|
+
* renders the component in whichever language the user just typed in. Tools
|
|
151
|
+
* never set this themselves — it is a transport-level concern owned by
|
|
152
|
+
* AgentCore. No-op when the rewriter did not produce a language (FE may
|
|
153
|
+
* fall back to its own locale in that rare case).
|
|
154
|
+
*/
|
|
155
|
+
private stampLanguage;
|
|
156
|
+
private addUserMessage;
|
|
157
|
+
/** Single KB lookup — callers reuse the result for both context + short-circuit. */
|
|
158
|
+
private searchKB;
|
|
159
|
+
private snippet;
|
|
160
|
+
/** Format KB hits as a reference-block string for LLM consumption. */
|
|
161
|
+
private formatKBContext;
|
|
162
|
+
private tryAnswerFromKB;
|
|
163
|
+
private answerDirectly;
|
|
164
|
+
/**
|
|
165
|
+
* Flatten the per-subagent ReAct steps into a single trace that the
|
|
166
|
+
* Synthesizer can consume. The `finalAnswer` here is a compact
|
|
167
|
+
* concatenation of each subagent's own answer, labelled by name.
|
|
168
|
+
*/
|
|
169
|
+
private mergeTrace;
|
|
170
|
+
private finaliseAnswer;
|
|
171
|
+
private generateSuggestions;
|
|
172
|
+
getHistory(): ChatMessage[];
|
|
173
|
+
/**
|
|
174
|
+
* History filtered down to user-facing messages only — the user's prompts
|
|
175
|
+
* and each turn's final assistant reply. Internal records (tool calls,
|
|
176
|
+
* tool results, system summaries, and `_intermediate` bridging assistant
|
|
177
|
+
* messages) are dropped, as is any assistant message with empty content
|
|
178
|
+
* (a pure tool-call turn). Use this to seed a chat UI on mount.
|
|
179
|
+
*/
|
|
180
|
+
getDisplayHistory(): ChatMessage[];
|
|
181
|
+
/**
|
|
182
|
+
* Suggested follow-up prompts attached to the most recent final assistant
|
|
183
|
+
* turn, or `[]` if none. Used to re-seed suggestion chips after restoring
|
|
184
|
+
* a persisted session — the chips travel with the assistant message in
|
|
185
|
+
* storage, so this just locates the last one.
|
|
186
|
+
*/
|
|
187
|
+
getLastSuggestions(): string[];
|
|
188
|
+
clearHistory(): Promise<void>;
|
|
189
|
+
restoreHistory(data: {
|
|
190
|
+
messages: ChatMessage[];
|
|
191
|
+
summary?: string | null;
|
|
192
|
+
fullMessages?: ChatMessage[];
|
|
193
|
+
} | ChatMessage[]): void;
|
|
194
|
+
serialiseHistory(): {
|
|
195
|
+
messages: ChatMessage[];
|
|
196
|
+
summary: string | null;
|
|
197
|
+
fullMessages: ChatMessage[];
|
|
198
|
+
};
|
|
199
|
+
private compactHistory;
|
|
200
|
+
/**
|
|
201
|
+
* Persist the interleaved assistant+toolCalls / role:'tool' messages from
|
|
202
|
+
* each subagent run into ChatHistory, followed by the subagent's finalAnswer
|
|
203
|
+
* as a plain assistant turn.
|
|
204
|
+
*
|
|
205
|
+
* The full sequence stored per subagent is:
|
|
206
|
+
* model(functionCall) → function(response) → ... → model(text: finalAnswer)
|
|
207
|
+
*
|
|
208
|
+
* This satisfies Gemini's strict turn-order rule: a function-response turn
|
|
209
|
+
* must always be followed by a model turn before the next user message.
|
|
210
|
+
* Without the trailing model(text), the history ends with function(response)
|
|
211
|
+
* and the next user message causes a 400 "function call turn must come
|
|
212
|
+
* immediately after a user turn" error.
|
|
213
|
+
*/
|
|
214
|
+
private persistToolMessages;
|
|
215
|
+
/** Expose the LLM provider for advanced usage. */
|
|
216
|
+
getLLMProvider(): LLMProvider;
|
|
217
|
+
/** Expose the tool registry for advanced usage. */
|
|
218
|
+
getToolRegistry(): ToolRegistry;
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=AgentCore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentCore.d.ts","sourceRoot":"","sources":["../../src/agent/AgentCore.ts"],"names":[],"mappings":"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"}
|