@ebowwa/glm-daemon-telegram 1.1.0 → 1.3.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/dist/index.d.ts CHANGED
@@ -12,9 +12,10 @@
12
12
  */
13
13
  declare class TelegramGLMBot {
14
14
  private bot;
15
+ private memory;
15
16
  constructor(token: string);
16
17
  start(): Promise<void>;
17
- getGLMResponse(userMessage: string, userName: string): Promise<string>;
18
+ getGLMResponse(chatId: number, userMessage: string, userName: string): Promise<string>;
18
19
  sendTestMessage(chatId: number): Promise<void>;
19
20
  stop(): Promise<void>;
20
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAsEH,cAAM,cAAc;IAClB,OAAO,CAAC,GAAG,CAAc;gBAEb,KAAK,EAAE,MAAM;IAInB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAqRtB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqDtE,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB9C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAI5B;AAsCD,OAAO,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA8QH,cAAM,cAAc;IAClB,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,MAAM,CAAqB;gBAEvB,KAAK,EAAE,MAAM;IAKnB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkStB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA6HtF,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB9C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAI5B;AAsCD,OAAO,EAAE,cAAc,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -13,8 +13,190 @@
13
13
  import TelegramBot from 'node-telegram-bot-api';
14
14
  import { execSync } from 'child_process';
15
15
  import { getStore, seedPrompts } from '@ebowwa/structured-prompts';
16
+ import { readFileSync, writeFileSync, existsSync } from 'fs';
16
17
  const TELEGRAM_BOT_TOKEN = process.env.TELEGRAM_BOT_TOKEN || '';
17
18
  const TELEGRAM_TEST_CHAT_ID = process.env.TELEGRAM_TEST_CHAT_ID || '';
19
+ class ConversationMemory {
20
+ conversations = new Map();
21
+ maxMessages = 10; // Keep last N messages
22
+ file;
23
+ constructor(file) {
24
+ this.file = file || '/root/conversations.json';
25
+ this.load();
26
+ }
27
+ load() {
28
+ if (!existsSync(this.file))
29
+ return;
30
+ try {
31
+ const data = JSON.parse(readFileSync(this.file, 'utf-8'));
32
+ for (const [chatId, messages] of Object.entries(data)) {
33
+ this.conversations.set(Number(chatId), messages);
34
+ }
35
+ }
36
+ catch { }
37
+ }
38
+ save() {
39
+ const data = Object.fromEntries(this.conversations);
40
+ writeFileSync(this.file, JSON.stringify(data, null, 2));
41
+ }
42
+ add(chatId, role, content) {
43
+ if (!this.conversations.has(chatId)) {
44
+ this.conversations.set(chatId, []);
45
+ }
46
+ const history = this.conversations.get(chatId);
47
+ history.push({ role, content });
48
+ // Keep only last N messages
49
+ if (history.length > this.maxMessages) {
50
+ history.splice(0, history.length - this.maxMessages);
51
+ }
52
+ this.save();
53
+ }
54
+ get(chatId) {
55
+ return this.conversations.get(chatId) || [];
56
+ }
57
+ clear(chatId) {
58
+ this.conversations.delete(chatId);
59
+ this.save();
60
+ }
61
+ }
62
+ const TOOLS = [
63
+ {
64
+ name: 'read_file',
65
+ description: 'Read a file from the filesystem. Use for checking configs, logs, code.',
66
+ parameters: {
67
+ type: 'object',
68
+ properties: {
69
+ path: { type: 'string', description: 'Absolute file path to read' }
70
+ },
71
+ required: ['path']
72
+ },
73
+ handler: async (args) => {
74
+ const path = args.path;
75
+ try {
76
+ if (!existsSync(path))
77
+ return `File not found: ${path}`;
78
+ const content = readFileSync(path, 'utf-8');
79
+ return content.length > 4000 ? content.slice(0, 4000) + '\n...[truncated]' : content;
80
+ }
81
+ catch (e) {
82
+ return `Error reading file: ${e.message}`;
83
+ }
84
+ }
85
+ },
86
+ {
87
+ name: 'list_dir',
88
+ description: 'List contents of a directory. Shows files and subdirectories.',
89
+ parameters: {
90
+ type: 'object',
91
+ properties: {
92
+ path: { type: 'string', description: 'Directory path to list (default: /root)' }
93
+ }
94
+ },
95
+ handler: async (args) => {
96
+ const path = args.path || '/root';
97
+ try {
98
+ const items = execSync(`ls -la ${path} 2>&1`).toString();
99
+ return items;
100
+ }
101
+ catch (e) {
102
+ return `Error listing directory: ${e.message}`;
103
+ }
104
+ }
105
+ },
106
+ {
107
+ name: 'run_command',
108
+ description: 'Execute a shell command. Use for git, system info, etc. BE CAREFUL with destructive commands.',
109
+ parameters: {
110
+ type: 'object',
111
+ properties: {
112
+ command: { type: 'string', description: 'Shell command to execute' }
113
+ },
114
+ required: ['command']
115
+ },
116
+ handler: async (args) => {
117
+ const cmd = args.command;
118
+ // Safety check - block dangerous commands
119
+ const blocked = ['rm -rf', 'mkfs', 'dd if=', '> /dev/', 'chmod 777'];
120
+ if (blocked.some(b => cmd.includes(b))) {
121
+ return `Blocked: command contains dangerous pattern`;
122
+ }
123
+ try {
124
+ const result = execSync(cmd, { timeout: 10000, cwd: '/root' }).toString();
125
+ return result || '(no output)';
126
+ }
127
+ catch (e) {
128
+ return e.stdout?.toString() || e.message;
129
+ }
130
+ }
131
+ },
132
+ {
133
+ name: 'git_status',
134
+ description: 'Check git repository status in /root',
135
+ parameters: { type: 'object', properties: {} },
136
+ handler: async () => {
137
+ try {
138
+ const status = execSync('git status 2>&1', { cwd: '/root' }).toString();
139
+ const branch = execSync('git branch --show-current 2>&1', { cwd: '/root' }).toString();
140
+ return `Branch: ${branch}\n\n${status}`;
141
+ }
142
+ catch (e) {
143
+ return `Error: ${e.message}`;
144
+ }
145
+ }
146
+ },
147
+ {
148
+ name: 'get_prompt',
149
+ description: 'Get a prompt template from the prompt store',
150
+ parameters: {
151
+ type: 'object',
152
+ properties: {
153
+ id: { type: 'string', description: 'Prompt ID to retrieve' }
154
+ },
155
+ required: ['id']
156
+ },
157
+ handler: async (args) => {
158
+ const store = getStore(process.env.PROMPTS_FILE);
159
+ const prompt = store.get(args.id);
160
+ return prompt ? JSON.stringify(prompt, null, 2) : `Prompt not found: ${args.id}`;
161
+ }
162
+ },
163
+ {
164
+ name: 'list_prompts',
165
+ description: 'List all available prompt templates',
166
+ parameters: { type: 'object', properties: {} },
167
+ handler: async () => {
168
+ const store = getStore(process.env.PROMPTS_FILE);
169
+ const prompts = store.list();
170
+ return prompts.map(p => `- ${p.id}: ${p.name}`).join('\n') || 'No prompts found';
171
+ }
172
+ },
173
+ {
174
+ name: 'system_info',
175
+ description: 'Get system resource info (CPU, memory, disk, uptime)',
176
+ parameters: { type: 'object', properties: {} },
177
+ handler: async () => {
178
+ try {
179
+ const cpu = execSync('nproc').toString().trim();
180
+ const mem = execSync('free -h | grep Mem').toString().trim();
181
+ const disk = execSync('df -h / | tail -1').toString().trim();
182
+ const uptime = execSync('uptime -p').toString().trim();
183
+ return `CPU cores: ${cpu}\nMemory: ${mem}\nDisk: ${disk}\nUptime: ${uptime}`;
184
+ }
185
+ catch (e) {
186
+ return `Error: ${e.message}`;
187
+ }
188
+ }
189
+ }
190
+ ];
191
+ // Convert tools to GLM API format
192
+ const GLM_TOOLS = TOOLS.map(t => ({
193
+ type: 'function',
194
+ function: {
195
+ name: t.name,
196
+ description: t.description,
197
+ parameters: t.parameters
198
+ }
199
+ }));
18
200
  // API Key Resolution - supports rolling keys
19
201
  const getZAIKey = () => {
20
202
  const keyValue = process.env.Z_AI_API_KEY || process.env.ANTHROPIC_API_KEYS;
@@ -66,8 +248,10 @@ async function fetchWithRetry(url, options, maxRetries = 3, baseDelay = 1000) {
66
248
  }
67
249
  class TelegramGLMBot {
68
250
  bot;
251
+ memory;
69
252
  constructor(token) {
70
253
  this.bot = new TelegramBot(token, { polling: true });
254
+ this.memory = new ConversationMemory(process.env.CONVERSATIONS_FILE);
71
255
  }
72
256
  async start() {
73
257
  console.log('🤖 GLM Daemon Telegram Bot starting with GLM-4.7...');
@@ -287,6 +471,12 @@ class TelegramGLMBot {
287
471
  await this.bot.sendMessage(chatId, `Error reading resources: ${error.message}`);
288
472
  }
289
473
  });
474
+ // /clear command - reset conversation memory
475
+ this.bot.onText(/\/clear/, async (msg) => {
476
+ const chatId = msg.chat.id;
477
+ this.memory.clear(chatId);
478
+ await this.bot.sendMessage(chatId, '🧹 Conversation memory cleared. Starting fresh!');
479
+ });
290
480
  // Handle all text messages with GLM-4.7
291
481
  this.bot.on('message', async (msg) => {
292
482
  if (!msg.text)
@@ -297,7 +487,11 @@ class TelegramGLMBot {
297
487
  const userName = msg.from?.first_name || msg.from?.username || 'User';
298
488
  console.log(`[Telegram] ${userName}: ${msg.text}`);
299
489
  await this.bot.sendChatAction(chatId, 'typing');
300
- const response = await this.getGLMResponse(msg.text, userName);
490
+ // Get response with conversation history
491
+ const response = await this.getGLMResponse(chatId, msg.text, userName);
492
+ // Save to memory
493
+ this.memory.add(chatId, 'user', msg.text);
494
+ this.memory.add(chatId, 'assistant', response);
301
495
  await this.bot.sendMessage(chatId, response);
302
496
  });
303
497
  // Polling errors
@@ -312,7 +506,7 @@ class TelegramGLMBot {
312
506
  console.log('\n💡 Tip: Get your chat ID from @userinfobot and set TELEGRAM_TEST_CHAT_ID');
313
507
  }
314
508
  }
315
- async getGLMResponse(userMessage, userName) {
509
+ async getGLMResponse(chatId, userMessage, userName) {
316
510
  const apiKey = getZAIKey();
317
511
  if (!apiKey) {
318
512
  return '⚠️ Z_AI_API_KEY not configured in Doppler secrets.\n\nPlease set Z_AI_API_KEY to use GLM-4.7.';
@@ -323,34 +517,82 @@ class TelegramGLMBot {
323
517
  const systemContent = systemPrompt?.template ?? 'You are GLM Daemon, a helpful AI assistant.';
324
518
  const temperature = systemPrompt?.metadata?.temperature ?? 0.7;
325
519
  const maxTokens = systemPrompt?.metadata?.maxTokens ?? 2048;
520
+ // Build messages with conversation history
521
+ const history = this.memory.get(chatId);
522
+ const messages = [
523
+ { role: 'system', content: systemContent },
524
+ ...history,
525
+ { role: 'user', content: userMessage }
526
+ ];
326
527
  try {
327
- console.log(`🔄 Calling GLM-4.7 API for: ${userMessage}`);
328
- const response = await fetchWithRetry(ZAI_API_ENDPOINT, {
329
- method: 'POST',
330
- headers: {
331
- 'Content-Type': 'application/json',
332
- 'Authorization': `Bearer ${apiKey}`
333
- },
334
- body: JSON.stringify({
335
- model: 'glm-4.7',
336
- messages: [
337
- { role: 'system', content: systemContent },
338
- { role: 'user', content: userMessage }
339
- ],
340
- temperature,
341
- max_tokens: maxTokens
342
- })
343
- }, 3, 1000);
344
- const data = await response.json();
345
- if (data.choices?.[0]?.message?.content) {
346
- const aiResponse = data.choices[0].message.content;
347
- console.log(`✅ GLM-4.7 response: ${aiResponse.slice(0, 100)}...`);
348
- return aiResponse;
349
- }
350
- else {
351
- console.error('❌ Unexpected API response format:', data);
352
- return '❌ Unexpected response from AI API.';
528
+ console.log(`🔄 Calling GLM-4.7 API for: ${userMessage} (${history.length} history)`);
529
+ // Loop to handle tool calls
530
+ let iterations = 0;
531
+ const maxIterations = 5; // Prevent infinite loops
532
+ while (iterations < maxIterations) {
533
+ iterations++;
534
+ const response = await fetchWithRetry(ZAI_API_ENDPOINT, {
535
+ method: 'POST',
536
+ headers: {
537
+ 'Content-Type': 'application/json',
538
+ 'Authorization': `Bearer ${apiKey}`
539
+ },
540
+ body: JSON.stringify({
541
+ model: 'glm-4.7',
542
+ messages,
543
+ tools: GLM_TOOLS,
544
+ temperature,
545
+ max_tokens: maxTokens
546
+ })
547
+ }, 3, 1000);
548
+ const data = await response.json();
549
+ const message = data.choices?.[0]?.message;
550
+ if (!message) {
551
+ console.error('❌ Unexpected API response format:', data);
552
+ return '❌ Unexpected response from AI API.';
553
+ }
554
+ // Check if LLM wants to call tools
555
+ if (message.tool_calls && message.tool_calls.length > 0) {
556
+ console.log(`🔧 LLM calling ${message.tool_calls.length} tool(s)`);
557
+ // Add assistant message with tool calls to history
558
+ messages.push({
559
+ role: 'assistant',
560
+ tool_calls: message.tool_calls
561
+ });
562
+ // Execute each tool and add results
563
+ for (const toolCall of message.tool_calls) {
564
+ const toolName = toolCall.function.name;
565
+ const args = JSON.parse(toolCall.function.arguments);
566
+ console.log(` → ${toolName}(${JSON.stringify(args)})`);
567
+ // Find and execute tool
568
+ const tool = TOOLS.find(t => t.name === toolName);
569
+ let result;
570
+ if (tool) {
571
+ result = await tool.handler(args);
572
+ }
573
+ else {
574
+ result = `Unknown tool: ${toolName}`;
575
+ }
576
+ console.log(` ← ${result.slice(0, 100)}...`);
577
+ // Add tool result to messages
578
+ messages.push({
579
+ role: 'tool',
580
+ name: toolName,
581
+ content: result
582
+ });
583
+ }
584
+ // Continue loop to get final response
585
+ continue;
586
+ }
587
+ // No tool calls - we have the final response
588
+ if (message.content) {
589
+ console.log(`✅ GLM-4.7 response: ${message.content.slice(0, 100)}...`);
590
+ return message.content;
591
+ }
592
+ // No content and no tool calls - something weird
593
+ return '❌ Empty response from AI.';
353
594
  }
595
+ return '⚠️ Too many tool iterations. Please simplify your request.';
354
596
  }
355
597
  catch (error) {
356
598
  console.error('❌ Error calling GLM-4.7:', error.message);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ebowwa/glm-daemon-telegram",
3
- "version": "1.1.0",
3
+ "version": "1.3.0",
4
4
  "description": "Telegram adapter for GLM Daemon with ButlerAgent personality",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
package/src/index.ts CHANGED
@@ -14,10 +14,210 @@
14
14
  import TelegramBot from 'node-telegram-bot-api';
15
15
  import { execSync } from 'child_process';
16
16
  import { getStore, seedPrompts } from '@ebowwa/structured-prompts';
17
+ import { readFileSync, writeFileSync, existsSync } from 'fs';
17
18
 
18
19
  const TELEGRAM_BOT_TOKEN = process.env.TELEGRAM_BOT_TOKEN || '';
19
20
  const TELEGRAM_TEST_CHAT_ID = process.env.TELEGRAM_TEST_CHAT_ID || '';
20
21
 
22
+ // ====================================================================
23
+ // Conversation Memory - tracks chat history per user
24
+ // ====================================================================
25
+
26
+ interface Message { role: 'user' | 'assistant'; content: string }
27
+
28
+ class ConversationMemory {
29
+ private conversations = new Map<number, Message[]>();
30
+ private maxMessages = 10; // Keep last N messages
31
+ private file: string;
32
+
33
+ constructor(file?: string) {
34
+ this.file = file || '/root/conversations.json';
35
+ this.load();
36
+ }
37
+
38
+ private load() {
39
+ if (!existsSync(this.file)) return;
40
+ try {
41
+ const data = JSON.parse(readFileSync(this.file, 'utf-8'));
42
+ for (const [chatId, messages] of Object.entries(data)) {
43
+ this.conversations.set(Number(chatId), messages as Message[]);
44
+ }
45
+ } catch {}
46
+ }
47
+
48
+ private save() {
49
+ const data = Object.fromEntries(this.conversations);
50
+ writeFileSync(this.file, JSON.stringify(data, null, 2));
51
+ }
52
+
53
+ add(chatId: number, role: 'user' | 'assistant', content: string) {
54
+ if (!this.conversations.has(chatId)) {
55
+ this.conversations.set(chatId, []);
56
+ }
57
+ const history = this.conversations.get(chatId)!;
58
+ history.push({ role, content });
59
+ // Keep only last N messages
60
+ if (history.length > this.maxMessages) {
61
+ history.splice(0, history.length - this.maxMessages);
62
+ }
63
+ this.save();
64
+ }
65
+
66
+ get(chatId: number): Message[] {
67
+ return this.conversations.get(chatId) || [];
68
+ }
69
+
70
+ clear(chatId: number) {
71
+ this.conversations.delete(chatId);
72
+ this.save();
73
+ }
74
+ }
75
+
76
+ // ====================================================================
77
+ // Tool Definitions for LLM
78
+ // ====================================================================
79
+
80
+ interface Tool {
81
+ name: string;
82
+ description: string;
83
+ parameters: Record<string, unknown>;
84
+ handler: (args: Record<string, unknown>) => Promise<string>;
85
+ }
86
+
87
+ const TOOLS: Tool[] = [
88
+ {
89
+ name: 'read_file',
90
+ description: 'Read a file from the filesystem. Use for checking configs, logs, code.',
91
+ parameters: {
92
+ type: 'object',
93
+ properties: {
94
+ path: { type: 'string', description: 'Absolute file path to read' }
95
+ },
96
+ required: ['path']
97
+ },
98
+ handler: async (args) => {
99
+ const path = args.path as string;
100
+ try {
101
+ if (!existsSync(path)) return `File not found: ${path}`;
102
+ const content = readFileSync(path, 'utf-8');
103
+ return content.length > 4000 ? content.slice(0, 4000) + '\n...[truncated]' : content;
104
+ } catch (e) {
105
+ return `Error reading file: ${(e as Error).message}`;
106
+ }
107
+ }
108
+ },
109
+ {
110
+ name: 'list_dir',
111
+ description: 'List contents of a directory. Shows files and subdirectories.',
112
+ parameters: {
113
+ type: 'object',
114
+ properties: {
115
+ path: { type: 'string', description: 'Directory path to list (default: /root)' }
116
+ }
117
+ },
118
+ handler: async (args) => {
119
+ const path = (args.path as string) || '/root';
120
+ try {
121
+ const items = execSync(`ls -la ${path} 2>&1`).toString();
122
+ return items;
123
+ } catch (e) {
124
+ return `Error listing directory: ${(e as Error).message}`;
125
+ }
126
+ }
127
+ },
128
+ {
129
+ name: 'run_command',
130
+ description: 'Execute a shell command. Use for git, system info, etc. BE CAREFUL with destructive commands.',
131
+ parameters: {
132
+ type: 'object',
133
+ properties: {
134
+ command: { type: 'string', description: 'Shell command to execute' }
135
+ },
136
+ required: ['command']
137
+ },
138
+ handler: async (args) => {
139
+ const cmd = args.command as string;
140
+ // Safety check - block dangerous commands
141
+ const blocked = ['rm -rf', 'mkfs', 'dd if=', '> /dev/', 'chmod 777'];
142
+ if (blocked.some(b => cmd.includes(b))) {
143
+ return `Blocked: command contains dangerous pattern`;
144
+ }
145
+ try {
146
+ const result = execSync(cmd, { timeout: 10000, cwd: '/root' }).toString();
147
+ return result || '(no output)';
148
+ } catch (e: any) {
149
+ return e.stdout?.toString() || e.message;
150
+ }
151
+ }
152
+ },
153
+ {
154
+ name: 'git_status',
155
+ description: 'Check git repository status in /root',
156
+ parameters: { type: 'object', properties: {} },
157
+ handler: async () => {
158
+ try {
159
+ const status = execSync('git status 2>&1', { cwd: '/root' }).toString();
160
+ const branch = execSync('git branch --show-current 2>&1', { cwd: '/root' }).toString();
161
+ return `Branch: ${branch}\n\n${status}`;
162
+ } catch (e) {
163
+ return `Error: ${(e as Error).message}`;
164
+ }
165
+ }
166
+ },
167
+ {
168
+ name: 'get_prompt',
169
+ description: 'Get a prompt template from the prompt store',
170
+ parameters: {
171
+ type: 'object',
172
+ properties: {
173
+ id: { type: 'string', description: 'Prompt ID to retrieve' }
174
+ },
175
+ required: ['id']
176
+ },
177
+ handler: async (args) => {
178
+ const store = getStore(process.env.PROMPTS_FILE);
179
+ const prompt = store.get(args.id as string);
180
+ return prompt ? JSON.stringify(prompt, null, 2) : `Prompt not found: ${args.id}`;
181
+ }
182
+ },
183
+ {
184
+ name: 'list_prompts',
185
+ description: 'List all available prompt templates',
186
+ parameters: { type: 'object', properties: {} },
187
+ handler: async () => {
188
+ const store = getStore(process.env.PROMPTS_FILE);
189
+ const prompts = store.list();
190
+ return prompts.map(p => `- ${p.id}: ${p.name}`).join('\n') || 'No prompts found';
191
+ }
192
+ },
193
+ {
194
+ name: 'system_info',
195
+ description: 'Get system resource info (CPU, memory, disk, uptime)',
196
+ parameters: { type: 'object', properties: {} },
197
+ handler: async () => {
198
+ try {
199
+ const cpu = execSync('nproc').toString().trim();
200
+ const mem = execSync('free -h | grep Mem').toString().trim();
201
+ const disk = execSync('df -h / | tail -1').toString().trim();
202
+ const uptime = execSync('uptime -p').toString().trim();
203
+ return `CPU cores: ${cpu}\nMemory: ${mem}\nDisk: ${disk}\nUptime: ${uptime}`;
204
+ } catch (e) {
205
+ return `Error: ${(e as Error).message}`;
206
+ }
207
+ }
208
+ }
209
+ ];
210
+
211
+ // Convert tools to GLM API format
212
+ const GLM_TOOLS = TOOLS.map(t => ({
213
+ type: 'function',
214
+ function: {
215
+ name: t.name,
216
+ description: t.description,
217
+ parameters: t.parameters
218
+ }
219
+ }));
220
+
21
221
  // API Key Resolution - supports rolling keys
22
222
  const getZAIKey = (): string | null => {
23
223
  const keyValue = process.env.Z_AI_API_KEY || process.env.ANTHROPIC_API_KEYS;
@@ -81,9 +281,11 @@ async function fetchWithRetry(
81
281
 
82
282
  class TelegramGLMBot {
83
283
  private bot: TelegramBot;
284
+ private memory: ConversationMemory;
84
285
 
85
286
  constructor(token: string) {
86
287
  this.bot = new TelegramBot(token, { polling: true });
288
+ this.memory = new ConversationMemory(process.env.CONVERSATIONS_FILE);
87
289
  }
88
290
 
89
291
  async start(): Promise<void> {
@@ -334,6 +536,13 @@ class TelegramGLMBot {
334
536
  }
335
537
  });
336
538
 
539
+ // /clear command - reset conversation memory
540
+ this.bot.onText(/\/clear/, async (msg: TelegramBot.Message) => {
541
+ const chatId = msg.chat.id;
542
+ this.memory.clear(chatId);
543
+ await this.bot.sendMessage(chatId, '🧹 Conversation memory cleared. Starting fresh!');
544
+ });
545
+
337
546
  // Handle all text messages with GLM-4.7
338
547
  this.bot.on('message', async (msg: TelegramBot.Message) => {
339
548
  if (!msg.text) return;
@@ -345,7 +554,13 @@ class TelegramGLMBot {
345
554
  console.log(`[Telegram] ${userName}: ${msg.text}`);
346
555
  await this.bot.sendChatAction(chatId, 'typing');
347
556
 
348
- const response = await this.getGLMResponse(msg.text, userName);
557
+ // Get response with conversation history
558
+ const response = await this.getGLMResponse(chatId, msg.text, userName);
559
+
560
+ // Save to memory
561
+ this.memory.add(chatId, 'user', msg.text);
562
+ this.memory.add(chatId, 'assistant', response);
563
+
349
564
  await this.bot.sendMessage(chatId, response);
350
565
  });
351
566
 
@@ -363,7 +578,7 @@ class TelegramGLMBot {
363
578
  }
364
579
  }
365
580
 
366
- async getGLMResponse(userMessage: string, userName: string): Promise<string> {
581
+ async getGLMResponse(chatId: number, userMessage: string, userName: string): Promise<string> {
367
582
  const apiKey = getZAIKey();
368
583
  if (!apiKey) {
369
584
  return '⚠️ Z_AI_API_KEY not configured in Doppler secrets.\n\nPlease set Z_AI_API_KEY to use GLM-4.7.';
@@ -376,36 +591,108 @@ class TelegramGLMBot {
376
591
  const temperature = systemPrompt?.metadata?.temperature ?? 0.7;
377
592
  const maxTokens = systemPrompt?.metadata?.maxTokens ?? 2048;
378
593
 
594
+ // Build messages with conversation history
595
+ const history = this.memory.get(chatId);
596
+ const messages: Array<{ role: string; content?: string; tool_calls?: unknown[]; name?: string }> = [
597
+ { role: 'system', content: systemContent },
598
+ ...history,
599
+ { role: 'user', content: userMessage }
600
+ ];
601
+
379
602
  try {
380
- console.log(`🔄 Calling GLM-4.7 API for: ${userMessage}`);
381
-
382
- const response = await fetchWithRetry(ZAI_API_ENDPOINT, {
383
- method: 'POST',
384
- headers: {
385
- 'Content-Type': 'application/json',
386
- 'Authorization': `Bearer ${apiKey}`
387
- },
388
- body: JSON.stringify({
389
- model: 'glm-4.7',
390
- messages: [
391
- { role: 'system', content: systemContent },
392
- { role: 'user', content: userMessage }
393
- ],
394
- temperature,
395
- max_tokens: maxTokens
396
- })
397
- }, 3, 1000);
398
-
399
- const data = await response.json() as { choices?: Array<{ message?: { content?: string } }> };
400
-
401
- if (data.choices?.[0]?.message?.content) {
402
- const aiResponse = data.choices[0].message.content;
403
- console.log(`✅ GLM-4.7 response: ${aiResponse.slice(0, 100)}...`);
404
- return aiResponse;
405
- } else {
406
- console.error('❌ Unexpected API response format:', data);
407
- return '❌ Unexpected response from AI API.';
603
+ console.log(`🔄 Calling GLM-4.7 API for: ${userMessage} (${history.length} history)`);
604
+
605
+ // Loop to handle tool calls
606
+ let iterations = 0;
607
+ const maxIterations = 5; // Prevent infinite loops
608
+
609
+ while (iterations < maxIterations) {
610
+ iterations++;
611
+
612
+ const response = await fetchWithRetry(ZAI_API_ENDPOINT, {
613
+ method: 'POST',
614
+ headers: {
615
+ 'Content-Type': 'application/json',
616
+ 'Authorization': `Bearer ${apiKey}`
617
+ },
618
+ body: JSON.stringify({
619
+ model: 'glm-4.7',
620
+ messages,
621
+ tools: GLM_TOOLS,
622
+ temperature,
623
+ max_tokens: maxTokens
624
+ })
625
+ }, 3, 1000);
626
+
627
+ const data = await response.json() as {
628
+ choices?: Array<{
629
+ message?: {
630
+ content?: string;
631
+ tool_calls?: Array<{
632
+ id: string;
633
+ function: { name: string; arguments: string };
634
+ }>;
635
+ }
636
+ }>
637
+ };
638
+
639
+ const message = data.choices?.[0]?.message;
640
+ if (!message) {
641
+ console.error('❌ Unexpected API response format:', data);
642
+ return '❌ Unexpected response from AI API.';
643
+ }
644
+
645
+ // Check if LLM wants to call tools
646
+ if (message.tool_calls && message.tool_calls.length > 0) {
647
+ console.log(`🔧 LLM calling ${message.tool_calls.length} tool(s)`);
648
+
649
+ // Add assistant message with tool calls to history
650
+ messages.push({
651
+ role: 'assistant',
652
+ tool_calls: message.tool_calls
653
+ });
654
+
655
+ // Execute each tool and add results
656
+ for (const toolCall of message.tool_calls) {
657
+ const toolName = toolCall.function.name;
658
+ const args = JSON.parse(toolCall.function.arguments);
659
+
660
+ console.log(` → ${toolName}(${JSON.stringify(args)})`);
661
+
662
+ // Find and execute tool
663
+ const tool = TOOLS.find(t => t.name === toolName);
664
+ let result: string;
665
+ if (tool) {
666
+ result = await tool.handler(args);
667
+ } else {
668
+ result = `Unknown tool: ${toolName}`;
669
+ }
670
+
671
+ console.log(` ← ${result.slice(0, 100)}...`);
672
+
673
+ // Add tool result to messages
674
+ messages.push({
675
+ role: 'tool',
676
+ name: toolName,
677
+ content: result
678
+ });
679
+ }
680
+
681
+ // Continue loop to get final response
682
+ continue;
683
+ }
684
+
685
+ // No tool calls - we have the final response
686
+ if (message.content) {
687
+ console.log(`✅ GLM-4.7 response: ${message.content.slice(0, 100)}...`);
688
+ return message.content;
689
+ }
690
+
691
+ // No content and no tool calls - something weird
692
+ return '❌ Empty response from AI.';
408
693
  }
694
+
695
+ return '⚠️ Too many tool iterations. Please simplify your request.';
409
696
  } catch (error) {
410
697
  console.error('❌ Error calling GLM-4.7:', (error as Error).message);
411
698