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,355 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Database schema definitions and migrations for the Agent Memory System
|
|
3
|
+
*/
|
|
4
|
+
export const SCHEMA_VERSION = 1;
|
|
5
|
+
/**
|
|
6
|
+
* Initialize all memory tables in the database
|
|
7
|
+
*/
|
|
8
|
+
export function initializeMemoryTables(db) {
|
|
9
|
+
// Enable foreign keys
|
|
10
|
+
db.exec("PRAGMA foreign_keys = ON");
|
|
11
|
+
// Create conversations table
|
|
12
|
+
db.exec(`
|
|
13
|
+
CREATE TABLE IF NOT EXISTS conversations (
|
|
14
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
15
|
+
session_id TEXT NOT NULL,
|
|
16
|
+
conversation_id TEXT NOT NULL,
|
|
17
|
+
role TEXT NOT NULL CHECK(role IN ('user', 'agent', 'system')),
|
|
18
|
+
message TEXT NOT NULL,
|
|
19
|
+
timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
20
|
+
context_type TEXT,
|
|
21
|
+
related_token_id TEXT,
|
|
22
|
+
related_trade_id INTEGER,
|
|
23
|
+
metadata TEXT,
|
|
24
|
+
embedding_vector TEXT,
|
|
25
|
+
FOREIGN KEY (related_trade_id) REFERENCES trades(id)
|
|
26
|
+
)
|
|
27
|
+
`);
|
|
28
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_conversations_session ON conversations(session_id)`);
|
|
29
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_conversations_conversation ON conversations(conversation_id)`);
|
|
30
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_conversations_timestamp ON conversations(timestamp)`);
|
|
31
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_conversations_token ON conversations(related_token_id)`);
|
|
32
|
+
// Create agent_decisions table
|
|
33
|
+
db.exec(`
|
|
34
|
+
CREATE TABLE IF NOT EXISTS agent_decisions (
|
|
35
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
36
|
+
session_id TEXT NOT NULL,
|
|
37
|
+
decision_type TEXT NOT NULL CHECK(decision_type IN ('buy', 'sell', 'skip', 'hold')),
|
|
38
|
+
token_id TEXT NOT NULL,
|
|
39
|
+
symbol TEXT NOT NULL,
|
|
40
|
+
trigger_event TEXT NOT NULL,
|
|
41
|
+
reasoning TEXT NOT NULL,
|
|
42
|
+
confidence REAL,
|
|
43
|
+
amount_usdc REAL,
|
|
44
|
+
expected_price REAL,
|
|
45
|
+
actual_price REAL,
|
|
46
|
+
executed BOOLEAN DEFAULT 0,
|
|
47
|
+
trade_id INTEGER,
|
|
48
|
+
signals TEXT,
|
|
49
|
+
outcome TEXT,
|
|
50
|
+
outcome_pnl_percent REAL,
|
|
51
|
+
outcome_notes TEXT,
|
|
52
|
+
timestamp TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
53
|
+
FOREIGN KEY (trade_id) REFERENCES trades(id)
|
|
54
|
+
)
|
|
55
|
+
`);
|
|
56
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_decisions_session ON agent_decisions(session_id)`);
|
|
57
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_decisions_token ON agent_decisions(token_id)`);
|
|
58
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_decisions_type ON agent_decisions(decision_type)`);
|
|
59
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_decisions_timestamp ON agent_decisions(timestamp)`);
|
|
60
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_decisions_outcome ON agent_decisions(outcome)`);
|
|
61
|
+
// Create token_analysis table
|
|
62
|
+
db.exec(`
|
|
63
|
+
CREATE TABLE IF NOT EXISTS token_analysis (
|
|
64
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
65
|
+
session_id TEXT NOT NULL,
|
|
66
|
+
token_id TEXT NOT NULL,
|
|
67
|
+
symbol TEXT NOT NULL,
|
|
68
|
+
analyzed_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
69
|
+
analysis_type TEXT,
|
|
70
|
+
price REAL,
|
|
71
|
+
market_cap REAL,
|
|
72
|
+
holder_count INTEGER,
|
|
73
|
+
liquidity_usdc REAL,
|
|
74
|
+
volume_24h REAL,
|
|
75
|
+
price_change_1h REAL,
|
|
76
|
+
price_change_24h REAL,
|
|
77
|
+
creator_address TEXT,
|
|
78
|
+
creator_reputation_score REAL,
|
|
79
|
+
creator_previous_tokens INTEGER,
|
|
80
|
+
creator_success_rate REAL,
|
|
81
|
+
pattern_flags TEXT,
|
|
82
|
+
risk_score REAL,
|
|
83
|
+
opportunity_score REAL,
|
|
84
|
+
ai_summary TEXT,
|
|
85
|
+
ai_prediction TEXT,
|
|
86
|
+
actual_outcome TEXT,
|
|
87
|
+
prediction_accuracy REAL,
|
|
88
|
+
UNIQUE(session_id, token_id, analyzed_at)
|
|
89
|
+
)
|
|
90
|
+
`);
|
|
91
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_token_analysis_session ON token_analysis(session_id)`);
|
|
92
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_token_analysis_token ON token_analysis(token_id)`);
|
|
93
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_token_analysis_creator ON token_analysis(creator_address)`);
|
|
94
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_token_analysis_timestamp ON token_analysis(analyzed_at)`);
|
|
95
|
+
// Create user_preferences table
|
|
96
|
+
db.exec(`
|
|
97
|
+
CREATE TABLE IF NOT EXISTS user_preferences (
|
|
98
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
99
|
+
session_id TEXT NOT NULL,
|
|
100
|
+
preference_type TEXT NOT NULL,
|
|
101
|
+
preference_key TEXT NOT NULL,
|
|
102
|
+
preference_value TEXT NOT NULL,
|
|
103
|
+
confidence REAL DEFAULT 0.5,
|
|
104
|
+
learned_from TEXT,
|
|
105
|
+
sample_size INTEGER DEFAULT 1,
|
|
106
|
+
last_updated TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
107
|
+
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
108
|
+
UNIQUE(session_id, preference_type, preference_key)
|
|
109
|
+
)
|
|
110
|
+
`);
|
|
111
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_user_prefs_session ON user_preferences(session_id)`);
|
|
112
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_user_prefs_type ON user_preferences(preference_type)`);
|
|
113
|
+
// Create performance_metrics table
|
|
114
|
+
db.exec(`
|
|
115
|
+
CREATE TABLE IF NOT EXISTS performance_metrics (
|
|
116
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
117
|
+
session_id TEXT NOT NULL,
|
|
118
|
+
metric_type TEXT NOT NULL,
|
|
119
|
+
metric_key TEXT NOT NULL,
|
|
120
|
+
total_trades INTEGER DEFAULT 0,
|
|
121
|
+
buy_count INTEGER DEFAULT 0,
|
|
122
|
+
sell_count INTEGER DEFAULT 0,
|
|
123
|
+
win_count INTEGER DEFAULT 0,
|
|
124
|
+
loss_count INTEGER DEFAULT 0,
|
|
125
|
+
total_invested REAL DEFAULT 0,
|
|
126
|
+
total_returned REAL DEFAULT 0,
|
|
127
|
+
total_pnl REAL DEFAULT 0,
|
|
128
|
+
total_pnl_percent REAL DEFAULT 0,
|
|
129
|
+
largest_win REAL DEFAULT 0,
|
|
130
|
+
largest_loss REAL DEFAULT 0,
|
|
131
|
+
win_rate REAL DEFAULT 0,
|
|
132
|
+
avg_win_percent REAL DEFAULT 0,
|
|
133
|
+
avg_loss_percent REAL DEFAULT 0,
|
|
134
|
+
sharpe_ratio REAL,
|
|
135
|
+
max_drawdown REAL,
|
|
136
|
+
period_start TEXT,
|
|
137
|
+
period_end TEXT,
|
|
138
|
+
last_updated TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
139
|
+
UNIQUE(session_id, metric_type, metric_key)
|
|
140
|
+
)
|
|
141
|
+
`);
|
|
142
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_perf_session ON performance_metrics(session_id)`);
|
|
143
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_perf_type ON performance_metrics(metric_type)`);
|
|
144
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_perf_period ON performance_metrics(period_start, period_end)`);
|
|
145
|
+
// Create creator_reputation table
|
|
146
|
+
db.exec(`
|
|
147
|
+
CREATE TABLE IF NOT EXISTS creator_reputation (
|
|
148
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
149
|
+
session_id TEXT NOT NULL,
|
|
150
|
+
creator_address TEXT NOT NULL,
|
|
151
|
+
tokens_created INTEGER DEFAULT 0,
|
|
152
|
+
tokens_graduated INTEGER DEFAULT 0,
|
|
153
|
+
tokens_rugpulled INTEGER DEFAULT 0,
|
|
154
|
+
user_trades_count INTEGER DEFAULT 0,
|
|
155
|
+
user_wins INTEGER DEFAULT 0,
|
|
156
|
+
user_losses INTEGER DEFAULT 0,
|
|
157
|
+
user_avg_pnl_percent REAL DEFAULT 0,
|
|
158
|
+
overall_reputation REAL DEFAULT 50,
|
|
159
|
+
reliability_score REAL DEFAULT 50,
|
|
160
|
+
profitability_score REAL DEFAULT 50,
|
|
161
|
+
common_patterns TEXT,
|
|
162
|
+
risk_flags TEXT,
|
|
163
|
+
last_updated TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
164
|
+
UNIQUE(session_id, creator_address)
|
|
165
|
+
)
|
|
166
|
+
`);
|
|
167
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_creator_rep_session ON creator_reputation(session_id)`);
|
|
168
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_creator_rep_address ON creator_reputation(creator_address)`);
|
|
169
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_creator_rep_score ON creator_reputation(overall_reputation)`);
|
|
170
|
+
// Create knowledge_base table
|
|
171
|
+
db.exec(`
|
|
172
|
+
CREATE TABLE IF NOT EXISTS knowledge_base (
|
|
173
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
174
|
+
session_id TEXT NOT NULL,
|
|
175
|
+
knowledge_type TEXT NOT NULL,
|
|
176
|
+
title TEXT NOT NULL,
|
|
177
|
+
description TEXT NOT NULL,
|
|
178
|
+
confidence REAL DEFAULT 0.5,
|
|
179
|
+
sample_size INTEGER DEFAULT 1,
|
|
180
|
+
success_rate REAL,
|
|
181
|
+
knowledge_data TEXT,
|
|
182
|
+
conditions TEXT,
|
|
183
|
+
actions TEXT,
|
|
184
|
+
learned_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
185
|
+
last_validated TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
186
|
+
validation_count INTEGER DEFAULT 0,
|
|
187
|
+
times_applied INTEGER DEFAULT 0,
|
|
188
|
+
UNIQUE(session_id, knowledge_type, title)
|
|
189
|
+
)
|
|
190
|
+
`);
|
|
191
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_knowledge_session ON knowledge_base(session_id)`);
|
|
192
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_knowledge_type ON knowledge_base(knowledge_type)`);
|
|
193
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_knowledge_confidence ON knowledge_base(confidence)`);
|
|
194
|
+
// Create agent_sessions table
|
|
195
|
+
db.exec(`
|
|
196
|
+
CREATE TABLE IF NOT EXISTS agent_sessions (
|
|
197
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
198
|
+
session_id TEXT NOT NULL,
|
|
199
|
+
agent_session_id TEXT NOT NULL,
|
|
200
|
+
started_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
201
|
+
ended_at TEXT,
|
|
202
|
+
starting_balance_usdc REAL,
|
|
203
|
+
ending_balance_usdc REAL,
|
|
204
|
+
starting_portfolio_value REAL,
|
|
205
|
+
ending_portfolio_value REAL,
|
|
206
|
+
events_processed INTEGER DEFAULT 0,
|
|
207
|
+
decisions_made INTEGER DEFAULT 0,
|
|
208
|
+
trades_executed INTEGER DEFAULT 0,
|
|
209
|
+
session_notes TEXT,
|
|
210
|
+
UNIQUE(agent_session_id)
|
|
211
|
+
)
|
|
212
|
+
`);
|
|
213
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_agent_sessions_session ON agent_sessions(session_id)`);
|
|
214
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_agent_sessions_started ON agent_sessions(started_at)`);
|
|
215
|
+
// Create schema_version table to track migrations
|
|
216
|
+
db.exec(`
|
|
217
|
+
CREATE TABLE IF NOT EXISTS schema_version (
|
|
218
|
+
id INTEGER PRIMARY KEY CHECK (id = 1),
|
|
219
|
+
version INTEGER NOT NULL,
|
|
220
|
+
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
221
|
+
)
|
|
222
|
+
`);
|
|
223
|
+
// Insert or update schema version
|
|
224
|
+
db.exec(`
|
|
225
|
+
INSERT OR REPLACE INTO schema_version (id, version, updated_at)
|
|
226
|
+
VALUES (1, ${SCHEMA_VERSION}, CURRENT_TIMESTAMP)
|
|
227
|
+
`);
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Enhance existing tables with new columns for memory system
|
|
231
|
+
*/
|
|
232
|
+
export function enhanceExistingTables(db) {
|
|
233
|
+
// Check if columns already exist before adding
|
|
234
|
+
const tradesColumns = db.pragma("table_info(trades)");
|
|
235
|
+
const positionsColumns = db.pragma("table_info(positions)");
|
|
236
|
+
const hasDecisionId = tradesColumns.some((col) => col.name === "decision_id");
|
|
237
|
+
const hasSessionContext = tradesColumns.some((col) => col.name === "session_context");
|
|
238
|
+
const hasSlippage = tradesColumns.some((col) => col.name === "slippage");
|
|
239
|
+
const hasGasCost = tradesColumns.some((col) => col.name === "gas_cost");
|
|
240
|
+
const hasNotes = tradesColumns.some((col) => col.name === "notes");
|
|
241
|
+
const hasDecisionIds = positionsColumns.some((col) => col.name === "decision_ids");
|
|
242
|
+
const hasPeakValue = positionsColumns.some((col) => col.name === "peak_value");
|
|
243
|
+
const hasLowestValue = positionsColumns.some((col) => col.name === "lowest_value");
|
|
244
|
+
// Add new columns to trades table
|
|
245
|
+
if (!hasDecisionId) {
|
|
246
|
+
db.exec(`ALTER TABLE trades ADD COLUMN decision_id INTEGER REFERENCES agent_decisions(id)`);
|
|
247
|
+
db.exec(`CREATE INDEX IF NOT EXISTS idx_trades_decision ON trades(decision_id)`);
|
|
248
|
+
}
|
|
249
|
+
if (!hasSessionContext) {
|
|
250
|
+
db.exec(`ALTER TABLE trades ADD COLUMN session_context TEXT`);
|
|
251
|
+
}
|
|
252
|
+
if (!hasSlippage) {
|
|
253
|
+
db.exec(`ALTER TABLE trades ADD COLUMN slippage REAL`);
|
|
254
|
+
}
|
|
255
|
+
if (!hasGasCost) {
|
|
256
|
+
db.exec(`ALTER TABLE trades ADD COLUMN gas_cost REAL`);
|
|
257
|
+
}
|
|
258
|
+
if (!hasNotes) {
|
|
259
|
+
db.exec(`ALTER TABLE trades ADD COLUMN notes TEXT`);
|
|
260
|
+
}
|
|
261
|
+
// Add new columns to positions table
|
|
262
|
+
if (!hasDecisionIds) {
|
|
263
|
+
db.exec(`ALTER TABLE positions ADD COLUMN decision_ids TEXT`);
|
|
264
|
+
}
|
|
265
|
+
if (!hasPeakValue) {
|
|
266
|
+
db.exec(`ALTER TABLE positions ADD COLUMN peak_value REAL`);
|
|
267
|
+
}
|
|
268
|
+
if (!hasLowestValue) {
|
|
269
|
+
db.exec(`ALTER TABLE positions ADD COLUMN lowest_value REAL`);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Run all migrations
|
|
274
|
+
*/
|
|
275
|
+
export function runMigrations(db) {
|
|
276
|
+
// Get current schema version
|
|
277
|
+
let currentVersion = 0;
|
|
278
|
+
try {
|
|
279
|
+
const result = db.prepare("SELECT version FROM schema_version WHERE id = 1").get();
|
|
280
|
+
currentVersion = result?.version || 0;
|
|
281
|
+
}
|
|
282
|
+
catch {
|
|
283
|
+
// schema_version table doesn't exist yet
|
|
284
|
+
currentVersion = 0;
|
|
285
|
+
}
|
|
286
|
+
console.log(`Current schema version: ${currentVersion}`);
|
|
287
|
+
console.log(`Target schema version: ${SCHEMA_VERSION}`);
|
|
288
|
+
if (currentVersion < SCHEMA_VERSION) {
|
|
289
|
+
console.log("Running migrations...");
|
|
290
|
+
// Initialize all memory tables
|
|
291
|
+
initializeMemoryTables(db);
|
|
292
|
+
// Enhance existing tables
|
|
293
|
+
enhanceExistingTables(db);
|
|
294
|
+
console.log(`Migrations complete. Schema version: ${SCHEMA_VERSION}`);
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
console.log("Schema is up to date.");
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Cleanup old data based on retention policies
|
|
302
|
+
*/
|
|
303
|
+
export function cleanupOldData(db, sessionId, daysToKeep = 90) {
|
|
304
|
+
const cutoffDate = new Date();
|
|
305
|
+
cutoffDate.setDate(cutoffDate.getDate() - daysToKeep);
|
|
306
|
+
const cutoffISO = cutoffDate.toISOString();
|
|
307
|
+
console.log(`Cleaning up data older than ${daysToKeep} days (before ${cutoffISO})...`);
|
|
308
|
+
// Delete old conversations (keep summaries)
|
|
309
|
+
const deleteConversations = db.prepare(`
|
|
310
|
+
DELETE FROM conversations
|
|
311
|
+
WHERE session_id = ?
|
|
312
|
+
AND timestamp < ?
|
|
313
|
+
AND context_type != 'daily_summary'
|
|
314
|
+
`);
|
|
315
|
+
const conversationsDeleted = deleteConversations.run(sessionId, cutoffISO).changes;
|
|
316
|
+
console.log(`Deleted ${conversationsDeleted} old conversation records`);
|
|
317
|
+
// Delete old token analyses (keep 90 days)
|
|
318
|
+
const deleteAnalyses = db.prepare(`
|
|
319
|
+
DELETE FROM token_analysis
|
|
320
|
+
WHERE session_id = ? AND analyzed_at < ?
|
|
321
|
+
`);
|
|
322
|
+
const analysesDeleted = deleteAnalyses.run(sessionId, cutoffISO).changes;
|
|
323
|
+
console.log(`Deleted ${analysesDeleted} old token analyses`);
|
|
324
|
+
// Vacuum to reclaim space
|
|
325
|
+
db.exec("VACUUM");
|
|
326
|
+
console.log("Database vacuumed");
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Get database statistics
|
|
330
|
+
*/
|
|
331
|
+
export function getDatabaseStats(db, sessionId) {
|
|
332
|
+
const stats = {};
|
|
333
|
+
const tables = [
|
|
334
|
+
"conversations",
|
|
335
|
+
"agent_decisions",
|
|
336
|
+
"token_analysis",
|
|
337
|
+
"user_preferences",
|
|
338
|
+
"performance_metrics",
|
|
339
|
+
"creator_reputation",
|
|
340
|
+
"knowledge_base",
|
|
341
|
+
"agent_sessions",
|
|
342
|
+
"positions",
|
|
343
|
+
"trades",
|
|
344
|
+
];
|
|
345
|
+
for (const table of tables) {
|
|
346
|
+
const result = db.prepare(`SELECT COUNT(*) as count FROM ${table} WHERE session_id = ?`).get(sessionId);
|
|
347
|
+
stats[table] = result?.count || 0;
|
|
348
|
+
}
|
|
349
|
+
// Database size
|
|
350
|
+
const pageCount = db.pragma("page_count", { simple: true });
|
|
351
|
+
const pageSize = db.pragma("page_size", { simple: true });
|
|
352
|
+
stats.database_size_mb = (pageCount * pageSize) / (1024 * 1024);
|
|
353
|
+
return stats;
|
|
354
|
+
}
|
|
355
|
+
//# sourceMappingURL=database-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-schema.js","sourceRoot":"","sources":["../../../src/agent/memory/database-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decision-tracker.d.ts","sourceRoot":"","sources":["../../../src/agent/memory/decision-tracker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,eAAe,EAGrB,MAAM,YAAY,CAAC;AAEpB,qBAAa,eAAe;IACd,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAEzC;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM;IA0B5C;;OAEG;IACH,oBAAoB,CAClB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,IAAI;IAUP;;OAEG;IACH,qBAAqB,CACnB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,eAAe,EACxB,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,MAAM,GACb,IAAI;IAUP;;OAEG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAKrD;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,aAAa,EAAE;IAW1E;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE;IAUtE;;OAEG;IACH,kBAAkB,CAChB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,YAAY,EAC1B,KAAK,GAAE,MAAW,GACjB,aAAa,EAAE;IAWlB;;OAEG;IACH,qBAAqB,CACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,eAAe,EACxB,KAAK,GAAE,MAAW,GACjB,aAAa,EAAE;IAWlB;;OAEG;IACH,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,aAAa,EAAE;IAW5E;;OAEG;IACH,uBAAuB,CACrB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,aAAa,EAAE;IAYlB;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG;QACnC,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACrC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAClC,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;QACtB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,aAAa,EAAE,MAAM,CAAC;KACvB;IAsED;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,aAAa,EAAE;IAWxE;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,aAAa,EAAE;IAWzE;;OAEG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,EAAE;IAUvD;;OAEG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAUtD;;OAEG;IACH,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG;QAC5C,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;KACzB;CA4CF"}
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decision tracking and retrieval for agent memory system
|
|
3
|
+
*/
|
|
4
|
+
export class DecisionTracker {
|
|
5
|
+
db;
|
|
6
|
+
constructor(db) {
|
|
7
|
+
this.db = db;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Record a new agent decision
|
|
11
|
+
*/
|
|
12
|
+
recordDecision(input) {
|
|
13
|
+
const signals = input.signals ? JSON.stringify(input.signals) : null;
|
|
14
|
+
const stmt = this.db.prepare(`
|
|
15
|
+
INSERT INTO agent_decisions (
|
|
16
|
+
session_id, decision_type, token_id, symbol, trigger_event,
|
|
17
|
+
reasoning, confidence, amount_usdc, expected_price, signals
|
|
18
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
19
|
+
`);
|
|
20
|
+
const result = stmt.run(input.session_id, input.decision_type, input.token_id, input.symbol, input.trigger_event, input.reasoning, input.confidence || null, input.amount_usdc || null, input.expected_price || null, signals);
|
|
21
|
+
return result.lastInsertRowid;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Update a decision when it's executed
|
|
25
|
+
*/
|
|
26
|
+
markDecisionExecuted(decisionId, tradeId, actualPrice) {
|
|
27
|
+
const stmt = this.db.prepare(`
|
|
28
|
+
UPDATE agent_decisions
|
|
29
|
+
SET executed = 1, trade_id = ?, actual_price = ?
|
|
30
|
+
WHERE id = ?
|
|
31
|
+
`);
|
|
32
|
+
stmt.run(tradeId, actualPrice, decisionId);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Update decision outcome after position is closed
|
|
36
|
+
*/
|
|
37
|
+
updateDecisionOutcome(decisionId, outcome, pnlPercent, notes) {
|
|
38
|
+
const stmt = this.db.prepare(`
|
|
39
|
+
UPDATE agent_decisions
|
|
40
|
+
SET outcome = ?, outcome_pnl_percent = ?, outcome_notes = ?
|
|
41
|
+
WHERE id = ?
|
|
42
|
+
`);
|
|
43
|
+
stmt.run(outcome, pnlPercent, notes || null, decisionId);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get a specific decision by ID
|
|
47
|
+
*/
|
|
48
|
+
getDecision(decisionId) {
|
|
49
|
+
const stmt = this.db.prepare(`SELECT * FROM agent_decisions WHERE id = ?`);
|
|
50
|
+
return stmt.get(decisionId) || null;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get recent decisions for a session
|
|
54
|
+
*/
|
|
55
|
+
getRecentDecisions(sessionId, limit = 10) {
|
|
56
|
+
const stmt = this.db.prepare(`
|
|
57
|
+
SELECT * FROM agent_decisions
|
|
58
|
+
WHERE session_id = ?
|
|
59
|
+
ORDER BY timestamp DESC
|
|
60
|
+
LIMIT ?
|
|
61
|
+
`);
|
|
62
|
+
return stmt.all(sessionId, limit);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get decisions for a specific token
|
|
66
|
+
*/
|
|
67
|
+
getTokenDecisions(sessionId, tokenId) {
|
|
68
|
+
const stmt = this.db.prepare(`
|
|
69
|
+
SELECT * FROM agent_decisions
|
|
70
|
+
WHERE session_id = ? AND token_id = ?
|
|
71
|
+
ORDER BY timestamp DESC
|
|
72
|
+
`);
|
|
73
|
+
return stmt.all(sessionId, tokenId);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get decisions by type (buy, sell, skip, hold)
|
|
77
|
+
*/
|
|
78
|
+
getDecisionsByType(sessionId, decisionType, limit = 50) {
|
|
79
|
+
const stmt = this.db.prepare(`
|
|
80
|
+
SELECT * FROM agent_decisions
|
|
81
|
+
WHERE session_id = ? AND decision_type = ?
|
|
82
|
+
ORDER BY timestamp DESC
|
|
83
|
+
LIMIT ?
|
|
84
|
+
`);
|
|
85
|
+
return stmt.all(sessionId, decisionType, limit);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Get decisions by outcome (profitable, loss, etc.)
|
|
89
|
+
*/
|
|
90
|
+
getDecisionsByOutcome(sessionId, outcome, limit = 50) {
|
|
91
|
+
const stmt = this.db.prepare(`
|
|
92
|
+
SELECT * FROM agent_decisions
|
|
93
|
+
WHERE session_id = ? AND outcome = ?
|
|
94
|
+
ORDER BY timestamp DESC
|
|
95
|
+
LIMIT ?
|
|
96
|
+
`);
|
|
97
|
+
return stmt.all(sessionId, outcome, limit);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Get all executed decisions (trades that were actually made)
|
|
101
|
+
*/
|
|
102
|
+
getExecutedDecisions(sessionId, limit = 50) {
|
|
103
|
+
const stmt = this.db.prepare(`
|
|
104
|
+
SELECT * FROM agent_decisions
|
|
105
|
+
WHERE session_id = ? AND executed = 1
|
|
106
|
+
ORDER BY timestamp DESC
|
|
107
|
+
LIMIT ?
|
|
108
|
+
`);
|
|
109
|
+
return stmt.all(sessionId, limit);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Get decisions in a date range
|
|
113
|
+
*/
|
|
114
|
+
getDecisionsByDateRange(sessionId, startDate, endDate) {
|
|
115
|
+
const stmt = this.db.prepare(`
|
|
116
|
+
SELECT * FROM agent_decisions
|
|
117
|
+
WHERE session_id = ?
|
|
118
|
+
AND timestamp >= ?
|
|
119
|
+
AND timestamp <= ?
|
|
120
|
+
ORDER BY timestamp DESC
|
|
121
|
+
`);
|
|
122
|
+
return stmt.all(sessionId, startDate, endDate);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Get decision statistics
|
|
126
|
+
*/
|
|
127
|
+
getDecisionStats(sessionId) {
|
|
128
|
+
// Total count
|
|
129
|
+
const totalResult = this.db.prepare(`
|
|
130
|
+
SELECT COUNT(*) as count FROM agent_decisions WHERE session_id = ?
|
|
131
|
+
`).get(sessionId);
|
|
132
|
+
// By decision type
|
|
133
|
+
const byTypeResult = this.db.prepare(`
|
|
134
|
+
SELECT decision_type, COUNT(*) as count
|
|
135
|
+
FROM agent_decisions
|
|
136
|
+
WHERE session_id = ?
|
|
137
|
+
GROUP BY decision_type
|
|
138
|
+
`).all(sessionId);
|
|
139
|
+
const byType = {};
|
|
140
|
+
for (const { decision_type, count } of byTypeResult) {
|
|
141
|
+
byType[decision_type] = count;
|
|
142
|
+
}
|
|
143
|
+
// By outcome
|
|
144
|
+
const byOutcomeResult = this.db.prepare(`
|
|
145
|
+
SELECT outcome, COUNT(*) as count
|
|
146
|
+
FROM agent_decisions
|
|
147
|
+
WHERE session_id = ? AND outcome IS NOT NULL
|
|
148
|
+
GROUP BY outcome
|
|
149
|
+
`).all(sessionId);
|
|
150
|
+
const byOutcome = {};
|
|
151
|
+
for (const { outcome, count } of byOutcomeResult) {
|
|
152
|
+
byOutcome[outcome] = count;
|
|
153
|
+
}
|
|
154
|
+
// Execution rate
|
|
155
|
+
const executedResult = this.db.prepare(`
|
|
156
|
+
SELECT COUNT(*) as count FROM agent_decisions
|
|
157
|
+
WHERE session_id = ? AND executed = 1
|
|
158
|
+
`).get(sessionId);
|
|
159
|
+
const executionRate = totalResult.count > 0 ? executedResult.count / totalResult.count : 0;
|
|
160
|
+
// Average confidence
|
|
161
|
+
const avgConfidenceResult = this.db.prepare(`
|
|
162
|
+
SELECT AVG(confidence) as avg FROM agent_decisions
|
|
163
|
+
WHERE session_id = ? AND confidence IS NOT NULL
|
|
164
|
+
`).get(sessionId);
|
|
165
|
+
const avgConfidence = avgConfidenceResult.avg || 0;
|
|
166
|
+
// Successful decisions (profitable outcome)
|
|
167
|
+
const successfulResult = this.db.prepare(`
|
|
168
|
+
SELECT COUNT(*) as count FROM agent_decisions
|
|
169
|
+
WHERE session_id = ? AND outcome = 'profitable'
|
|
170
|
+
`).get(sessionId);
|
|
171
|
+
// Average P&L percent
|
|
172
|
+
const avgPnlResult = this.db.prepare(`
|
|
173
|
+
SELECT AVG(outcome_pnl_percent) as avg FROM agent_decisions
|
|
174
|
+
WHERE session_id = ? AND outcome_pnl_percent IS NOT NULL
|
|
175
|
+
`).get(sessionId);
|
|
176
|
+
const avgPnlPercent = avgPnlResult.avg || 0;
|
|
177
|
+
return {
|
|
178
|
+
total: totalResult.count,
|
|
179
|
+
byType: byType,
|
|
180
|
+
byOutcome,
|
|
181
|
+
executionRate,
|
|
182
|
+
avgConfidence,
|
|
183
|
+
successfulDecisions: successfulResult.count,
|
|
184
|
+
avgPnlPercent,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Get best performing decisions (highest P&L)
|
|
189
|
+
*/
|
|
190
|
+
getBestDecisions(sessionId, limit = 10) {
|
|
191
|
+
const stmt = this.db.prepare(`
|
|
192
|
+
SELECT * FROM agent_decisions
|
|
193
|
+
WHERE session_id = ? AND outcome_pnl_percent IS NOT NULL
|
|
194
|
+
ORDER BY outcome_pnl_percent DESC
|
|
195
|
+
LIMIT ?
|
|
196
|
+
`);
|
|
197
|
+
return stmt.all(sessionId, limit);
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Get worst performing decisions (lowest P&L)
|
|
201
|
+
*/
|
|
202
|
+
getWorstDecisions(sessionId, limit = 10) {
|
|
203
|
+
const stmt = this.db.prepare(`
|
|
204
|
+
SELECT * FROM agent_decisions
|
|
205
|
+
WHERE session_id = ? AND outcome_pnl_percent IS NOT NULL
|
|
206
|
+
ORDER BY outcome_pnl_percent ASC
|
|
207
|
+
LIMIT ?
|
|
208
|
+
`);
|
|
209
|
+
return stmt.all(sessionId, limit);
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Get pending decisions (executed but outcome not yet determined)
|
|
213
|
+
*/
|
|
214
|
+
getPendingDecisions(sessionId) {
|
|
215
|
+
const stmt = this.db.prepare(`
|
|
216
|
+
SELECT * FROM agent_decisions
|
|
217
|
+
WHERE session_id = ? AND executed = 1 AND outcome IS NULL
|
|
218
|
+
ORDER BY timestamp DESC
|
|
219
|
+
`);
|
|
220
|
+
return stmt.all(sessionId);
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Link a decision to a trade
|
|
224
|
+
*/
|
|
225
|
+
linkToTrade(decisionId, tradeId) {
|
|
226
|
+
const stmt = this.db.prepare(`
|
|
227
|
+
UPDATE agent_decisions
|
|
228
|
+
SET trade_id = ?
|
|
229
|
+
WHERE id = ?
|
|
230
|
+
`);
|
|
231
|
+
stmt.run(tradeId, decisionId);
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Get decision accuracy (for skip decisions, check if token price went down)
|
|
235
|
+
*/
|
|
236
|
+
calculateDecisionAccuracy(sessionId) {
|
|
237
|
+
// Buy accuracy: % of buys that were profitable
|
|
238
|
+
const buyStats = this.db.prepare(`
|
|
239
|
+
SELECT
|
|
240
|
+
COUNT(*) as total,
|
|
241
|
+
SUM(CASE WHEN outcome = 'profitable' THEN 1 ELSE 0 END) as profitable
|
|
242
|
+
FROM agent_decisions
|
|
243
|
+
WHERE session_id = ? AND decision_type = 'buy' AND outcome IS NOT NULL
|
|
244
|
+
`).get(sessionId);
|
|
245
|
+
const buyAccuracy = buyStats.total > 0 ? buyStats.profitable / buyStats.total : 0;
|
|
246
|
+
// Sell accuracy: % of sells that locked in profit
|
|
247
|
+
const sellStats = this.db.prepare(`
|
|
248
|
+
SELECT
|
|
249
|
+
COUNT(*) as total,
|
|
250
|
+
SUM(CASE WHEN outcome_pnl_percent > 0 THEN 1 ELSE 0 END) as profitable
|
|
251
|
+
FROM agent_decisions
|
|
252
|
+
WHERE session_id = ? AND decision_type = 'sell' AND outcome_pnl_percent IS NOT NULL
|
|
253
|
+
`).get(sessionId);
|
|
254
|
+
const sellAccuracy = sellStats.total > 0 ? sellStats.profitable / sellStats.total : 0;
|
|
255
|
+
// Skip accuracy: for now just 0, would need price tracking
|
|
256
|
+
const skipAccuracy = 0;
|
|
257
|
+
// Overall accuracy
|
|
258
|
+
const overallStats = this.db.prepare(`
|
|
259
|
+
SELECT
|
|
260
|
+
COUNT(*) as total,
|
|
261
|
+
SUM(CASE WHEN outcome = 'profitable' THEN 1 ELSE 0 END) as profitable
|
|
262
|
+
FROM agent_decisions
|
|
263
|
+
WHERE session_id = ? AND outcome IS NOT NULL
|
|
264
|
+
`).get(sessionId);
|
|
265
|
+
const overallAccuracy = overallStats.total > 0 ? overallStats.profitable / overallStats.total : 0;
|
|
266
|
+
return {
|
|
267
|
+
buyAccuracy,
|
|
268
|
+
sellAccuracy,
|
|
269
|
+
skipAccuracy,
|
|
270
|
+
overallAccuracy,
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=decision-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decision-tracker.js","sourceRoot":"","sources":["../../../src/agent/memory/decision-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-manager.d.ts","sourceRoot":"","sources":["../../../src/agent/memory/memory-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAI3C,OAAO,KAAK,EACV,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,aAAa,EACb,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,qBAAa,aAAa;IAKZ,OAAO,CAAC,EAAE;IAJtB,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,cAAc,CAA6B;gBAE/B,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAMzC;;;;OAIG;IACH,6BAA6B,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,GAAE,OAAc,GAAG,MAAM;IAI1F;;OAEG;IACH,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,YAAY,EAAE;IAI9D;;OAEG;IACH,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,GAAE,OAAe;IAI3E;;OAEG;IACH,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAItE;;OAEG;IACH,yBAAyB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAIvD;;OAEG;IACH,wBAAwB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAItD;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM;IAIlC;;OAEG;IACG,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC;IAczE;;OAEG;IACG,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3D;;OAEG;IACG,oBAAoB,CACxB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IAIhB;;OAEG;IACG,qBAAqB,CACzB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,MAAM,GAAG,WAAW,EAChF,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC;IAIhB;;OAEG;IACG,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7E;;OAEG;IACG,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAIxF;;OAEG;IACG,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAI5F;;OAEG;IACG,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;;;;IAUxD;;OAEG;IACG,oBAAoB,CACxB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAwBjC;;OAEG;IACG,gBAAgB,CAAC,SAAS,EAAE,MAAM;;;;;;;;;IAIxC;;OAEG;IACG,oBAAoB,CAAC,SAAS,EAAE,MAAM;;;;;;;IAI5C;;OAEG;IACH,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,MAAM;CA8B/D"}
|