@ebowwa/channel-telegram 1.12.5 โ†’ 1.13.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.
Files changed (49) hide show
  1. package/README.md +78 -44
  2. package/dist/commands/index.d.ts +1 -0
  3. package/dist/commands/index.d.ts.map +1 -1
  4. package/dist/commands/index.js +3 -0
  5. package/dist/commands/index.js.map +1 -1
  6. package/dist/commands/restart.d.ts +7 -0
  7. package/dist/commands/restart.d.ts.map +1 -0
  8. package/dist/commands/restart.js +29 -0
  9. package/dist/commands/restart.js.map +1 -0
  10. package/dist/commands/settings.d.ts +8 -0
  11. package/dist/commands/settings.d.ts.map +1 -0
  12. package/dist/commands/settings.js +16 -0
  13. package/dist/commands/settings.js.map +1 -0
  14. package/dist/index.d.ts +83 -29
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +350 -712
  17. package/dist/index.js.map +1 -1
  18. package/package.json +9 -13
  19. package/src/commands/index.ts +3 -0
  20. package/src/commands/restart.ts +41 -0
  21. package/src/commands/settings.ts +24 -0
  22. package/src/index.ts +415 -823
  23. package/dist/mcp/client.d.ts +0 -50
  24. package/dist/mcp/client.d.ts.map +0 -1
  25. package/dist/mcp/client.js +0 -150
  26. package/dist/mcp/client.js.map +0 -1
  27. package/dist/mcp/index.d.ts +0 -5
  28. package/dist/mcp/index.d.ts.map +0 -1
  29. package/dist/mcp/index.js +0 -5
  30. package/dist/mcp/index.js.map +0 -1
  31. package/src/api/fetch-retry.js +0 -96
  32. package/src/api/keys.js +0 -25
  33. package/src/commands/cancel.js +0 -120
  34. package/src/commands/clear.js +0 -59
  35. package/src/commands/doppler.js +0 -118
  36. package/src/commands/git.js +0 -126
  37. package/src/commands/help.js +0 -74
  38. package/src/commands/index.js +0 -65
  39. package/src/commands/logs.js +0 -81
  40. package/src/commands/pause.js +0 -133
  41. package/src/commands/resources.js +0 -87
  42. package/src/commands/resume.js +0 -95
  43. package/src/commands/start.js +0 -68
  44. package/src/commands/status.js +0 -62
  45. package/src/commands/tools.js +0 -67
  46. package/src/commands/toolsoutput.js +0 -85
  47. package/src/commands/types.js +0 -5
  48. package/src/mcp/client.ts +0 -188
  49. package/src/mcp/index.ts +0 -5
