lua-cli 2.5.8 → 3.0.0-alpha.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.
Files changed (115) hide show
  1. package/dist/api/job.api.service.d.ts +219 -0
  2. package/dist/api/job.api.service.js +216 -0
  3. package/dist/api/lazy-instances.d.ts +24 -0
  4. package/dist/api/lazy-instances.js +48 -0
  5. package/dist/api/postprocessor.api.service.d.ts +158 -0
  6. package/dist/api/postprocessor.api.service.js +111 -0
  7. package/dist/api/preprocessor.api.service.d.ts +158 -0
  8. package/dist/api/preprocessor.api.service.js +111 -0
  9. package/dist/api/user.data.api.service.d.ts +13 -0
  10. package/dist/api/user.data.api.service.js +20 -0
  11. package/dist/api/webhook.api.service.d.ts +151 -0
  12. package/dist/api/webhook.api.service.js +134 -0
  13. package/dist/api-exports.d.ts +176 -41
  14. package/dist/api-exports.js +195 -21
  15. package/dist/cli/command-definitions.js +75 -5
  16. package/dist/commands/chat.js +32 -5
  17. package/dist/commands/compile.js +140 -7
  18. package/dist/commands/dev.js +23 -2
  19. package/dist/commands/index.d.ts +4 -0
  20. package/dist/commands/index.js +4 -0
  21. package/dist/commands/init.js +53 -7
  22. package/dist/commands/jobs.d.ts +20 -0
  23. package/dist/commands/jobs.js +533 -0
  24. package/dist/commands/logs.js +2 -5
  25. package/dist/commands/postprocessors.d.ts +8 -0
  26. package/dist/commands/postprocessors.js +431 -0
  27. package/dist/commands/preprocessors.d.ts +8 -0
  28. package/dist/commands/preprocessors.js +431 -0
  29. package/dist/commands/push.js +686 -5
  30. package/dist/commands/test.d.ts +9 -18
  31. package/dist/commands/test.js +574 -82
  32. package/dist/commands/webhooks.d.ts +18 -0
  33. package/dist/commands/webhooks.js +424 -0
  34. package/dist/common/job.instance.d.ts +80 -0
  35. package/dist/common/job.instance.js +116 -0
  36. package/dist/common/user.instance.d.ts +1 -0
  37. package/dist/common/user.instance.js +9 -0
  38. package/dist/config/constants.d.ts +4 -3
  39. package/dist/config/constants.js +10 -8
  40. package/dist/interfaces/agent.d.ts +2 -1
  41. package/dist/interfaces/chat.d.ts +52 -1
  42. package/dist/interfaces/index.d.ts +10 -0
  43. package/dist/interfaces/index.js +7 -0
  44. package/dist/interfaces/jobs.d.ts +193 -0
  45. package/dist/interfaces/jobs.js +5 -0
  46. package/dist/interfaces/postprocessors.d.ts +35 -0
  47. package/dist/interfaces/postprocessors.js +4 -0
  48. package/dist/interfaces/preprocessors.d.ts +35 -0
  49. package/dist/interfaces/preprocessors.js +4 -0
  50. package/dist/interfaces/webhooks.d.ts +104 -0
  51. package/dist/interfaces/webhooks.js +5 -0
  52. package/dist/types/api-contracts.d.ts +5 -0
  53. package/dist/types/compile.types.d.ts +49 -0
  54. package/dist/types/index.d.ts +1 -1
  55. package/dist/types/index.js +1 -1
  56. package/dist/types/skill.d.ts +521 -0
  57. package/dist/types/skill.js +471 -0
  58. package/dist/utils/agent-management.d.ts +25 -0
  59. package/dist/utils/agent-management.js +67 -0
  60. package/dist/utils/bundling.d.ts +44 -5
  61. package/dist/utils/bundling.js +723 -23
  62. package/dist/utils/compile.d.ts +63 -0
  63. package/dist/utils/compile.js +712 -36
  64. package/dist/utils/deployment.d.ts +2 -1
  65. package/dist/utils/deployment.js +16 -2
  66. package/dist/utils/dev-api.d.ts +42 -2
  67. package/dist/utils/dev-api.js +177 -4
  68. package/dist/utils/dev-server.d.ts +1 -1
  69. package/dist/utils/dev-server.js +4 -4
  70. package/dist/utils/dynamic-job-bundler.d.ts +17 -0
  71. package/dist/utils/dynamic-job-bundler.js +143 -0
  72. package/dist/utils/init-agent.d.ts +3 -1
  73. package/dist/utils/init-agent.js +6 -4
  74. package/dist/utils/init-prompts.d.ts +2 -1
  75. package/dist/utils/init-prompts.js +14 -9
  76. package/dist/utils/job-management.d.ts +24 -0
  77. package/dist/utils/job-management.js +264 -0
  78. package/dist/utils/postprocessor-management.d.ts +9 -0
  79. package/dist/utils/postprocessor-management.js +118 -0
  80. package/dist/utils/pre-bundle-jobs.d.ts +26 -0
  81. package/dist/utils/pre-bundle-jobs.js +176 -0
  82. package/dist/utils/preprocessor-management.d.ts +9 -0
  83. package/dist/utils/preprocessor-management.js +118 -0
  84. package/dist/utils/sandbox-storage.d.ts +48 -0
  85. package/dist/utils/sandbox-storage.js +114 -0
  86. package/dist/utils/sandbox.d.ts +61 -1
  87. package/dist/utils/sandbox.js +299 -72
  88. package/dist/utils/tool-detection.d.ts +3 -2
  89. package/dist/utils/tool-detection.js +18 -4
  90. package/dist/utils/webhook-management.d.ts +24 -0
  91. package/dist/utils/webhook-management.js +256 -0
  92. package/package.json +1 -1
  93. package/template/README.md +30 -2
  94. package/template/lua.skill.yaml +47 -0
  95. package/template/package-lock.json +10505 -0
  96. package/template/package.json +2 -1
  97. package/template/src/index.ts +103 -2
  98. package/template/src/jobs/AbandonedBasketProcessorJob.ts +139 -0
  99. package/template/src/jobs/DailyCleanupJob.ts +100 -0
  100. package/template/src/jobs/DataMigrationJob.ts +133 -0
  101. package/template/src/jobs/HealthCheckJob.ts +87 -0
  102. package/template/src/tools/CreateInlineJob.ts +42 -0
  103. package/template/src/tools/GameScoreTrackerTool.ts +356 -0
  104. package/template/src/tools/SmartBasketTool.ts +188 -0
  105. package/template/src/webhooks/PaymentWebhook.ts +113 -0
  106. package/template/src/webhooks/UserEventWebhook.ts +77 -0
  107. package/API_REFERENCE.md +0 -1408
  108. package/CHANGELOG.md +0 -236
  109. package/CLI_REFERENCE.md +0 -908
  110. package/GETTING_STARTED.md +0 -1040
  111. package/INSTANCE_TYPES.md +0 -1158
  112. package/README.md +0 -865
  113. package/TEMPLATE_GUIDE.md +0 -1398
  114. package/USER_DATA_INSTANCE.md +0 -621
  115. package/template/TOOL_EXAMPLES.md +0 -655
