lua-cli 3.9.3 → 3.10.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.
Files changed (111) hide show
  1. package/dist/api/device.api.service.d.ts +61 -0
  2. package/dist/api/device.api.service.d.ts.map +1 -0
  3. package/dist/api/device.api.service.js +72 -0
  4. package/dist/api/device.api.service.js.map +1 -0
  5. package/dist/api/lazy-instances.d.ts +1 -0
  6. package/dist/api/lazy-instances.d.ts.map +1 -1
  7. package/dist/api/lazy-instances.js +12 -0
  8. package/dist/api/lazy-instances.js.map +1 -1
  9. package/dist/api-exports.d.ts +38 -2
  10. package/dist/api-exports.d.ts.map +1 -1
  11. package/dist/api-exports.js +45 -2
  12. package/dist/api-exports.js.map +1 -1
  13. package/dist/cli/command-definitions.d.ts.map +1 -1
  14. package/dist/cli/command-definitions.js +75 -11
  15. package/dist/cli/command-definitions.js.map +1 -1
  16. package/dist/commands/devices.d.ts +6 -0
  17. package/dist/commands/devices.d.ts.map +1 -0
  18. package/dist/commands/devices.js +266 -0
  19. package/dist/commands/devices.js.map +1 -0
  20. package/dist/commands/index.d.ts +2 -0
  21. package/dist/commands/index.d.ts.map +1 -1
  22. package/dist/commands/index.js +2 -0
  23. package/dist/commands/index.js.map +1 -1
  24. package/dist/commands/models.d.ts +18 -0
  25. package/dist/commands/models.d.ts.map +1 -0
  26. package/dist/commands/models.js +206 -0
  27. package/dist/commands/models.js.map +1 -0
  28. package/dist/commands/push.d.ts.map +1 -1
  29. package/dist/commands/push.js +8 -4
  30. package/dist/commands/push.js.map +1 -1
  31. package/dist/commands/pushBackup.d.ts.map +1 -1
  32. package/dist/commands/pushBackup.js +9 -1
  33. package/dist/commands/pushBackup.js.map +1 -1
  34. package/dist/commands/sync.d.ts +2 -0
  35. package/dist/commands/sync.d.ts.map +1 -1
  36. package/dist/commands/sync.js +116 -17
  37. package/dist/commands/sync.js.map +1 -1
  38. package/dist/compiler/agent-traverser.d.ts.map +1 -1
  39. package/dist/compiler/agent-traverser.js +1 -0
  40. package/dist/compiler/agent-traverser.js.map +1 -1
  41. package/dist/compiler/index.d.ts +1 -1
  42. package/dist/compiler/index.d.ts.map +1 -1
  43. package/dist/compiler/index.js +1 -1
  44. package/dist/compiler/index.js.map +1 -1
  45. package/dist/compiler/plugins/device.plugin.d.ts +46 -0
  46. package/dist/compiler/plugins/device.plugin.d.ts.map +1 -0
  47. package/dist/compiler/plugins/device.plugin.js +279 -0
  48. package/dist/compiler/plugins/device.plugin.js.map +1 -0
  49. package/dist/compiler/plugins/registry.d.ts.map +1 -1
  50. package/dist/compiler/plugins/registry.js +2 -0
  51. package/dist/compiler/plugins/registry.js.map +1 -1
  52. package/dist/compiler/source-writer.d.ts +17 -1
  53. package/dist/compiler/source-writer.d.ts.map +1 -1
  54. package/dist/compiler/source-writer.js +92 -28
  55. package/dist/compiler/source-writer.js.map +1 -1
  56. package/dist/compiler/types.d.ts +44 -2
  57. package/dist/compiler/types.d.ts.map +1 -1
  58. package/dist/compiler/types.js +1 -0
  59. package/dist/compiler/types.js.map +1 -1
  60. package/dist/interfaces/devices.d.ts +75 -0
  61. package/dist/interfaces/devices.d.ts.map +1 -0
  62. package/dist/interfaces/devices.js +5 -0
  63. package/dist/interfaces/devices.js.map +1 -0
  64. package/dist/primitives/base.handler.d.ts.map +1 -1
  65. package/dist/primitives/base.handler.js +31 -7
  66. package/dist/primitives/base.handler.js.map +1 -1
  67. package/dist/primitives/device.handler.d.ts +43 -0
  68. package/dist/primitives/device.handler.d.ts.map +1 -0
  69. package/dist/primitives/device.handler.js +82 -0
  70. package/dist/primitives/device.handler.js.map +1 -0
  71. package/dist/primitives/index.d.ts +2 -0
  72. package/dist/primitives/index.d.ts.map +1 -1
  73. package/dist/primitives/index.js +4 -0
  74. package/dist/primitives/index.js.map +1 -1
  75. package/dist/types/skill.d.ts +98 -0
  76. package/dist/types/skill.d.ts.map +1 -1
  77. package/dist/types/skill.js +21 -0
  78. package/dist/types/skill.js.map +1 -1
  79. package/dist/types/yaml.types.d.ts +8 -0
  80. package/dist/types/yaml.types.d.ts.map +1 -1
  81. package/dist/utils/backup-helpers.d.ts +41 -10
  82. package/dist/utils/backup-helpers.d.ts.map +1 -1
  83. package/dist/utils/backup-helpers.js +227 -15
  84. package/dist/utils/backup-helpers.js.map +1 -1
  85. package/dist/utils/init-agent.d.ts +8 -1
  86. package/dist/utils/init-agent.d.ts.map +1 -1
  87. package/dist/utils/init-agent.js +14 -1
  88. package/dist/utils/init-agent.js.map +1 -1
  89. package/dist/utils/init-prompts.d.ts +1 -1
  90. package/dist/utils/init-prompts.d.ts.map +1 -1
  91. package/dist/utils/init-prompts.js +7 -20
  92. package/dist/utils/init-prompts.js.map +1 -1
  93. package/dist/utils/sandbox-storage.d.ts +6 -0
  94. package/dist/utils/sandbox-storage.d.ts.map +1 -1
  95. package/dist/utils/sandbox-storage.js +32 -1
  96. package/dist/utils/sandbox-storage.js.map +1 -1
  97. package/dist/utils/sandbox.d.ts.map +1 -1
  98. package/dist/utils/sandbox.js +23 -0
  99. package/dist/utils/sandbox.js.map +1 -1
  100. package/docs/CLI_REFERENCE.md +152 -2
  101. package/docs/README.md +3 -1
  102. package/node_modules/@lua/shared-types/dist/index.d.mts +135 -2
  103. package/node_modules/@lua/shared-types/dist/index.d.ts +135 -2
  104. package/node_modules/@lua/shared-types/dist/index.js +57 -2
  105. package/node_modules/@lua/shared-types/dist/index.mjs +55 -1
  106. package/node_modules/@lua/shared-types/src/channel.type.ts +1 -0
  107. package/node_modules/@lua/shared-types/src/device.types.ts +172 -0
  108. package/node_modules/@lua/shared-types/src/index.ts +2 -0
  109. package/node_modules/@lua/shared-types/src/persona-defaults.ts +59 -0
  110. package/package.json +1 -1
  111. package/template/package.json +1 -1
