@aiaiaichain/agent 0.1.6 → 0.1.7
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/dist/api/ExtensionAPI.d.ts +0 -1
- package/dist/api/ExtensionAPI.js +3 -7
- package/dist/api/Registry.d.ts +0 -1
- package/dist/api/Registry.js +54 -57
- package/dist/cli.d.ts +0 -1
- package/dist/cli.js +683 -686
- package/dist/core/AgentDir.d.ts +1 -1
- package/dist/core/AgentDir.js +45 -39
- package/dist/core/ChainConfig.d.ts +0 -1
- package/dist/core/ChainConfig.js +51 -55
- package/dist/core/EnvLoader.d.ts +4 -1
- package/dist/core/EnvLoader.js +97 -84
- package/dist/core/SystemMonitor.d.ts +0 -1
- package/dist/core/SystemMonitor.js +72 -85
- package/dist/index.d.ts +0 -1
- package/dist/index.js +19 -26
- package/dist/loader.d.ts +0 -1
- package/dist/loader.js +64 -67
- package/dist/mcp/entry.d.ts +0 -1
- package/dist/mcp/entry.js +3 -6
- package/dist/mcp/server.d.ts +0 -1
- package/dist/mcp/server.js +152 -156
- package/dist/models/CostTracker.d.ts +0 -1
- package/dist/models/CostTracker.js +58 -61
- package/dist/models/ModelRegistry.d.ts +0 -1
- package/dist/models/ModelRegistry.js +195 -155
- package/dist/providers/ProviderRegistry.d.ts +0 -1
- package/dist/providers/ProviderRegistry.js +33 -36
- package/dist/runner/AgentRunner.d.ts +0 -1
- package/dist/runner/AgentRunner.js +180 -184
- package/dist/runner/ModelClient.d.ts +0 -1
- package/dist/runner/ModelClient.js +133 -134
- package/dist/runner/SwarmRouter.d.ts +0 -1
- package/dist/runner/SwarmRouter.js +18 -22
- package/dist/runner/ToolDispatcher.d.ts +0 -1
- package/dist/runner/ToolDispatcher.js +30 -33
- package/dist/scheduler/AgentScheduler.d.ts +0 -1
- package/dist/scheduler/AgentScheduler.js +99 -103
- package/dist/session/ContextStore.d.ts +1 -1
- package/dist/session/ContextStore.js +76 -78
- package/dist/session/GoalManager.d.ts +0 -1
- package/dist/session/GoalManager.js +96 -100
- package/dist/session/MemoryStore.d.ts +2 -1
- package/dist/session/MemoryStore.js +108 -87
- package/dist/session/SessionManager.d.ts +5 -4
- package/dist/session/SessionManager.js +83 -62
- package/dist/session/SessionStore.d.ts +0 -1
- package/dist/session/SessionStore.js +112 -116
- package/dist/setup/SetupWizard.d.ts +0 -1
- package/dist/setup/SetupWizard.js +61 -64
- package/dist/tools/CrossTools.d.ts +0 -1
- package/dist/tools/CrossTools.js +140 -144
- package/dist/tools/GmgnIntegration.d.ts +0 -1
- package/dist/tools/GmgnIntegration.js +220 -230
- package/dist/tools/MarketSentiment.d.ts +0 -1
- package/dist/tools/MarketSentiment.js +213 -195
- package/dist/tools/NewsSentiment.d.ts +0 -1
- package/dist/tools/NewsSentiment.js +126 -130
- package/dist/tools/PriceFeed.d.ts +6 -1
- package/dist/tools/PriceFeed.js +201 -133
- package/dist/tools/TechnicalAnalysis.d.ts +1 -2
- package/dist/tools/TechnicalAnalysis.js +248 -216
- package/dist/tools/TechnicalAnalysis.worker.d.ts +25 -0
- package/dist/tools/TechnicalAnalysis.worker.js +92 -0
- package/dist/tools/TokenCalendar.d.ts +0 -1
- package/dist/tools/TokenCalendar.js +63 -68
- package/dist/tools/TokenSecurityScanner.d.ts +0 -1
- package/dist/tools/TokenSecurityScanner.js +93 -96
- package/dist/tools/TransactionSim.d.ts +0 -1
- package/dist/tools/TransactionSim.js +65 -71
- package/dist/tui/App.d.ts +0 -1
- package/dist/tui/App.js +895 -824
- package/dist/tui/ModelSelector.d.ts +0 -1
- package/dist/tui/ModelSelector.js +46 -49
- package/dist/tui/REPL.d.ts +0 -1
- package/dist/tui/REPL.js +222 -210
- package/dist/tui/Sparkline.d.ts +0 -1
- package/dist/tui/Sparkline.js +36 -37
- package/dist/tui/StatusBar.d.ts +0 -1
- package/dist/tui/StatusBar.js +9 -10
- package/dist/tui/ThemePresets.d.ts +0 -1
- package/dist/tui/ThemePresets.js +99 -103
- package/dist/tui/theme.d.ts +0 -1
- package/dist/tui/theme.js +50 -31
- package/dist/util/clipboard.d.ts +0 -1
- package/dist/util/clipboard.js +16 -20
- package/dist/util/commandSuggest.d.ts +0 -1
- package/dist/util/commandSuggest.js +34 -38
- package/dist/util/confirmation.d.ts +0 -1
- package/dist/util/confirmation.js +8 -11
- package/dist/util/errorHandler.d.ts +0 -1
- package/dist/util/errorHandler.js +20 -23
- package/dist/util/errors.d.ts +59 -0
- package/dist/util/errors.js +93 -0
- package/dist/util/logger.d.ts +0 -1
- package/dist/util/logger.js +30 -33
- package/dist/util/processManager.d.ts +0 -1
- package/dist/util/processManager.js +33 -36
- package/dist/util/resilientFetch.d.ts +6 -1
- package/dist/util/resilientFetch.js +134 -80
- package/dist/util/responseCache.d.ts +0 -1
- package/dist/util/responseCache.js +36 -45
- package/dist/util/rpc.d.ts +16 -0
- package/dist/util/rpc.js +69 -0
- package/dist/util/safeLog.d.ts +0 -1
- package/dist/util/safeLog.js +52 -53
- package/dist/util/scheduler.d.ts +0 -1
- package/dist/util/scheduler.js +53 -58
- package/dist/util/webhooks.d.ts +0 -1
- package/dist/util/webhooks.js +54 -58
- package/dist/wallet/ActionFeed.d.ts +0 -1
- package/dist/wallet/ActionFeed.js +189 -200
- package/dist/wallet/AgentWallet.d.ts +7 -8
- package/dist/wallet/AgentWallet.js +117 -144
- package/dist/wallet/ProfitTracker.d.ts +0 -1
- package/dist/wallet/ProfitTracker.js +71 -74
- package/package.json +11 -6
- package/scripts/build-esbuild.mjs +40 -0
- package/scripts/bundle-dts.mjs +58 -0
- package/scripts/minify.mjs +44 -0
- package/scripts/postinstall.js +27 -0
|
@@ -1,128 +1,124 @@
|
|
|
1
|
-
|
|
2
|
-
* SessionStore — saves/loads conversation sessions.
|
|
3
|
-
* Sessions stored as JSON in ~/.aiaiai/sessions/
|
|
4
|
-
*/
|
|
1
|
+
|
|
5
2
|
import { existsSync, readFileSync, writeFileSync, mkdirSync, readdirSync, unlinkSync } from 'node:fs';
|
|
6
3
|
import { resolve } from 'node:path';
|
|
7
4
|
import { homedir } from 'node:os';
|
|
8
5
|
import { logger } from '../util/logger.js';
|
|
9
6
|
const SESSIONS_DIR = resolve(homedir(), '.aiaiai', 'sessions');
|
|
10
7
|
function ensureDir() {
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
if (!existsSync(SESSIONS_DIR))
|
|
9
|
+
mkdirSync(SESSIONS_DIR, { recursive: true });
|
|
13
10
|
}
|
|
14
11
|
function sessionId() {
|
|
15
|
-
|
|
12
|
+
return `session-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
|
|
16
13
|
}
|
|
17
14
|
export class SessionStore {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
15
|
+
currentId;
|
|
16
|
+
autoSaveInterval = null;
|
|
17
|
+
constructor() {
|
|
18
|
+
ensureDir();
|
|
19
|
+
this.currentId = sessionId();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
startAutoSave(getMessages) {
|
|
23
|
+
this.stopAutoSave();
|
|
24
|
+
this.autoSaveInterval = setInterval(() => {
|
|
25
|
+
const msgs = getMessages();
|
|
26
|
+
if (msgs.length > 0)
|
|
27
|
+
this.save(msgs, 'current');
|
|
28
|
+
}, 30_000);
|
|
29
|
+
}
|
|
30
|
+
stopAutoSave() {
|
|
31
|
+
if (this.autoSaveInterval) {
|
|
32
|
+
clearInterval(this.autoSaveInterval);
|
|
33
|
+
this.autoSaveInterval = null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
save(messages, title) {
|
|
38
|
+
ensureDir();
|
|
39
|
+
const id = this.currentId;
|
|
40
|
+
const existing = this.load(id);
|
|
41
|
+
const session = {
|
|
42
|
+
id,
|
|
43
|
+
title: title || existing?.title || this.generateTitle(messages),
|
|
44
|
+
createdAt: existing?.createdAt || Date.now(),
|
|
45
|
+
updatedAt: Date.now(),
|
|
46
|
+
messages,
|
|
47
|
+
model: process.env.DEFAULT_MODEL || 'unknown',
|
|
48
|
+
chain: 'solana',
|
|
49
|
+
};
|
|
50
|
+
try {
|
|
51
|
+
writeFileSync(resolve(SESSIONS_DIR, `${id}.json`), JSON.stringify(session, null, 2), 'utf-8');
|
|
52
|
+
}
|
|
53
|
+
catch { }
|
|
54
|
+
return id;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
load(id) {
|
|
58
|
+
try {
|
|
59
|
+
const path = resolve(SESSIONS_DIR, `${id}.json`);
|
|
60
|
+
if (!existsSync(path))
|
|
61
|
+
return null;
|
|
62
|
+
return JSON.parse(readFileSync(path, 'utf-8'));
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
logger.debug('SessionStore', 'Failed to load session', { error: error.message });
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
list() {
|
|
71
|
+
ensureDir();
|
|
72
|
+
try {
|
|
73
|
+
const files = readdirSync(SESSIONS_DIR).filter(f => f.endsWith('.json'));
|
|
74
|
+
const sessions = [];
|
|
75
|
+
for (const file of files) {
|
|
76
|
+
try {
|
|
77
|
+
const data = JSON.parse(readFileSync(resolve(SESSIONS_DIR, file), 'utf-8'));
|
|
78
|
+
sessions.push({
|
|
79
|
+
id: data.id,
|
|
80
|
+
title: data.title,
|
|
81
|
+
createdAt: data.createdAt,
|
|
82
|
+
updatedAt: data.updatedAt,
|
|
83
|
+
messageCount: data.messages.length,
|
|
84
|
+
model: data.model,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
logger.debug('SessionStore', 'Skipped bad session file', { error: error.message });
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return sessions.sort((a, b) => b.updatedAt - a.updatedAt);
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
logger.warn('SessionStore', 'Failed to list sessions', { error: error.message });
|
|
95
|
+
return [];
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
delete(id) {
|
|
100
|
+
try {
|
|
101
|
+
unlinkSync(resolve(SESSIONS_DIR, `${id}.json`));
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
setCurrentId(id) {
|
|
110
|
+
this.currentId = id;
|
|
111
|
+
}
|
|
112
|
+
getCurrentId() {
|
|
113
|
+
return this.currentId;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
generateTitle(messages) {
|
|
117
|
+
const firstUser = messages.find(m => m.role === 'user');
|
|
118
|
+
if (!firstUser)
|
|
119
|
+
return 'New Session';
|
|
120
|
+
const text = firstUser.content.trim();
|
|
121
|
+
return text.length > 40 ? text.slice(0, 37) + '…' : text;
|
|
122
|
+
}
|
|
126
123
|
}
|
|
127
124
|
export const sessionStore = new SessionStore();
|
|
128
|
-
//# sourceMappingURL=SessionStore.js.map
|
|
@@ -1,71 +1,68 @@
|
|
|
1
|
-
|
|
2
|
-
* SetupWizard — minimal first-run setup. Asks for OpenRouter API key.
|
|
3
|
-
*/
|
|
1
|
+
|
|
4
2
|
import { existsSync, readFileSync, writeFileSync, mkdirSync, chmodSync } from "node:fs";
|
|
5
3
|
import { resolve } from "node:path";
|
|
6
4
|
import { homedir } from "node:os";
|
|
7
5
|
import * as readline from "node:readline";
|
|
8
6
|
export class SetupWizard {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
7
|
+
home;
|
|
8
|
+
envPath;
|
|
9
|
+
constructor() {
|
|
10
|
+
this.home = process.env.AIAIAI_HOME ?? resolve(homedir(), ".aiaiai");
|
|
11
|
+
this.envPath = resolve(this.home, ".env");
|
|
12
|
+
}
|
|
13
|
+
ask(question, defaultValue = "") {
|
|
14
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
15
|
+
return new Promise(res => {
|
|
16
|
+
rl.question(` ${question}${defaultValue ? ` [${defaultValue}]` : ""}: `, answer => {
|
|
17
|
+
rl.close();
|
|
18
|
+
res(answer.trim() || defaultValue);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
read(key) {
|
|
23
|
+
if (!existsSync(this.envPath))
|
|
24
|
+
return "";
|
|
25
|
+
const m = new RegExp(`^${key}=(.*)$`, "m").exec(readFileSync(this.envPath, "utf-8"));
|
|
26
|
+
return m ? m[1] : "";
|
|
27
|
+
}
|
|
28
|
+
write(key, value) {
|
|
29
|
+
const content = existsSync(this.envPath) ? readFileSync(this.envPath, "utf-8") : "";
|
|
30
|
+
const re = new RegExp(`^${key}=.*$`, "m");
|
|
31
|
+
const line = `${key}=${value}`;
|
|
32
|
+
writeFileSync(this.envPath, re.test(content) ? content.replace(re, line) : content + (content.endsWith("\n") || !content ? "" : "\n") + line + "\n");
|
|
33
|
+
try {
|
|
34
|
+
chmodSync(this.envPath, 0o600);
|
|
35
|
+
}
|
|
36
|
+
catch { }
|
|
37
|
+
}
|
|
38
|
+
async run() {
|
|
39
|
+
console.log(`
|
|
40
|
+
╔══════════════════════════════════════════════════╗
|
|
41
|
+
║ AIAIAI Chain Agent — Setup ║
|
|
42
|
+
║ $AIAIAI · Solana-native AI agent ║
|
|
43
|
+
╚══════════════════════════════════════════════════╝
|
|
46
44
|
`);
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
45
|
+
if (!existsSync(this.home))
|
|
46
|
+
mkdirSync(this.home, { recursive: true });
|
|
47
|
+
console.log(" Required configuration\n");
|
|
48
|
+
const existingKey = this.read("OPENROUTER_API_KEY") || process.env.OPENROUTER_API_KEY || "";
|
|
49
|
+
const key = await this.ask(`OpenRouter API key (https://openrouter.ai/keys)${existingKey ? " [set, Enter to keep]" : ""}`, "");
|
|
50
|
+
if (key)
|
|
51
|
+
this.write("OPENROUTER_API_KEY", key);
|
|
52
|
+
else if (!existingKey) {
|
|
53
|
+
console.log("\n ⚠️ OpenRouter API key is required. Get one at https://openrouter.ai/keys\n");
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
console.log("\n Optional configuration\n");
|
|
57
|
+
const existingRpc = this.read("SOLANA_RPC_URL");
|
|
58
|
+
const rpc = await this.ask("Solana RPC URL", existingRpc || "https://api.mainnet-beta.solana.com");
|
|
59
|
+
if (rpc)
|
|
60
|
+
this.write("SOLANA_RPC_URL", rpc);
|
|
61
|
+
const existingModel = this.read("DEFAULT_MODEL");
|
|
62
|
+
const model = await this.ask("Default model (optional, e.g. openai/gpt-4o)", existingModel || "");
|
|
63
|
+
if (model)
|
|
64
|
+
this.write("DEFAULT_MODEL", model);
|
|
65
|
+
console.log(`\n ✓ Config saved → ${this.envPath}`);
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
70
68
|
}
|
|
71
|
-
//# sourceMappingURL=SetupWizard.js.map
|
|
@@ -49,4 +49,3 @@ export declare const COLD_WALLET = "A11iZoqEt6hU7HyggqC67ee4AtYmaJjwKCvJLerJRV2J
|
|
|
49
49
|
export declare const ACTION_WALLET = "BygDYM1ZXLQNC1HXLhnd1rHZ7E5XjioqT3vPjJFfjnU2";
|
|
50
50
|
export declare const DEPOSIT_WALLET = "FBMDYpG9WXKy4SgxuATQdB2sCyzHsJWPrEr45z3TgL2e";
|
|
51
51
|
export {};
|
|
52
|
-
//# sourceMappingURL=CrossTools.d.ts.map
|