@@ -0,0 +1,431 @@
1
+ /**
2
+ * PreProcessors Command
3
+ * Manages agent preprocessors for production environment
4
+ */
5
+ import { loadApiKey, checkApiKey } from '../services/auth.js';
6
+ import { readSkillConfig } from '../utils/files.js';
7
+ import { withErrorHandling, writeProgress, writeSuccess, writeInfo } from '../utils/cli.js';
8
+ import { BASE_URLS } from '../config/constants.js';
9
+ import { safePrompt } from '../utils/prompt-handler.js';
10
+ import { validateConfig, validateAgentConfig, } from '../utils/dev-helpers.js';
11
+ import PreProcessorApi from '../api/preprocessor.api.service.js';
12
+ /**
13
+ * Main preprocessors command - manages agent preprocessors
14
+ */
15
+ export async function preprocessorsCommand() {
16
+ return withErrorHandling(async () => {
17
+ // Step 1: Load configuration
18
+ const config = readSkillConfig();
19
+ validateConfig(config);
20
+ validateAgentConfig(config);
21
+ const agentId = config.agent.agentId;
22
+ // Step 2: Authenticate
23
+ const apiKey = await loadApiKey();
24
+ if (!apiKey) {
25
+ console.error("āŒ No API key found. Please run 'lua auth configure' to set up your API key.");
26
+ process.exit(1);
27
+ }
28
+ await checkApiKey(apiKey);
29
+ writeProgress("āœ… Authenticated");
30
+ const context = {
31
+ agentId,
32
+ apiKey,
33
+ };
34
+ // Start preprocessor management
35
+ await manageProductionPreProcessors(context, config);
36
+ }, "preprocessors");
37
+ }
38
+ /**
39
+ * Manage production preprocessors
40
+ */
41
+ async function manageProductionPreProcessors(context, config) {
42
+ let continueManaging = true;
43
+ while (continueManaging) {
44
+ console.log("\n" + "=".repeat(60));
45
+ console.log("šŸš€ Production PreProcessors");
46
+ console.log("=".repeat(60) + "\n");
47
+ const actionAnswer = await safePrompt([
48
+ {
49
+ type: 'list',
50
+ name: 'action',
51
+ message: 'What would you like to do?',
52
+ choices: [
53
+ { name: 'šŸ‘ļø View deployed preprocessors', value: 'view' },
54
+ { name: 'šŸ“œ View preprocessor versions', value: 'versions' },
55
+ { name: 'šŸš€ Deploy a version', value: 'deploy' },
56
+ { name: 'āœ… Activate a preprocessor', value: 'activate' },
57
+ { name: '🚫 Deactivate a preprocessor', value: 'deactivate' },
58
+ { name: 'šŸ—‘ļø Delete a preprocessor', value: 'delete' },
59
+ { name: 'āŒ Exit', value: 'exit' }
60
+ ]
61
+ }
62
+ ]);
63
+ if (!actionAnswer)
64
+ return;
65
+ const { action } = actionAnswer;
66
+ switch (action) {
67
+ case 'view':
68
+ await viewDeployedPreProcessors(context, config);
69
+ break;
70
+ case 'versions':
71
+ await viewPreProcessorVersions(context, config);
72
+ break;
73
+ case 'deploy':
74
+ await deployPreProcessorVersion(context, config);
75
+ break;
76
+ case 'activate':
77
+ await activatePreProcessor(context, config);
78
+ break;
79
+ case 'deactivate':
80
+ await deactivatePreProcessor(context, config);
81
+ break;
82
+ case 'delete':
83
+ await deletePreProcessor(context, config);
84
+ break;
85
+ case 'exit':
86
+ continueManaging = false;
87
+ console.log("\nšŸ‘‹ Goodbye!\n");
88
+ break;
89
+ }
90
+ }
91
+ }
92
+ /**
93
+ * View deployed preprocessors in production
94
+ */
95
+ async function viewDeployedPreProcessors(context, config) {
96
+ writeProgress("šŸ”„ Loading preprocessor information...");
97
+ try {
98
+ const preprocessors = config.preprocessors || [];
99
+ if (preprocessors.length === 0) {
100
+ console.log("\nā„¹ļø No preprocessors found in configuration.\n");
101
+ await safePrompt([{ type: 'input', name: 'continue', message: 'Press Enter to continue...' }]);
102
+ return;
103
+ }
104
+ console.log("\n" + "=".repeat(60));
105
+ console.log("āš™ļø Production PreProcessors");
106
+ console.log("=".repeat(60) + "\n");
107
+ const api = new PreProcessorApi(BASE_URLS.API, context.apiKey, context.agentId);
108
+ for (const preprocessor of preprocessors) {
109
+ try {
110
+ const response = await api.getPreProcessorVersions(preprocessor.preprocessorId);
111
+ if (response.success && response.data) {
112
+ const versions = response.data.versions || [];
113
+ const activeVersionId = response.data.activeVersionId;
114
+ const activeVersion = versions.find((v) => v.versionId === activeVersionId);
115
+ console.log(`šŸ“„ ${preprocessor.name}`);
116
+ console.log(` PreProcessor ID: ${preprocessor.preprocessorId}`);
117
+ if (activeVersion) {
118
+ console.log(` Deployed Version: ${activeVersion.version} ⭐`);
119
+ const date = new Date(activeVersion.createdAt);
120
+ console.log(` Deployed: ${date.toLocaleString()}`);
121
+ }
122
+ else {
123
+ console.log(` Deployed Version: Not deployed`);
124
+ }
125
+ console.log(` Total Versions: ${versions.length}`);
126
+ console.log();
127
+ }
128
+ else {
129
+ console.log(`šŸ“„ ${preprocessor.name}`);
130
+ console.log(` PreProcessor ID: ${preprocessor.preprocessorId}`);
131
+ console.log(` Status: Unable to fetch version info`);
132
+ console.log();
133
+ }
134
+ }
135
+ catch (error) {
136
+ console.log(`šŸ“„ ${preprocessor.name}`);
137
+ console.log(` PreProcessor ID: ${preprocessor.preprocessorId}`);
138
+ console.log(` Status: Error loading versions`);
139
+ console.log();
140
+ }
141
+ }
142
+ console.log("=".repeat(60) + "\n");
143
+ await safePrompt([{ type: 'input', name: 'continue', message: 'Press Enter to continue...' }]);
144
+ }
145
+ catch (error) {
146
+ console.error('āŒ Error loading preprocessor information:', error);
147
+ await safePrompt([{ type: 'input', name: 'continue', message: 'Press Enter to continue...' }]);
148
+ }
149
+ }
150
+ /**
151
+ * View versions for a specific preprocessor
152
+ */
153
+ async function viewPreProcessorVersions(context, config) {
154
+ const preprocessors = config.preprocessors || [];
155
+ if (preprocessors.length === 0) {
156
+ console.log("\nā„¹ļø No preprocessors found in configuration.\n");
157
+ await safePrompt([{ type: 'input', name: 'continue', message: 'Press Enter to continue...' }]);
158
+ return;
159
+ }
160
+ const answer = await safePrompt([
161
+ {
162
+ type: 'list',
163
+ name: 'selected',
164
+ message: 'Select a preprocessor to view versions:',
165
+ choices: preprocessors.map((p) => ({
166
+ name: `${p.name} (${p.preprocessorId})`,
167
+ value: p
168
+ }))
169
+ }
170
+ ]);
171
+ if (!answer)
172
+ return;
173
+ const selected = answer.selected;
174
+ writeProgress(`šŸ”„ Loading versions for ${selected.name}...`);
175
+ try {
176
+ const api = new PreProcessorApi(BASE_URLS.API, context.apiKey, context.agentId);
177
+ const response = await api.getPreProcessorVersions(selected.preprocessorId);
178
+ if (!response.success || !response.data) {
179
+ throw new Error(response.error?.message || 'Failed to fetch versions');
180
+ }
181
+ const versions = response.data.versions || [];
182
+ const activeVersionId = response.data.activeVersionId;
183
+ if (versions.length === 0) {
184
+ console.log(`\nā„¹ļø No versions found for ${selected.name}.\n`);
185
+ console.log("šŸ’” Push a version first using 'lua push preprocessor'.\n");
186
+ await safePrompt([{ type: 'input', name: 'continue', message: 'Press Enter to continue...' }]);
187
+ return;
188
+ }
189
+ const sortedVersions = versions.sort((a, b) => {
190
+ const dateA = new Date(a.createdAt).getTime();
191
+ const dateB = new Date(b.createdAt).getTime();
192
+ return dateB - dateA;
193
+ });
194
+ console.log("\n" + "=".repeat(60));
195
+ console.log(`šŸ“œ Versions for ${selected.name}`);
196
+ console.log("=".repeat(60) + "\n");
197
+ sortedVersions.forEach((version) => {
198
+ const isActive = version.preprocessorId === activeVersionId;
199
+ const date = new Date(version.createdAt);
200
+ console.log(`${isActive ? '⭐' : ' '} Version ${version.version}`);
201
+ console.log(` Created: ${date.toLocaleString()}`);
202
+ console.log();
203
+ });
204
+ console.log("=".repeat(60) + "\n");
205
+ await safePrompt([{ type: 'input', name: 'continue', message: 'Press Enter to continue...' }]);
206
+ }
207
+ catch (error) {
208
+ console.error('\nāŒ Error loading versions:', error);
209
+ await safePrompt([{ type: 'input', name: 'continue', message: 'Press Enter to continue...' }]);
210
+ }
211
+ }
212
+ /**
213
+ * Deploy a preprocessor version to production
214
+ */
215
+ async function deployPreProcessorVersion(context, config) {
216
+ const preprocessors = config.preprocessors || [];
217
+ if (preprocessors.length === 0) {
218
+ console.log("\nā„¹ļø No preprocessors found in configuration.\n");
219
+ await safePrompt([{ type: 'input', name: 'continue', message: 'Press Enter to continue...' }]);
220
+ return;
221
+ }
222
+ const answer = await safePrompt([
223
+ {
224
+ type: 'list',
225
+ name: 'selected',
226
+ message: 'Select a preprocessor to deploy:',
227
+ choices: preprocessors.map((p) => ({
228
+ name: `${p.name} (${p.preprocessorId})`,
229
+ value: p
230
+ }))
231
+ }
232
+ ]);
233
+ if (!answer)
234
+ return;
235
+ const selected = answer.selected;
236
+ writeProgress(`šŸ”„ Loading versions for ${selected.name}...`);
237
+ try {
238
+ const api = new PreProcessorApi(BASE_URLS.API, context.apiKey, context.agentId);
239
+ const response = await api.getPreProcessorVersions(selected.preprocessorId);
240
+ if (!response.success || !response.data) {
241
+ throw new Error(response.error?.message || 'Failed to fetch versions');
242
+ }
243
+ const versions = response.data.versions || [];
244
+ const activeVersionId = response.data.activeVersionId;
245
+ if (versions.length === 0) {
246
+ console.log(`\nā„¹ļø No versions found for ${selected.name}.\n`);
247
+ console.log("šŸ’” Push a version first using 'lua push preprocessor'.\n");
248
+ await safePrompt([{ type: 'input', name: 'continue', message: 'Press Enter to continue...' }]);
249
+ return;
250
+ }
251
+ const sortedVersions = versions.sort((a, b) => {
252
+ const dateA = new Date(a.createdAt).getTime();
253
+ const dateB = new Date(b.createdAt).getTime();
254
+ return dateB - dateA;
255
+ });
256
+ const versionAnswer = await safePrompt([
257
+ {
258
+ type: 'list',
259
+ name: 'selectedVersion',
260
+ message: 'Select a version to deploy:',
261
+ choices: sortedVersions.map((version) => {
262
+ const isActive = version.preprocessorId === activeVersionId;
263
+ const date = new Date(version.createdAt);
264
+ return {
265
+ name: `Version ${version.version} (${date.toLocaleDateString()})${isActive ? ' ⭐ CURRENT' : ''}`,
266
+ value: version
267
+ };
268
+ })
269
+ }
270
+ ]);
271
+ if (!versionAnswer)
272
+ return;
273
+ const selectedVersion = versionAnswer.selectedVersion;
274
+ console.log("\nāš ļø WARNING: You are about to deploy to PRODUCTION!");
275
+ console.log("āš ļø This will affect ALL users immediately.\n");
276
+ console.log(`PreProcessor: ${selected.name}`);
277
+ console.log(`Version: ${selectedVersion.version}\n`);
278
+ const confirmAnswer = await safePrompt([
279
+ {
280
+ type: 'confirm',
281
+ name: 'confirm',
282
+ message: 'Are you absolutely sure you want to deploy this version?',
283
+ default: false
284
+ }
285
+ ]);
286
+ if (!confirmAnswer || !confirmAnswer.confirm) {
287
+ console.log("\nāŒ Deployment cancelled.\n");
288
+ return;
289
+ }
290
+ writeProgress("šŸ”„ Deploying version...");
291
+ const deployResponse = await api.publishPreProcessorVersion(selected.preprocessorId, selectedVersion.version);
292
+ if (!deployResponse.success) {
293
+ console.error(`\nāŒ Deploy Error: ${deployResponse.error?.message || 'Unknown error'}\n`);
294
+ throw new Error(deployResponse.error?.message || 'Failed to publish preprocessor version');
295
+ }
296
+ writeSuccess(`\nāœ… Version ${selectedVersion.version} of "${selected.name}" deployed successfully to production\n`);
297
+ writeInfo("šŸ’” The new version is now active and will process all incoming messages.");
298
+ await safePrompt([{ type: 'input', name: 'continue', message: 'Press Enter to continue...' }]);
299
+ }
300
+ catch (error) {
301
+ console.error('\nāŒ Error deploying version:', error);
302
+ await safePrompt([{ type: 'input', name: 'continue', message: 'Press Enter to continue...' }]);
303
+ }
304
+ }
305
+ /**
306
+ * Activate a preprocessor
307
+ */
308
+ async function activatePreProcessor(context, config) {
309
+ const preprocessors = config.preprocessors || [];
310
+ if (preprocessors.length === 0) {
311
+ console.log("\nā„¹ļø No preprocessors found.\n");
312
+ return;
313
+ }
314
+ const answer = await safePrompt([
315
+ {
316
+ type: 'list',
317
+ name: 'selected',
318
+ message: 'Select a preprocessor to activate:',
319
+ choices: preprocessors.map((p) => ({
320
+ name: `${p.name} (${p.preprocessorId})`,
321
+ value: p
322
+ }))
323
+ }
324
+ ]);
325
+ if (!answer)
326
+ return;
327
+ writeProgress(`šŸ”„ Activating preprocessor "${answer.selected.name}"...`);
328
+ const api = new PreProcessorApi(BASE_URLS.API, context.apiKey, context.agentId);
329
+ const response = await api.activatePreProcessor(answer.selected.preprocessorId);
330
+ if (response.success) {
331
+ writeSuccess(`āœ… PreProcessor "${answer.selected.name}" activated successfully`);
332
+ writeInfo("šŸ’” The preprocessor is now enabled and will process all incoming messages.");
333
+ }
334
+ else {
335
+ console.error(`āŒ Failed to activate preprocessor: ${response.error?.message || 'Unknown error'}`);
336
+ }
337
+ }
338
+ /**
339
+ * Deactivate a preprocessor
340
+ */
341
+ async function deactivatePreProcessor(context, config) {
342
+ const preprocessors = config.preprocessors || [];
343
+ if (preprocessors.length === 0) {
344
+ console.log("\nā„¹ļø No preprocessors found.\n");
345
+ return;
346
+ }
347
+ const answer = await safePrompt([
348
+ {
349
+ type: 'list',
350
+ name: 'selected',
351
+ message: 'Select a preprocessor to deactivate:',
352
+ choices: preprocessors.map((p) => ({
353
+ name: `${p.name} (${p.preprocessorId})`,
354
+ value: p
355
+ }))
356
+ }
357
+ ]);
358
+ if (!answer)
359
+ return;
360
+ const confirmAnswer = await safePrompt([
361
+ {
362
+ type: 'confirm',
363
+ name: 'confirm',
364
+ message: `Are you sure you want to deactivate "${answer.selected.name}"? Messages will not be preprocessed.`,
365
+ default: false
366
+ }
367
+ ]);
368
+ if (!confirmAnswer || !confirmAnswer.confirm) {
369
+ console.log("\nāŒ Deactivation cancelled.\n");
370
+ return;
371
+ }
372
+ writeProgress(`šŸ”„ Deactivating preprocessor "${answer.selected.name}"...`);
373
+ const api = new PreProcessorApi(BASE_URLS.API, context.apiKey, context.agentId);
374
+ const response = await api.deactivatePreProcessor(answer.selected.preprocessorId);
375
+ if (response.success) {
376
+ writeSuccess(`āœ… PreProcessor "${answer.selected.name}" deactivated successfully`);
377
+ writeInfo("šŸ’” The preprocessor is now disabled.");
378
+ }
379
+ else {
380
+ console.error(`āŒ Failed to deactivate preprocessor: ${response.error?.message || 'Unknown error'}`);
381
+ }
382
+ }
383
+ /**
384
+ * Delete a preprocessor
385
+ */
386
+ async function deletePreProcessor(context, config) {
387
+ const preprocessors = config.preprocessors || [];
388
+ if (preprocessors.length === 0) {
389
+ console.log("\nā„¹ļø No preprocessors found.\n");
390
+ return;
391
+ }
392
+ const answer = await safePrompt([
393
+ {
394
+ type: 'list',
395
+ name: 'selected',
396
+ message: 'Select a preprocessor to delete:',
397
+ choices: preprocessors.map((p) => ({
398
+ name: `${p.name} (${p.preprocessorId})`,
399
+ value: p
400
+ }))
401
+ }
402
+ ]);
403
+ if (!answer)
404
+ return;
405
+ const confirmAnswer = await safePrompt([
406
+ {
407
+ type: 'confirm',
408
+ name: 'confirm',
409
+ message: `āš ļø Are you sure you want to DELETE "${answer.selected.name}"? This cannot be undone.`,
410
+ default: false
411
+ }
412
+ ]);
413
+ if (!confirmAnswer || !confirmAnswer.confirm) {
414
+ console.log("\nāŒ Deletion cancelled.\n");
415
+ return;
416
+ }
417
+ writeProgress(`šŸ”„ Deleting preprocessor "${answer.selected.name}"...`);
418
+ const api = new PreProcessorApi(BASE_URLS.API, context.apiKey, context.agentId);
419
+ const response = await api.deletePreProcessor(answer.selected.preprocessorId);
420
+ if (response.success) {
421
+ if (response.data?.deleted) {
422
+ writeSuccess(`āœ… PreProcessor "${answer.selected.name}" deleted successfully`);
423
+ }
424
+ else if (response.data?.deactivated) {
425
+ writeInfo(`āš ļø PreProcessor "${answer.selected.name}" has versions and cannot be deleted. It has been deactivated instead.`);
426
+ }
427
+ }
428
+ else {
429
+ console.error(`āŒ Failed to delete preprocessor: ${response.error?.message || 'Unknown error'}`);
430
+ }
431
+ }