@@ -0,0 +1,266 @@
1
+ /**
2
+ * Devices Command
3
+ * Manages agent device definitions and tests device communication
4
+ */
5
+ import { withErrorHandling, writeProgress, writeSuccess, writeInfo } from '../utils/cli.js';
6
+ import { BASE_URLS } from '../config/constants.js';
7
+ import { safePrompt } from '../utils/prompt-handler.js';
8
+ import { initializeCommand } from '../utils/command-utils.js';
9
+ import DeviceApi from '../api/device.api.service.js';
10
+ import { trackEvent } from '../services/analytics.js';
11
+ // ─────────────────────────────────────────────────────────────────────────────
12
+ // Main Command Entry
13
+ // ─────────────────────────────────────────────────────────────────────────────
14
+ export async function devicesCommand(action, cmdObj) {
15
+ return withErrorHandling(async () => {
16
+ const options = {
17
+ deviceName: cmdObj?.deviceName || null,
18
+ group: cmdObj?.group || null,
19
+ payload: cmdObj?.payload || '{}',
20
+ timeout: cmdObj?.timeout || '30000',
21
+ };
22
+ const { apiKey, agentId } = await initializeCommand();
23
+ const api = new DeviceApi(BASE_URLS.API, apiKey, agentId);
24
+ let selectedAction;
25
+ if (action && ['list', 'status', 'enable', 'disable', 'remove', 'test', 'test-trigger'].includes(action)) {
26
+ selectedAction = action;
27
+ }
28
+ else {
29
+ const answer = await safePrompt([
30
+ {
31
+ type: 'list',
32
+ name: 'action',
33
+ message: 'What would you like to do?',
34
+ choices: [
35
+ { name: '📋 List devices', value: 'list' },
36
+ { name: '📊 Device status', value: 'status' },
37
+ { name: '✅ Enable device', value: 'enable' },
38
+ { name: '⛔ Disable device', value: 'disable' },
39
+ { name: '🗑️ Remove device', value: 'remove' },
40
+ { name: '🧪 Test command', value: 'test' },
41
+ { name: '🔔 Test trigger', value: 'test-trigger' },
42
+ ],
43
+ },
44
+ ]);
45
+ if (!answer)
46
+ return;
47
+ selectedAction = answer.action;
48
+ }
49
+ switch (selectedAction) {
50
+ case 'list':
51
+ await listDevices(api, options);
52
+ break;
53
+ case 'status':
54
+ await deviceStatus(api, options);
55
+ break;
56
+ case 'enable':
57
+ await enableDevice(api, options);
58
+ break;
59
+ case 'disable':
60
+ await disableDevice(api, options);
61
+ break;
62
+ case 'remove':
63
+ await removeDevice(api, options, cmdObj?.force);
64
+ break;
65
+ case 'test':
66
+ await testCommand(api, options);
67
+ break;
68
+ case 'test-trigger':
69
+ await testTrigger(api, options);
70
+ break;
71
+ }
72
+ trackEvent('cli_devices_completed', {
73
+ action: selectedAction,
74
+ device_name: options.deviceName || undefined,
75
+ non_interactive: !!action,
76
+ });
77
+ }, 'devices');
78
+ }
79
+ // ─────────────────────────────────────────────────────────────────────────────
80
+ // Actions
81
+ // ─────────────────────────────────────────────────────────────────────────────
82
+ async function listDevices(api, options) {
83
+ writeProgress('Fetching devices...');
84
+ const response = await api.getDevices();
85
+ if (!response.success || !response.data) {
86
+ throw new Error(response.error?.message || 'Failed to fetch devices');
87
+ }
88
+ const devices = response.data.devices || response.data;
89
+ if (!Array.isArray(devices) || devices.length === 0) {
90
+ writeInfo('No devices registered. Connect a device using @lua/device-client.');
91
+ return;
92
+ }
93
+ let filtered = devices;
94
+ if (options.group) {
95
+ filtered = devices.filter((d) => d.group === options.group);
96
+ if (filtered.length === 0) {
97
+ writeInfo(`No devices found in group '${options.group}'.`);
98
+ return;
99
+ }
100
+ }
101
+ console.log(`\n Devices (${filtered.length}):\n`);
102
+ for (const d of filtered) {
103
+ const statusIcon = d.active === false ? '⛔' : '📡';
104
+ console.log(` ${statusIcon} ${d.name}${d.group ? ` [${d.group}]` : ''}`);
105
+ console.log(` ID: ${d.id}`);
106
+ if (d.description)
107
+ console.log(` ${d.description}`);
108
+ console.log('');
109
+ }
110
+ }
111
+ async function deviceStatus(api, options) {
112
+ const name = await resolveDeviceName(api, options.deviceName, 'Check status of');
113
+ writeProgress(`Checking status of '${name}'...`);
114
+ const response = await api.getDeviceStatus(name);
115
+ if (!response.success) {
116
+ throw new Error(response.error?.message || 'Failed to get device status');
117
+ }
118
+ const status = response.data.status;
119
+ const icon = status === 'online' ? '🟢' : status === 'disabled' ? '⛔' : '🔴';
120
+ writeSuccess(`${icon} Device '${name}' is ${status}`);
121
+ }
122
+ async function enableDevice(api, options) {
123
+ const name = await resolveDeviceName(api, options.deviceName, 'Enable');
124
+ writeProgress(`Enabling '${name}'...`);
125
+ const response = await api.enableDevice(name);
126
+ if (!response.success) {
127
+ throw new Error(response.error?.message || 'Failed to enable device');
128
+ }
129
+ writeSuccess(`Device '${name}' enabled`);
130
+ }
131
+ async function disableDevice(api, options) {
132
+ const name = await resolveDeviceName(api, options.deviceName, 'Disable');
133
+ writeProgress(`Disabling '${name}'...`);
134
+ const response = await api.disableDevice(name);
135
+ if (!response.success) {
136
+ throw new Error(response.error?.message || 'Failed to disable device');
137
+ }
138
+ writeSuccess(`Device '${name}' disabled`);
139
+ }
140
+ async function removeDevice(api, options, force) {
141
+ const name = await resolveDeviceName(api, options.deviceName, 'Remove');
142
+ if (!force) {
143
+ const confirm = await safePrompt([
144
+ { type: 'confirm', name: 'yes', message: `Remove device '${name}'? This cannot be undone.`, default: false },
145
+ ]);
146
+ if (!confirm?.yes) {
147
+ console.log('Cancelled.');
148
+ return;
149
+ }
150
+ }
151
+ writeProgress(`Removing '${name}'...`);
152
+ const response = await api.deleteDevice(name);
153
+ if (!response.success) {
154
+ throw new Error(response.error?.message || 'Failed to remove device');
155
+ }
156
+ writeSuccess(`Device '${name}' removed`);
157
+ }
158
+ async function testCommand(api, options) {
159
+ const name = await resolveDeviceName(api, options.deviceName, 'Test command on');
160
+ let command;
161
+ if (cmdHasPositionalCommand(options)) {
162
+ command = options.command;
163
+ }
164
+ else {
165
+ const answer = await safePrompt([
166
+ { type: 'input', name: 'command', message: 'Command name:' },
167
+ ]);
168
+ if (!answer?.command)
169
+ return;
170
+ command = answer.command;
171
+ }
172
+ let payload;
173
+ try {
174
+ payload = JSON.parse(options.payload || '{}');
175
+ }
176
+ catch {
177
+ throw new Error(`Invalid JSON payload: ${options.payload}`);
178
+ }
179
+ const timeout = parseInt(options.timeout || '30000');
180
+ console.log(`\n Sending '${command}' to device '${name}'...`);
181
+ const start = Date.now();
182
+ const response = await api.sendCommand(name, command, payload, timeout);
183
+ const latency = Date.now() - start;
184
+ if (response.success && response.data) {
185
+ const data = response.data;
186
+ if (data.success !== false) {
187
+ writeSuccess(`Response received (${latency}ms):`);
188
+ console.log(JSON.stringify(data.data || data, null, 2));
189
+ }
190
+ else {
191
+ console.log(`\n ❌ Device returned error (${latency}ms):`);
192
+ console.log(` ${data.error || 'Unknown error'}`);
193
+ }
194
+ }
195
+ else {
196
+ const msg = response.error?.message || 'Command failed';
197
+ if (msg.includes('offline')) {
198
+ console.log(`\n ❌ Device '${name}' is offline`);
199
+ }
200
+ else if (msg.includes('timed out')) {
201
+ console.log(`\n ❌ Command timed out after ${timeout}ms`);
202
+ }
203
+ else {
204
+ throw new Error(msg);
205
+ }
206
+ }
207
+ }
208
+ async function testTrigger(api, options) {
209
+ const name = await resolveDeviceName(api, options.deviceName, 'Test trigger on');
210
+ let triggerName;
211
+ const answer = await safePrompt([
212
+ { type: 'input', name: 'trigger', message: 'Trigger name:' },
213
+ ]);
214
+ if (!answer?.trigger)
215
+ return;
216
+ triggerName = answer.trigger;
217
+ let payload;
218
+ try {
219
+ payload = JSON.parse(options.payload || '{}');
220
+ }
221
+ catch {
222
+ throw new Error(`Invalid JSON payload: ${options.payload}`);
223
+ }
224
+ console.log(`\n Simulating trigger '${triggerName}' on device '${name}'...`);
225
+ writeInfo('Note: This sends the trigger through the full execution pipeline on the server.');
226
+ // test-trigger sends a command to the server to simulate a trigger
227
+ // This could be a dedicated endpoint, but for now we use the command endpoint
228
+ // with a special command name that the gateway recognizes
229
+ const response = await api.sendCommand(name, `__test_trigger__${triggerName}`, payload, parseInt(options.timeout || '30000'));
230
+ if (response.success) {
231
+ writeSuccess('Trigger sent successfully. Check agent logs for execution results.');
232
+ }
233
+ else {
234
+ console.log(`\n ❌ ${response.error?.message || 'Failed to send trigger'}`);
235
+ }
236
+ }
237
+ // ─────────────────────────────────────────────────────────────────────────────
238
+ // Helpers
239
+ // ─────────────────────────────────────────────────────────────────────────────
240
+ async function resolveDeviceName(api, name, actionLabel) {
241
+ if (name)
242
+ return name;
243
+ const response = await api.getDevices();
244
+ const devices = response.data?.devices || response.data || [];
245
+ if (!Array.isArray(devices) || devices.length === 0) {
246
+ throw new Error('No devices registered.');
247
+ }
248
+ const answer = await safePrompt([
249
+ {
250
+ type: 'list',
251
+ name: 'device',
252
+ message: `${actionLabel} which device?`,
253
+ choices: devices.map((d) => ({
254
+ name: `${d.name}${d.group ? ` [${d.group}]` : ''}`,
255
+ value: d.name,
256
+ })),
257
+ },
258
+ ]);
259
+ if (!answer?.device)
260
+ throw new Error('No device selected.');
261
+ return answer.device;
262
+ }
263
+ function cmdHasPositionalCommand(options) {
264
+ return !!options.command;
265
+ }
266
+ //# sourceMappingURL=devices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devices.js","sourceRoot":"","sources":["../../src/commands/devices.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,7 @@ export { logsCommand } from "./logs.js";
20
20
  export { completionCommand } from "./completion.js";
