@0xmaxma/claude-gateway 1.1.9 → 1.2.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 +61 -1
- package/dist/agent/builtin-commands.d.ts +10 -0
- package/dist/agent/builtin-commands.d.ts.map +1 -0
- package/dist/agent/builtin-commands.js +38 -0
- package/dist/agent/builtin-commands.js.map +1 -0
- package/dist/agent/runner.d.ts +7 -5
- package/dist/agent/runner.d.ts.map +1 -1
- package/dist/agent/runner.js +56 -30
- package/dist/agent/runner.js.map +1 -1
- package/dist/agent/workspace-loader.d.ts.map +1 -1
- package/dist/agent/workspace-loader.js +9 -4
- package/dist/agent/workspace-loader.js.map +1 -1
- package/dist/api/apps-router.d.ts +7 -0
- package/dist/api/apps-router.d.ts.map +1 -0
- package/dist/api/apps-router.js +242 -0
- package/dist/api/apps-router.js.map +1 -0
- package/dist/api/gateway-router.d.ts +17 -1
- package/dist/api/gateway-router.d.ts.map +1 -1
- package/dist/api/gateway-router.js +171 -2
- package/dist/api/gateway-router.js.map +1 -1
- package/dist/api/router.d.ts.map +1 -1
- package/dist/api/router.js +385 -4
- package/dist/api/router.js.map +1 -1
- package/dist/apps/agent-manager.d.ts +76 -0
- package/dist/apps/agent-manager.d.ts.map +1 -0
- package/dist/apps/agent-manager.js +311 -0
- package/dist/apps/agent-manager.js.map +1 -0
- package/dist/apps/compose-generator.d.ts +108 -0
- package/dist/apps/compose-generator.d.ts.map +1 -0
- package/dist/apps/compose-generator.js +687 -0
- package/dist/apps/compose-generator.js.map +1 -0
- package/dist/apps/installer.d.ts +101 -0
- package/dist/apps/installer.d.ts.map +1 -0
- package/dist/apps/installer.js +898 -0
- package/dist/apps/installer.js.map +1 -0
- package/dist/apps/registry-client.d.ts +37 -0
- package/dist/apps/registry-client.d.ts.map +1 -0
- package/dist/apps/registry-client.js +106 -0
- package/dist/apps/registry-client.js.map +1 -0
- package/dist/apps/registry.d.ts +54 -0
- package/dist/apps/registry.d.ts.map +1 -0
- package/dist/apps/registry.js +182 -0
- package/dist/apps/registry.js.map +1 -0
- package/dist/apps/socket-server.d.ts +46 -0
- package/dist/apps/socket-server.d.ts.map +1 -0
- package/dist/apps/socket-server.js +297 -0
- package/dist/apps/socket-server.js.map +1 -0
- package/dist/config/watcher.d.ts +1 -0
- package/dist/config/watcher.d.ts.map +1 -1
- package/dist/config/watcher.js +55 -2
- package/dist/config/watcher.js.map +1 -1
- package/dist/index.js +170 -3
- package/dist/index.js.map +1 -1
- package/dist/session/process.d.ts.map +1 -1
- package/dist/session/process.js +47 -6
- package/dist/session/process.js.map +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/mcp/server.ts +2 -0
- package/mcp/tools/apps/client.ts +78 -0
- package/mcp/tools/apps/module.ts +211 -0
- package/mcp/tools/apps/skills/app-status/SKILL.md +48 -0
- package/mcp/tools/apps/skills/create-app-yaml/SKILL.md +94 -0
- package/mcp/tools/apps/skills/install-app/SKILL.md +102 -0
- package/mcp/tools/apps/skills/list-apps/SKILL.md +34 -0
- package/mcp/tools/telegram/receiver-server.ts +36 -2
- package/package.json +1 -1
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.SocketServer = void 0;
|
|
37
|
+
exports.parseTimeoutMs = parseTimeoutMs;
|
|
38
|
+
const fs = __importStar(require("node:fs"));
|
|
39
|
+
const http = __importStar(require("node:http"));
|
|
40
|
+
const node_child_process_1 = require("node:child_process");
|
|
41
|
+
const path = __importStar(require("node:path"));
|
|
42
|
+
// ─── Server ───────────────────────────────────────────────────────────────────
|
|
43
|
+
/**
|
|
44
|
+
* Manages per-app Unix socket servers.
|
|
45
|
+
* Each socket is a separate HTTP server listening on a Unix domain socket file.
|
|
46
|
+
* Containers with the socket volume-mounted send HTTP requests here to execute
|
|
47
|
+
* declared scripts on the VM host.
|
|
48
|
+
*/
|
|
49
|
+
class SocketServer {
|
|
50
|
+
constructor() {
|
|
51
|
+
this.servers = new Map();
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Create a Unix socket server at socketPath.
|
|
55
|
+
* The socket is created with the caller's umask; chmod 600 is applied after bind.
|
|
56
|
+
*/
|
|
57
|
+
start(socketPath, config) {
|
|
58
|
+
if (this.servers.has(socketPath)) {
|
|
59
|
+
return Promise.resolve();
|
|
60
|
+
}
|
|
61
|
+
// Pre-compile arg patterns at startup to avoid per-request ReDoS risk
|
|
62
|
+
for (const scriptDef of Object.values(config.scripts)) {
|
|
63
|
+
for (const argDef of scriptDef.args ?? []) {
|
|
64
|
+
if (argDef.pattern && !argDef._compiledPattern) {
|
|
65
|
+
try {
|
|
66
|
+
argDef._compiledPattern = new RegExp(argDef.pattern);
|
|
67
|
+
}
|
|
68
|
+
catch { /* invalid pattern */ }
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return new Promise((resolve, reject) => {
|
|
73
|
+
// Ensure parent directory exists (socket lives inside a per-app subdirectory)
|
|
74
|
+
try {
|
|
75
|
+
fs.mkdirSync(path.dirname(socketPath), { recursive: true });
|
|
76
|
+
}
|
|
77
|
+
catch { /* exists */ }
|
|
78
|
+
// Clean up any stale socket or leftover directory before binding
|
|
79
|
+
if (fs.existsSync(socketPath)) {
|
|
80
|
+
try {
|
|
81
|
+
fs.rmSync(socketPath, { recursive: true, force: true });
|
|
82
|
+
}
|
|
83
|
+
catch { /* already gone */ }
|
|
84
|
+
}
|
|
85
|
+
const server = http.createServer((req, res) => {
|
|
86
|
+
void this.handleRequest(req, res, socketPath, config);
|
|
87
|
+
});
|
|
88
|
+
const netServer = server.listen(socketPath, () => {
|
|
89
|
+
try {
|
|
90
|
+
// 0o666: containers with cap_drop:ALL lack CAP_DAC_OVERRIDE so they cannot
|
|
91
|
+
// bypass file permissions even as root — world-writable is required here.
|
|
92
|
+
// Exposure is bounded to containers that have this socket explicitly bind-mounted
|
|
93
|
+
// in their compose file. On multi-tenant hosts, any host process can also reach
|
|
94
|
+
// this socket — ensure the host is not shared with untrusted processes.
|
|
95
|
+
fs.chmodSync(socketPath, 0o666);
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
// chmod may fail in test environments — not fatal
|
|
99
|
+
}
|
|
100
|
+
resolve();
|
|
101
|
+
});
|
|
102
|
+
netServer.on('error', (err) => {
|
|
103
|
+
this.servers.delete(socketPath);
|
|
104
|
+
reject(new Error(`Socket server failed: ${err.message}`));
|
|
105
|
+
});
|
|
106
|
+
this.servers.set(socketPath, netServer);
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
stop(socketPath) {
|
|
110
|
+
const server = this.servers.get(socketPath);
|
|
111
|
+
if (!server)
|
|
112
|
+
return;
|
|
113
|
+
server.close();
|
|
114
|
+
this.servers.delete(socketPath);
|
|
115
|
+
try {
|
|
116
|
+
fs.rmSync(socketPath, { recursive: true, force: true });
|
|
117
|
+
// Clean up the parent socket directory if empty (created per-app at install time)
|
|
118
|
+
const parentDir = path.dirname(socketPath);
|
|
119
|
+
try {
|
|
120
|
+
fs.rmdirSync(parentDir);
|
|
121
|
+
}
|
|
122
|
+
catch { /* non-empty or already gone — OK */ }
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
// Already removed
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
stopAll() {
|
|
129
|
+
for (const socketPath of this.servers.keys()) {
|
|
130
|
+
this.stop(socketPath);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/** Stop all sockets whose path is under the app's socket directory (e.g. "my-app-svc/"). */
|
|
134
|
+
stopApp(appName) {
|
|
135
|
+
const prefix = `${appName}-`;
|
|
136
|
+
for (const socketPath of [...this.servers.keys()]) {
|
|
137
|
+
const parts = socketPath.split('/');
|
|
138
|
+
// New layout: .../sockets/appName-svcName/gateway.sock — check parent dir
|
|
139
|
+
const parentDir = parts[parts.length - 2] ?? '';
|
|
140
|
+
// Legacy layout: .../sockets/appName-svcName.sock — check basename
|
|
141
|
+
const basename = parts[parts.length - 1] ?? '';
|
|
142
|
+
if (parentDir.startsWith(prefix) || basename.startsWith(prefix)) {
|
|
143
|
+
this.stop(socketPath);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// ─── Request handler ────────────────────────────────────────────────────
|
|
148
|
+
async handleRequest(req, res, _socketPath, config) {
|
|
149
|
+
// Only POST /tool/script/:name is supported
|
|
150
|
+
const match = req.url?.match(/^\/tool\/script\/([a-z0-9_-]+)$/i);
|
|
151
|
+
if (req.method !== 'POST' || !match) {
|
|
152
|
+
this.send(res, 404, { error: 'Not found' });
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
const scriptName = match[1];
|
|
156
|
+
const scriptDef = config.scripts[scriptName];
|
|
157
|
+
if (!scriptDef) {
|
|
158
|
+
this.send(res, 403, {
|
|
159
|
+
error: `Script "${scriptName}" is not declared for this app`,
|
|
160
|
+
});
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
// Parse request body
|
|
164
|
+
let body;
|
|
165
|
+
try {
|
|
166
|
+
body = await this.readBody(req);
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
this.send(res, 400, { error: 'Invalid JSON body' });
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
const providedArgs = (body['args'] ?? {});
|
|
173
|
+
// Validate args against declared patterns
|
|
174
|
+
const validationError = this.validateArgs(providedArgs, scriptDef);
|
|
175
|
+
if (validationError) {
|
|
176
|
+
this.send(res, 400, { error: validationError });
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
// Build positional args array (in declaration order)
|
|
180
|
+
const positional = [];
|
|
181
|
+
for (const argDef of scriptDef.args ?? []) {
|
|
182
|
+
const val = providedArgs[argDef.name];
|
|
183
|
+
if (val !== undefined) {
|
|
184
|
+
positional.push(String(val));
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
// Execute script via bash — re-resolve realpath at execute time to guard against symlink swaps
|
|
188
|
+
const scriptAbsPath = path.resolve(config.appDir, scriptDef.path);
|
|
189
|
+
let realScriptPath;
|
|
190
|
+
let realAppDir;
|
|
191
|
+
try {
|
|
192
|
+
realScriptPath = fs.realpathSync(scriptAbsPath);
|
|
193
|
+
realAppDir = fs.realpathSync(config.appDir);
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
this.send(res, 403, { error: 'Script not accessible' });
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
if (!realScriptPath.startsWith(realAppDir + path.sep) && realScriptPath !== realAppDir) {
|
|
200
|
+
this.send(res, 403, { error: 'Script path escapes app directory' });
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
// Minimal env — never expose host secrets to scripts
|
|
204
|
+
const scriptEnv = {
|
|
205
|
+
PATH: process.env['PATH'] ?? '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
|
|
206
|
+
HOME: process.env['HOME'] ?? '/root',
|
|
207
|
+
};
|
|
208
|
+
try {
|
|
209
|
+
const result = (0, node_child_process_1.spawnSync)('bash', [realScriptPath, ...positional], {
|
|
210
|
+
encoding: 'utf-8',
|
|
211
|
+
timeout: scriptDef.timeoutMs,
|
|
212
|
+
env: scriptEnv,
|
|
213
|
+
});
|
|
214
|
+
this.send(res, 200, {
|
|
215
|
+
stdout: result.stdout ?? '',
|
|
216
|
+
stderr: result.stderr ?? '',
|
|
217
|
+
exitCode: result.status ?? 1,
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
catch (err) {
|
|
221
|
+
this.send(res, 500, {
|
|
222
|
+
error: `Script execution failed: ${err.message}`,
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
validateArgs(provided, scriptDef) {
|
|
227
|
+
const MAX_ARG_LEN = 256;
|
|
228
|
+
for (const argDef of scriptDef.args ?? []) {
|
|
229
|
+
const val = provided[argDef.name];
|
|
230
|
+
if (val === undefined)
|
|
231
|
+
continue; // Optional args are OK
|
|
232
|
+
if (typeof val !== 'string') {
|
|
233
|
+
return `Argument "${argDef.name}" must be a string`;
|
|
234
|
+
}
|
|
235
|
+
// Cap value length before regex test to prevent ReDoS from catastrophic backtracking
|
|
236
|
+
if (val.length > MAX_ARG_LEN) {
|
|
237
|
+
return `Argument "${argDef.name}" exceeds maximum length of ${MAX_ARG_LEN}`;
|
|
238
|
+
}
|
|
239
|
+
if (argDef.pattern) {
|
|
240
|
+
const re = argDef._compiledPattern;
|
|
241
|
+
if (!re) {
|
|
242
|
+
return `Internal error: invalid pattern for argument "${argDef.name}"`;
|
|
243
|
+
}
|
|
244
|
+
if (!re.test(val)) {
|
|
245
|
+
return `Argument "${argDef.name}" does not match required pattern`;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return null;
|
|
250
|
+
}
|
|
251
|
+
readBody(req) {
|
|
252
|
+
const MAX_BODY = 1 * 1024 * 1024; // 1 MB
|
|
253
|
+
return new Promise((resolve, reject) => {
|
|
254
|
+
const chunks = [];
|
|
255
|
+
let size = 0;
|
|
256
|
+
req.on('data', (chunk) => {
|
|
257
|
+
size += chunk.length;
|
|
258
|
+
if (size > MAX_BODY) {
|
|
259
|
+
reject(new Error('Request body too large'));
|
|
260
|
+
req.destroy();
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
chunks.push(chunk);
|
|
264
|
+
});
|
|
265
|
+
req.on('end', () => {
|
|
266
|
+
try {
|
|
267
|
+
const raw = Buffer.concat(chunks).toString('utf-8');
|
|
268
|
+
resolve(raw ? JSON.parse(raw) : {});
|
|
269
|
+
}
|
|
270
|
+
catch (e) {
|
|
271
|
+
reject(e);
|
|
272
|
+
}
|
|
273
|
+
});
|
|
274
|
+
req.on('error', reject);
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
send(res, status, body) {
|
|
278
|
+
const json = JSON.stringify(body);
|
|
279
|
+
res.writeHead(status, {
|
|
280
|
+
'Content-Type': 'application/json',
|
|
281
|
+
'Content-Length': Buffer.byteLength(json),
|
|
282
|
+
});
|
|
283
|
+
res.end(json);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
exports.SocketServer = SocketServer;
|
|
287
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
288
|
+
/** Parse "60s", "10s", "5s" → milliseconds. Defaults to 30000. */
|
|
289
|
+
function parseTimeoutMs(timeout) {
|
|
290
|
+
if (!timeout)
|
|
291
|
+
return 30000;
|
|
292
|
+
const m = timeout.match(/^(\d+)s$/);
|
|
293
|
+
if (!m)
|
|
294
|
+
return 30000;
|
|
295
|
+
return parseInt(m[1], 10) * 1000;
|
|
296
|
+
}
|
|
297
|
+
//# sourceMappingURL=socket-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket-server.js","sourceRoot":"","sources":["../../src/apps/socket-server.ts"],"names":[],"mappings":"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"}
|
package/dist/config/watcher.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export declare class ConfigWatcher extends EventEmitter {
|
|
|
14
14
|
on(event: 'changes', listener: (changes: ConfigChange[], newCfg: GatewayConfig, oldCfg: GatewayConfig) => void): this;
|
|
15
15
|
on(event: 'agent.added', listener: (agent: AgentConfig) => void): this;
|
|
16
16
|
on(event: 'channel.added', listener: (agentId: string, channel: string) => void): this;
|
|
17
|
+
on(event: 'channel.removed', listener: (agentId: string, channel: string) => void): this;
|
|
17
18
|
private watchHandle;
|
|
18
19
|
private currentConfig;
|
|
19
20
|
constructor(configPath: string, initialConfig: GatewayConfig, logger: Logger);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/config/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/config/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAI9D,QAAA,MAAM,2BAA2B,EAAE,MAAM,EAOxC,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;CACxB;AAOD,qBAAa,aAAc,SAAQ,YAAY;IAc3C,OAAO,CAAC,QAAQ,CAAC,UAAU;IAE3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAfzB,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,KAAK,IAAI,GAAG,IAAI;IACrH,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI;IACtE,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IACtF,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAMxF,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,aAAa,CAAgB;gBAGlB,UAAU,EAAE,MAAM,EACnC,aAAa,EAAE,aAAa,EACX,MAAM,EAAE,MAAM;IAMjC,KAAK,IAAI,IAAI;IASb,IAAI,IAAI,IAAI;IAKZ,kCAAkC;IAClC,SAAS,IAAI,aAAa;IAI1B,MAAM,IAAI,IAAI;IAgFd,OAAO,CAAC,UAAU;CAoDnB;AAED,2EAA2E;AAC3E,iBAAS,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAoBlD;AAGD,OAAO,EAAE,SAAS,IAAI,UAAU,EAAE,2BAA2B,EAAE,CAAC"}
|
package/dist/config/watcher.js
CHANGED
|
@@ -1,8 +1,42 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.HOT_RELOADABLE_AGENT_FIELDS = exports.ConfigWatcher = void 0;
|
|
4
37
|
exports._deepEqual = deepEqual;
|
|
5
38
|
const events_1 = require("events");
|
|
39
|
+
const os = __importStar(require("os"));
|
|
6
40
|
const loader_1 = require("./loader");
|
|
7
41
|
const factory_1 = require("../watch/factory");
|
|
8
42
|
// Fields that can be hot-reloaded without restarting the gateway
|
|
@@ -47,6 +81,7 @@ class ConfigWatcher extends events_1.EventEmitter {
|
|
|
47
81
|
let newConfig;
|
|
48
82
|
try {
|
|
49
83
|
newConfig = (0, loader_1.loadConfig)(this.configPath);
|
|
84
|
+
newConfig.gateway.logDir = newConfig.gateway.logDir.replace(/^~(?=\/|$)/, os.homedir());
|
|
50
85
|
}
|
|
51
86
|
catch (err) {
|
|
52
87
|
this.logger.error('Config reload failed, keeping current config', {
|
|
@@ -77,18 +112,36 @@ class ConfigWatcher extends events_1.EventEmitter {
|
|
|
77
112
|
});
|
|
78
113
|
}
|
|
79
114
|
this.emit('changes', fieldChanges, newConfig, oldConfig);
|
|
80
|
-
// Emit channel.added
|
|
115
|
+
// Emit channel.added / channel.removed when tokens change on existing agents
|
|
81
116
|
for (const change of fieldChanges) {
|
|
82
|
-
|
|
117
|
+
const added = !change.oldValue && change.newValue;
|
|
118
|
+
const removed = change.oldValue && !change.newValue;
|
|
119
|
+
// Token replaced (revoke + recreate): stop old receiver, start new one
|
|
120
|
+
const replaced = change.oldValue && change.newValue && change.oldValue !== change.newValue;
|
|
121
|
+
if (added || replaced) {
|
|
83
122
|
if (change.field === 'discord.botToken') {
|
|
123
|
+
if (replaced)
|
|
124
|
+
this.emit('channel.removed', change.agentId, 'discord');
|
|
84
125
|
this.logger.info('Discord channel added to agent', { agentId: change.agentId });
|
|
85
126
|
this.emit('channel.added', change.agentId, 'discord');
|
|
86
127
|
}
|
|
87
128
|
if (change.field === 'telegram.botToken') {
|
|
129
|
+
if (replaced)
|
|
130
|
+
this.emit('channel.removed', change.agentId, 'telegram');
|
|
88
131
|
this.logger.info('Telegram channel added to agent', { agentId: change.agentId });
|
|
89
132
|
this.emit('channel.added', change.agentId, 'telegram');
|
|
90
133
|
}
|
|
91
134
|
}
|
|
135
|
+
if (removed) {
|
|
136
|
+
if (change.field === 'discord.botToken') {
|
|
137
|
+
this.logger.info('Discord channel removed from agent', { agentId: change.agentId });
|
|
138
|
+
this.emit('channel.removed', change.agentId, 'discord');
|
|
139
|
+
}
|
|
140
|
+
if (change.field === 'telegram.botToken') {
|
|
141
|
+
this.logger.info('Telegram channel removed from agent', { agentId: change.agentId });
|
|
142
|
+
this.emit('channel.removed', change.agentId, 'telegram');
|
|
143
|
+
}
|
|
144
|
+
}
|
|
92
145
|
}
|
|
93
146
|
}
|
|
94
147
|
// Emit agent.added for each new agent
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/config/watcher.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/config/watcher.ts"],"names":[],"mappings":"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"}
|