@openclaw-cloud/agent-controller 1.0.0-beta.3 → 1.0.0-beta.4
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/handlers/chat.js +56 -0
- package/dist/handlers/chat.js.map +1 -1
- package/dist/handlers/knowledge-sync.js +19 -0
- package/dist/handlers/knowledge-sync.js.map +1 -1
- package/dist/handlers/package-install.js +26 -12
- package/dist/handlers/package-install.js.map +1 -1
- package/dist/handlers/telegram-webhook.js +23 -0
- package/dist/handlers/telegram-webhook.js.map +1 -1
- package/package.json +1 -1
package/dist/handlers/chat.js
CHANGED
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
import { getProvider } from '../providers/index.js';
|
|
2
2
|
import { toErrorMessage } from '../utils/response.js';
|
|
3
|
+
import { logCollector } from '../connection.js';
|
|
3
4
|
export async function handleChatListSessions(command, publish) {
|
|
5
|
+
logCollector?.push('command_received', 'info', `Command: ${command.type}`, {
|
|
6
|
+
commandId: command.id,
|
|
7
|
+
});
|
|
8
|
+
const startMs = Date.now();
|
|
4
9
|
const provider = getProvider();
|
|
5
10
|
if (!provider) {
|
|
11
|
+
logCollector?.push('command_failed', 'error', `${command.type} failed: Chat provider not available`, {
|
|
12
|
+
commandId: command.id,
|
|
13
|
+
durationMs: Date.now() - startMs,
|
|
14
|
+
});
|
|
6
15
|
await publish({
|
|
7
16
|
type: 'chat_sessions_response',
|
|
8
17
|
correlationId: command.id,
|
|
@@ -13,9 +22,18 @@ export async function handleChatListSessions(command, publish) {
|
|
|
13
22
|
}
|
|
14
23
|
try {
|
|
15
24
|
const sessions = await provider.listSessions();
|
|
25
|
+
logCollector?.push('command_completed', 'info', `${command.type} completed`, {
|
|
26
|
+
commandId: command.id,
|
|
27
|
+
durationMs: Date.now() - startMs,
|
|
28
|
+
sessionCount: sessions.length,
|
|
29
|
+
});
|
|
16
30
|
await publish({ type: 'chat_sessions_response', correlationId: command.id, sessions });
|
|
17
31
|
}
|
|
18
32
|
catch (err) {
|
|
33
|
+
logCollector?.push('command_failed', 'error', `${command.type} failed: ${toErrorMessage(err)}`, {
|
|
34
|
+
commandId: command.id,
|
|
35
|
+
durationMs: Date.now() - startMs,
|
|
36
|
+
});
|
|
19
37
|
await publish({
|
|
20
38
|
type: 'chat_sessions_response',
|
|
21
39
|
correlationId: command.id,
|
|
@@ -25,9 +43,17 @@ export async function handleChatListSessions(command, publish) {
|
|
|
25
43
|
}
|
|
26
44
|
}
|
|
27
45
|
export async function handleChatHistory(command, publish) {
|
|
46
|
+
logCollector?.push('command_received', 'info', `Command: ${command.type}`, {
|
|
47
|
+
commandId: command.id,
|
|
48
|
+
});
|
|
49
|
+
const startMs = Date.now();
|
|
28
50
|
const { sessionKey, limit } = command.payload;
|
|
29
51
|
const provider = getProvider();
|
|
30
52
|
if (!provider) {
|
|
53
|
+
logCollector?.push('command_failed', 'error', `${command.type} failed: Chat provider not available`, {
|
|
54
|
+
commandId: command.id,
|
|
55
|
+
durationMs: Date.now() - startMs,
|
|
56
|
+
});
|
|
31
57
|
await publish({
|
|
32
58
|
type: 'chat_history_response',
|
|
33
59
|
correlationId: command.id,
|
|
@@ -38,9 +64,18 @@ export async function handleChatHistory(command, publish) {
|
|
|
38
64
|
}
|
|
39
65
|
try {
|
|
40
66
|
const messages = await provider.getHistory(sessionKey, limit ?? 200);
|
|
67
|
+
logCollector?.push('command_completed', 'info', `${command.type} completed`, {
|
|
68
|
+
commandId: command.id,
|
|
69
|
+
durationMs: Date.now() - startMs,
|
|
70
|
+
messageCount: messages.length,
|
|
71
|
+
});
|
|
41
72
|
await publish({ type: 'chat_history_response', correlationId: command.id, messages });
|
|
42
73
|
}
|
|
43
74
|
catch (err) {
|
|
75
|
+
logCollector?.push('command_failed', 'error', `${command.type} failed: ${toErrorMessage(err)}`, {
|
|
76
|
+
commandId: command.id,
|
|
77
|
+
durationMs: Date.now() - startMs,
|
|
78
|
+
});
|
|
44
79
|
await publish({
|
|
45
80
|
type: 'chat_history_response',
|
|
46
81
|
correlationId: command.id,
|
|
@@ -50,12 +85,20 @@ export async function handleChatHistory(command, publish) {
|
|
|
50
85
|
}
|
|
51
86
|
}
|
|
52
87
|
export async function handleChatSend(command, publish, agentId) {
|
|
88
|
+
logCollector?.push('command_received', 'info', `Command: ${command.type}`, {
|
|
89
|
+
commandId: command.id,
|
|
90
|
+
});
|
|
91
|
+
const startMs = Date.now();
|
|
53
92
|
const { sessionKey, text, attachments } = command.payload;
|
|
54
93
|
const correlationId = command.id;
|
|
55
94
|
// Typing indicator
|
|
56
95
|
await publish({ type: 'chat_typing', agentId, state: true }).catch(() => { });
|
|
57
96
|
const provider = getProvider();
|
|
58
97
|
if (!provider) {
|
|
98
|
+
logCollector?.push('command_failed', 'error', `${command.type} failed: Chat provider not available`, {
|
|
99
|
+
commandId: command.id,
|
|
100
|
+
durationMs: Date.now() - startMs,
|
|
101
|
+
});
|
|
59
102
|
await publish({
|
|
60
103
|
type: 'chat_response',
|
|
61
104
|
correlationId,
|
|
@@ -75,14 +118,27 @@ export async function handleChatSend(command, publish, agentId) {
|
|
|
75
118
|
await publish({ type: 'chat_delta', correlationId, sessionKey, text: accumulated }).catch(() => { });
|
|
76
119
|
},
|
|
77
120
|
onDone: async (finalText) => {
|
|
121
|
+
logCollector?.push('command_completed', 'info', `${command.type} completed`, {
|
|
122
|
+
commandId: command.id,
|
|
123
|
+
durationMs: Date.now() - startMs,
|
|
124
|
+
sessionKey,
|
|
125
|
+
});
|
|
78
126
|
await publish({ type: 'chat_response', correlationId, sessionKey, text: finalText }).catch(() => { });
|
|
79
127
|
},
|
|
80
128
|
onError: async (error) => {
|
|
129
|
+
logCollector?.push('command_failed', 'error', `${command.type} failed: ${error}`, {
|
|
130
|
+
commandId: command.id,
|
|
131
|
+
durationMs: Date.now() - startMs,
|
|
132
|
+
});
|
|
81
133
|
await publish({ type: 'chat_response', correlationId, sessionKey, text: '', error }).catch(() => { });
|
|
82
134
|
},
|
|
83
135
|
});
|
|
84
136
|
}
|
|
85
137
|
catch (err) {
|
|
138
|
+
logCollector?.push('command_failed', 'error', `${command.type} failed: ${toErrorMessage(err)}`, {
|
|
139
|
+
commandId: command.id,
|
|
140
|
+
durationMs: Date.now() - startMs,
|
|
141
|
+
});
|
|
86
142
|
await publish({
|
|
87
143
|
type: 'chat_response',
|
|
88
144
|
correlationId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/handlers/chat.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/handlers/chat.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
import { pushKnowledgeToBackend } from '../utils/knowledge-push.js';
|
|
2
2
|
import { toErrorMessage } from '../utils/response.js';
|
|
3
|
+
import { logCollector } from '../connection.js';
|
|
3
4
|
export async function handleKnowledgeSync(command, api, agentId) {
|
|
5
|
+
logCollector?.push('command_received', 'info', `Command: ${command.type}`, {
|
|
6
|
+
commandId: command.id,
|
|
7
|
+
});
|
|
8
|
+
const startMs = Date.now();
|
|
4
9
|
const paths = command.payload.paths;
|
|
5
10
|
if (paths !== undefined && !Array.isArray(paths)) {
|
|
11
|
+
logCollector?.push('command_failed', 'error', `${command.type} failed: invalid paths payload`, {
|
|
12
|
+
commandId: command.id,
|
|
13
|
+
durationMs: Date.now() - startMs,
|
|
14
|
+
});
|
|
6
15
|
return {
|
|
7
16
|
id: command.id,
|
|
8
17
|
type: 'knowledge_sync',
|
|
@@ -12,6 +21,12 @@ export async function handleKnowledgeSync(command, api, agentId) {
|
|
|
12
21
|
}
|
|
13
22
|
try {
|
|
14
23
|
const { filesRead, filesUpdated } = await pushKnowledgeToBackend(api, agentId, paths);
|
|
24
|
+
logCollector?.push('command_completed', 'info', `${command.type} completed`, {
|
|
25
|
+
commandId: command.id,
|
|
26
|
+
durationMs: Date.now() - startMs,
|
|
27
|
+
filesRead,
|
|
28
|
+
filesUpdated,
|
|
29
|
+
});
|
|
15
30
|
return {
|
|
16
31
|
id: command.id,
|
|
17
32
|
type: 'knowledge_sync',
|
|
@@ -20,6 +35,10 @@ export async function handleKnowledgeSync(command, api, agentId) {
|
|
|
20
35
|
};
|
|
21
36
|
}
|
|
22
37
|
catch (e) {
|
|
38
|
+
logCollector?.push('command_failed', 'error', `${command.type} failed: ${toErrorMessage(e)}`, {
|
|
39
|
+
commandId: command.id,
|
|
40
|
+
durationMs: Date.now() - startMs,
|
|
41
|
+
});
|
|
23
42
|
return {
|
|
24
43
|
id: command.id,
|
|
25
44
|
type: 'knowledge_sync',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge-sync.js","sourceRoot":"","sources":["../../src/handlers/knowledge-sync.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"knowledge-sync.js","sourceRoot":"","sources":["../../src/handlers/knowledge-sync.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAqB,EACrB,GAAa,EACb,OAAe;IAEf,YAAY,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE,YAAY,OAAO,CAAC,IAAI,EAAE,EAAE;QACzE,SAAS,EAAE,OAAO,CAAC,EAAE;KACtB,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE3B,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAA6B,CAAC;IAC5D,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,YAAY,EAAE,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,gCAAgC,EAAE;YAC7F,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO;SACjC,CAAC,CAAC;QACH,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,qDAAqD;SAC7D,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,MAAM,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QACtF,YAAY,EAAE,IAAI,CAAC,mBAAmB,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,YAAY,EAAE;YAC3E,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO;YAChC,SAAS;YACT,YAAY;SACb,CAAC,CAAC;QACH,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE;SAClC,CAAC;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,YAAY,EAAE,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,YAAY,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE;YAC5F,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO;SACjC,CAAC,CAAC;QACH,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;SACzB,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -38,7 +38,12 @@ export async function handlePackageInstall(command) {
|
|
|
38
38
|
data: { installed: { apt: [], npm: [], pip: [] }, errors: [] },
|
|
39
39
|
};
|
|
40
40
|
}
|
|
41
|
-
|
|
41
|
+
logCollector?.push('command_received', 'info', `Command: ${command.type}`, {
|
|
42
|
+
commandId: command.id,
|
|
43
|
+
npm: npm.length ? npm : undefined,
|
|
44
|
+
pip: pip.length ? pip : undefined,
|
|
45
|
+
apt: apt.length ? apt : undefined,
|
|
46
|
+
});
|
|
42
47
|
const installed = { apt: [], npm: [], pip: [] };
|
|
43
48
|
const errors = [];
|
|
44
49
|
const deadline = Date.now() + INSTALL_TIMEOUT_MS;
|
|
@@ -67,28 +72,37 @@ export async function handlePackageInstall(command) {
|
|
|
67
72
|
}
|
|
68
73
|
// npm and pip: parallel within each type — independent registries, no global lock
|
|
69
74
|
await Promise.all(npm.map(async (pkg) => {
|
|
70
|
-
|
|
75
|
+
logCollector?.push('package_install_step', 'info', `npm install -g ${pkg}`, {
|
|
76
|
+
commandId: command.id,
|
|
77
|
+
manager: 'npm',
|
|
78
|
+
package: pkg,
|
|
79
|
+
});
|
|
71
80
|
const prevErrors = errors.length;
|
|
72
81
|
await tryInstall(pkg, `npm install -g ${pkg}`, 'npm');
|
|
73
82
|
if (errors.length > prevErrors) {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
83
|
+
logCollector?.push('package_install_step', 'error', `npm: ${pkg} failed: ${errors[errors.length - 1]?.error}`, {
|
|
84
|
+
commandId: command.id,
|
|
85
|
+
manager: 'npm',
|
|
86
|
+
package: pkg,
|
|
87
|
+
});
|
|
78
88
|
}
|
|
79
89
|
}));
|
|
80
90
|
await Promise.all(pip.map(async (pkg) => {
|
|
81
|
-
|
|
91
|
+
logCollector?.push('package_install_step', 'info', `pip install ${pkg}`, {
|
|
92
|
+
commandId: command.id,
|
|
93
|
+
manager: 'pip',
|
|
94
|
+
package: pkg,
|
|
95
|
+
});
|
|
82
96
|
const prevErrors = errors.length;
|
|
83
97
|
await tryInstall(pkg, `pip install ${pkg}`, 'pip');
|
|
84
98
|
if (errors.length > prevErrors) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
99
|
+
logCollector?.push('package_install_step', 'error', `pip: ${pkg} failed: ${errors[errors.length - 1]?.error}`, {
|
|
100
|
+
commandId: command.id,
|
|
101
|
+
manager: 'pip',
|
|
102
|
+
package: pkg,
|
|
103
|
+
});
|
|
89
104
|
}
|
|
90
105
|
}));
|
|
91
|
-
console.log(`[package_install] done: ${installed.npm.length + installed.apt.length + installed.pip.length} installed, ${errors.length} errors`);
|
|
92
106
|
logCollector?.push('package_install', errors.length ? 'warn' : 'info', `Packages installed: ${installed.npm.length + installed.apt.length + installed.pip.length}, errors: ${errors.length}`, { installed, errorCount: errors.length });
|
|
93
107
|
return {
|
|
94
108
|
id: command.id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-install.js","sourceRoot":"","sources":["../../src/handlers/package-install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,kBAAkB,GAAG,OAAO,CAAC,CAAC,kBAAkB;AAEtD;;;;;;;;GAQG;AACH,MAAM,oBAAoB,GAAG,iCAAiC,CAAC;AAE/D,SAAS,iBAAiB,CAAC,IAAY;IACrC,OAAO,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,WAAW,CAAC,GAAW,EAAE,SAAiB;IACjD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1C,IAAI,KAAK;gBAAE,MAAM,CAAC,KAAK,CAAC,CAAC;;gBACpB,OAAO,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAAqB;IAC9D,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,QAMpB,CAAC;IAEd,MAAM,GAAG,GAAG,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAC;IAChC,MAAM,GAAG,GAAG,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAC;IAChC,MAAM,GAAG,GAAG,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAC;IAEhC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7D,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,iBAAiB;YACvB,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;SAC/D,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"package-install.js","sourceRoot":"","sources":["../../src/handlers/package-install.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
import { toErrorMessage } from '../utils/response.js';
|
|
2
|
+
import { logCollector } from '../connection.js';
|
|
2
3
|
const WEBHOOK_PORT = 8787;
|
|
3
4
|
const TIMEOUT_MS = 10_000;
|
|
4
5
|
export async function handleTelegramWebhook(command) {
|
|
6
|
+
logCollector?.push('command_received', 'info', `Command: ${command.type}`, {
|
|
7
|
+
commandId: command.id,
|
|
8
|
+
});
|
|
9
|
+
const startMs = Date.now();
|
|
5
10
|
const { body, webhookSecret } = command.payload;
|
|
6
11
|
if (!body) {
|
|
12
|
+
logCollector?.push('command_failed', 'error', `${command.type} failed: missing body in payload`, {
|
|
13
|
+
commandId: command.id,
|
|
14
|
+
durationMs: Date.now() - startMs,
|
|
15
|
+
});
|
|
7
16
|
return {
|
|
8
17
|
id: command.id,
|
|
9
18
|
type: command.type,
|
|
@@ -25,6 +34,11 @@ export async function handleTelegramWebhook(command) {
|
|
|
25
34
|
signal: AbortSignal.timeout(TIMEOUT_MS),
|
|
26
35
|
});
|
|
27
36
|
if (!response.ok) {
|
|
37
|
+
logCollector?.push('command_failed', 'error', `${command.type} failed: gateway ${response.status}`, {
|
|
38
|
+
commandId: command.id,
|
|
39
|
+
durationMs: Date.now() - startMs,
|
|
40
|
+
statusCode: response.status,
|
|
41
|
+
});
|
|
28
42
|
return {
|
|
29
43
|
id: command.id,
|
|
30
44
|
type: command.type,
|
|
@@ -32,6 +46,11 @@ export async function handleTelegramWebhook(command) {
|
|
|
32
46
|
error: `Gateway responded with ${response.status}: ${response.statusText}`,
|
|
33
47
|
};
|
|
34
48
|
}
|
|
49
|
+
logCollector?.push('command_completed', 'info', `${command.type} completed`, {
|
|
50
|
+
commandId: command.id,
|
|
51
|
+
durationMs: Date.now() - startMs,
|
|
52
|
+
statusCode: response.status,
|
|
53
|
+
});
|
|
35
54
|
return {
|
|
36
55
|
id: command.id,
|
|
37
56
|
type: command.type,
|
|
@@ -40,6 +59,10 @@ export async function handleTelegramWebhook(command) {
|
|
|
40
59
|
};
|
|
41
60
|
}
|
|
42
61
|
catch (err) {
|
|
62
|
+
logCollector?.push('command_failed', 'error', `${command.type} failed: ${toErrorMessage(err)}`, {
|
|
63
|
+
commandId: command.id,
|
|
64
|
+
durationMs: Date.now() - startMs,
|
|
65
|
+
});
|
|
43
66
|
return {
|
|
44
67
|
id: command.id,
|
|
45
68
|
type: command.type,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telegram-webhook.js","sourceRoot":"","sources":["../../src/handlers/telegram-webhook.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"telegram-webhook.js","sourceRoot":"","sources":["../../src/handlers/telegram-webhook.ts"],"names":[],"mappings":"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"}
|