lua-cli 2.5.7 → 3.0.0-alpha.1

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 (124) hide show
  1. package/dist/api/agent.api.service.d.ts +45 -0
  2. package/dist/api/agent.api.service.js +54 -0
  3. package/dist/api/job.api.service.d.ts +210 -0
  4. package/dist/api/job.api.service.js +200 -0
  5. package/dist/api/lazy-instances.d.ts +24 -0
  6. package/dist/api/lazy-instances.js +48 -0
  7. package/dist/api/postprocessor.api.service.d.ts +98 -0
  8. package/dist/api/postprocessor.api.service.js +76 -0
  9. package/dist/api/preprocessor.api.service.d.ts +98 -0
  10. package/dist/api/preprocessor.api.service.js +76 -0
  11. package/dist/api/user.data.api.service.d.ts +28 -0
  12. package/dist/api/user.data.api.service.js +51 -0
  13. package/dist/api/webhook.api.service.d.ts +151 -0
  14. package/dist/api/webhook.api.service.js +134 -0
  15. package/dist/api-exports.d.ts +156 -41
  16. package/dist/api-exports.js +182 -21
  17. package/dist/cli/command-definitions.js +149 -7
  18. package/dist/commands/compile.js +124 -5
  19. package/dist/commands/completion.d.ts +11 -0
  20. package/dist/commands/completion.js +209 -0
  21. package/dist/commands/env.d.ts +3 -2
  22. package/dist/commands/env.js +42 -17
  23. package/dist/commands/features.d.ts +16 -0
  24. package/dist/commands/features.js +352 -0
  25. package/dist/commands/index.d.ts +7 -0
  26. package/dist/commands/index.js +7 -0
  27. package/dist/commands/init.js +53 -7
  28. package/dist/commands/jobs.d.ts +20 -0
  29. package/dist/commands/jobs.js +533 -0
  30. package/dist/commands/logs.js +2 -5
  31. package/dist/commands/persona.d.ts +3 -2
  32. package/dist/commands/persona.js +43 -18
  33. package/dist/commands/postprocessors.d.ts +8 -0
  34. package/dist/commands/postprocessors.js +431 -0
  35. package/dist/commands/preprocessors.d.ts +8 -0
  36. package/dist/commands/preprocessors.js +431 -0
  37. package/dist/commands/push.d.ts +9 -13
  38. package/dist/commands/push.js +937 -69
  39. package/dist/commands/skills.d.ts +16 -0
  40. package/dist/commands/skills.js +438 -0
  41. package/dist/commands/test.d.ts +9 -18
  42. package/dist/commands/test.js +558 -82
  43. package/dist/commands/webhooks.d.ts +18 -0
  44. package/dist/commands/webhooks.js +424 -0
  45. package/dist/common/data.entry.instance.d.ts +7 -0
  46. package/dist/common/data.entry.instance.js +15 -0
  47. package/dist/common/job.instance.d.ts +77 -0
  48. package/dist/common/job.instance.js +108 -0
  49. package/dist/common/order.instance.d.ts +6 -0
  50. package/dist/common/order.instance.js +14 -0
  51. package/dist/common/product.instance.d.ts +6 -0
  52. package/dist/common/product.instance.js +14 -0
  53. package/dist/common/user.instance.d.ts +15 -0
  54. package/dist/common/user.instance.js +38 -0
  55. package/dist/config/constants.d.ts +2 -2
  56. package/dist/config/constants.js +4 -4
  57. package/dist/index.js +14 -3
  58. package/dist/interfaces/agent.d.ts +33 -1
  59. package/dist/interfaces/chat.d.ts +22 -0
  60. package/dist/interfaces/index.d.ts +10 -0
  61. package/dist/interfaces/index.js +7 -0
  62. package/dist/interfaces/jobs.d.ts +172 -0
  63. package/dist/interfaces/jobs.js +5 -0
  64. package/dist/interfaces/message.d.ts +18 -0
  65. package/dist/interfaces/message.js +1 -0
  66. package/dist/interfaces/postprocessors.d.ts +35 -0
  67. package/dist/interfaces/postprocessors.js +4 -0
  68. package/dist/interfaces/preprocessors.d.ts +35 -0
  69. package/dist/interfaces/preprocessors.js +4 -0
  70. package/dist/interfaces/webhooks.d.ts +104 -0
  71. package/dist/interfaces/webhooks.js +5 -0
  72. package/dist/types/api-contracts.d.ts +14 -0
  73. package/dist/types/api-contracts.js +0 -7
  74. package/dist/types/compile.types.d.ts +49 -0
  75. package/dist/types/index.d.ts +1 -1
  76. package/dist/types/index.js +1 -1
  77. package/dist/types/skill.d.ts +502 -0
  78. package/dist/types/skill.js +477 -0
  79. package/dist/utils/agent-management.d.ts +25 -0
  80. package/dist/utils/agent-management.js +67 -0
  81. package/dist/utils/bundling.d.ts +31 -1
  82. package/dist/utils/bundling.js +653 -10
  83. package/dist/utils/compile.d.ts +63 -0
  84. package/dist/utils/compile.js +691 -36
  85. package/dist/utils/deployment.d.ts +2 -1
  86. package/dist/utils/deployment.js +16 -2
  87. package/dist/utils/init-agent.d.ts +3 -1
  88. package/dist/utils/init-agent.js +6 -4
  89. package/dist/utils/init-prompts.d.ts +2 -1
  90. package/dist/utils/init-prompts.js +14 -9
  91. package/dist/utils/job-management.d.ts +24 -0
  92. package/dist/utils/job-management.js +264 -0
  93. package/dist/utils/postprocessor-management.d.ts +9 -0
  94. package/dist/utils/postprocessor-management.js +118 -0
  95. package/dist/utils/preprocessor-management.d.ts +9 -0
  96. package/dist/utils/preprocessor-management.js +118 -0
  97. package/dist/utils/sandbox.d.ts +61 -1
  98. package/dist/utils/sandbox.js +283 -72
  99. package/dist/utils/tool-detection.d.ts +3 -2
  100. package/dist/utils/tool-detection.js +18 -4
  101. package/dist/utils/webhook-management.d.ts +24 -0
  102. package/dist/utils/webhook-management.js +256 -0
  103. package/dist/web/app.css +152 -736
  104. package/dist/web/app.js +45 -45
  105. package/package.json +2 -2
  106. package/template/AGENT_CONFIGURATION.md +251 -0
  107. package/template/COMPLEX_JOB_EXAMPLES.md +795 -0
  108. package/template/DYNAMIC_JOB_CREATION.md +371 -0
  109. package/template/README.md +30 -2
  110. package/template/WEBHOOKS_JOBS_QUICKSTART.md +318 -0
  111. package/template/WEBHOOK_JOB_EXAMPLES.md +817 -0
  112. package/template/package.json +1 -1
  113. package/template/src/index-agent-example.ts +201 -0
  114. package/template/src/index.ts +39 -0
  115. package/template/src/jobs/AbandonedBasketProcessorJob.ts +139 -0
  116. package/template/src/jobs/DailyCleanupJob.ts +100 -0
  117. package/template/src/jobs/DataMigrationJob.ts +133 -0
  118. package/template/src/jobs/HealthCheckJob.ts +87 -0
  119. package/template/src/postprocessors/ResponseFormatter.ts +151 -0
  120. package/template/src/preprocessors/MessageFilter.ts +91 -0
  121. package/template/src/tools/GameScoreTrackerTool.ts +356 -0
  122. package/template/src/tools/SmartBasketTool.ts +188 -0
  123. package/template/src/webhooks/PaymentWebhook.ts +113 -0
  124. package/template/src/webhooks/UserEventWebhook.ts +77 -0