21
21
  export { skillsCommand } from "./skills.js";
22
22
  export { webhooksCommand } from "./webhooks.js";
23
+ export { devicesCommand } from "./devices.js";
23
24
  export { jobsCommand } from "./jobs.js";
24
25
  export { featuresCommand } from "./features.js";
25
26
  export { preprocessorsCommand } from "./preprocessors.js";
@@ -31,4 +32,5 @@ export { integrationsCommand } from "./integrations.js";
31
32
  export { agentsCommand } from "./agents.js";
32
33
  export { updateCommand } from "./update.js";
33
34
  export { telemetryCommand } from "./telemetry.js";
35
+ export { modelsCommand } from "./models.js";
34
36
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
@@ -20,6 +20,7 @@ export { logsCommand } from "./logs.js";
20
20
  export { completionCommand } from "./completion.js";
21
21
  export { skillsCommand } from "./skills.js";
22
22
  export { webhooksCommand } from "./webhooks.js";
23
+ export { devicesCommand } from "./devices.js";
23
24
  export { jobsCommand } from "./jobs.js";
24
25
  export { featuresCommand } from "./features.js";
25
26
  export { preprocessorsCommand } from "./preprocessors.js";
@@ -31,4 +32,5 @@ export { integrationsCommand } from "./integrations.js";
31
32
  export { agentsCommand } from "./agents.js";
