@thelapyae/geniclaw 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +127 -0
- package/bin/geniclaw.js +323 -0
- package/dist/config-manager.d.ts +20 -0
- package/dist/config-manager.d.ts.map +1 -0
- package/dist/config-manager.js +52 -0
- package/dist/config-manager.js.map +1 -0
- package/dist/migrate-config.d.ts +2 -0
- package/dist/migrate-config.d.ts.map +1 -0
- package/dist/migrate-config.js +57 -0
- package/dist/migrate-config.js.map +1 -0
- package/dist/queue-processor.d.ts +7 -0
- package/dist/queue-processor.d.ts.map +1 -0
- package/dist/queue-processor.js +311 -0
- package/dist/queue-processor.js.map +1 -0
- package/dist/session-manager.d.ts +15 -0
- package/dist/session-manager.d.ts.map +1 -0
- package/dist/session-manager.js +84 -0
- package/dist/session-manager.js.map +1 -0
- package/dist/setup.d.ts +2 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +67 -0
- package/dist/setup.js.map +1 -0
- package/dist/telegram-client.d.ts +7 -0
- package/dist/telegram-client.d.ts.map +1 -0
- package/dist/telegram-client.js +229 -0
- package/dist/telegram-client.js.map +1 -0
- package/dist/whatsapp-client.d.ts +7 -0
- package/dist/whatsapp-client.d.ts.map +1 -0
- package/dist/whatsapp-client.js +173 -0
- package/dist/whatsapp-client.js.map +1 -0
- package/geniclaw.sh +388 -0
- package/heartbeat-cron.sh +71 -0
- package/package.json +38 -0
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* Queue Processor - Handles messages from all channels
|
|
5
|
+
* Processes one message at a time to avoid race conditions
|
|
6
|
+
*/
|
|
7
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
9
|
+
};
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
const fs_1 = __importDefault(require("fs"));
|
|
12
|
+
const path_1 = __importDefault(require("path"));
|
|
13
|
+
const os_1 = __importDefault(require("os"));
|
|
14
|
+
const generative_ai_1 = require("@google/generative-ai");
|
|
15
|
+
const dotenv_1 = __importDefault(require("dotenv"));
|
|
16
|
+
const config_manager_1 = require("./config-manager");
|
|
17
|
+
const session_manager_1 = require("./session-manager");
|
|
18
|
+
// Load environment variables
|
|
19
|
+
const SCRIPT_DIR = path_1.default.resolve(__dirname, '..');
|
|
20
|
+
const GENICLAW_WORK_DIR = process.env.GENICLAW_WORK_DIR || path_1.default.join(os_1.default.homedir(), '.geniclaw');
|
|
21
|
+
const GENICLAW_ENV_FILE = process.env.GENICLAW_ENV_FILE || path_1.default.join(GENICLAW_WORK_DIR, '.env');
|
|
22
|
+
dotenv_1.default.config({ path: GENICLAW_ENV_FILE });
|
|
23
|
+
const QUEUE_INCOMING = path_1.default.join(GENICLAW_WORK_DIR, 'queue/incoming');
|
|
24
|
+
const QUEUE_OUTGOING = path_1.default.join(GENICLAW_WORK_DIR, 'queue/outgoing');
|
|
25
|
+
const QUEUE_PROCESSING = path_1.default.join(GENICLAW_WORK_DIR, 'queue/processing');
|
|
26
|
+
const LOG_FILE = path_1.default.join(GENICLAW_WORK_DIR, 'logs/queue.log');
|
|
27
|
+
const RESET_FLAG = path_1.default.join(GENICLAW_WORK_DIR, 'reset_flag');
|
|
28
|
+
// Ensure directories exist
|
|
29
|
+
[QUEUE_INCOMING, QUEUE_OUTGOING, QUEUE_PROCESSING, path_1.default.dirname(LOG_FILE)].forEach(dir => {
|
|
30
|
+
if (!fs_1.default.existsSync(dir)) {
|
|
31
|
+
fs_1.default.mkdirSync(dir, { recursive: true });
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
// Logger
|
|
35
|
+
function log(level, message) {
|
|
36
|
+
const timestamp = new Date().toISOString();
|
|
37
|
+
const logMessage = `[${timestamp}] [${level}] ${message}\n`;
|
|
38
|
+
console.log(logMessage.trim());
|
|
39
|
+
fs_1.default.appendFileSync(LOG_FILE, logMessage);
|
|
40
|
+
}
|
|
41
|
+
// Initialize Gemini
|
|
42
|
+
let genAI;
|
|
43
|
+
const config = config_manager_1.ConfigManager.load();
|
|
44
|
+
const MODEL_NAME = config.geminiModel || process.env.GEMINI_MODEL || 'gemini-2.5-flash';
|
|
45
|
+
// Default conservative limit, can be increased based on model
|
|
46
|
+
const MAX_HISTORY_TOKENS = 100000;
|
|
47
|
+
async function initGemini() {
|
|
48
|
+
const config = config_manager_1.ConfigManager.load();
|
|
49
|
+
const API_KEY = config.geminiApiKey || process.env.GEMINI_API_KEY;
|
|
50
|
+
if (API_KEY) {
|
|
51
|
+
log('INFO', 'Using Gemini API Key');
|
|
52
|
+
genAI = new generative_ai_1.GoogleGenerativeAI(API_KEY);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
log('INFO', 'GEMINI_API_KEY not found in config or env.');
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
class HistoryManager {
|
|
60
|
+
static getHistoryPath() {
|
|
61
|
+
const sessionPath = session_manager_1.SessionManager.getActiveSessionPath();
|
|
62
|
+
return path_1.default.join(sessionPath, 'history.json');
|
|
63
|
+
}
|
|
64
|
+
static load() {
|
|
65
|
+
const historyFile = this.getHistoryPath();
|
|
66
|
+
if (fs_1.default.existsSync(historyFile)) {
|
|
67
|
+
try {
|
|
68
|
+
return JSON.parse(fs_1.default.readFileSync(historyFile, 'utf8'));
|
|
69
|
+
}
|
|
70
|
+
catch (e) {
|
|
71
|
+
log('ERROR', `Failed to load history: ${e.message}`);
|
|
72
|
+
return [];
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return [];
|
|
76
|
+
}
|
|
77
|
+
static save(history) {
|
|
78
|
+
const historyFile = this.getHistoryPath();
|
|
79
|
+
try {
|
|
80
|
+
fs_1.default.writeFileSync(historyFile, JSON.stringify(history, null, 2));
|
|
81
|
+
}
|
|
82
|
+
catch (e) {
|
|
83
|
+
log('ERROR', `Failed to save history: ${e.message}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
static clear() {
|
|
87
|
+
const historyFile = this.getHistoryPath();
|
|
88
|
+
if (fs_1.default.existsSync(historyFile)) {
|
|
89
|
+
fs_1.default.unlinkSync(historyFile);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// Memory Management
|
|
94
|
+
async function manageMemory(model, history, newContent) {
|
|
95
|
+
try {
|
|
96
|
+
// Calculate tokens
|
|
97
|
+
// We need to approximation or use countTokens if possible.
|
|
98
|
+
// To count tokens correctly, we need to construct the request.
|
|
99
|
+
// We'll approximate for speed or count if API allows.
|
|
100
|
+
// Construct full history for counting
|
|
101
|
+
const fullContent = [
|
|
102
|
+
...history,
|
|
103
|
+
{ role: 'user', parts: [{ text: newContent }] }
|
|
104
|
+
];
|
|
105
|
+
// Format for countTokens
|
|
106
|
+
const contents = fullContent.map(item => ({
|
|
107
|
+
role: item.role,
|
|
108
|
+
parts: item.parts
|
|
109
|
+
}));
|
|
110
|
+
const { totalTokens } = await model.countTokens({ contents });
|
|
111
|
+
log('INFO', `Token usage: ${totalTokens} / ${MAX_HISTORY_TOKENS}`);
|
|
112
|
+
if (totalTokens > MAX_HISTORY_TOKENS) {
|
|
113
|
+
log('WARN', `Context limit exceeded (${totalTokens}). Pruning history...`);
|
|
114
|
+
// Sliding Window: Remove oldest messages until we fit.
|
|
115
|
+
// Always keep latest message (newContent).
|
|
116
|
+
// Strategy: Remove from index 0 until we fit.
|
|
117
|
+
let prunedHistory = [...history];
|
|
118
|
+
// Safety break
|
|
119
|
+
let attempts = 0;
|
|
120
|
+
while (prunedHistory.length > 0 && attempts < 100) {
|
|
121
|
+
// Remove 2 items (user + model pair) to keep conversation flow, or just 1.
|
|
122
|
+
// Removing 1 might mess up turns if model expects strict user/model alternation?
|
|
123
|
+
// Gemini usually handles it, but pairs are safer.
|
|
124
|
+
prunedHistory.shift();
|
|
125
|
+
const currentContents = [
|
|
126
|
+
...prunedHistory,
|
|
127
|
+
{ role: 'user', parts: [{ text: newContent }] }
|
|
128
|
+
].map(item => ({ role: item.role, parts: item.parts }));
|
|
129
|
+
const { totalTokens: currentTokens } = await model.countTokens({ contents: currentContents });
|
|
130
|
+
if (currentTokens <= MAX_HISTORY_TOKENS) {
|
|
131
|
+
log('INFO', `Pruned to ${currentTokens} tokens.`);
|
|
132
|
+
return prunedHistory;
|
|
133
|
+
}
|
|
134
|
+
attempts++;
|
|
135
|
+
}
|
|
136
|
+
// If we cant fit even with empty history (just new message), we just return empty history
|
|
137
|
+
return [];
|
|
138
|
+
}
|
|
139
|
+
return history;
|
|
140
|
+
}
|
|
141
|
+
catch (e) {
|
|
142
|
+
log('ERROR', `Token counting failed: ${e.message}`);
|
|
143
|
+
return history;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// Process a single message
|
|
147
|
+
async function processMessage(messageFile) {
|
|
148
|
+
const processingFile = path_1.default.join(QUEUE_PROCESSING, path_1.default.basename(messageFile));
|
|
149
|
+
try {
|
|
150
|
+
// Move to processing
|
|
151
|
+
fs_1.default.renameSync(messageFile, processingFile);
|
|
152
|
+
// Read message
|
|
153
|
+
const messageData = JSON.parse(fs_1.default.readFileSync(processingFile, 'utf8'));
|
|
154
|
+
const { channel, sender, message, timestamp, messageId, ...otherFields } = messageData;
|
|
155
|
+
log('INFO', `Processing [${channel}] from ${sender}: ${message.substring(0, 50)}...`);
|
|
156
|
+
// Handle Reset Command
|
|
157
|
+
if (message.trim() === '/reset') {
|
|
158
|
+
log('INFO', 'š Resetting conversation history (User request)');
|
|
159
|
+
HistoryManager.clear();
|
|
160
|
+
const responseData = {
|
|
161
|
+
channel,
|
|
162
|
+
sender,
|
|
163
|
+
message: "Conversation history cleared.",
|
|
164
|
+
originalMessage: message,
|
|
165
|
+
timestamp: Date.now(),
|
|
166
|
+
messageId,
|
|
167
|
+
...otherFields
|
|
168
|
+
};
|
|
169
|
+
const responseFile = path_1.default.join(QUEUE_OUTGOING, `${channel}_${messageId}_${Date.now()}.json`);
|
|
170
|
+
fs_1.default.writeFileSync(responseFile, JSON.stringify(responseData, null, 2));
|
|
171
|
+
fs_1.default.unlinkSync(processingFile);
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
// Handle global reset flag
|
|
175
|
+
const shouldReset = fs_1.default.existsSync(RESET_FLAG);
|
|
176
|
+
if (shouldReset) {
|
|
177
|
+
log('INFO', 'š Resetting conversation history (Flag)');
|
|
178
|
+
HistoryManager.clear();
|
|
179
|
+
fs_1.default.unlinkSync(RESET_FLAG);
|
|
180
|
+
}
|
|
181
|
+
// --- Onboarding & Config ---
|
|
182
|
+
let config = config_manager_1.ConfigManager.load();
|
|
183
|
+
// Prepare System Instruction
|
|
184
|
+
let systemInstruction = "";
|
|
185
|
+
if (config.userName)
|
|
186
|
+
systemInstruction += `User's Name: ${config.userName}\n`;
|
|
187
|
+
if (config.botName)
|
|
188
|
+
systemInstruction += `Your Name: ${config.botName}\n`;
|
|
189
|
+
if (config.botPurpose)
|
|
190
|
+
systemInstruction += `Your Persona/Purpose: ${config.botPurpose}\n`;
|
|
191
|
+
// Get Model
|
|
192
|
+
if (!genAI)
|
|
193
|
+
await initGemini();
|
|
194
|
+
const model = genAI.getGenerativeModel({
|
|
195
|
+
model: MODEL_NAME,
|
|
196
|
+
systemInstruction: systemInstruction ? { role: 'system', parts: [{ text: systemInstruction }] } : undefined,
|
|
197
|
+
safetySettings: [
|
|
198
|
+
{ category: generative_ai_1.HarmCategory.HARM_CATEGORY_HARASSMENT, threshold: generative_ai_1.HarmBlockThreshold.BLOCK_NONE },
|
|
199
|
+
{ category: generative_ai_1.HarmCategory.HARM_CATEGORY_HATE_SPEECH, threshold: generative_ai_1.HarmBlockThreshold.BLOCK_NONE },
|
|
200
|
+
{ category: generative_ai_1.HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT, threshold: generative_ai_1.HarmBlockThreshold.BLOCK_NONE },
|
|
201
|
+
{ category: generative_ai_1.HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT, threshold: generative_ai_1.HarmBlockThreshold.BLOCK_NONE },
|
|
202
|
+
]
|
|
203
|
+
});
|
|
204
|
+
// Load History
|
|
205
|
+
let history = HistoryManager.load();
|
|
206
|
+
// Check for Stats Command
|
|
207
|
+
if (message.trim() === '/stats') {
|
|
208
|
+
// Calculate current stats
|
|
209
|
+
let sessionName = config.activeSession || 'default';
|
|
210
|
+
let tokenCount = 0;
|
|
211
|
+
try {
|
|
212
|
+
const contents = history.map(item => ({ role: item.role, parts: item.parts }));
|
|
213
|
+
const result = await model.countTokens({ contents });
|
|
214
|
+
tokenCount = result.totalTokens;
|
|
215
|
+
}
|
|
216
|
+
catch (e) { }
|
|
217
|
+
const reply = `š **Session Stats**\nSession: \`${sessionName}\`\nHistory Length: ${history.length} turns\nTokens Used: ~${tokenCount} / ${MAX_HISTORY_TOKENS}`;
|
|
218
|
+
const responseData = {
|
|
219
|
+
channel,
|
|
220
|
+
sender,
|
|
221
|
+
message: reply,
|
|
222
|
+
originalMessage: message,
|
|
223
|
+
timestamp: Date.now(),
|
|
224
|
+
messageId,
|
|
225
|
+
...otherFields
|
|
226
|
+
};
|
|
227
|
+
const responseFile = path_1.default.join(QUEUE_OUTGOING, `${channel}_${messageId}_${Date.now()}.json`);
|
|
228
|
+
fs_1.default.writeFileSync(responseFile, JSON.stringify(responseData, null, 2));
|
|
229
|
+
fs_1.default.unlinkSync(processingFile);
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
// Memory Management: Prune if necessary
|
|
233
|
+
history = await manageMemory(model, history, message);
|
|
234
|
+
// Generate
|
|
235
|
+
let responseText;
|
|
236
|
+
try {
|
|
237
|
+
const chat = model.startChat({ history: history });
|
|
238
|
+
const result = await chat.sendMessage(message);
|
|
239
|
+
const response = await result.response;
|
|
240
|
+
responseText = response.text();
|
|
241
|
+
// Save History
|
|
242
|
+
history.push({ role: 'user', parts: [{ text: message }] });
|
|
243
|
+
history.push({ role: 'model', parts: [{ text: responseText }] });
|
|
244
|
+
HistoryManager.save(history);
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
log('ERROR', `Gemini error: ${error.message}`);
|
|
248
|
+
responseText = "Sorry, I encountered an error processing your request with Gemini.";
|
|
249
|
+
}
|
|
250
|
+
// Write Response
|
|
251
|
+
const responseData = {
|
|
252
|
+
channel,
|
|
253
|
+
sender,
|
|
254
|
+
message: responseText.trim(),
|
|
255
|
+
originalMessage: message,
|
|
256
|
+
timestamp: Date.now(),
|
|
257
|
+
messageId,
|
|
258
|
+
...otherFields
|
|
259
|
+
};
|
|
260
|
+
const responseFile = channel === 'heartbeat'
|
|
261
|
+
? path_1.default.join(QUEUE_OUTGOING, `${messageId}.json`)
|
|
262
|
+
: path_1.default.join(QUEUE_OUTGOING, `${channel}_${messageId}_${Date.now()}.json`);
|
|
263
|
+
fs_1.default.writeFileSync(responseFile, JSON.stringify(responseData, null, 2));
|
|
264
|
+
log('INFO', `ā Response ready [${channel}] ${sender}`);
|
|
265
|
+
// Cleanup
|
|
266
|
+
fs_1.default.unlinkSync(processingFile);
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
log('ERROR', `Processing error: ${error.message}`);
|
|
270
|
+
if (fs_1.default.existsSync(processingFile)) {
|
|
271
|
+
try {
|
|
272
|
+
fs_1.default.renameSync(processingFile, messageFile);
|
|
273
|
+
}
|
|
274
|
+
catch (e) {
|
|
275
|
+
log('ERROR', "Failed to move file back");
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
// Loop
|
|
281
|
+
async function processQueue() {
|
|
282
|
+
try {
|
|
283
|
+
const files = fs_1.default.readdirSync(QUEUE_INCOMING)
|
|
284
|
+
.filter(f => f.endsWith('.json'))
|
|
285
|
+
.map(f => ({
|
|
286
|
+
name: f,
|
|
287
|
+
path: path_1.default.join(QUEUE_INCOMING, f),
|
|
288
|
+
time: fs_1.default.statSync(path_1.default.join(QUEUE_INCOMING, f)).mtimeMs
|
|
289
|
+
}))
|
|
290
|
+
.sort((a, b) => a.time - b.time);
|
|
291
|
+
if (files.length > 0) {
|
|
292
|
+
for (const file of files) {
|
|
293
|
+
await processMessage(file.path);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
catch (error) {
|
|
298
|
+
log('ERROR', `Queue loop error: ${error.message}`);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
// Start
|
|
302
|
+
initGemini().then(() => {
|
|
303
|
+
log('INFO', `Queue processor started with model: ${MODEL_NAME}`);
|
|
304
|
+
log('INFO', `Watching: ${QUEUE_INCOMING}`);
|
|
305
|
+
const currentSession = config_manager_1.ConfigManager.load().activeSession || 'default';
|
|
306
|
+
log('INFO', `Active Session: ${currentSession}`);
|
|
307
|
+
setInterval(processQueue, 1000);
|
|
308
|
+
});
|
|
309
|
+
process.on('SIGINT', () => process.exit(0));
|
|
310
|
+
process.on('SIGTERM', () => process.exit(0));
|
|
311
|
+
//# sourceMappingURL=queue-processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-processor.js","sourceRoot":"","sources":["../src/queue-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface Session {
|
|
2
|
+
name: string;
|
|
3
|
+
path: string;
|
|
4
|
+
lastModified: number;
|
|
5
|
+
isActive: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare class SessionManager {
|
|
8
|
+
static init(): void;
|
|
9
|
+
static listSessions(): Session[];
|
|
10
|
+
static createSession(name: string): boolean;
|
|
11
|
+
static switchSession(name: string): boolean;
|
|
12
|
+
static deleteSession(name: string): boolean;
|
|
13
|
+
static getActiveSessionPath(): string;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=session-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,OAAO;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,qBAAa,cAAc;IACvB,MAAM,CAAC,IAAI;IAWX,MAAM,CAAC,YAAY,IAAI,OAAO,EAAE;IAoBhC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAc3C,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAW3C,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAkB3C,MAAM,CAAC,oBAAoB,IAAI,MAAM;CAMxC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.SessionManager = void 0;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const config_manager_1 = require("./config-manager");
|
|
10
|
+
const SESSIONS_DIR = path_1.default.join(config_manager_1.GENICLAW_WORK_DIR, 'sessions');
|
|
11
|
+
class SessionManager {
|
|
12
|
+
static init() {
|
|
13
|
+
if (!fs_1.default.existsSync(SESSIONS_DIR)) {
|
|
14
|
+
fs_1.default.mkdirSync(SESSIONS_DIR, { recursive: true });
|
|
15
|
+
}
|
|
16
|
+
// Ensure 'default' session exists
|
|
17
|
+
const defaultSession = path_1.default.join(SESSIONS_DIR, 'default');
|
|
18
|
+
if (!fs_1.default.existsSync(defaultSession)) {
|
|
19
|
+
fs_1.default.mkdirSync(defaultSession, { recursive: true });
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
static listSessions() {
|
|
23
|
+
this.init();
|
|
24
|
+
const config = config_manager_1.ConfigManager.load();
|
|
25
|
+
const activeSession = config.activeSession || 'default';
|
|
26
|
+
return fs_1.default.readdirSync(SESSIONS_DIR)
|
|
27
|
+
.filter(file => fs_1.default.statSync(path_1.default.join(SESSIONS_DIR, file)).isDirectory())
|
|
28
|
+
.map(name => {
|
|
29
|
+
const sessionPath = path_1.default.join(SESSIONS_DIR, name);
|
|
30
|
+
const stats = fs_1.default.statSync(sessionPath);
|
|
31
|
+
return {
|
|
32
|
+
name,
|
|
33
|
+
path: sessionPath,
|
|
34
|
+
lastModified: stats.mtimeMs,
|
|
35
|
+
isActive: name === activeSession
|
|
36
|
+
};
|
|
37
|
+
})
|
|
38
|
+
.sort((a, b) => b.lastModified - a.lastModified);
|
|
39
|
+
}
|
|
40
|
+
static createSession(name) {
|
|
41
|
+
this.init();
|
|
42
|
+
// Sanitize name (basic)
|
|
43
|
+
const safeName = name.replace(/[^a-zA-Z0-9_-]/g, '_');
|
|
44
|
+
const sessionPath = path_1.default.join(SESSIONS_DIR, safeName);
|
|
45
|
+
if (fs_1.default.existsSync(sessionPath)) {
|
|
46
|
+
return false; // Already exists
|
|
47
|
+
}
|
|
48
|
+
fs_1.default.mkdirSync(sessionPath, { recursive: true });
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
static switchSession(name) {
|
|
52
|
+
this.init();
|
|
53
|
+
const sessionPath = path_1.default.join(SESSIONS_DIR, name);
|
|
54
|
+
if (!fs_1.default.existsSync(sessionPath)) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
config_manager_1.ConfigManager.update({ activeSession: name });
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
static deleteSession(name) {
|
|
61
|
+
this.init();
|
|
62
|
+
if (name === 'default')
|
|
63
|
+
return false; // Cannot delete default
|
|
64
|
+
const sessionPath = path_1.default.join(SESSIONS_DIR, name);
|
|
65
|
+
if (fs_1.default.existsSync(sessionPath)) {
|
|
66
|
+
fs_1.default.rmSync(sessionPath, { recursive: true, force: true });
|
|
67
|
+
// If active session was deleted, switch to default
|
|
68
|
+
const config = config_manager_1.ConfigManager.load();
|
|
69
|
+
if (config.activeSession === name) {
|
|
70
|
+
this.switchSession('default');
|
|
71
|
+
}
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
static getActiveSessionPath() {
|
|
77
|
+
this.init();
|
|
78
|
+
const config = config_manager_1.ConfigManager.load();
|
|
79
|
+
const active = config.activeSession || 'default';
|
|
80
|
+
return path_1.default.join(SESSIONS_DIR, active);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.SessionManager = SessionManager;
|
|
84
|
+
//# sourceMappingURL=session-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/setup.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":""}
|
package/dist/setup.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const readline_1 = __importDefault(require("readline"));
|
|
7
|
+
const config_manager_1 = require("./config-manager");
|
|
8
|
+
const rl = readline_1.default.createInterface({
|
|
9
|
+
input: process.stdin,
|
|
10
|
+
output: process.stdout
|
|
11
|
+
});
|
|
12
|
+
const question = (query) => {
|
|
13
|
+
return new Promise((resolve) => {
|
|
14
|
+
rl.question(query, resolve);
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
async function setup() {
|
|
18
|
+
console.log('\nš¤ \x1b[34mGeniclaw Setup\x1b[0m\n');
|
|
19
|
+
const config = config_manager_1.ConfigManager.load();
|
|
20
|
+
let updated = false;
|
|
21
|
+
// Gemini API Key
|
|
22
|
+
if (!config.geminiApiKey) {
|
|
23
|
+
console.log('\x1b[33mGemini API Key not found.\x1b[0m');
|
|
24
|
+
const key = await question('Enter GEMINI_API_KEY: ');
|
|
25
|
+
if (key.trim()) {
|
|
26
|
+
config.geminiApiKey = key.trim();
|
|
27
|
+
updated = true;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
console.log('ā
Gemini API Key found.');
|
|
32
|
+
}
|
|
33
|
+
// Telegram Bot Token
|
|
34
|
+
if (!config.telegramBotToken) {
|
|
35
|
+
console.log('\n\x1b[33mTelegram Bot Token not found.\x1b[0m');
|
|
36
|
+
const token = await question('Enter TELEGRAM_BOT_TOKEN: ');
|
|
37
|
+
if (token.trim()) {
|
|
38
|
+
config.telegramBotToken = token.trim();
|
|
39
|
+
updated = true;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
console.log('ā
Telegram Bot Token found.');
|
|
44
|
+
}
|
|
45
|
+
// Allowed User ID
|
|
46
|
+
if (!config.telegramAllowedUserId) {
|
|
47
|
+
console.log('\n\x1b[36mSecurity (Optional)\x1b[0m');
|
|
48
|
+
const userId = await question('Enter Allowed Telegram User ID (leave empty for public): ');
|
|
49
|
+
if (userId.trim()) {
|
|
50
|
+
config.telegramAllowedUserId = userId.trim();
|
|
51
|
+
updated = true;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
console.log('ā
Allowed User ID found.');
|
|
56
|
+
}
|
|
57
|
+
if (updated) {
|
|
58
|
+
config_manager_1.ConfigManager.save(config);
|
|
59
|
+
console.log('\n\x1b[32mConfiguration saved to config.json\x1b[0m');
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
console.log('\nConfiguration is up to date.');
|
|
63
|
+
}
|
|
64
|
+
rl.close();
|
|
65
|
+
}
|
|
66
|
+
setup();
|
|
67
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":";;;;;AAAA,wDAAgC;AAChC,qDAAiD;AAEjD,MAAM,EAAE,GAAG,kBAAQ,CAAC,eAAe,CAAC;IAChC,KAAK,EAAE,OAAO,CAAC,KAAK;IACpB,MAAM,EAAE,OAAO,CAAC,MAAM;CACzB,CAAC,CAAC;AAEH,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAmB,EAAE;IAChD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,KAAK,UAAU,KAAK;IAChB,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IAEpD,MAAM,MAAM,GAAG,8BAAa,CAAC,IAAI,EAAE,CAAC;IACpC,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,iBAAiB;IACjB,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QACxD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,wBAAwB,CAAC,CAAC;QACrD,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;YACb,MAAM,CAAC,YAAY,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YACjC,OAAO,GAAG,IAAI,CAAC;QACnB,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAC3C,CAAC;IAED,qBAAqB;IACrB,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,4BAA4B,CAAC,CAAC;QAC3D,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YACf,MAAM,CAAC,gBAAgB,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YACvC,OAAO,GAAG,IAAI,CAAC;QACnB,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC/C,CAAC;IAED,kBAAkB;IAClB,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,2DAA2D,CAAC,CAAC;QAC3F,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YAChB,MAAM,CAAC,qBAAqB,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;YAC7C,OAAO,GAAG,IAAI,CAAC;QACnB,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACV,8BAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;IACvE,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAClD,CAAC;IAED,EAAE,CAAC,KAAK,EAAE,CAAC;AACf,CAAC;AAED,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telegram-client.d.ts","sourceRoot":"","sources":["../src/telegram-client.ts"],"names":[],"mappings":";AACA;;;GAGG"}
|