@@ -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
+ }
@@ -3,25 +3,21 @@
3
3
  * Orchestrates pushing skill versions to the server
4
4
  */
5
5
  /**
6
- * Main push command - pushes a skill version to the server.
6
+ * Main push command - pushes a skill or persona version to the server.
7
7
  *
8
8
  * This command performs the following steps:
9
- * 1. Validates configuration has required fields
10
- * 2. Prompts user to select a skill (if multiple skills exist)
11
- * 3. Prompts to confirm or update version
12
- * 4. Authenticates the user
13
- * 5. Compiles the skill (always, to ensure deploy.json is current)
14
- * 6. Validates deploy.json matches configuration for selected skill
15
- * 7. Extracts the specific skill's deploy data
16
- * 8. Pushes version to server
9
+ * 1. If type argument provided, uses it directly
10
+ * 2. Otherwise, prompts user to select 'skill' or 'persona'
11
+ * 3. Routes to appropriate push flow
17
12
  *
18
13
  * Use this command to:
19
- * - Upload a new version of your skill
20
- * - Make your skill available for testing in dev mode
21
- * - Prepare your skill for deployment
14
+ * - Upload a new version of your skill or persona
15
+ * - Make your skill/persona available for testing in dev mode
16
+ * - Prepare your skill/persona for deployment
22
17
  *
23
18
  * Note: This does NOT deploy to production. Use `lua deploy` for that.
24
19
  *
20
+ * @param type - Optional type argument ('skill' or 'persona')
25
21
  * @returns Promise that resolves when push completes
26
22
  */
27
- export declare function pushCommand(): Promise<void>;
23
+ export declare function pushCommand(type?: string): Promise<void>;