32
33
  export { updateCommand } from "./update.js";
33
34
  export { telemetryCommand } from "./telemetry.js";
35
+ export { modelsCommand } from "./models.js";
34
36
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Models Command
3
+ * Lists available LLM models and optionally sets the model for the current project.
4
+ */
5
+ interface ModelsCommandOptions {
6
+ model?: string;
7
+ json?: boolean;
8
+ }
9
+ /**
10
+ * Main models command handler.
11
+ *
12
+ * Actions:
13
+ * - list (default): display all approved models, mark the current one
14
+ * - set: interactively select (or non-interactively via --model) and apply it
15
+ */
16
+ export declare function modelsCommand(action: string | undefined, opts: ModelsCommandOptions): Promise<void>;
17
+ export {};
18
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/commands/models.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,UAAU,oBAAoB;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAyED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,IAAI,CAAC,CAyIf"}
@@ -0,0 +1,206 @@
1
+ /**
2
+ * Models Command
3
+ * Lists available LLM models and optionally sets the model for the current project.
4
+ */
5
+ import chalk from 'chalk';
6
+ import { withErrorHandling, writeSuccess, writeInfo, writeError, writeProgress } from '../utils/cli.js';
7
+ import { getToken } from '../services/auth.js';
8
+ import { readYamlConfig } from '../utils/files.js';
9
+ import { fetchApprovedModels, validateModelCode, updateAgentModel, clearAgentModel } from '../utils/init-agent.js';
10
+ import { promptModelSelection } from '../utils/init-prompts.js';
11
+ import { setAgentModel, removeAgentModel } from '../compiler/index.js';
12
+ import { getAgentModel } from '../utils/artifact-loader.js';
13
+ import { fetchServerModel } from '../utils/sync-fetch.js';
14
+ import { trackEvent } from '../services/analytics.js';
15
+ /**
16
+ * Resolves the currently configured model code for the project.
17
+ * Prefers the server (authoritative, always fresh) and falls back
18
+ * to the compiled artifact only when the server call fails entirely.
19
+ *
20
+ * fetchServerModel returns:
21
+ * - model string → agent has this model
22
+ * - '' → agent exists but no model configured
23
+ * - null → API call failed
24
+ */
25
+ async function resolveCurrentModel(apiKey, agentId) {
26
+ const serverModel = await fetchServerModel(apiKey, agentId);
27
+ if (serverModel)
28
+ return serverModel;
29
+ if (serverModel === '')
30
+ return null;
31
+ // serverModel === null → API failure, fall back to local compiled artifact
32
+ const localModel = getAgentModel();
33
+ return localModel || null;
34
+ }
35
+ /**
36
+ * Displays all available models grouped by provider,
37
+ * highlighting the currently configured model.
38
+ */
39
+ async function listModels(models, currentModel, opts) {
40
+ if (opts.json) {
41
+ console.log(JSON.stringify({ currentModel, models }, null, 2));
42
+ return;
43
+ }
44
+ const providers = [...new Set(models.map(m => m.provider))].sort();
45
+ console.log('');
46
+ console.log('============================================================');
47
+ console.log(' 🧠 Available LLM Models');
48
+ console.log('============================================================');
49
+ console.log('');
50
+ if (currentModel) {
51
+ console.log(` Current model: ${chalk.bold.cyan(currentModel)}`);
52
+ }
53
+ else {
54
+ console.log(` Current model: ${chalk.gray('(platform default)')}`);
55
+ }
56
+ console.log('');
57
+ for (const provider of providers) {
58
+ const providerModels = models.filter(m => m.provider === provider);
59
+ console.log(chalk.yellow(` ── ${provider} ──`));
60
+ for (const m of providerModels) {
61
+ const isCurrent = m.code === currentModel;
62
+ const code = isCurrent ? chalk.bold.cyan(m.code.padEnd(30)) : m.code.padEnd(30);
63
+ const desc = chalk.gray(m.description);
64
+ const marker = isCurrent ? chalk.bold.green(' ← current') : '';
65
+ console.log(` ${code} ${desc}${marker}`);
66
+ }
67
+ console.log('');
68
+ }
69
+ console.log('============================================================');
70
+ if (!currentModel) {
71
+ console.log(` 💡 Run ${chalk.cyan('lua models set')} to choose a model for your agent`);
72
+ }
73
+ else {
74
+ console.log(` 💡 Run ${chalk.cyan('lua models set')} to change your model`);
75
+ }
76
+ console.log('============================================================');
77
+ console.log('');
78
+ }
79
+ /**
80
+ * Main models command handler.
81
+ *
82
+ * Actions:
83
+ * - list (default): display all approved models, mark the current one
84
+ * - set: interactively select (or non-interactively via --model) and apply it
85
+ */
86
+ export async function modelsCommand(action, opts) {
87
+ const resolvedAction = action ?? 'list';
88
+ return withErrorHandling(async () => {
89
+ const apiKey = getToken();
90
+ const config = readYamlConfig();
91
+ const agentId = config?.agent?.agentId;
92
+ // -------------------------------------------------------------------------
93
+ // LIST
94
+ // -------------------------------------------------------------------------
95
+ if (resolvedAction === 'list') {
96
+ writeProgress('🔄 Fetching available models...');
97
+ const models = await fetchApprovedModels(apiKey);
98
+ writeProgress('');
99
+ if (models.length === 0) {
100
+ writeError('❌ Could not fetch models from the server. Check your connection and API key.');
101
+ return;
102
+ }
103
+ const currentModel = agentId ? await resolveCurrentModel(apiKey, agentId) : null;
104
+ await listModels(models, currentModel, opts);
105
+ trackEvent('cli_models_listed', {
106
+ models_count: models.length,
107
+ has_current_model: !!currentModel,
108
+ json_output: opts.json ?? false,
109
+ });
110
+ return;
111
+ }
112
+ // -------------------------------------------------------------------------
113
+ // SET
114
+ // -------------------------------------------------------------------------
115
+ if (resolvedAction === 'set') {
116
+ if (!agentId) {
117
+ writeError('❌ No agent configured. Run `lua init` first to set up a project.');
118
+ process.exit(1);
119
+ }
120
+ writeProgress('🔄 Fetching available models...');
121
+ const models = await fetchApprovedModels(apiKey);
122
+ writeProgress('');
123
+ if (models.length === 0) {
124
+ writeError('❌ Could not fetch models from the server. Check your connection and API key.');
125
+ process.exit(1);
126
+ }
127
+ let selectedModel;
128
+ if (opts.model) {
129
+ selectedModel = validateModelCode(models, opts.model);
130
+ }
131
+ else {
132
+ const currentModel = await resolveCurrentModel(apiKey, agentId);
133
+ if (!opts.json) {
134
+ writeInfo(` Current model: ${currentModel ? chalk.bold.cyan(currentModel) : chalk.gray('(platform default)')}\n`);
135
+ }
136
+ selectedModel = await promptModelSelection(models);
137
+ }
138
+ if (!selectedModel) {
139
+ writeInfo('ℹ️ No model selected. Keeping existing configuration.');
140
+ return;
141
+ }
142
+ // Write to local source code
143
+ const localWriteOk = setAgentModel(selectedModel);
144
+ if (localWriteOk) {
145
+ writeSuccess(`✅ Model written to source: ${chalk.bold(selectedModel)}`);
146
+ }
147
+ else {
148
+ writeInfo(`⚠️ Could not write model to source file (no LuaAgent constructor found). You can set it manually in your code.`);
149
+ }
150
+ // Push to server
151
+ try {
152
+ await updateAgentModel(apiKey, agentId, selectedModel);
153
+ writeSuccess(`✅ Model pushed to server: ${chalk.bold(selectedModel)}`);
154
+ }
155
+ catch (err) {
156
+ writeInfo(`⚠️ Could not push model to server: ${err.message}. Run \`lua push agent\` to retry.`);
157
+ }
158
+ trackEvent('cli_models_set', {
159
+ model: selectedModel,
160
+ local_write_ok: localWriteOk,
161
+ non_interactive: !!opts.model,
162
+ });
163
+ return;
164
+ }
165
+ // -------------------------------------------------------------------------
166
+ // UNSET
167
+ // -------------------------------------------------------------------------
168
+ if (resolvedAction === 'unset') {
169
+ if (!agentId) {
170
+ writeError('❌ No agent configured. Run `lua init` first to set up a project.');
171
+ process.exit(1);
172
+ }
173
+ const currentModel = await resolveCurrentModel(apiKey, agentId);
174
+ if (!currentModel) {
175
+ writeInfo('ℹ️ No model is currently set — the platform default is already in use.');
176
+ return;
177
+ }
178
+ writeInfo(` Current model: ${chalk.bold.cyan(currentModel)}`);
179
+ writeInfo(` This will remove the model and let the Lua platform use its default.\n`);
180
+ // Remove from local source code
181
+ const localRemoveOk = removeAgentModel();
182
+ if (localRemoveOk) {
183
+ writeSuccess('✅ Model removed from source code');
184
+ }
185
+ else {
186
+ writeInfo('⚠️ Could not remove model from source file. Remove the `model` property manually from your LuaAgent config.');
187
+ }
188
+ // Clear on server
189
+ try {
190
+ await clearAgentModel(apiKey, agentId);
191
+ writeSuccess('✅ Model cleared on server — platform default will be used');
192
+ }
193
+ catch (err) {
194
+ writeInfo(`⚠️ Could not clear model on server: ${err.message}. Run \`lua push agent\` to retry.`);
195
+ }
196
+ trackEvent('cli_models_unset', {
197
+ previous_model: currentModel,
198
+ local_remove_ok: localRemoveOk,
199
+ });
200
+ return;
201
+ }
202
+ writeError(`❌ Unknown action '${resolvedAction}'. Use 'list', 'set', or 'unset'.`);
203
+ process.exit(1);
204
+ }, 'models');
205
+ }
206
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/commands/models.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA6UH;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CA2G5E"}
1
+ {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA8UH;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CA8G5E"}
@@ -13,7 +13,7 @@ import PersonaApi from '../api/persona.api.service.js';
13
13
  import { loadManifest, getPrimitivesByKind } from '../utils/artifact-loader.js';
14
14
  import { PrimitiveKind } from '../compiler/types.js';
15
15
  import { agentHandler } from '../primitives/agent.handler.js';
16
- import { skillHandler as skillH, webhookHandler as webhookH, jobHandler as jobH, preprocessorHandler as preprocessorH, postprocessorHandler as postprocessorH, } from '../primitives/index.js';
16
+ import { skillHandler as skillH, webhookHandler as webhookH, jobHandler as jobH, preprocessorHandler as preprocessorH, postprocessorHandler as postprocessorH, deviceHandler as deviceH, } from '../primitives/index.js';
17
17
  import { pushBackupCommand } from './pushBackup.js';
18
18
  import { trackEvent } from '../services/analytics.js';
19
19
  // ============================================================================
@@ -295,7 +295,7 @@ export async function pushCommand(type, cmdObj) {
295
295
  // Step 1: Check if type was provided as argument
296
296
  if (type) {
297
297
  // Validate the provided type
298
- const validTypes = ['skill', 'agent', 'persona', 'webhook', 'job', 'preprocessor', 'postprocessor', 'mcp', 'backup'];
298
+ const validTypes = ['skill', 'agent', 'persona', 'webhook', 'job', 'preprocessor', 'postprocessor', 'mcp', 'device', 'backup'];
299
299
  if (!validTypes.includes(type)) {
300
300
  console.log('\nUsage:');
301
301
  console.log(' lua push - Interactive selection');
@@ -329,6 +329,7 @@ export async function pushCommand(type, cmdObj) {
329
329
  { name: '📥 PreProcessor', value: 'preprocessor' },
330
330
  { name: '📤 PostProcessor', value: 'postprocessor' },
331
331
  { name: '🔌 MCP Server', value: 'mcp' },
332
+ { name: '📡 Device', value: 'device' },
332
333
  { name: '🤖 Agent (persona, model)', value: 'agent' },
333
334
  { name: '💾 Backup (source files)', value: 'backup' }
334
335
  ]
@@ -356,6 +357,9 @@ export async function pushCommand(type, cmdObj) {
356
357
  else if (selectedType === 'postprocessor') {
357
358
  await pushVersionedPrimitive(postprocessorH, options);
358
359
  }
360
+ else if (selectedType === 'device') {
361
+ await pushVersionedPrimitive(deviceH, options);
362
+ }
359
363
  else if (selectedType === 'mcp') {
360
364
  await pushMCPServer(options);
361
365
  }
@@ -567,10 +571,10 @@ async function pushAllCommand(options) {
567
571
  let backupSuccess = false;
568
572
  // Icons per kind for display
569
573
  const kindIcons = {
570
- skill: '📦', webhook: '🪝', job: '⏰', preprocessor: '📥', postprocessor: '📤',
574
+ skill: '📦', webhook: '🪝', job: '⏰', preprocessor: '📥', postprocessor: '📤', device: '📡',
571
575
  };
572
576
  // Step 4: Pre-fetch highest versions in parallel (one HTTP call per handler type)
573
- const handlers = [skillH, webhookH, jobH, preprocessorH, postprocessorH];
577
+ const handlers = [skillH, webhookH, jobH, preprocessorH, postprocessorH, deviceH];
574
578
  // Collect entity IDs per handler and batch-fetch versions in parallel
575
579
  const handlerItems = handlers.map(handler => ({
576
580
  handler,