@@ -1,50 +0,0 @@
1
- /**
2
- * MCP Client - Connect to MCP servers and expose their tools
3
- *
4
- * Uses stdio transport to communicate with local MCP servers
5
- */
6
- export interface MCPTool {
7
- name: string;
8
- description: string;
9
- inputSchema: Record<string, unknown>;
10
- serverName: string;
11
- }
12
- export interface MCPServerConfig {
13
- name: string;
14
- command: string;
15
- args?: string[];
16
- env?: Record<string, string>;
17
- }
18
- export declare class MCPClient {
19
- private servers;
20
- private clients;
21
- private transports;
22
- private tools;
23
- /**
24
- * Default MCP servers to connect to
25
- * Uses globally installed @ebowwa/*-mcp packages
26
- */
27
- static DEFAULT_SERVERS: MCPServerConfig[];
28
- constructor(servers?: MCPServerConfig[]);
29
- /**
30
- * Connect to all configured MCP servers
31
- */
32
- connect(): Promise<void>;
33
- /**
34
- * Connect to a single MCP server
35
- */
36
- private connectToServer;
37
- /**
38
- * Get all discovered MCP tools
39
- */
40
- getTools(): MCPTool[];
41
- /**
42
- * Call an MCP tool
43
- */
44
- callTool(name: string, args: Record<string, unknown>): Promise<string>;
45
- /**
46
- * Disconnect from all MCP servers
47
- */
48
- disconnect(): Promise<void>;
49
- }
50
- //# sourceMappingURL=client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,qBAAa,SAAS;IAiBR,OAAO,CAAC,OAAO;IAhB3B,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,UAAU,CAAgD;IAClE,OAAO,CAAC,KAAK,CAAiB;IAE9B;;;OAGG;IACH,MAAM,CAAC,eAAe,EAAE,eAAe,EAAE,CAMvC;gBAEkB,OAAO,GAAE,eAAe,EAA8B;IAE1E;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAc9B;;OAEG;YACW,eAAe;IAwD7B;;OAEG;IACH,QAAQ,IAAI,OAAO,EAAE;IAIrB;;OAEG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAgC5E;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAwBlC"}
@@ -1,150 +0,0 @@
1
- /**
2
- * MCP Client - Connect to MCP servers and expose their tools
3
- *
4
- * Uses stdio transport to communicate with local MCP servers
5
- */
6
- import { Client } from '@modelcontextprotocol/sdk/client/index.js';
7
- import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
8
- export class MCPClient {
9
- servers;
10
- clients = new Map();
11
- transports = new Map();
12
- tools = [];
13
- /**
14
- * Default MCP servers to connect to
15
- * Uses globally installed @ebowwa/*-mcp packages
16
- */
17
- static DEFAULT_SERVERS = [
18
- {
19
- name: 'hetzner',
20
- command: '/root/.bun/bin/bun',
21
- args: ['/root/.bun/install/global/node_modules/@ebowwa/hetzner-mcp/dist/index.js'],
22
- },
23
- ];
24
- constructor(servers = MCPClient.DEFAULT_SERVERS) {
25
- this.servers = servers;
26
- }
27
- /**
28
- * Connect to all configured MCP servers
29
- */
30
- async connect() {
31
- console.log(`[MCP] Connecting to ${this.servers.length} servers...`);
32
- for (const server of this.servers) {
33
- try {
34
- await this.connectToServer(server);
35
- }
36
- catch (error) {
37
- console.error(`[MCP] Failed to connect to ${server.name}:`, error);
38
- }
39
- }
40
- console.log(`[MCP] Connected. Found ${this.tools.length} tools.`);
41
- }
42
- /**
43
- * Connect to a single MCP server
44
- */
45
- async connectToServer(server) {
46
- console.log(`[MCP] Connecting to ${server.name}...`);
47
- // Build env - filter out undefined values
48
- const env = {};
49
- for (const [key, value] of Object.entries(process.env)) {
50
- if (value !== undefined) {
51
- env[key] = value;
52
- }
53
- }
54
- if (server.env) {
55
- Object.assign(env, server.env);
56
- }
57
- // Create stdio transport - it handles spawning the process
58
- const transport = new StdioClientTransport({
59
- command: server.command,
60
- args: server.args,
61
- env,
62
- stderr: 'pipe',
63
- });
64
- this.transports.set(server.name, transport);
65
- // Handle stderr for debugging
66
- const stderr = transport.stderr;
67
- if (stderr) {
68
- stderr.on('data', (data) => {
69
- console.error(`[MCP:${server.name}] ${data.toString().trim()}`);
70
- });
71
- }
72
- // Create MCP client
73
- const client = new Client({ name: `telegram-bot-mcp-${server.name}`, version: '1.0.0' }, { capabilities: {} });
74
- await client.connect(transport);
75
- this.clients.set(server.name, client);
76
- // Discover tools
77
- const toolsResult = await client.listTools();
78
- for (const tool of toolsResult.tools) {
79
- this.tools.push({
80
- name: tool.name,
81
- description: tool.description || '',
82
- inputSchema: tool.inputSchema,
83
- serverName: server.name,
84
- });
85
- }
86
- console.log(`[MCP] ${server.name}: Found ${toolsResult.tools.length} tools`);
87
- }
88
- /**
89
- * Get all discovered MCP tools
90
- */
91
- getTools() {
92
- return this.tools;
93
- }
94
- /**
95
- * Call an MCP tool
96
- */
97
- async callTool(name, args) {
98
- const tool = this.tools.find(t => t.name === name);
99
- if (!tool) {
100
- throw new Error(`Tool not found: ${name}`);
101
- }
102
- const client = this.clients.get(tool.serverName);
103
- if (!client) {
104
- throw new Error(`MCP server not connected: ${tool.serverName}`);
105
- }
106
- try {
107
- const result = await client.callTool({
108
- name,
109
- arguments: args,
110
- });
111
- // Extract text content from result
112
- if (result.content && Array.isArray(result.content)) {
113
- return result.content
114
- .map((c) => c.text || '')
115
- .join('\n');
116
- }
117
- return JSON.stringify(result);
118
- }
119
- catch (error) {
120
- throw new Error(`MCP tool error: ${error.message}`);
121
- }
122
- }
123
- /**
124
- * Disconnect from all MCP servers
125
- */
126
- async disconnect() {
127
- console.log('[MCP] Disconnecting...');
128
- for (const [name, client] of this.clients) {
129
- try {
130
- await client.close();
131
- console.log(`[MCP] Disconnected from ${name}`);
132
- }
133
- catch (error) {
134
- console.error(`[MCP] Error disconnecting from ${name}:`, error);
135
- }
136
- }
137
- for (const [name, transport] of this.transports) {
138
- try {
139
- await transport.close();
140
- }
141
- catch (error) {
142
- console.error(`[MCP] Error closing transport ${name}:`, error);
143
- }
144
- }
145
- this.clients.clear();
146
- this.transports.clear();
147
- this.tools = [];
148
- }
149
- }
150
- //# sourceMappingURL=client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- /**
2
- * MCP Module Exports
3
- */
4
- export { MCPClient, type MCPTool, type MCPServerConfig } from './client';
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,KAAK,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC"}
package/dist/mcp/index.js DELETED
@@ -1,5 +0,0 @@
1
- /**
2
- * MCP Module Exports
3
- */
4
- export { MCPClient } from './client';
5
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAsC,MAAM,UAAU,CAAC"}
@@ -1,96 +0,0 @@
1
- "use strict";
2
- /**
3
- * Fetch with retry and exponential backoff for 429 handling
4
- */
5
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
7
- return new (P || (P = Promise))(function (resolve, reject) {
8
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
9
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
10
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
11
- step((generator = generator.apply(thisArg, _arguments || [])).next());
12
- });
13
- };
14
- var __generator = (this && this.__generator) || function (thisArg, body) {
15
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
16
- return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
17
- function verb(n) { return function (v) { return step([n, v]); }; }
18
- function step(op) {
19
- if (f) throw new TypeError("Generator is already executing.");
20
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
21
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
22
- if (y = 0, t) op = [op[0] & 2, t.value];
23
- switch (op[0]) {
24
- case 0: case 1: t = op; break;
25
- case 4: _.label++; return { value: op[1], done: false };
26
- case 5: _.label++; y = op[1]; op = [0]; continue;
27
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
28
- default:
29
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
30
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
31
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
32
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
33
- if (t[2]) _.ops.pop();
34
- _.trys.pop(); continue;
35
- }
36
- op = body.call(thisArg, _);
37
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
38
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
39
- }
40
- };
41
- Object.defineProperty(exports, "__esModule", { value: true });
42
- exports.fetchWithRetry = fetchWithRetry;
43
- var sleep = function (ms) { return new Promise(function (resolve) { return setTimeout(resolve, ms); }); };
44
- function fetchWithRetry(url_1, options_1) {
45
- return __awaiter(this, arguments, void 0, function (url, options, maxRetries, baseDelay) {
46
- var lastError, attempt, response, retryAfter, delay, error_1, delay;
47
- if (maxRetries === void 0) { maxRetries = 3; }
48
- if (baseDelay === void 0) { baseDelay = 1000; }
49
- return __generator(this, function (_a) {
50
- switch (_a.label) {
51
- case 0:
52
- lastError = null;
53
- attempt = 0;
54
- _a.label = 1;
55
- case 1:
56
- if (!(attempt < maxRetries)) return [3 /*break*/, 10];
57
- _a.label = 2;
58
- case 2:
59
- _a.trys.push([2, 6, , 9]);
60
- return [4 /*yield*/, fetch(url, options)];
61
- case 3:
62
- response = _a.sent();
63
- if (!(response.status === 429)) return [3 /*break*/, 5];
64
- retryAfter = response.headers.get('Retry-After');
65
- delay = retryAfter
66
- ? parseInt(retryAfter) * 1000
67
- : baseDelay * Math.pow(2, attempt);
68
- console.log("[429] Rate limited, retrying in ".concat(delay, "ms (attempt ").concat(attempt + 1, "/").concat(maxRetries, ")"));
69
- return [4 /*yield*/, sleep(delay)];
70
- case 4:
71
- _a.sent();
72
- return [3 /*break*/, 9];
73
- case 5:
74
- if (!response.ok) {
75
- throw new Error("HTTP ".concat(response.status, ": ").concat(response.statusText));
76
- }
77
- return [2 /*return*/, response];
78
- case 6:
79
- error_1 = _a.sent();
80
- lastError = error_1;
81
- if (!(attempt < maxRetries - 1)) return [3 /*break*/, 8];
82
- delay = baseDelay * Math.pow(2, attempt);
83
- console.log("[Retry] Attempt ".concat(attempt + 1, " failed: ").concat(lastError.message, ", retrying in ").concat(delay, "ms"));
84
- return [4 /*yield*/, sleep(delay)];
85
- case 7:
86
- _a.sent();
87
- _a.label = 8;
88
- case 8: return [3 /*break*/, 9];
89
- case 9:
90
- attempt++;
91
- return [3 /*break*/, 1];
92
- case 10: throw lastError;
93
- }
94
- });
95
- });
96
- }
package/src/api/keys.js DELETED
@@ -1,25 +0,0 @@
1
- "use strict";
2
- /**
3
- * API Key Resolution - supports rolling keys
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getZAIKey = getZAIKey;
7
- /**
8
- * Get Z.AI API key from environment
9
- * Supports single key or JSON array of keys for rolling key rotation
10
- */
11
- function getZAIKey() {
12
- var keyValue = process.env.Z_AI_API_KEY || process.env.ANTHROPIC_API_KEYS;
13
- if (!keyValue)
14
- return null;
15
- try {
16
- var keysArray_1 = JSON.parse(keyValue);
17
- if (Array.isArray(keysArray_1) && keysArray_1.length > 0) {
18
- return keysArray_1[0];
19
- }
20
- }
21
- catch (_a) {
22
- return keyValue;
23
- }
24
- return keyValue;
25
- }
@@ -1,120 +0,0 @@
1
- "use strict";
2
- /**
3
- * /cancel command - Stop current task immediately
4
- *
5
- * Sets a cancel flag that the daemon checks during execution.
6
- * Also stops the telegram-bot service as a hard stop.
7
- */
8
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
9
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
10
- return new (P || (P = Promise))(function (resolve, reject) {
11
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
12
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
13
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
14
- step((generator = generator.apply(thisArg, _arguments || [])).next());
15
- });
16
- };
17
- var __generator = (this && this.__generator) || function (thisArg, body) {
18
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
19
- return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
20
- function verb(n) { return function (v) { return step([n, v]); }; }
21
- function step(op) {
22
- if (f) throw new TypeError("Generator is already executing.");
23
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
24
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
25
- if (y = 0, t) op = [op[0] & 2, t.value];
26
- switch (op[0]) {
27
- case 0: case 1: t = op; break;
28
- case 4: _.label++; return { value: op[1], done: false };
29
- case 5: _.label++; y = op[1]; op = [0]; continue;
30
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
31
- default:
32
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
33
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
34
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
35
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
36
- if (t[2]) _.ops.pop();
37
- _.trys.pop(); continue;
38
- }
39
- op = body.call(thisArg, _);
40
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
41
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
42
- }
43
- };
44
- Object.defineProperty(exports, "__esModule", { value: true });
45
- exports.registerCancelCommand = registerCancelCommand;
46
- exports.isCancelled = isCancelled;
47
- exports.clearCancel = clearCancel;
48
- var child_process_1 = require("child_process");
49
- var fs_1 = require("fs");
50
- var STATE_DIR = '/root/seed/state';
51
- var CANCEL_FLAG = "".concat(STATE_DIR, "/.cancel");
52
- var PAUSE_FLAG = "".concat(STATE_DIR, "/.pause");
53
- function registerCancelCommand(bot, _memory, _tools) {
54
- var _this = this;
55
- bot.onText(/\/cancel/, function (msg) { return __awaiter(_this, void 0, void 0, function () {
56
- var chatId, error_1;
57
- return __generator(this, function (_a) {
58
- switch (_a.label) {
59
- case 0:
60
- chatId = msg.chat.id;
61
- _a.label = 1;
62
- case 1:
63
- _a.trys.push([1, 3, , 5]);
64
- // Ensure state directory exists
65
- if (!(0, fs_1.existsSync)(STATE_DIR)) {
66
- (0, fs_1.mkdirSync)(STATE_DIR, { recursive: true });
67
- }
68
- // Set cancel flag
69
- (0, fs_1.writeFileSync)(CANCEL_FLAG, Date.now().toString());
70
- // Clear pause flag if set
71
- if ((0, fs_1.existsSync)(PAUSE_FLAG)) {
72
- (0, child_process_1.execSync)("rm -f ".concat(PAUSE_FLAG));
73
- }
74
- return [4 /*yield*/, bot.sendMessage(chatId, "\uD83D\uDED1 *CANCELLED*\n\n" +
75
- "Cancel flag set. Current task will stop.\n" +
76
- "Use /resume to start fresh, or /status to check state.", { parse_mode: 'Markdown' })];
77
- case 2:
78
- _a.sent();
79
- // Log the cancel action
80
- console.log("[CANCEL] Cancel requested by chat ".concat(chatId, " at ").concat(new Date().toISOString()));
81
- return [3 /*break*/, 5];
82
- case 3:
83
- error_1 = _a.sent();
84
- return [4 /*yield*/, bot.sendMessage(chatId, "\u274C Error setting cancel flag: ".concat(error_1), { parse_mode: 'Markdown' })];
85
- case 4:
86
- _a.sent();
87
- return [3 /*break*/, 5];
88
- case 5: return [2 /*return*/];
89
- }
90
- });
91
- }); });
92
- }
93
- /**
94
- * Check if cancel was requested
95
- */
96
- function isCancelled() {
97
- if (!(0, fs_1.existsSync)(CANCEL_FLAG))
98
- return false;
99
- // Auto-expire cancel after 5 minutes
100
- try {
101
- var _a = require('fs'), readFileSync = _a.readFileSync, unlinkSync = _a.unlinkSync;
102
- var timestamp = parseInt(readFileSync(CANCEL_FLAG, 'utf-8'));
103
- if (Date.now() - timestamp > 5 * 60 * 1000) {
104
- unlinkSync(CANCEL_FLAG);
105
- return false;
106
- }
107
- return true;
108
- }
109
- catch (_b) {
110
- return false;
111
- }
112
- }
113
- /**
114
- * Clear cancel flag
115
- */
116
- function clearCancel() {
117
- if ((0, fs_1.existsSync)(CANCEL_FLAG)) {
118
- (0, child_process_1.execSync)("rm -f ".concat(CANCEL_FLAG));
119
- }
120
- }
@@ -1,59 +0,0 @@
1
- "use strict";
2
- /**
3
- * /clear command - Reset conversation memory
4
- */
5
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
7
- return new (P || (P = Promise))(function (resolve, reject) {
8
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
9
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
10
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
11
- step((generator = generator.apply(thisArg, _arguments || [])).next());
12
- });
13
- };
14
- var __generator = (this && this.__generator) || function (thisArg, body) {
15
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
16
- return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
17
- function verb(n) { return function (v) { return step([n, v]); }; }
18
- function step(op) {
19
- if (f) throw new TypeError("Generator is already executing.");
20
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
21
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
22
- if (y = 0, t) op = [op[0] & 2, t.value];
23
- switch (op[0]) {
24
- case 0: case 1: t = op; break;
25
- case 4: _.label++; return { value: op[1], done: false };
26
- case 5: _.label++; y = op[1]; op = [0]; continue;
27
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
28
- default:
29
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
30
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
31
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
32
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
33
- if (t[2]) _.ops.pop();
34
- _.trys.pop(); continue;
35
- }
36
- op = body.call(thisArg, _);
37
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
38
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
39
- }
40
- };
41
- Object.defineProperty(exports, "__esModule", { value: true });
42
- exports.registerClearCommand = void 0;
43
- var registerClearCommand = function (bot, memory) {
44
- bot.onText(/\/clear/, function (msg) { return __awaiter(void 0, void 0, void 0, function () {
45
- var chatId;
46
- return __generator(this, function (_a) {
47
- switch (_a.label) {
48
- case 0:
49
- chatId = msg.chat.id;
50
- memory.clear(chatId);
51
- return [4 /*yield*/, bot.sendMessage(chatId, '๐Ÿงน Conversation memory cleared. Starting fresh!')];
52
- case 1:
53
- _a.sent();
54
- return [2 /*return*/];
55
- }
56
- });
57
- }); });
58
- };
59
- exports.registerClearCommand = registerClearCommand;
@@ -1,118 +0,0 @@
1
- "use strict";
2
- /**
3
- * /doppler command - Check Doppler config
4
- */
5
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
7
- return new (P || (P = Promise))(function (resolve, reject) {
8
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
9
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
10
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
11
- step((generator = generator.apply(thisArg, _arguments || [])).next());
12
- });
13
- };
14
- var __generator = (this && this.__generator) || function (thisArg, body) {
15
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
16
- return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
17
- function verb(n) { return function (v) { return step([n, v]); }; }
18
- function step(op) {
19
- if (f) throw new TypeError("Generator is already executing.");
20
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
21
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
22
- if (y = 0, t) op = [op[0] & 2, t.value];
23
- switch (op[0]) {
24
- case 0: case 1: t = op; break;
25
- case 4: _.label++; return { value: op[1], done: false };
26
- case 5: _.label++; y = op[1]; op = [0]; continue;
27
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
28
- default:
29
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
30
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
31
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
32
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
33
- if (t[2]) _.ops.pop();
34
- _.trys.pop(); continue;
35
- }
36
- op = body.call(thisArg, _);
37
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
38
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
39
- }
40
- };
41
- Object.defineProperty(exports, "__esModule", { value: true });
42
- exports.registerDopplerCommand = registerDopplerCommand;
43
- var child_process_1 = require("child_process");
44
- function registerDopplerCommand(bot, _memory, _tools) {
45
- var _this = this;
46
- bot.onText(/\/doppler(?:\s+(.+))?/, function (msg, match) { return __awaiter(_this, void 0, void 0, function () {
47
- var chatId, subCommand, statusMsg, secrets, secretList, statusMsg, projectRaw, projectMatch, project, configRaw, configMatch, config, tokenCheck, error_1;
48
- var _a;
49
- return __generator(this, function (_b) {
50
- switch (_b.label) {
51
- case 0:
52
- chatId = msg.chat.id;
53
- subCommand = (_a = match === null || match === void 0 ? void 0 : match[1]) === null || _a === void 0 ? void 0 : _a.trim();
54
- _b.label = 1;
55
- case 1:
56
- _b.trys.push([1, 6, , 8]);
57
- if (!(subCommand === 'secrets')) return [3 /*break*/, 3];
58
- statusMsg = 'Doppler Secrets\n\n';
59
- try {
60
- secrets = (0, child_process_1.execSync)('doppler secrets --plain 2>&1 | cut -d\'\\t\' -f1', {
61
- encoding: 'utf-8',
62
- cwd: '/root'
63
- });
64
- secretList = secrets.trim().split('\n').filter(function (s) { return s.length > 0; });
65
- statusMsg += "Found ".concat(secretList.length, " secrets:\n\n");
66
- statusMsg += secretList.slice(0, 20).join('\n');
67
- if (secretList.length > 20) {
68
- statusMsg += "\n... and ".concat(secretList.length - 20, " more");
69
- }
70
- }
71
- catch (e) {
72
- statusMsg += "Error: ".concat(e.message);
73
- }
74
- return [4 /*yield*/, bot.sendMessage(chatId, statusMsg)];
75
- case 2:
76
- _b.sent();
77
- return [3 /*break*/, 5];
78
- case 3:
79
- statusMsg = '*Doppler Status*\n\n';
80
- try {
81
- projectRaw = (0, child_process_1.execSync)('doppler configure get project 2>/dev/null', { encoding: 'utf-8', cwd: '/root' });
82
- projectMatch = projectRaw.match(/โ”‚\s*project\s*โ”‚\s*(\S+)\s*โ”‚/);
83
- project = projectMatch ? projectMatch[1] : 'Not set';
84
- configRaw = (0, child_process_1.execSync)('doppler configure get config 2>/dev/null', { encoding: 'utf-8', cwd: '/root' });
85
- configMatch = configRaw.match(/โ”‚\s*config\s*โ”‚\s*(\S+)\s*โ”‚/);
86
- config = configMatch ? configMatch[1] : 'Not set';
87
- statusMsg += "Project: `".concat(project, "`\n");
88
- statusMsg += "Config: `".concat(config, "`\n");
89
- tokenCheck = (0, child_process_1.execSync)('doppler me 2>&1 | head -5', { encoding: 'utf-8', cwd: '/root' });
90
- if (tokenCheck.includes('WORKPLACE') || tokenCheck.includes('TOKEN PREVIEW')) {
91
- statusMsg += "Token: Valid";
92
- }
93
- else {
94
- statusMsg += "Token: Not configured";
95
- }
96
- statusMsg += "\n\n_Commands:_\n";
97
- statusMsg += "/doppler secrets - List secret names";
98
- }
99
- catch (_c) {
100
- statusMsg += "Not configured\n\n";
101
- statusMsg += "Run: `doppler setup`";
102
- }
103
- return [4 /*yield*/, bot.sendMessage(chatId, statusMsg, { parse_mode: 'Markdown' })];
104
- case 4:
105
- _b.sent();
106
- _b.label = 5;
107
- case 5: return [3 /*break*/, 8];
108
- case 6:
109
- error_1 = _b.sent();
110
- return [4 /*yield*/, bot.sendMessage(chatId, "Error: ".concat(error_1.message))];
111
- case 7:
112
- _b.sent();
113
- return [3 /*break*/, 8];
114
- case 8: return [2 /*return*/];
115
- }
116
- });
117
- }); });
118
- }