httpcat-cli 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +3 -0
- package/.github/workflows/rc-publish.yml +6 -0
- package/.github/workflows/release.yml +102 -0
- package/.github/workflows/sync-version.yml +31 -2
- package/README.md +1408 -109
- package/additions.txt +3 -0
- package/bun.lock +260 -25
- package/dist/agent/autonomous-trader.d.ts.map +1 -0
- package/dist/agent/autonomous-trader.js +362 -0
- package/dist/agent/autonomous-trader.js.map +1 -0
- package/dist/agent/ax-agent.d.ts.map +1 -1
- package/dist/agent/ax-agent.js +356 -18
- package/dist/agent/ax-agent.js.map +1 -1
- package/dist/agent/event-client.d.ts.map +1 -0
- package/dist/agent/event-client.js +82 -0
- package/dist/agent/event-client.js.map +1 -0
- package/dist/agent/log-stream.d.ts.map +1 -0
- package/dist/agent/log-stream.js +95 -0
- package/dist/agent/log-stream.js.map +1 -0
- package/dist/agent/memory/conversation-session.d.ts.map +1 -0
- package/dist/agent/memory/conversation-session.js +232 -0
- package/dist/agent/memory/conversation-session.js.map +1 -0
- package/dist/agent/memory/conversation-store.d.ts.map +1 -0
- package/dist/agent/memory/conversation-store.js +214 -0
- package/dist/agent/memory/conversation-store.js.map +1 -0
- package/dist/agent/memory/database-schema.d.ts.map +1 -0
- package/dist/agent/memory/database-schema.js +355 -0
- package/dist/agent/memory/database-schema.js.map +1 -0
- package/dist/agent/memory/decision-tracker.d.ts.map +1 -0
- package/dist/agent/memory/decision-tracker.js +274 -0
- package/dist/agent/memory/decision-tracker.js.map +1 -0
- package/dist/agent/memory/memory-manager.d.ts.map +1 -0
- package/dist/agent/memory/memory-manager.js +187 -0
- package/dist/agent/memory/memory-manager.js.map +1 -0
- package/dist/agent/memory/types.d.ts.map +1 -0
- package/dist/agent/memory/types.js +5 -0
- package/dist/agent/memory/types.js.map +1 -0
- package/dist/agent/message-formatter.d.ts.map +1 -0
- package/dist/agent/message-formatter.js +76 -0
- package/dist/agent/message-formatter.js.map +1 -0
- package/dist/agent/position-db.d.ts.map +1 -0
- package/dist/agent/position-db.js +154 -0
- package/dist/agent/position-db.js.map +1 -0
- package/dist/agent/simple-chat-ui-static.d.ts.map +1 -0
- package/dist/agent/simple-chat-ui-static.js +129 -0
- package/dist/agent/simple-chat-ui-static.js.map +1 -0
- package/dist/agent/simple-chat-ui.d.ts.map +1 -0
- package/dist/agent/simple-chat-ui.js +90 -0
- package/dist/agent/simple-chat-ui.js.map +1 -0
- package/dist/agent/tools.d.ts.map +1 -1
- package/dist/agent/tools.js +297 -4
- package/dist/agent/tools.js.map +1 -1
- package/dist/agent/ui.d.ts.map +1 -0
- package/dist/agent/ui.js +84 -0
- package/dist/agent/ui.js.map +1 -0
- package/dist/agent/unified-runtime.d.ts.map +1 -0
- package/dist/agent/unified-runtime.js +397 -0
- package/dist/agent/unified-runtime.js.map +1 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +272 -21
- package/dist/client.js.map +1 -1
- package/dist/commands/account.d.ts.map +1 -1
- package/dist/commands/account.js +187 -33
- package/dist/commands/account.js.map +1 -1
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +125 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/approve.d.ts.map +1 -0
- package/dist/commands/approve.js +505 -0
- package/dist/commands/approve.js.map +1 -0
- package/dist/commands/automation.d.ts.map +1 -0
- package/dist/commands/automation.js +346 -0
- package/dist/commands/automation.js.map +1 -0
- package/dist/commands/balances.d.ts.map +1 -1
- package/dist/commands/balances.js +226 -73
- package/dist/commands/balances.js.map +1 -1
- package/dist/commands/buy.d.ts.map +1 -1
- package/dist/commands/buy.js +149 -146
- package/dist/commands/buy.js.map +1 -1
- package/dist/commands/call.d.ts.map +1 -0
- package/dist/commands/call.js +51 -0
- package/dist/commands/call.js.map +1 -0
- package/dist/commands/cex.d.ts.map +1 -0
- package/dist/commands/cex.js +958 -0
- package/dist/commands/cex.js.map +1 -0
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +169 -411
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/claim.d.ts.map +1 -1
- package/dist/commands/claim.js +313 -29
- package/dist/commands/claim.js.map +1 -1
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +151 -43
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/gasless-swap.d.ts.map +1 -0
- package/dist/commands/gasless-swap.js +232 -0
- package/dist/commands/gasless-swap.js.map +1 -0
- package/dist/commands/health.d.ts.map +1 -1
- package/dist/commands/health.js +63 -7
- package/dist/commands/health.js.map +1 -1
- package/dist/commands/info.d.ts.map +1 -1
- package/dist/commands/info.js +131 -47
- package/dist/commands/info.js.map +1 -1
- package/dist/commands/launchpad.d.ts.map +1 -0
- package/dist/commands/launchpad.js +708 -0
- package/dist/commands/launchpad.js.map +1 -0
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +57 -23
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/market.d.ts.map +1 -0
- package/dist/commands/market.js +960 -0
- package/dist/commands/market.js.map +1 -0
- package/dist/commands/mcp-install.d.ts.map +1 -0
- package/dist/commands/mcp-install.js +387 -0
- package/dist/commands/mcp-install.js.map +1 -0
- package/dist/commands/opps.d.ts.map +1 -0
- package/dist/commands/opps.js +409 -0
- package/dist/commands/opps.js.map +1 -0
- package/dist/commands/perps.d.ts.map +1 -0
- package/dist/commands/perps.js +248 -0
- package/dist/commands/perps.js.map +1 -0
- package/dist/commands/portfolio.d.ts.map +1 -0
- package/dist/commands/portfolio.js +679 -0
- package/dist/commands/portfolio.js.map +1 -0
- package/dist/commands/positions.d.ts.map +1 -1
- package/dist/commands/positions.js +76 -47
- package/dist/commands/positions.js.map +1 -1
- package/dist/commands/predict.d.ts.map +1 -0
- package/dist/commands/predict.js +280 -0
- package/dist/commands/predict.js.map +1 -0
- package/dist/commands/predictions.d.ts.map +1 -0
- package/dist/commands/predictions.js +486 -0
- package/dist/commands/predictions.js.map +1 -0
- package/dist/commands/risk.d.ts.map +1 -0
- package/dist/commands/risk.js +225 -0
- package/dist/commands/risk.js.map +1 -0
- package/dist/commands/security.d.ts.map +1 -0
- package/dist/commands/security.js +244 -0
- package/dist/commands/security.js.map +1 -0
- package/dist/commands/sell.d.ts.map +1 -1
- package/dist/commands/sell.js +67 -34
- package/dist/commands/sell.js.map +1 -1
- package/dist/commands/send.d.ts.map +1 -0
- package/dist/commands/send.js +733 -0
- package/dist/commands/send.js.map +1 -0
- package/dist/commands/sign.d.ts.map +1 -0
- package/dist/commands/sign.js +1048 -0
- package/dist/commands/sign.js.map +1 -0
- package/dist/commands/swap.d.ts.map +1 -0
- package/dist/commands/swap.js +744 -0
- package/dist/commands/swap.js.map +1 -0
- package/dist/commands/system.d.ts.map +1 -0
- package/dist/commands/system.js +417 -0
- package/dist/commands/system.js.map +1 -0
- package/dist/commands/tools/index.d.ts.map +1 -0
- package/dist/commands/tools/index.js +2040 -0
- package/dist/commands/tools/index.js.map +1 -0
- package/dist/commands/trade.d.ts.map +1 -0
- package/dist/commands/trade.js +237 -0
- package/dist/commands/trade.js.map +1 -0
- package/dist/commands/transactions.d.ts.map +1 -1
- package/dist/commands/transactions.js +29 -17
- package/dist/commands/transactions.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +429 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +351 -40
- package/dist/config.js.map +1 -1
- package/dist/index.js +4524 -924
- package/dist/index.js.map +1 -1
- package/dist/interactive/art.d.ts.map +1 -1
- package/dist/interactive/art.js +33 -1
- package/dist/interactive/art.js.map +1 -1
- package/dist/interactive/shell.d.ts.map +1 -1
- package/dist/interactive/shell.js +467 -2652
- package/dist/interactive/shell.js.map +1 -1
- package/dist/mcp/context.d.ts.map +1 -0
- package/dist/mcp/context.js +211 -0
- package/dist/mcp/context.js.map +1 -0
- package/dist/mcp/onboarding.d.ts.map +1 -0
- package/dist/mcp/onboarding.js +266 -0
- package/dist/mcp/onboarding.js.map +1 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +222 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +51 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +4119 -169
- package/dist/mcp/tools.js.map +1 -1
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/types/agent-info.d.ts.map +1 -0
- package/dist/types/agent-info.js +11 -0
- package/dist/types/agent-info.js.map +1 -0
- package/dist/ui/components/ScrollableList.d.ts.map +1 -0
- package/dist/ui/components/ScrollableList.js +72 -0
- package/dist/ui/components/ScrollableList.js.map +1 -0
- package/dist/ui/components/ThemeProvider.d.ts.map +1 -0
- package/dist/ui/components/ThemeProvider.js +87 -0
- package/dist/ui/components/ThemeProvider.js.map +1 -0
- package/dist/ui/components/ThemedBox.d.ts.map +1 -0
- package/dist/ui/components/ThemedBox.js +24 -0
- package/dist/ui/components/ThemedBox.js.map +1 -0
- package/dist/ui/components/agent/ChatHeader.d.ts.map +1 -0
- package/dist/ui/components/agent/ChatHeader.js +39 -0
- package/dist/ui/components/agent/ChatHeader.js.map +1 -0
- package/dist/ui/components/agent/Header.d.ts.map +1 -0
- package/dist/ui/components/agent/Header.js +14 -0
- package/dist/ui/components/agent/Header.js.map +1 -0
- package/dist/ui/components/agent/Input.d.ts.map +1 -0
- package/dist/ui/components/agent/Input.js +23 -0
- package/dist/ui/components/agent/Input.js.map +1 -0
- package/dist/ui/components/agent/Output.d.ts.map +1 -0
- package/dist/ui/components/agent/Output.js +23 -0
- package/dist/ui/components/agent/Output.js.map +1 -0
- package/dist/ui/components/chat/TokenChatUI.d.ts.map +1 -0
- package/dist/ui/components/chat/TokenChatUI.js +133 -0
- package/dist/ui/components/chat/TokenChatUI.js.map +1 -0
- package/dist/ui/components/shell/ShellHeader.d.ts.map +1 -0
- package/dist/ui/components/shell/ShellHeader.js +31 -0
- package/dist/ui/components/shell/ShellHeader.js.map +1 -0
- package/dist/ui/components/shell/ShellInput.d.ts.map +1 -0
- package/dist/ui/components/shell/ShellInput.js +151 -0
- package/dist/ui/components/shell/ShellInput.js.map +1 -0
- package/dist/ui/components/shell/ShellOutput.d.ts.map +1 -0
- package/dist/ui/components/shell/ShellOutput.js +8 -0
- package/dist/ui/components/shell/ShellOutput.js.map +1 -0
- package/dist/ui/hooks/useChatWebSocket.d.ts.map +1 -0
- package/dist/ui/hooks/useChatWebSocket.js +76 -0
- package/dist/ui/hooks/useChatWebSocket.js.map +1 -0
- package/dist/ui/hooks/useCommandHistory.d.ts.map +1 -0
- package/dist/ui/hooks/useCommandHistory.js +70 -0
- package/dist/ui/hooks/useCommandHistory.js.map +1 -0
- package/dist/ui/hooks/useDebounce.d.ts.map +1 -0
- package/dist/ui/hooks/useDebounce.js +17 -0
- package/dist/ui/hooks/useDebounce.js.map +1 -0
- package/dist/ui/hooks/useLogStream.d.ts.map +1 -0
- package/dist/ui/hooks/useLogStream.js +20 -0
- package/dist/ui/hooks/useLogStream.js.map +1 -0
- package/dist/ui/hooks/useVirtualScroll.d.ts.map +1 -0
- package/dist/ui/hooks/useVirtualScroll.js +70 -0
- package/dist/ui/hooks/useVirtualScroll.js.map +1 -0
- package/dist/utils/admin.d.ts.map +1 -0
- package/dist/utils/admin.js +144 -0
- package/dist/utils/admin.js.map +1 -0
- package/dist/utils/autoSetup.d.ts.map +1 -0
- package/dist/utils/autoSetup.js +252 -0
- package/dist/utils/autoSetup.js.map +1 -0
- package/dist/utils/build-constants.d.ts.map +1 -0
- package/dist/utils/build-constants.js +10 -0
- package/dist/utils/build-constants.js.map +1 -0
- package/dist/utils/constants.d.ts.map +1 -1
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +10 -1
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/formatting.d.ts.map +1 -1
- package/dist/utils/formatting.js +46 -9
- package/dist/utils/formatting.js.map +1 -1
- package/dist/utils/llm-cli-config.d.ts.map +1 -0
- package/dist/utils/llm-cli-config.js +963 -0
- package/dist/utils/llm-cli-config.js.map +1 -0
- package/dist/utils/llm-cli-detector.d.ts.map +1 -0
- package/dist/utils/llm-cli-detector.js +202 -0
- package/dist/utils/llm-cli-detector.js.map +1 -0
- package/dist/utils/loading.d.ts.map +1 -1
- package/dist/utils/loading.js +25 -3
- package/dist/utils/loading.js.map +1 -1
- package/dist/utils/maintenance.d.ts.map +1 -0
- package/dist/utils/maintenance.js +17 -0
- package/dist/utils/maintenance.js.map +1 -0
- package/dist/utils/mcp-config.d.ts.map +1 -0
- package/dist/utils/mcp-config.js +77 -0
- package/dist/utils/mcp-config.js.map +1 -0
- package/dist/utils/privateKeyPrompt.d.ts.map +1 -1
- package/dist/utils/privateKeyPrompt.js +308 -129
- package/dist/utils/privateKeyPrompt.js.map +1 -1
- package/dist/utils/process-cleanup.d.ts.map +1 -0
- package/dist/utils/process-cleanup.js +136 -0
- package/dist/utils/process-cleanup.js.map +1 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +56 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/rpc-helpers.d.ts.map +1 -0
- package/dist/utils/rpc-helpers.js +70 -0
- package/dist/utils/rpc-helpers.js.map +1 -0
- package/dist/utils/rpc-transport.d.ts.map +1 -0
- package/dist/utils/rpc-transport.js +87 -0
- package/dist/utils/rpc-transport.js.map +1 -0
- package/dist/utils/shell-setup.d.ts.map +1 -0
- package/dist/utils/shell-setup.js +531 -0
- package/dist/utils/shell-setup.js.map +1 -0
- package/dist/utils/status.d.ts.map +1 -1
- package/dist/utils/status.js +34 -5
- package/dist/utils/status.js.map +1 -1
- package/dist/utils/token-resolver.d.ts.map +1 -1
- package/dist/utils/token-resolver.js +51 -8
- package/dist/utils/token-resolver.js.map +1 -1
- package/dist/utils/x402-caller.d.ts.map +1 -0
- package/dist/utils/x402-caller.js +17 -0
- package/dist/utils/x402-caller.js.map +1 -0
- package/docs/README.md +28 -0
- package/docs/agent/README.md +18 -0
- package/docs/api/README.md +41 -0
- package/docs/cli/README.md +42 -0
- package/docs/guides/README.md +26 -0
- package/docs/implementation/README.md +18 -0
- package/docs/planning/README.md +19 -0
- package/docs/testing/README.md +15 -0
- package/docs/ux/README.md +16 -0
- package/issues.txt +2 -0
- package/package.json +24 -9
- package/scripts/cat-spin.sh +417 -0
- package/scripts/deprecate-rc-versions.js +58 -0
- package/scripts/inject-build-constants.js +43 -0
- package/scripts/monitor-foobar.js +117 -0
- package/swap.logs +61 -0
- package/swapping.txt +108 -0
- package/test.txt +12 -0
- package/tests/fixtures/test-data.json +16 -0
- package/Screenshot 2025-12-21 at 8.56.02/342/200/257PM.png +0 -0
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Manager - Central orchestrator for agent memory system
|
|
3
|
+
*/
|
|
4
|
+
import { ConversationStore } from "./conversation-store.js";
|
|
5
|
+
import { DecisionTracker } from "./decision-tracker.js";
|
|
6
|
+
import { ConversationSessionManager } from "./conversation-session.js";
|
|
7
|
+
export class MemoryManager {
|
|
8
|
+
db;
|
|
9
|
+
conversationStore;
|
|
10
|
+
decisionTracker;
|
|
11
|
+
sessionManager;
|
|
12
|
+
constructor(db) {
|
|
13
|
+
this.db = db;
|
|
14
|
+
this.conversationStore = new ConversationStore(db);
|
|
15
|
+
this.decisionTracker = new DecisionTracker(db);
|
|
16
|
+
this.sessionManager = new ConversationSessionManager(db);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Get or create a conversation thread
|
|
20
|
+
* @param sessionId - User's wallet address
|
|
21
|
+
* @param resumeLastThread - If true, resumes most recent thread; if false, creates new
|
|
22
|
+
*/
|
|
23
|
+
getOrCreateConversationThread(sessionId, resumeLastThread = true) {
|
|
24
|
+
return this.sessionManager.getOrCreateThread(sessionId, resumeLastThread);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Load full conversation thread for display/context
|
|
28
|
+
*/
|
|
29
|
+
loadConversationThread(conversationId) {
|
|
30
|
+
return this.sessionManager.loadConversationThread(conversationId);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* List all conversation threads for a user
|
|
34
|
+
*/
|
|
35
|
+
listConversationThreads(sessionId, includeArchived = false) {
|
|
36
|
+
return this.sessionManager.listThreads(sessionId, includeArchived);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Create a new conversation thread
|
|
40
|
+
*/
|
|
41
|
+
createNewConversationThread(sessionId, title) {
|
|
42
|
+
return this.sessionManager.createNewThread(sessionId, title);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Archive a conversation thread
|
|
46
|
+
*/
|
|
47
|
+
archiveConversationThread(conversationId) {
|
|
48
|
+
this.sessionManager.archiveThread(conversationId);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Delete a conversation thread completely
|
|
52
|
+
*/
|
|
53
|
+
deleteConversationThread(conversationId) {
|
|
54
|
+
this.sessionManager.deleteThread(conversationId);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get the current active thread for a session
|
|
58
|
+
*/
|
|
59
|
+
getCurrentThread(sessionId) {
|
|
60
|
+
return this.sessionManager.getCurrentThread(sessionId);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Record a conversation message (with thread tracking)
|
|
64
|
+
*/
|
|
65
|
+
async recordConversation(input) {
|
|
66
|
+
const conversation = this.conversationStore.storeConversation(input);
|
|
67
|
+
// Update thread activity
|
|
68
|
+
if (input.conversation_id) {
|
|
69
|
+
this.sessionManager.updateThreadActivity(input.conversation_id);
|
|
70
|
+
// Auto-generate title if this is one of the first messages
|
|
71
|
+
this.sessionManager.autoGenerateTitle(input.conversation_id);
|
|
72
|
+
}
|
|
73
|
+
return conversation;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Record an agent decision
|
|
77
|
+
*/
|
|
78
|
+
async recordDecision(input) {
|
|
79
|
+
return this.decisionTracker.recordDecision(input);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Mark a decision as executed
|
|
83
|
+
*/
|
|
84
|
+
async markDecisionExecuted(decisionId, tradeId, actualPrice) {
|
|
85
|
+
this.decisionTracker.markDecisionExecuted(decisionId, tradeId, actualPrice);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Update decision outcome
|
|
89
|
+
*/
|
|
90
|
+
async updateDecisionOutcome(decisionId, outcome, pnlPercent, notes) {
|
|
91
|
+
this.decisionTracker.updateDecisionOutcome(decisionId, outcome, pnlPercent, notes);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Link a trade to a decision
|
|
95
|
+
*/
|
|
96
|
+
async linkTradeToDecision(tradeId, decisionId) {
|
|
97
|
+
this.decisionTracker.linkToTrade(decisionId, tradeId);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Get recent decisions for context
|
|
101
|
+
*/
|
|
102
|
+
async getRecentDecisions(sessionId, limit = 5) {
|
|
103
|
+
return this.decisionTracker.getRecentDecisions(sessionId, limit);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get recent conversations for context
|
|
107
|
+
*/
|
|
108
|
+
async getRecentConversations(sessionId, limit = 10) {
|
|
109
|
+
return this.conversationStore.getRecentConversations(sessionId, limit);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Get token-specific history
|
|
113
|
+
*/
|
|
114
|
+
async getTokenHistory(sessionId, tokenId) {
|
|
115
|
+
const decisions = this.decisionTracker.getTokenDecisions(sessionId, tokenId);
|
|
116
|
+
const conversations = this.conversationStore.getTokenConversations(sessionId, tokenId, 10);
|
|
117
|
+
return {
|
|
118
|
+
decisions,
|
|
119
|
+
conversations,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Build basic context for LLM (simplified version)
|
|
124
|
+
*/
|
|
125
|
+
async buildContextForQuery(sessionId, tokenId) {
|
|
126
|
+
const recentDecisions = await this.getRecentDecisions(sessionId, 5);
|
|
127
|
+
const recentConversations = await this.getRecentConversations(sessionId, 10);
|
|
128
|
+
const context = {
|
|
129
|
+
sessionId,
|
|
130
|
+
conversationThread: recentConversations,
|
|
131
|
+
relevantHistory: [],
|
|
132
|
+
recentDecisions,
|
|
133
|
+
};
|
|
134
|
+
// Add token-specific history if provided
|
|
135
|
+
if (tokenId) {
|
|
136
|
+
const tokenHistory = await this.getTokenHistory(sessionId, tokenId);
|
|
137
|
+
context.tokenHistory = {
|
|
138
|
+
analyses: [],
|
|
139
|
+
decisions: tokenHistory.decisions,
|
|
140
|
+
trades: [],
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
return context;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Get decision statistics
|
|
147
|
+
*/
|
|
148
|
+
async getDecisionStats(sessionId) {
|
|
149
|
+
return this.decisionTracker.getDecisionStats(sessionId);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Get conversation statistics
|
|
153
|
+
*/
|
|
154
|
+
async getConversationStats(sessionId) {
|
|
155
|
+
return this.conversationStore.getConversationStats(sessionId);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Format context for LLM prompt injection
|
|
159
|
+
*/
|
|
160
|
+
formatContextForPrompt(context) {
|
|
161
|
+
const parts = [];
|
|
162
|
+
// Recent decisions
|
|
163
|
+
if (context.recentDecisions && context.recentDecisions.length > 0) {
|
|
164
|
+
parts.push("\n### Recent Decisions:");
|
|
165
|
+
for (const decision of context.recentDecisions.slice(0, 3)) {
|
|
166
|
+
const outcome = decision.outcome ? ` [${decision.outcome}]` : "";
|
|
167
|
+
parts.push(`- ${decision.decision_type.toUpperCase()} ${decision.symbol}${outcome}: ${decision.reasoning.substring(0, 100)}...`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// Token-specific history
|
|
171
|
+
if (context.tokenHistory && context.tokenHistory.decisions.length > 0) {
|
|
172
|
+
parts.push("\n### History with this token:");
|
|
173
|
+
for (const decision of context.tokenHistory.decisions.slice(0, 2)) {
|
|
174
|
+
parts.push(`- ${decision.decision_type}: ${decision.reasoning.substring(0, 100)}...`);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// Recent conversation context
|
|
178
|
+
if (context.conversationThread && context.conversationThread.length > 0) {
|
|
179
|
+
parts.push("\n### Recent conversation:");
|
|
180
|
+
for (const msg of context.conversationThread.slice(-3)) {
|
|
181
|
+
parts.push(`${msg.role}: ${msg.message.substring(0, 100)}...`);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return parts.join("\n");
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=memory-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-manager.js","sourceRoot":"","sources":["../../../src/agent/memory/memory-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/agent/memory/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/agent/memory/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-formatter.d.ts","sourceRoot":"","sources":["../../src/agent/message-formatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAmBlD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,UAAU,EAAE,aAAa,GAAE,OAAc,GAAG,MAAM,CAelG;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,MAAM,CAIzF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAwBrD"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Message formatter for chat-style agent messages
|
|
3
|
+
* Formats autonomous actions as chat messages with timestamps and styling
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Format a timestamp as a relative time string
|
|
7
|
+
*/
|
|
8
|
+
export function formatTimestamp(date) {
|
|
9
|
+
const now = new Date();
|
|
10
|
+
const diffMs = now.getTime() - date.getTime();
|
|
11
|
+
const diffMins = Math.floor(diffMs / 60000);
|
|
12
|
+
if (diffMins < 1)
|
|
13
|
+
return 'just now';
|
|
14
|
+
if (diffMins < 60)
|
|
15
|
+
return `${diffMins}m ago`;
|
|
16
|
+
const diffHours = Math.floor(diffMins / 60);
|
|
17
|
+
if (diffHours < 24)
|
|
18
|
+
return `${diffHours}h ago`;
|
|
19
|
+
const diffDays = Math.floor(diffHours / 24);
|
|
20
|
+
if (diffDays < 7)
|
|
21
|
+
return `${diffDays}d ago`;
|
|
22
|
+
const diffWeeks = Math.floor(diffDays / 7);
|
|
23
|
+
if (diffWeeks < 4)
|
|
24
|
+
return `${diffWeeks}w ago`;
|
|
25
|
+
const diffMonths = Math.floor(diffDays / 30);
|
|
26
|
+
return `${diffMonths}mo ago`;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Format a log message for display in the chat UI
|
|
30
|
+
*/
|
|
31
|
+
export function formatMessageForDisplay(message, showTimestamp = true) {
|
|
32
|
+
const timestamp = showTimestamp ? `[${formatTimestamp(message.timestamp)}] ` : '';
|
|
33
|
+
switch (message.type) {
|
|
34
|
+
case 'agent':
|
|
35
|
+
return `${timestamp}🐱 Agent: ${message.content}`;
|
|
36
|
+
case 'user':
|
|
37
|
+
return `${timestamp}👤 You: ${message.content}`;
|
|
38
|
+
case 'system':
|
|
39
|
+
return `${timestamp}⚙️ ${message.content}`;
|
|
40
|
+
case 'action':
|
|
41
|
+
return `${timestamp}⚡ ${message.content}`;
|
|
42
|
+
default:
|
|
43
|
+
return `${timestamp}${message.content}`;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Format an agent action as a chat message
|
|
48
|
+
*/
|
|
49
|
+
export function formatAgentAction(action, content, metadata) {
|
|
50
|
+
// Format like: "🐱 Agent: [action] content"
|
|
51
|
+
const actionPrefix = action ? `[${action}] ` : '';
|
|
52
|
+
return `🐱 Agent: ${actionPrefix}${content}`;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Style cat response patterns (addresses, hashes, numbers, cat syntax)
|
|
56
|
+
* Similar to styleCatResponse in shell.ts but for blessed tags
|
|
57
|
+
*/
|
|
58
|
+
export function styleCatResponse(text) {
|
|
59
|
+
let styled = text;
|
|
60
|
+
// Transaction hashes (0x + 64 hex chars) → Cyan with underline
|
|
61
|
+
styled = styled.replace(/\b(0x[a-fA-F0-9]{64})\b/g, '{cyan-fg}{underline}$1{/underline}{/cyan-fg}');
|
|
62
|
+
// Ethereum addresses (0x + 40 hex chars) → Yellow
|
|
63
|
+
styled = styled.replace(/\b(0x[a-fA-F0-9]{40})\b/g, '{yellow-fg}$1{/yellow-fg}');
|
|
64
|
+
// Cat action lines (> action) → Bright cyan
|
|
65
|
+
styled = styled.replace(/^(> .+)$/gm, '{cyan-fg}{bold}$1{/bold}{/cyan-fg}');
|
|
66
|
+
// Cat commentary (// flavor) → Dim gray
|
|
67
|
+
styled = styled.replace(/(\/\/ .+)$/gm, '{gray-fg}$1{/gray-fg}');
|
|
68
|
+
// Cat sounds with mood colors
|
|
69
|
+
styled = styled.replace(/\bpurr\b/gi, '{yellow-fg}purr{/yellow-fg}');
|
|
70
|
+
styled = styled.replace(/\bmeow\b/gi, '{green-fg}meow{/green-fg}');
|
|
71
|
+
styled = styled.replace(/\bhiss\b/gi, '{red-fg}hiss{/red-fg}');
|
|
72
|
+
// Numbers/amounts (including decimals, commas) → Magenta
|
|
73
|
+
styled = styled.replace(/\b(\d{1,3}(,\d{3})*(\.\d+)?|\d+\.\d+)\b/g, '{magenta-fg}$1{/magenta-fg}');
|
|
74
|
+
return styled;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=message-formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-formatter.js","sourceRoot":"","sources":["../../src/agent/message-formatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"position-db.d.ts","sourceRoot":"","sources":["../../src/agent/position-db.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAMtC,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,KAAK,GAAG,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,EAAE,CAAoB;gBAElB,MAAM,CAAC,EAAE,MAAM;IAe3B,OAAO,CAAC,UAAU;IAuClB;;OAEG;IACH,SAAS,CACP,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,GACZ,IAAI;IAgCP;;OAEG;IACH,UAAU,CACR,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,GACd,IAAI;IAgCP;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAK7C;;OAEG;IACH,eAAe,IAAI,QAAQ,EAAE;IAK7B;;OAEG;IACH,SAAS,CAAC,KAAK,GAAE,MAAW,GAAG,KAAK,EAAE;IAKtC;;OAEG;IACH,WAAW,IAAI,QAAQ,CAAC,QAAQ;IAIhC;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import Database from "better-sqlite3";
|
|
2
|
+
import { homedir } from "os";
|
|
3
|
+
import { join } from "path";
|
|
4
|
+
import { mkdirSync, existsSync } from "fs";
|
|
5
|
+
import { runMigrations } from "./memory/database-schema.js";
|
|
6
|
+
export class PositionDatabase {
|
|
7
|
+
db;
|
|
8
|
+
constructor(dbPath) {
|
|
9
|
+
// Default to ~/.config/httpcat/agent.db
|
|
10
|
+
const defaultPath = join(homedir(), ".config", "httpcat", "agent.db");
|
|
11
|
+
const finalPath = dbPath || defaultPath;
|
|
12
|
+
// Ensure directory exists
|
|
13
|
+
const dir = join(finalPath, "..");
|
|
14
|
+
if (!existsSync(dir)) {
|
|
15
|
+
mkdirSync(dir, { recursive: true });
|
|
16
|
+
}
|
|
17
|
+
this.db = new Database(finalPath);
|
|
18
|
+
this.initialize();
|
|
19
|
+
}
|
|
20
|
+
initialize() {
|
|
21
|
+
// Create positions table
|
|
22
|
+
this.db.exec(`
|
|
23
|
+
CREATE TABLE IF NOT EXISTS positions (
|
|
24
|
+
token_id TEXT PRIMARY KEY,
|
|
25
|
+
symbol TEXT NOT NULL,
|
|
26
|
+
name TEXT,
|
|
27
|
+
tokens_owned TEXT NOT NULL,
|
|
28
|
+
avg_buy_price REAL NOT NULL,
|
|
29
|
+
total_invested REAL NOT NULL,
|
|
30
|
+
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
31
|
+
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
32
|
+
)
|
|
33
|
+
`);
|
|
34
|
+
// Create trades table
|
|
35
|
+
this.db.exec(`
|
|
36
|
+
CREATE TABLE IF NOT EXISTS trades (
|
|
37
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
38
|
+
token_id TEXT NOT NULL,
|
|
39
|
+
symbol TEXT NOT NULL,
|
|
40
|
+
trade_type TEXT NOT NULL,
|
|
41
|
+
amount_tokens TEXT NOT NULL,
|
|
42
|
+
amount_usdc REAL NOT NULL,
|
|
43
|
+
price REAL NOT NULL,
|
|
44
|
+
tx_hash TEXT,
|
|
45
|
+
created_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
46
|
+
)
|
|
47
|
+
`);
|
|
48
|
+
// Create indexes
|
|
49
|
+
this.db.exec(`CREATE INDEX IF NOT EXISTS idx_positions_token_id ON positions(token_id)`);
|
|
50
|
+
this.db.exec(`CREATE INDEX IF NOT EXISTS idx_trades_token_id ON trades(token_id)`);
|
|
51
|
+
this.db.exec(`CREATE INDEX IF NOT EXISTS idx_trades_created_at ON trades(created_at)`);
|
|
52
|
+
// Run memory system migrations (creates all 8 new tables + enhances existing tables)
|
|
53
|
+
runMigrations(this.db);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Record a buy trade and update position
|
|
57
|
+
*/
|
|
58
|
+
recordBuy(tokenId, symbol, tokensReceived, amountSpent, price, txHash, name) {
|
|
59
|
+
// Insert trade record
|
|
60
|
+
const tradeStmt = this.db.prepare(`
|
|
61
|
+
INSERT INTO trades (token_id, symbol, trade_type, amount_tokens, amount_usdc, price, tx_hash)
|
|
62
|
+
VALUES (?, ?, 'buy', ?, ?, ?, ?)
|
|
63
|
+
`);
|
|
64
|
+
tradeStmt.run(tokenId, symbol, tokensReceived, amountSpent, price, txHash || null);
|
|
65
|
+
// Update or create position
|
|
66
|
+
const position = this.getPosition(tokenId);
|
|
67
|
+
if (position) {
|
|
68
|
+
// Existing position - update average price and total invested
|
|
69
|
+
const newTokensOwned = BigInt(position.tokens_owned) + BigInt(tokensReceived);
|
|
70
|
+
const newTotalInvested = position.total_invested + amountSpent;
|
|
71
|
+
const newAvgPrice = newTotalInvested / parseFloat(newTokensOwned.toString());
|
|
72
|
+
const updateStmt = this.db.prepare(`
|
|
73
|
+
UPDATE positions
|
|
74
|
+
SET tokens_owned = ?, total_invested = ?, avg_buy_price = ?, updated_at = CURRENT_TIMESTAMP
|
|
75
|
+
WHERE token_id = ?
|
|
76
|
+
`);
|
|
77
|
+
updateStmt.run(newTokensOwned.toString(), newTotalInvested, newAvgPrice, tokenId);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
// New position
|
|
81
|
+
const insertStmt = this.db.prepare(`
|
|
82
|
+
INSERT INTO positions (token_id, symbol, name, tokens_owned, avg_buy_price, total_invested)
|
|
83
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
84
|
+
`);
|
|
85
|
+
insertStmt.run(tokenId, symbol, name || null, tokensReceived, price, amountSpent);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Record a sell trade and update/remove position
|
|
90
|
+
*/
|
|
91
|
+
recordSell(tokenId, symbol, tokensSold, usdcReceived, price, txHash) {
|
|
92
|
+
// Insert trade record
|
|
93
|
+
const tradeStmt = this.db.prepare(`
|
|
94
|
+
INSERT INTO trades (token_id, symbol, trade_type, amount_tokens, amount_usdc, price, tx_hash)
|
|
95
|
+
VALUES (?, ?, 'sell', ?, ?, ?, ?)
|
|
96
|
+
`);
|
|
97
|
+
tradeStmt.run(tokenId, symbol, tokensSold, usdcReceived, price, txHash || null);
|
|
98
|
+
// Update position
|
|
99
|
+
const position = this.getPosition(tokenId);
|
|
100
|
+
if (position) {
|
|
101
|
+
const newTokensOwned = BigInt(position.tokens_owned) - BigInt(tokensSold);
|
|
102
|
+
if (newTokensOwned <= 0n) {
|
|
103
|
+
// Sold entire position - delete from positions table
|
|
104
|
+
const deleteStmt = this.db.prepare(`DELETE FROM positions WHERE token_id = ?`);
|
|
105
|
+
deleteStmt.run(tokenId);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
// Partial sell - update position
|
|
109
|
+
const proportionSold = parseFloat(tokensSold) / parseFloat(position.tokens_owned);
|
|
110
|
+
const newTotalInvested = position.total_invested * (1 - proportionSold);
|
|
111
|
+
const updateStmt = this.db.prepare(`
|
|
112
|
+
UPDATE positions
|
|
113
|
+
SET tokens_owned = ?, total_invested = ?, updated_at = CURRENT_TIMESTAMP
|
|
114
|
+
WHERE token_id = ?
|
|
115
|
+
`);
|
|
116
|
+
updateStmt.run(newTokensOwned.toString(), newTotalInvested, tokenId);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Get a specific position by token ID
|
|
122
|
+
*/
|
|
123
|
+
getPosition(tokenId) {
|
|
124
|
+
const stmt = this.db.prepare(`SELECT * FROM positions WHERE token_id = ?`);
|
|
125
|
+
return stmt.get(tokenId) || null;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Get all positions
|
|
129
|
+
*/
|
|
130
|
+
getAllPositions() {
|
|
131
|
+
const stmt = this.db.prepare(`SELECT * FROM positions ORDER BY created_at DESC`);
|
|
132
|
+
return stmt.all();
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Get trade history
|
|
136
|
+
*/
|
|
137
|
+
getTrades(limit = 50) {
|
|
138
|
+
const stmt = this.db.prepare(`SELECT * FROM trades ORDER BY created_at DESC LIMIT ?`);
|
|
139
|
+
return stmt.all(limit);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Get the underlying database instance for memory system access
|
|
143
|
+
*/
|
|
144
|
+
getDatabase() {
|
|
145
|
+
return this.db;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Close database connection
|
|
149
|
+
*/
|
|
150
|
+
close() {
|
|
151
|
+
this.db.close();
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=position-db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"position-db.js","sourceRoot":"","sources":["../../src/agent/position-db.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple-chat-ui-static.d.ts","sourceRoot":"","sources":["../../src/agent/simple-chat-ui-static.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,GAAG,CAAC;IACZ,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC1C,YAAY,EAAE,CAAC,IAAI,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACvI;AAqKD,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EACjC,MAAM,EAAE,MAAM,IAAI,EAClB,eAAe,GAAE,MAAM,EAAO,EAC9B,UAAU,CAAC,EAAE;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GACA,YAAY,CAsDd"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Static Chat UI - Hybrid approach
|
|
4
|
+
* Messages use refs instead of state to avoid re-renders on every keystroke
|
|
5
|
+
* Only input triggers React updates, but those are isolated
|
|
6
|
+
* This eliminates flickering on typing
|
|
7
|
+
*/
|
|
8
|
+
import React, { useState, useEffect, useRef, useReducer, memo } from 'react';
|
|
9
|
+
import { render, Box, Text, useStdout, useInput } from 'ink';
|
|
10
|
+
import TextInput from 'ink-text-input';
|
|
11
|
+
import { ThemeProvider } from '../ui/components/ThemeProvider.js';
|
|
12
|
+
import { ScrollableList } from '../ui/components/ScrollableList.js';
|
|
13
|
+
import { ThemedBox } from '../ui/components/ThemedBox.js';
|
|
14
|
+
import { ChatHeader } from '../ui/components/agent/ChatHeader.js';
|
|
15
|
+
// Completely isolated message display that never re-renders from parent
|
|
16
|
+
const MessageDisplay = memo(function MessageDisplay({ messages, viewportHeight }) {
|
|
17
|
+
return (_jsx(ThemedBox, { borderStyle: "single", flexGrow: 1, paddingX: 2, children: _jsx(ScrollableList, { items: messages, viewportHeight: viewportHeight, showScrollIndicator: true, autoScroll: true }) }));
|
|
18
|
+
});
|
|
19
|
+
// Completely isolated input that doesn't affect message display
|
|
20
|
+
const InputArea = memo(function InputArea({ value, onChange, onSubmit, }) {
|
|
21
|
+
return (_jsxs(Box, { borderStyle: "single", borderTop: true, paddingX: 1, children: [_jsx(Text, { children: "Type message: " }), _jsx(TextInput, { value: value, onChange: onChange, onSubmit: onSubmit })] }));
|
|
22
|
+
});
|
|
23
|
+
function StaticChatUI({ onMessage, onExit, onReady, onHeaderUpdate, initialMessages = [], network = 'Unknown', account, ethBalance = '0.00', usdcBalance = '0.00', agentStatus = 'Chat Mode' }) {
|
|
24
|
+
const [input, setInput] = useState('');
|
|
25
|
+
// Use a dummy state to force re-render only when new messages arrive
|
|
26
|
+
const [, forceUpdate] = useReducer((x) => x + 1, 0);
|
|
27
|
+
const messagesRef = useRef(initialMessages);
|
|
28
|
+
const { stdout } = useStdout();
|
|
29
|
+
// Header info state - can be updated dynamically
|
|
30
|
+
const [headerInfo, setHeaderInfo] = useState({
|
|
31
|
+
network,
|
|
32
|
+
account,
|
|
33
|
+
ethBalance,
|
|
34
|
+
usdcBalance,
|
|
35
|
+
agentStatus
|
|
36
|
+
});
|
|
37
|
+
const rows = (stdout?.rows || 24) - 1; // -1 to prevent flickering in iTerm2
|
|
38
|
+
const headerHeight = 6; // ChatHeader takes 6 lines
|
|
39
|
+
const inputHeight = 3;
|
|
40
|
+
const maxMessages = Math.max(10, rows - headerHeight - inputHeight - 2);
|
|
41
|
+
// Register the log function on mount
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
if (onReady) {
|
|
44
|
+
onReady((message) => {
|
|
45
|
+
// Check if this is a removal action (empty message means remove last)
|
|
46
|
+
if (message === '__REMOVE_LAST__') {
|
|
47
|
+
// Remove the last message
|
|
48
|
+
if (messagesRef.current.length > 0) {
|
|
49
|
+
messagesRef.current = messagesRef.current.slice(0, -1);
|
|
50
|
+
forceUpdate();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
// Add to ref (doesn't trigger re-render)
|
|
55
|
+
messagesRef.current = [...messagesRef.current, message];
|
|
56
|
+
// Force a single re-render for new message
|
|
57
|
+
forceUpdate();
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}, [onReady]);
|
|
62
|
+
// Register header update callback
|
|
63
|
+
useEffect(() => {
|
|
64
|
+
if (onHeaderUpdate) {
|
|
65
|
+
onHeaderUpdate((info) => {
|
|
66
|
+
setHeaderInfo((prev) => ({ ...prev, ...info }));
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}, [onHeaderUpdate]);
|
|
70
|
+
// Handle keyboard shortcuts
|
|
71
|
+
useInput((input, key) => {
|
|
72
|
+
if (key.escape || (key.ctrl && input === 'c')) {
|
|
73
|
+
onExit();
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
const handleSubmit = React.useCallback((value) => {
|
|
77
|
+
const trimmed = value.trim();
|
|
78
|
+
if (!trimmed)
|
|
79
|
+
return;
|
|
80
|
+
if (trimmed === '/exit' || trimmed === '/quit') {
|
|
81
|
+
onExit();
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
onMessage(trimmed);
|
|
85
|
+
setInput('');
|
|
86
|
+
}, [onMessage, onExit]);
|
|
87
|
+
const handleChange = React.useCallback((value) => {
|
|
88
|
+
setInput(value);
|
|
89
|
+
}, []);
|
|
90
|
+
return (_jsx(ThemeProvider, { children: _jsxs(Box, { flexDirection: "column", height: rows, children: [_jsx(ChatHeader, { network: headerInfo.network, account: headerInfo.account, ethBalance: headerInfo.ethBalance, usdcBalance: headerInfo.usdcBalance, agentStatus: headerInfo.agentStatus }), _jsx(MessageDisplay, { messages: messagesRef.current, viewportHeight: maxMessages }), _jsx(InputArea, { value: input, onChange: handleChange, onSubmit: handleSubmit })] }) }));
|
|
91
|
+
}
|
|
92
|
+
export function createSimpleChatUI(onMessage, onExit, initialMessages = [], headerInfo) {
|
|
93
|
+
let logFn = null;
|
|
94
|
+
let headerUpdateFn = null;
|
|
95
|
+
const handleReady = (fn) => {
|
|
96
|
+
logFn = fn;
|
|
97
|
+
};
|
|
98
|
+
const handleHeaderUpdate = (fn) => {
|
|
99
|
+
headerUpdateFn = fn;
|
|
100
|
+
};
|
|
101
|
+
const { waitUntilExit, clear, rerender } = render(_jsx(StaticChatUI, { onMessage: onMessage, onExit: onExit, onReady: handleReady, onHeaderUpdate: handleHeaderUpdate, initialMessages: initialMessages, network: headerInfo?.network, account: headerInfo?.account, ethBalance: headerInfo?.ethBalance, usdcBalance: headerInfo?.usdcBalance, agentStatus: headerInfo?.agentStatus }), {
|
|
102
|
+
patchConsole: false,
|
|
103
|
+
exitOnCtrlC: false,
|
|
104
|
+
});
|
|
105
|
+
return {
|
|
106
|
+
screen: null,
|
|
107
|
+
log: (message) => {
|
|
108
|
+
if (logFn) {
|
|
109
|
+
logFn(message);
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
loadHistory: (messages) => {
|
|
113
|
+
// This allows loading more history dynamically
|
|
114
|
+
if (logFn) {
|
|
115
|
+
messages.forEach(msg => logFn(msg));
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
updateHeader: (info) => {
|
|
119
|
+
if (headerUpdateFn) {
|
|
120
|
+
headerUpdateFn(info);
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
destroy: async () => {
|
|
124
|
+
clear();
|
|
125
|
+
await waitUntilExit();
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=simple-chat-ui-static.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple-chat-ui-static.js","sourceRoot":"","sources":["../../src/agent/simple-chat-ui-static.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple-chat-ui.d.ts","sourceRoot":"","sources":["../../src/agent/simple-chat-ui.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,GAAG,CAAC;IACZ,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAuGD,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EACjC,MAAM,EAAE,MAAM,IAAI,GACjB,YAAY,CA6Bd"}
|