@minded-ai/mindedjs 3.1.41-beta.12 → 3.1.41-beta.13
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/cli/agentWorker.js +14 -0
- package/dist/cli/agentWorker.js.map +1 -1
- package/dist/cli/agentWorker.ts +19 -0
- package/dist/cli/lambdaHandlerTemplate.d.ts +3 -2
- package/dist/cli/lambdaHandlerTemplate.d.ts.map +1 -1
- package/dist/cli/lambdaHandlerTemplate.js +38 -5
- package/dist/cli/lambdaHandlerTemplate.js.map +1 -1
- package/dist/cli/lambdaHandlerTemplate.ts +46 -7
- package/package.json +1 -1
- package/src/cli/agentWorker.ts +19 -0
- package/src/cli/lambdaHandlerTemplate.ts +46 -7
package/dist/cli/agentWorker.js
CHANGED
|
@@ -10,6 +10,13 @@ process.on('message', async (message) => {
|
|
|
10
10
|
if (message.type === 'execute') {
|
|
11
11
|
try {
|
|
12
12
|
const { modulePath, agentFunctionName, agentFunctionBody } = message;
|
|
13
|
+
mindedjs_1.logger.info({
|
|
14
|
+
msg: 'Lambda agent worker invoked',
|
|
15
|
+
awsRequestId: message.awsRequestId,
|
|
16
|
+
awsFunctionName: message.awsFunctionName,
|
|
17
|
+
modulePath,
|
|
18
|
+
agentFunctionName,
|
|
19
|
+
});
|
|
13
20
|
if (!modulePath || !agentFunctionName) {
|
|
14
21
|
throw new Error('Missing required parameters');
|
|
15
22
|
}
|
|
@@ -45,6 +52,8 @@ process.on('message', async (message) => {
|
|
|
45
52
|
agent = null;
|
|
46
53
|
mindedjs_1.logger.error({
|
|
47
54
|
msg: 'Lambda agent runner execution error',
|
|
55
|
+
awsRequestId: message.awsRequestId,
|
|
56
|
+
awsFunctionName: message.awsFunctionName,
|
|
48
57
|
err,
|
|
49
58
|
});
|
|
50
59
|
// Send error response back to parent
|
|
@@ -61,6 +70,11 @@ process.on('message', async (message) => {
|
|
|
61
70
|
}
|
|
62
71
|
else if (message.type === 'cleanup') {
|
|
63
72
|
try {
|
|
73
|
+
mindedjs_1.logger.info({
|
|
74
|
+
msg: 'Lambda agent worker cleanup invoked',
|
|
75
|
+
awsRequestId: message.awsRequestId,
|
|
76
|
+
awsFunctionName: message.awsFunctionName,
|
|
77
|
+
});
|
|
64
78
|
// Call cleanup if available
|
|
65
79
|
(_a = agent === null || agent === void 0 ? void 0 : agent.onEnd) === null || _a === void 0 ? void 0 : _a.call(agent);
|
|
66
80
|
agent = null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentWorker.js","sourceRoot":"","sources":["../../src/cli/agentWorker.ts"],"names":[],"mappings":";AAAA,uEAAuE;;AAEvE,6DAA6D;AAC7D,kDAA6C;
|
|
1
|
+
{"version":3,"file":"agentWorker.js","sourceRoot":"","sources":["../../src/cli/agentWorker.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/agentWorker.ts
CHANGED
|
@@ -9,9 +9,13 @@ type WorkerMessage =
|
|
|
9
9
|
modulePath: string;
|
|
10
10
|
agentFunctionName: string;
|
|
11
11
|
agentFunctionBody: any;
|
|
12
|
+
awsRequestId: string;
|
|
13
|
+
awsFunctionName: string;
|
|
12
14
|
}
|
|
13
15
|
| {
|
|
14
16
|
type: 'cleanup';
|
|
17
|
+
awsRequestId: string;
|
|
18
|
+
awsFunctionName: string;
|
|
15
19
|
};
|
|
16
20
|
|
|
17
21
|
interface WorkerResponse {
|
|
@@ -30,6 +34,13 @@ process.on('message', async (message: WorkerMessage) => {
|
|
|
30
34
|
if (message.type === 'execute') {
|
|
31
35
|
try {
|
|
32
36
|
const { modulePath, agentFunctionName, agentFunctionBody } = message;
|
|
37
|
+
logger.info({
|
|
38
|
+
msg: 'Lambda agent worker invoked',
|
|
39
|
+
awsRequestId: message.awsRequestId,
|
|
40
|
+
awsFunctionName: message.awsFunctionName,
|
|
41
|
+
modulePath,
|
|
42
|
+
agentFunctionName,
|
|
43
|
+
});
|
|
33
44
|
|
|
34
45
|
if (!modulePath || !agentFunctionName) {
|
|
35
46
|
throw new Error('Missing required parameters');
|
|
@@ -71,6 +82,8 @@ process.on('message', async (message: WorkerMessage) => {
|
|
|
71
82
|
|
|
72
83
|
logger.error({
|
|
73
84
|
msg: 'Lambda agent runner execution error',
|
|
85
|
+
awsRequestId: message.awsRequestId,
|
|
86
|
+
awsFunctionName: message.awsFunctionName,
|
|
74
87
|
err,
|
|
75
88
|
});
|
|
76
89
|
|
|
@@ -88,6 +101,12 @@ process.on('message', async (message: WorkerMessage) => {
|
|
|
88
101
|
}
|
|
89
102
|
} else if (message.type === 'cleanup') {
|
|
90
103
|
try {
|
|
104
|
+
logger.info({
|
|
105
|
+
msg: 'Lambda agent worker cleanup invoked',
|
|
106
|
+
awsRequestId: message.awsRequestId,
|
|
107
|
+
awsFunctionName: message.awsFunctionName,
|
|
108
|
+
});
|
|
109
|
+
|
|
91
110
|
// Call cleanup if available
|
|
92
111
|
agent?.onEnd?.();
|
|
93
112
|
agent = null;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
interface LambdaContext {
|
|
2
|
-
getRemainingTimeInMillis(): number;
|
|
3
|
-
awsRequestId: string;
|
|
4
2
|
functionName: string;
|
|
3
|
+
functionVersion: string;
|
|
4
|
+
awsRequestId: string;
|
|
5
|
+
getRemainingTimeInMillis(): number;
|
|
5
6
|
}
|
|
6
7
|
export declare const handler: (event: any, context: LambdaContext) => Promise<{
|
|
7
8
|
statusCode: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lambdaHandlerTemplate.d.ts","sourceRoot":"","sources":["../../src/cli/lambdaHandlerTemplate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lambdaHandlerTemplate.d.ts","sourceRoot":"","sources":["../../src/cli/lambdaHandlerTemplate.ts"],"names":[],"mappings":"AAiCA,UAAU,aAAa;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,wBAAwB,IAAI,MAAM,CAAC;CACpC;AAED,eAAO,MAAM,OAAO,GAAU,OAAO,GAAG,EAAE,SAAS,aAAa;;;;;;;;EAiG/D,CAAC"}
|
|
@@ -43,6 +43,12 @@ const handler = async (event, context) => {
|
|
|
43
43
|
try {
|
|
44
44
|
const modulePath = '{MODULE_PATH}'; // Module path placeholder - DO NOT CHANGE THE {MODULE_PATH} TOKEN
|
|
45
45
|
const { agentFunctionName, agentFunctionBody } = event.body ? JSON.parse(event.body) : event;
|
|
46
|
+
mindedjs_1.logger.info({
|
|
47
|
+
msg: 'Lambda handler invoked',
|
|
48
|
+
awsRequestId: context.awsRequestId,
|
|
49
|
+
awsFunctionName: context.functionName,
|
|
50
|
+
agentFunctionName,
|
|
51
|
+
});
|
|
46
52
|
// Filter out AWS credentials and any AWS_* environment variables
|
|
47
53
|
const filteredEnv = {};
|
|
48
54
|
for (const [key, value] of Object.entries(process.env)) {
|
|
@@ -59,11 +65,20 @@ const handler = async (event, context) => {
|
|
|
59
65
|
context,
|
|
60
66
|
});
|
|
61
67
|
child = childProcess;
|
|
68
|
+
mindedjs_1.logger.info({
|
|
69
|
+
msg: 'Lambda handler got result from worker',
|
|
70
|
+
awsRequestId: context.awsRequestId,
|
|
71
|
+
awsFunctionName: context.functionName,
|
|
72
|
+
agentFunctionName,
|
|
73
|
+
});
|
|
62
74
|
// Handle voice session special case - wait for Lambda remaining time before closing the socket
|
|
63
75
|
if (agentFunctionName === 'startVoiceSession') {
|
|
64
76
|
while (context.getRemainingTimeInMillis() > 1500) {
|
|
65
77
|
mindedjs_1.logger.info({
|
|
66
78
|
msg: 'Waiting for Lambda remaining time',
|
|
79
|
+
awsRequestId: context.awsRequestId,
|
|
80
|
+
awsFunctionName: context.functionName,
|
|
81
|
+
agentFunctionName,
|
|
67
82
|
remainingTime: context.getRemainingTimeInMillis() / 1000,
|
|
68
83
|
});
|
|
69
84
|
await wait(1000);
|
|
@@ -90,9 +105,9 @@ const handler = async (event, context) => {
|
|
|
90
105
|
}
|
|
91
106
|
mindedjs_1.logger.error({
|
|
92
107
|
msg: 'Lambda runtime error',
|
|
108
|
+
awsRequestId: context.awsRequestId,
|
|
109
|
+
awsFunctionName: context.functionName,
|
|
93
110
|
err,
|
|
94
|
-
requestId: context.awsRequestId,
|
|
95
|
-
functionName: context.functionName,
|
|
96
111
|
});
|
|
97
112
|
return {
|
|
98
113
|
statusCode: 500,
|
|
@@ -192,6 +207,8 @@ function executeInChildProcess(params) {
|
|
|
192
207
|
modulePath,
|
|
193
208
|
agentFunctionName,
|
|
194
209
|
agentFunctionBody,
|
|
210
|
+
awsRequestId: context.awsRequestId,
|
|
211
|
+
awsFunctionName: context.functionName,
|
|
195
212
|
};
|
|
196
213
|
child.send(message);
|
|
197
214
|
});
|
|
@@ -207,7 +224,11 @@ function cleanupChildProcess(child, context) {
|
|
|
207
224
|
return;
|
|
208
225
|
}
|
|
209
226
|
isResolved = true;
|
|
210
|
-
mindedjs_1.logger.warn({
|
|
227
|
+
mindedjs_1.logger.warn({
|
|
228
|
+
msg: 'Cleanup timeout, force killing worker',
|
|
229
|
+
awsRequestId: context.awsRequestId,
|
|
230
|
+
awsFunctionName: context.functionName,
|
|
231
|
+
});
|
|
211
232
|
child.kill('SIGKILL');
|
|
212
233
|
resolve(); // Resolve anyway, cleanup is best-effort
|
|
213
234
|
}, timeoutMs);
|
|
@@ -222,7 +243,12 @@ function cleanupChildProcess(child, context) {
|
|
|
222
243
|
clearTimeout(timeoutId);
|
|
223
244
|
}
|
|
224
245
|
if (!response.success) {
|
|
225
|
-
mindedjs_1.logger.error({
|
|
246
|
+
mindedjs_1.logger.error({
|
|
247
|
+
msg: 'Cleanup failed',
|
|
248
|
+
awsRequestId: context.awsRequestId,
|
|
249
|
+
awsFunctionName: context.functionName,
|
|
250
|
+
err: response.error,
|
|
251
|
+
});
|
|
226
252
|
}
|
|
227
253
|
resolve();
|
|
228
254
|
});
|
|
@@ -240,6 +266,8 @@ function cleanupChildProcess(child, context) {
|
|
|
240
266
|
// Send cleanup request
|
|
241
267
|
const message = {
|
|
242
268
|
type: 'cleanup',
|
|
269
|
+
awsRequestId: context.awsRequestId,
|
|
270
|
+
awsFunctionName: context.functionName,
|
|
243
271
|
};
|
|
244
272
|
child.send(message, (err) => {
|
|
245
273
|
if (err && !isResolved) {
|
|
@@ -247,7 +275,12 @@ function cleanupChildProcess(child, context) {
|
|
|
247
275
|
if (timeoutId) {
|
|
248
276
|
clearTimeout(timeoutId);
|
|
249
277
|
}
|
|
250
|
-
mindedjs_1.logger.error({
|
|
278
|
+
mindedjs_1.logger.error({
|
|
279
|
+
msg: 'Failed to send cleanup message',
|
|
280
|
+
awsRequestId: context.awsRequestId,
|
|
281
|
+
awsFunctionName: context.functionName,
|
|
282
|
+
err,
|
|
283
|
+
});
|
|
251
284
|
child.kill('SIGKILL');
|
|
252
285
|
resolve(); // Resolve anyway, cleanup is best-effort
|
|
253
286
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lambdaHandlerTemplate.js","sourceRoot":"","sources":["../../src/cli/lambdaHandlerTemplate.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6FAA6F;AAC7F,kDAA6C;AAC7C,iDAAmD;AACnD,2CAA6B;
|
|
1
|
+
{"version":3,"file":"lambdaHandlerTemplate.js","sourceRoot":"","sources":["../../src/cli/lambdaHandlerTemplate.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,9 +12,13 @@ type WorkerMessage =
|
|
|
12
12
|
modulePath: string;
|
|
13
13
|
agentFunctionName: string;
|
|
14
14
|
agentFunctionBody: any;
|
|
15
|
+
awsRequestId: string;
|
|
16
|
+
awsFunctionName: string;
|
|
15
17
|
}
|
|
16
18
|
| {
|
|
17
19
|
type: 'cleanup';
|
|
20
|
+
awsRequestId: string;
|
|
21
|
+
awsFunctionName: string;
|
|
18
22
|
};
|
|
19
23
|
|
|
20
24
|
interface WorkerResponse {
|
|
@@ -28,9 +32,10 @@ interface WorkerResponse {
|
|
|
28
32
|
|
|
29
33
|
// Minimal Lambda Context interface - only the properties we use
|
|
30
34
|
interface LambdaContext {
|
|
31
|
-
getRemainingTimeInMillis(): number;
|
|
32
|
-
awsRequestId: string;
|
|
33
35
|
functionName: string;
|
|
36
|
+
functionVersion: string;
|
|
37
|
+
awsRequestId: string;
|
|
38
|
+
getRemainingTimeInMillis(): number;
|
|
34
39
|
}
|
|
35
40
|
|
|
36
41
|
export const handler = async (event: any, context: LambdaContext) => {
|
|
@@ -39,6 +44,12 @@ export const handler = async (event: any, context: LambdaContext) => {
|
|
|
39
44
|
try {
|
|
40
45
|
const modulePath = '{MODULE_PATH}'; // Module path placeholder - DO NOT CHANGE THE {MODULE_PATH} TOKEN
|
|
41
46
|
const { agentFunctionName, agentFunctionBody } = event.body ? JSON.parse(event.body) : event;
|
|
47
|
+
logger.info({
|
|
48
|
+
msg: 'Lambda handler invoked',
|
|
49
|
+
awsRequestId: context.awsRequestId,
|
|
50
|
+
awsFunctionName: context.functionName,
|
|
51
|
+
agentFunctionName,
|
|
52
|
+
});
|
|
42
53
|
|
|
43
54
|
// Filter out AWS credentials and any AWS_* environment variables
|
|
44
55
|
const filteredEnv: NodeJS.ProcessEnv = {};
|
|
@@ -59,11 +70,21 @@ export const handler = async (event: any, context: LambdaContext) => {
|
|
|
59
70
|
|
|
60
71
|
child = childProcess;
|
|
61
72
|
|
|
73
|
+
logger.info({
|
|
74
|
+
msg: 'Lambda handler got result from worker',
|
|
75
|
+
awsRequestId: context.awsRequestId,
|
|
76
|
+
awsFunctionName: context.functionName,
|
|
77
|
+
agentFunctionName,
|
|
78
|
+
});
|
|
79
|
+
|
|
62
80
|
// Handle voice session special case - wait for Lambda remaining time before closing the socket
|
|
63
81
|
if (agentFunctionName === 'startVoiceSession') {
|
|
64
82
|
while (context.getRemainingTimeInMillis() > 1500) {
|
|
65
83
|
logger.info({
|
|
66
84
|
msg: 'Waiting for Lambda remaining time',
|
|
85
|
+
awsRequestId: context.awsRequestId,
|
|
86
|
+
awsFunctionName: context.functionName,
|
|
87
|
+
agentFunctionName,
|
|
67
88
|
remainingTime: context.getRemainingTimeInMillis() / 1000,
|
|
68
89
|
});
|
|
69
90
|
await wait(1000);
|
|
@@ -93,9 +114,9 @@ export const handler = async (event: any, context: LambdaContext) => {
|
|
|
93
114
|
|
|
94
115
|
logger.error({
|
|
95
116
|
msg: 'Lambda runtime error',
|
|
117
|
+
awsRequestId: context.awsRequestId,
|
|
118
|
+
awsFunctionName: context.functionName,
|
|
96
119
|
err,
|
|
97
|
-
requestId: context.awsRequestId,
|
|
98
|
-
functionName: context.functionName,
|
|
99
120
|
});
|
|
100
121
|
|
|
101
122
|
return {
|
|
@@ -215,6 +236,8 @@ function executeInChildProcess(params: {
|
|
|
215
236
|
modulePath,
|
|
216
237
|
agentFunctionName,
|
|
217
238
|
agentFunctionBody,
|
|
239
|
+
awsRequestId: context.awsRequestId,
|
|
240
|
+
awsFunctionName: context.functionName,
|
|
218
241
|
};
|
|
219
242
|
|
|
220
243
|
child.send(message);
|
|
@@ -234,7 +257,11 @@ function cleanupChildProcess(child: ChildProcess, context: LambdaContext): Promi
|
|
|
234
257
|
return;
|
|
235
258
|
}
|
|
236
259
|
isResolved = true;
|
|
237
|
-
logger.warn({
|
|
260
|
+
logger.warn({
|
|
261
|
+
msg: 'Cleanup timeout, force killing worker',
|
|
262
|
+
awsRequestId: context.awsRequestId,
|
|
263
|
+
awsFunctionName: context.functionName,
|
|
264
|
+
});
|
|
238
265
|
child.kill('SIGKILL');
|
|
239
266
|
resolve(); // Resolve anyway, cleanup is best-effort
|
|
240
267
|
}, timeoutMs);
|
|
@@ -252,7 +279,12 @@ function cleanupChildProcess(child: ChildProcess, context: LambdaContext): Promi
|
|
|
252
279
|
}
|
|
253
280
|
|
|
254
281
|
if (!response.success) {
|
|
255
|
-
logger.error({
|
|
282
|
+
logger.error({
|
|
283
|
+
msg: 'Cleanup failed',
|
|
284
|
+
awsRequestId: context.awsRequestId,
|
|
285
|
+
awsFunctionName: context.functionName,
|
|
286
|
+
err: response.error,
|
|
287
|
+
});
|
|
256
288
|
}
|
|
257
289
|
|
|
258
290
|
resolve();
|
|
@@ -274,6 +306,8 @@ function cleanupChildProcess(child: ChildProcess, context: LambdaContext): Promi
|
|
|
274
306
|
// Send cleanup request
|
|
275
307
|
const message: WorkerMessage = {
|
|
276
308
|
type: 'cleanup',
|
|
309
|
+
awsRequestId: context.awsRequestId,
|
|
310
|
+
awsFunctionName: context.functionName,
|
|
277
311
|
};
|
|
278
312
|
|
|
279
313
|
child.send(message, (err) => {
|
|
@@ -282,7 +316,12 @@ function cleanupChildProcess(child: ChildProcess, context: LambdaContext): Promi
|
|
|
282
316
|
if (timeoutId) {
|
|
283
317
|
clearTimeout(timeoutId);
|
|
284
318
|
}
|
|
285
|
-
logger.error({
|
|
319
|
+
logger.error({
|
|
320
|
+
msg: 'Failed to send cleanup message',
|
|
321
|
+
awsRequestId: context.awsRequestId,
|
|
322
|
+
awsFunctionName: context.functionName,
|
|
323
|
+
err,
|
|
324
|
+
});
|
|
286
325
|
child.kill('SIGKILL');
|
|
287
326
|
resolve(); // Resolve anyway, cleanup is best-effort
|
|
288
327
|
}
|
package/package.json
CHANGED
package/src/cli/agentWorker.ts
CHANGED
|
@@ -9,9 +9,13 @@ type WorkerMessage =
|
|
|
9
9
|
modulePath: string;
|
|
10
10
|
agentFunctionName: string;
|
|
11
11
|
agentFunctionBody: any;
|
|
12
|
+
awsRequestId: string;
|
|
13
|
+
awsFunctionName: string;
|
|
12
14
|
}
|
|
13
15
|
| {
|
|
14
16
|
type: 'cleanup';
|
|
17
|
+
awsRequestId: string;
|
|
18
|
+
awsFunctionName: string;
|
|
15
19
|
};
|
|
16
20
|
|
|
17
21
|
interface WorkerResponse {
|
|
@@ -30,6 +34,13 @@ process.on('message', async (message: WorkerMessage) => {
|
|
|
30
34
|
if (message.type === 'execute') {
|
|
31
35
|
try {
|
|
32
36
|
const { modulePath, agentFunctionName, agentFunctionBody } = message;
|
|
37
|
+
logger.info({
|
|
38
|
+
msg: 'Lambda agent worker invoked',
|
|
39
|
+
awsRequestId: message.awsRequestId,
|
|
40
|
+
awsFunctionName: message.awsFunctionName,
|
|
41
|
+
modulePath,
|
|
42
|
+
agentFunctionName,
|
|
43
|
+
});
|
|
33
44
|
|
|
34
45
|
if (!modulePath || !agentFunctionName) {
|
|
35
46
|
throw new Error('Missing required parameters');
|
|
@@ -71,6 +82,8 @@ process.on('message', async (message: WorkerMessage) => {
|
|
|
71
82
|
|
|
72
83
|
logger.error({
|
|
73
84
|
msg: 'Lambda agent runner execution error',
|
|
85
|
+
awsRequestId: message.awsRequestId,
|
|
86
|
+
awsFunctionName: message.awsFunctionName,
|
|
74
87
|
err,
|
|
75
88
|
});
|
|
76
89
|
|
|
@@ -88,6 +101,12 @@ process.on('message', async (message: WorkerMessage) => {
|
|
|
88
101
|
}
|
|
89
102
|
} else if (message.type === 'cleanup') {
|
|
90
103
|
try {
|
|
104
|
+
logger.info({
|
|
105
|
+
msg: 'Lambda agent worker cleanup invoked',
|
|
106
|
+
awsRequestId: message.awsRequestId,
|
|
107
|
+
awsFunctionName: message.awsFunctionName,
|
|
108
|
+
});
|
|
109
|
+
|
|
91
110
|
// Call cleanup if available
|
|
92
111
|
agent?.onEnd?.();
|
|
93
112
|
agent = null;
|
|
@@ -12,9 +12,13 @@ type WorkerMessage =
|
|
|
12
12
|
modulePath: string;
|
|
13
13
|
agentFunctionName: string;
|
|
14
14
|
agentFunctionBody: any;
|
|
15
|
+
awsRequestId: string;
|
|
16
|
+
awsFunctionName: string;
|
|
15
17
|
}
|
|
16
18
|
| {
|
|
17
19
|
type: 'cleanup';
|
|
20
|
+
awsRequestId: string;
|
|
21
|
+
awsFunctionName: string;
|
|
18
22
|
};
|
|
19
23
|
|
|
20
24
|
interface WorkerResponse {
|
|
@@ -28,9 +32,10 @@ interface WorkerResponse {
|
|
|
28
32
|
|
|
29
33
|
// Minimal Lambda Context interface - only the properties we use
|
|
30
34
|
interface LambdaContext {
|
|
31
|
-
getRemainingTimeInMillis(): number;
|
|
32
|
-
awsRequestId: string;
|
|
33
35
|
functionName: string;
|
|
36
|
+
functionVersion: string;
|
|
37
|
+
awsRequestId: string;
|
|
38
|
+
getRemainingTimeInMillis(): number;
|
|
34
39
|
}
|
|
35
40
|
|
|
36
41
|
export const handler = async (event: any, context: LambdaContext) => {
|
|
@@ -39,6 +44,12 @@ export const handler = async (event: any, context: LambdaContext) => {
|
|
|
39
44
|
try {
|
|
40
45
|
const modulePath = '{MODULE_PATH}'; // Module path placeholder - DO NOT CHANGE THE {MODULE_PATH} TOKEN
|
|
41
46
|
const { agentFunctionName, agentFunctionBody } = event.body ? JSON.parse(event.body) : event;
|
|
47
|
+
logger.info({
|
|
48
|
+
msg: 'Lambda handler invoked',
|
|
49
|
+
awsRequestId: context.awsRequestId,
|
|
50
|
+
awsFunctionName: context.functionName,
|
|
51
|
+
agentFunctionName,
|
|
52
|
+
});
|
|
42
53
|
|
|
43
54
|
// Filter out AWS credentials and any AWS_* environment variables
|
|
44
55
|
const filteredEnv: NodeJS.ProcessEnv = {};
|
|
@@ -59,11 +70,21 @@ export const handler = async (event: any, context: LambdaContext) => {
|
|
|
59
70
|
|
|
60
71
|
child = childProcess;
|
|
61
72
|
|
|
73
|
+
logger.info({
|
|
74
|
+
msg: 'Lambda handler got result from worker',
|
|
75
|
+
awsRequestId: context.awsRequestId,
|
|
76
|
+
awsFunctionName: context.functionName,
|
|
77
|
+
agentFunctionName,
|
|
78
|
+
});
|
|
79
|
+
|
|
62
80
|
// Handle voice session special case - wait for Lambda remaining time before closing the socket
|
|
63
81
|
if (agentFunctionName === 'startVoiceSession') {
|
|
64
82
|
while (context.getRemainingTimeInMillis() > 1500) {
|
|
65
83
|
logger.info({
|
|
66
84
|
msg: 'Waiting for Lambda remaining time',
|
|
85
|
+
awsRequestId: context.awsRequestId,
|
|
86
|
+
awsFunctionName: context.functionName,
|
|
87
|
+
agentFunctionName,
|
|
67
88
|
remainingTime: context.getRemainingTimeInMillis() / 1000,
|
|
68
89
|
});
|
|
69
90
|
await wait(1000);
|
|
@@ -93,9 +114,9 @@ export const handler = async (event: any, context: LambdaContext) => {
|
|
|
93
114
|
|
|
94
115
|
logger.error({
|
|
95
116
|
msg: 'Lambda runtime error',
|
|
117
|
+
awsRequestId: context.awsRequestId,
|
|
118
|
+
awsFunctionName: context.functionName,
|
|
96
119
|
err,
|
|
97
|
-
requestId: context.awsRequestId,
|
|
98
|
-
functionName: context.functionName,
|
|
99
120
|
});
|
|
100
121
|
|
|
101
122
|
return {
|
|
@@ -215,6 +236,8 @@ function executeInChildProcess(params: {
|
|
|
215
236
|
modulePath,
|
|
216
237
|
agentFunctionName,
|
|
217
238
|
agentFunctionBody,
|
|
239
|
+
awsRequestId: context.awsRequestId,
|
|
240
|
+
awsFunctionName: context.functionName,
|
|
218
241
|
};
|
|
219
242
|
|
|
220
243
|
child.send(message);
|
|
@@ -234,7 +257,11 @@ function cleanupChildProcess(child: ChildProcess, context: LambdaContext): Promi
|
|
|
234
257
|
return;
|
|
235
258
|
}
|
|
236
259
|
isResolved = true;
|
|
237
|
-
logger.warn({
|
|
260
|
+
logger.warn({
|
|
261
|
+
msg: 'Cleanup timeout, force killing worker',
|
|
262
|
+
awsRequestId: context.awsRequestId,
|
|
263
|
+
awsFunctionName: context.functionName,
|
|
264
|
+
});
|
|
238
265
|
child.kill('SIGKILL');
|
|
239
266
|
resolve(); // Resolve anyway, cleanup is best-effort
|
|
240
267
|
}, timeoutMs);
|
|
@@ -252,7 +279,12 @@ function cleanupChildProcess(child: ChildProcess, context: LambdaContext): Promi
|
|
|
252
279
|
}
|
|
253
280
|
|
|
254
281
|
if (!response.success) {
|
|
255
|
-
logger.error({
|
|
282
|
+
logger.error({
|
|
283
|
+
msg: 'Cleanup failed',
|
|
284
|
+
awsRequestId: context.awsRequestId,
|
|
285
|
+
awsFunctionName: context.functionName,
|
|
286
|
+
err: response.error,
|
|
287
|
+
});
|
|
256
288
|
}
|
|
257
289
|
|
|
258
290
|
resolve();
|
|
@@ -274,6 +306,8 @@ function cleanupChildProcess(child: ChildProcess, context: LambdaContext): Promi
|
|
|
274
306
|
// Send cleanup request
|
|
275
307
|
const message: WorkerMessage = {
|
|
276
308
|
type: 'cleanup',
|
|
309
|
+
awsRequestId: context.awsRequestId,
|
|
310
|
+
awsFunctionName: context.functionName,
|
|
277
311
|
};
|
|
278
312
|
|
|
279
313
|
child.send(message, (err) => {
|
|
@@ -282,7 +316,12 @@ function cleanupChildProcess(child: ChildProcess, context: LambdaContext): Promi
|
|
|
282
316
|
if (timeoutId) {
|
|
283
317
|
clearTimeout(timeoutId);
|
|
284
318
|
}
|
|
285
|
-
logger.error({
|
|
319
|
+
logger.error({
|
|
320
|
+
msg: 'Failed to send cleanup message',
|
|
321
|
+
awsRequestId: context.awsRequestId,
|
|
322
|
+
awsFunctionName: context.functionName,
|
|
323
|
+
err,
|
|
324
|
+
});
|
|
286
325
|
child.kill('SIGKILL');
|
|
287
326
|
resolve(); // Resolve anyway, cleanup is best-effort
|
|
288
327
|
}
|