lua-cli 3.9.2 ā 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.
- package/README.md +90 -2
- package/dist/api/agent.api.service.d.ts +8 -0
- package/dist/api/agent.api.service.d.ts.map +1 -1
- package/dist/api/agent.api.service.js +12 -0
- package/dist/api/agent.api.service.js.map +1 -1
- package/dist/api/device.api.service.d.ts +61 -0
- package/dist/api/device.api.service.d.ts.map +1 -0
- package/dist/api/device.api.service.js +72 -0
- package/dist/api/device.api.service.js.map +1 -0
- package/dist/api/lazy-instances.d.ts +1 -0
- package/dist/api/lazy-instances.d.ts.map +1 -1
- package/dist/api/lazy-instances.js +12 -0
- package/dist/api/lazy-instances.js.map +1 -1
- package/dist/api-exports.d.ts +38 -2
- package/dist/api-exports.d.ts.map +1 -1
- package/dist/api-exports.js +45 -2
- package/dist/api-exports.js.map +1 -1
- package/dist/cli/command-definitions.d.ts.map +1 -1
- package/dist/cli/command-definitions.js +100 -33
- package/dist/cli/command-definitions.js.map +1 -1
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +2 -11
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/apiKey.d.ts +1 -21
- package/dist/commands/apiKey.d.ts.map +1 -1
- package/dist/commands/apiKey.js +7 -25
- package/dist/commands/apiKey.js.map +1 -1
- package/dist/commands/compile.d.ts.map +1 -1
- package/dist/commands/compile.js +11 -3
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/configure.d.ts +2 -2
- package/dist/commands/configure.js +2 -2
- package/dist/commands/destroy.d.ts +0 -24
- package/dist/commands/destroy.d.ts.map +1 -1
- package/dist/commands/destroy.js +8 -30
- package/dist/commands/destroy.js.map +1 -1
- package/dist/commands/devices.d.ts +6 -0
- package/dist/commands/devices.d.ts.map +1 -0
- package/dist/commands/devices.js +266 -0
- package/dist/commands/devices.js.map +1 -0
- package/dist/commands/index.d.ts +2 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +2 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +102 -39
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/jobs.js +29 -9
- package/dist/commands/jobs.js.map +1 -1
- package/dist/commands/models.d.ts +18 -0
- package/dist/commands/models.d.ts.map +1 -0
- package/dist/commands/models.js +206 -0
- package/dist/commands/models.js.map +1 -0
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +8 -4
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/pushBackup.d.ts.map +1 -1
- package/dist/commands/pushBackup.js +9 -1
- package/dist/commands/pushBackup.js.map +1 -1
- package/dist/commands/sync.d.ts +2 -0
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +116 -17
- package/dist/commands/sync.js.map +1 -1
- package/dist/compiler/agent-traverser.d.ts.map +1 -1
- package/dist/compiler/agent-traverser.js +1 -0
- package/dist/compiler/agent-traverser.js.map +1 -1
- package/dist/compiler/index.d.ts +1 -1
- package/dist/compiler/index.d.ts.map +1 -1
- package/dist/compiler/index.js +1 -1
- package/dist/compiler/index.js.map +1 -1
- package/dist/compiler/plugins/device.plugin.d.ts +46 -0
- package/dist/compiler/plugins/device.plugin.d.ts.map +1 -0
- package/dist/compiler/plugins/device.plugin.js +279 -0
- package/dist/compiler/plugins/device.plugin.js.map +1 -0
- package/dist/compiler/plugins/registry.d.ts.map +1 -1
- package/dist/compiler/plugins/registry.js +2 -0
- package/dist/compiler/plugins/registry.js.map +1 -1
- package/dist/compiler/source-writer.d.ts +17 -1
- package/dist/compiler/source-writer.d.ts.map +1 -1
- package/dist/compiler/source-writer.js +114 -29
- package/dist/compiler/source-writer.js.map +1 -1
- package/dist/compiler/types.d.ts +44 -2
- package/dist/compiler/types.d.ts.map +1 -1
- package/dist/compiler/types.js +1 -0
- package/dist/compiler/types.js.map +1 -1
- package/dist/config/constants.d.ts +7 -11
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +7 -11
- package/dist/config/constants.js.map +1 -1
- package/dist/index.js +0 -0
- package/dist/interfaces/agent.d.ts +11 -0
- package/dist/interfaces/agent.d.ts.map +1 -1
- package/dist/interfaces/devices.d.ts +75 -0
- package/dist/interfaces/devices.d.ts.map +1 -0
- package/dist/interfaces/devices.js +5 -0
- package/dist/interfaces/devices.js.map +1 -0
- package/dist/primitives/base.handler.d.ts.map +1 -1
- package/dist/primitives/base.handler.js +31 -7
- package/dist/primitives/base.handler.js.map +1 -1
- package/dist/primitives/device.handler.d.ts +43 -0
- package/dist/primitives/device.handler.d.ts.map +1 -0
- package/dist/primitives/device.handler.js +82 -0
- package/dist/primitives/device.handler.js.map +1 -0
- package/dist/primitives/index.d.ts +2 -0
- package/dist/primitives/index.d.ts.map +1 -1
- package/dist/primitives/index.js +4 -0
- package/dist/primitives/index.js.map +1 -1
- package/dist/services/analytics.d.ts.map +1 -1
- package/dist/services/analytics.js +6 -2
- package/dist/services/analytics.js.map +1 -1
- package/dist/services/auth.d.ts +16 -26
- package/dist/services/auth.d.ts.map +1 -1
- package/dist/services/auth.js +45 -101
- package/dist/services/auth.js.map +1 -1
- package/dist/types/skill.d.ts +98 -0
- package/dist/types/skill.d.ts.map +1 -1
- package/dist/types/skill.js +21 -0
- package/dist/types/skill.js.map +1 -1
- package/dist/types/yaml.types.d.ts +8 -0
- package/dist/types/yaml.types.d.ts.map +1 -1
- package/dist/utils/auth-flows.d.ts.map +1 -1
- package/dist/utils/auth-flows.js +8 -12
- package/dist/utils/auth-flows.js.map +1 -1
- package/dist/utils/backup-helpers.d.ts +41 -10
- package/dist/utils/backup-helpers.d.ts.map +1 -1
- package/dist/utils/backup-helpers.js +227 -15
- package/dist/utils/backup-helpers.js.map +1 -1
- package/dist/utils/cli.d.ts.map +1 -1
- package/dist/utils/cli.js +2 -3
- package/dist/utils/cli.js.map +1 -1
- package/dist/utils/command-utils.d.ts +4 -3
- package/dist/utils/command-utils.d.ts.map +1 -1
- package/dist/utils/command-utils.js +9 -20
- package/dist/utils/command-utils.js.map +1 -1
- package/dist/utils/init-agent.d.ts +37 -1
- package/dist/utils/init-agent.d.ts.map +1 -1
- package/dist/utils/init-agent.js +69 -1
- package/dist/utils/init-agent.js.map +1 -1
- package/dist/utils/init-helpers.d.ts +2 -1
- package/dist/utils/init-helpers.d.ts.map +1 -1
- package/dist/utils/init-helpers.js +3 -2
- package/dist/utils/init-helpers.js.map +1 -1
- package/dist/utils/init-prompts.d.ts +11 -1
- package/dist/utils/init-prompts.d.ts.map +1 -1
- package/dist/utils/init-prompts.js +49 -22
- package/dist/utils/init-prompts.js.map +1 -1
- package/dist/utils/sandbox-storage.d.ts +24 -18
- package/dist/utils/sandbox-storage.d.ts.map +1 -1
- package/dist/utils/sandbox-storage.js +108 -101
- package/dist/utils/sandbox-storage.js.map +1 -1
- package/dist/utils/sandbox.d.ts.map +1 -1
- package/dist/utils/sandbox.js +23 -0
- package/dist/utils/sandbox.js.map +1 -1
- package/docs/CLI_REFERENCE.md +152 -2
- package/docs/README.md +5 -3
- package/node_modules/@lua/shared-types/dist/index.d.mts +188 -2
- package/node_modules/@lua/shared-types/dist/index.d.ts +188 -2
- package/node_modules/@lua/shared-types/dist/index.js +171 -2
- package/node_modules/@lua/shared-types/dist/index.mjs +164 -1
- package/node_modules/@lua/shared-types/src/channel.type.ts +1 -0
- package/node_modules/@lua/shared-types/src/device.types.ts +172 -0
- package/node_modules/@lua/shared-types/src/index.ts +2 -0
- package/node_modules/@lua/shared-types/src/persona-defaults.ts +59 -0
- package/package.json +5 -7
- package/template/package.json +1 -1
- package/dist/utils/keytar-loader.d.ts +0 -20
- package/dist/utils/keytar-loader.d.ts.map +0 -1
- package/dist/utils/keytar-loader.js +0 -35
- package/dist/utils/keytar-loader.js.map +0 -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":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,SAAS,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAWtD,gFAAgF;AAChF,qBAAqB;AACrB,gFAAgF;AAEhF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAe,EAAE,MAAY;IAChE,OAAO,iBAAiB,CAAC,KAAK,IAAI,EAAE;QAClC,MAAM,OAAO,GAAmB;YAC9B,UAAU,EAAE,MAAM,EAAE,UAAU,IAAI,IAAI;YACtC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,IAAI;YAC5B,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,IAAI;YAChC,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,OAAO;SACpC,CAAC;QAEF,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,iBAAiB,EAAE,CAAC;QACtD,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAE1D,IAAI,cAA4B,CAAC;QAEjC,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACzG,cAAc,GAAG,MAAsB,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,MAAM,UAAU,CAAqB;gBAClD;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,4BAA4B;oBACrC,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE;wBAC1C,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,QAAQ,EAAE;wBAC7C,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE;wBAC5C,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,SAAS,EAAE;wBAC9C,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,QAAQ,EAAE;wBAC/C,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE;wBAC1C,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,cAAc,EAAE;qBACnD;iBACF;aACF,CAAC,CAAC;YACH,IAAI,CAAC,MAAM;gBAAE,OAAO;YACpB,cAAc,GAAG,MAAM,CAAC,MAAsB,CAAC;QACjD,CAAC;QAED,QAAQ,cAAc,EAAE,CAAC;YACvB,KAAK,MAAM;gBACT,MAAM,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBAChC,MAAM;YACR,KAAK,QAAQ;gBACX,MAAM,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBACjC,MAAM;YACR,KAAK,QAAQ;gBACX,MAAM,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBACjC,MAAM;YACR,KAAK,SAAS;gBACZ,MAAM,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBAClC,MAAM;YACR,KAAK,QAAQ;gBACX,MAAM,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;gBAChD,MAAM;YACR,KAAK,MAAM;gBACT,MAAM,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBAChC,MAAM;YACR,KAAK,cAAc;gBACjB,MAAM,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBAChC,MAAM;QACV,CAAC;QAED,UAAU,CAAC,uBAAuB,EAAE;YAClC,MAAM,EAAE,cAAc;YACtB,WAAW,EAAE,OAAO,CAAC,UAAU,IAAI,SAAS;YAC5C,eAAe,EAAE,CAAC,CAAC,MAAM;SAC1B,CAAC,CAAC;IACL,CAAC,EAAE,SAAS,CAAC,CAAC;AAChB,CAAC;AAED,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF,KAAK,UAAU,WAAW,CAAC,GAAc,EAAE,OAAuB;IAChE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,UAAU,EAAE,CAAC;IAExC,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,IAAI,yBAAyB,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,OAAO,GAAI,QAAQ,CAAC,IAAY,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC;IAChE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,SAAS,CAAC,mEAAmE,CAAC,CAAC;QAC/E,OAAO;IACT,CAAC;IAED,IAAI,QAAQ,GAAG,OAAO,CAAC;IACvB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,SAAS,CAAC,8BAA8B,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;YAC3D,OAAO;QACT,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,CAAC,MAAM,MAAM,CAAC,CAAC;IACnD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,CAAC,WAAW;YAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,GAAc,EAAE,OAAuB;IACjE,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IACjF,aAAa,CAAC,uBAAuB,IAAI,MAAM,CAAC,CAAC;IAEjD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,IAAI,6BAA6B,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,MAAM,GAAI,QAAQ,CAAC,IAAY,CAAC,MAAM,CAAC;IAC7C,MAAM,IAAI,GAAG,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7E,YAAY,CAAC,GAAG,IAAI,YAAY,IAAI,QAAQ,MAAM,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,GAAc,EAAE,OAAuB;IACjE,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACxE,aAAa,CAAC,aAAa,IAAI,MAAM,CAAC,CAAC;IAEvC,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,IAAI,yBAAyB,CAAC,CAAC;IACxE,CAAC;IACD,YAAY,CAAC,WAAW,IAAI,WAAW,CAAC,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,GAAc,EAAE,OAAuB;IAClE,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACzE,aAAa,CAAC,cAAc,IAAI,MAAM,CAAC,CAAC;IAExC,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,IAAI,0BAA0B,CAAC,CAAC;IACzE,CAAC;IACD,YAAY,CAAC,WAAW,IAAI,YAAY,CAAC,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,GAAc,EAAE,OAAuB,EAAE,KAAe;IAClF,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAExE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,MAAM,UAAU,CAAmB;YACjD,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,IAAI,2BAA2B,EAAE,OAAO,EAAE,KAAK,EAAE;SAC7G,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;IACH,CAAC;IAED,aAAa,CAAC,aAAa,IAAI,MAAM,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,IAAI,yBAAyB,CAAC,CAAC;IACxE,CAAC;IACD,YAAY,CAAC,WAAW,IAAI,WAAW,CAAC,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,GAAc,EAAE,OAAuB;IAChE,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IAEjF,IAAI,OAAe,CAAC;IACpB,IAAI,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC;QACrC,OAAO,GAAI,OAAe,CAAC,OAAO,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,MAAM,UAAU,CAAsB;YACnD,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE;SAC7D,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,EAAE,OAAO;YAAE,OAAO;QAC7B,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAC3B,CAAC;IAED,IAAI,OAAY,CAAC;IACjB,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,gBAAgB,IAAI,MAAM,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEzB,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;IAEnC,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC3B,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YAC3B,YAAY,CAAC,sBAAsB,OAAO,MAAM,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,gCAAgC,OAAO,MAAM,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,OAAO,IAAI,gBAAgB,CAAC;QACxD,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,cAAc,CAAC,CAAC;QACnD,CAAC;aAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,iCAAiC,OAAO,IAAI,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,GAAc,EAAE,OAAuB;IAChE,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IAEjF,IAAI,WAAmB,CAAC;IACxB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAsB;QACnD,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE;KAC7D,CAAC,CAAC;IACH,IAAI,CAAC,MAAM,EAAE,OAAO;QAAE,OAAO;IAC7B,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;IAE7B,IAAI,OAAY,CAAC;IACjB,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,2BAA2B,WAAW,gBAAgB,IAAI,MAAM,CAAC,CAAC;IAC9E,SAAS,CAAC,iFAAiF,CAAC,CAAC;IAE7F,mEAAmE;IACnE,8EAA8E;IAC9E,0DAA0D;IAC1D,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,mBAAmB,WAAW,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC;IAE9H,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QACrB,YAAY,CAAC,oEAAoE,CAAC,CAAC;IACrF,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,SAAS,QAAQ,CAAC,KAAK,EAAE,OAAO,IAAI,wBAAwB,EAAE,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF,KAAK,UAAU,iBAAiB,CAAC,GAAc,EAAE,IAA+B,EAAE,WAAmB;IACnG,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAEtB,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,UAAU,EAAE,CAAC;IACxC,MAAM,OAAO,GAAI,QAAQ,CAAC,IAAY,EAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;IACvE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAqB;QAClD;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,GAAG,WAAW,gBAAgB;YACvC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;gBAChC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBAClD,KAAK,EAAE,CAAC,CAAC,IAAI;aACd,CAAC,CAAC;SACJ;KACF,CAAC,CAAC;IACH,IAAI,CAAC,MAAM,EAAE,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC5D,OAAO,MAAM,CAAC,MAAM,CAAC;AACvB,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAY;IAC3C,OAAO,CAAC,CAAE,OAAe,CAAC,OAAO,CAAC;AACpC,CAAC"}
|
package/dist/commands/index.d.ts
CHANGED
|
@@ -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"}
|
package/dist/commands/index.js
CHANGED
|
@@ -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"}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA6CH;;GAEG;AACH,UAAU,kBAAkB;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA4ED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+QjF"}
|
package/dist/commands/init.js
CHANGED
|
@@ -6,8 +6,8 @@ import inquirer from 'inquirer';
|
|
|
6
6
|
import { checkApiKey } from "../services/auth.js";
|
|
7
7
|
import { requireAuthOrExit } from "../utils/command-utils.js";
|
|
8
8
|
import { withErrorHandling, writeProgress, writeSuccess, writeInfo, writeError, } from "../utils/cli.js";
|
|
9
|
-
import { promptAgentChoice, promptOrganizationSelection, promptAgentSelection, promptMetadataCollection, promptAgentName, displayPersonaInstructions, } from "../utils/init-prompts.js";
|
|
10
|
-
import { fetchAgentTypes, selectBaseAgentType, createNewAgent, fetchExistingAgentDetails, } from "../utils/init-agent.js";
|
|
9
|
+
import { promptAgentChoice, promptOrganizationSelection, promptAgentSelection, promptMetadataCollection, promptAgentName, promptModelSelection, displayPersonaInstructions, } from "../utils/init-prompts.js";
|
|
10
|
+
import { fetchAgentTypes, selectBaseAgentType, createNewAgent, fetchExistingAgentDetails, fetchApprovedModels, validateModelCode, updateAgentModel, } from "../utils/init-agent.js";
|
|
11
11
|
import { initializeProject, installDependencies, clearLinesIfNeeded, } from "../utils/init-helpers.js";
|
|
12
12
|
import { readYamlConfig, updateYamlAgent } from "../utils/files.js";
|
|
13
13
|
import BackupApi from "../api/backup.api.service.js";
|
|
@@ -196,75 +196,75 @@ export async function initCommand(options = {}) {
|
|
|
196
196
|
let selectedAgent;
|
|
197
197
|
let selectedOrg;
|
|
198
198
|
let persona;
|
|
199
|
+
let serverModel;
|
|
199
200
|
let isNewAgent = false;
|
|
200
|
-
|
|
201
|
+
let selectedModel;
|
|
202
|
+
// Non-interactive --model flag: validate early
|
|
203
|
+
if (options.model) {
|
|
204
|
+
const models = await fetchApprovedModels(apiKey);
|
|
205
|
+
selectedModel = validateModelCode(models, options.model);
|
|
206
|
+
}
|
|
207
|
+
// Step 4: Execute based on mode ā select or create agent
|
|
201
208
|
if (mode.type === 'existing-agent') {
|
|
202
|
-
// Non-interactive: use existing agent by ID
|
|
203
209
|
const result = await selectExistingAgentById(userData, apiKey, mode.agentId);
|
|
204
210
|
selectedAgent = result.agent;
|
|
205
211
|
selectedOrg = result.org;
|
|
206
212
|
persona = result.persona;
|
|
213
|
+
serverModel = result.model;
|
|
207
214
|
}
|
|
208
215
|
else if (mode.type === 'new-agent') {
|
|
209
|
-
// Non-interactive: create new agent
|
|
210
216
|
const result = await createNewAgentNonInteractive(apiKey, userData, mode.agentName, mode.orgId, mode.orgName, options.promoCode);
|
|
211
217
|
selectedAgent = result.agent;
|
|
212
218
|
selectedOrg = result.org;
|
|
213
219
|
persona = result.persona;
|
|
214
220
|
isNewAgent = true;
|
|
215
|
-
// Show persona configuration instructions for new agents
|
|
216
|
-
displayPersonaInstructions();
|
|
217
221
|
}
|
|
218
222
|
else {
|
|
219
223
|
// Interactive mode
|
|
220
224
|
const agentChoice = await promptAgentChoice();
|
|
221
225
|
if (agentChoice === "existing") {
|
|
222
|
-
// Step 4a: Select existing agent
|
|
223
226
|
const result = await selectExistingAgent(userData, apiKey);
|
|
224
227
|
selectedAgent = result.agent;
|
|
225
228
|
selectedOrg = result.org;
|
|
226
229
|
persona = result.persona;
|
|
230
|
+
serverModel = result.model;
|
|
227
231
|
}
|
|
228
232
|
else {
|
|
229
|
-
// Step 4b: Create new agent
|
|
230
233
|
const result = await createNewAgentFlow(apiKey, userData, options.promoCode);
|
|
231
234
|
selectedAgent = result.agent;
|
|
232
235
|
selectedOrg = result.org;
|
|
233
236
|
persona = result.persona;
|
|
237
|
+
selectedModel = result.model;
|
|
234
238
|
isNewAgent = true;
|
|
235
|
-
// Show persona configuration instructions for new agents
|
|
236
|
-
displayPersonaInstructions();
|
|
237
239
|
}
|
|
238
240
|
}
|
|
239
241
|
// Step 4.5: Check for backup restoration (existing agents only)
|
|
240
242
|
let sourcesRestored = false;
|
|
241
243
|
if (!isNewAgent && !yamlExists) {
|
|
242
|
-
// Only check backup for existing agents during fresh init (not when YAML exists)
|
|
243
244
|
sourcesRestored = await checkAndRestoreBackup(apiKey, selectedAgent.agentId, {
|
|
244
245
|
interactive: mode.type === 'interactive',
|
|
245
246
|
autoRestore: options.restoreSources === true
|
|
246
247
|
});
|
|
247
248
|
}
|
|
248
|
-
// Step 4.6: After restoration, mirror server config (persona/
|
|
249
|
-
// Fetch server state directly rather than
|
|
250
|
-
//
|
|
251
|
-
// exist yet right after a fresh init + restore.
|
|
249
|
+
// Step 4.6: After restoration, mirror server config (name/persona/model) into source.
|
|
250
|
+
// Fetch server state directly rather than agentHandler.checkDrift ā drift detection
|
|
251
|
+
// reads from the compilation manifest, which doesn't exist after a fresh init + restore.
|
|
252
252
|
if (sourcesRestored && !isNewAgent) {
|
|
253
253
|
try {
|
|
254
254
|
console.log('\nSyncing agent configuration from server...');
|
|
255
|
-
const [
|
|
255
|
+
const [syncName, syncPersonaData, syncModel] = await Promise.all([
|
|
256
256
|
fetchServerName(apiKey, selectedAgent.agentId),
|
|
257
257
|
fetchServerPersona(apiKey, selectedAgent.agentId),
|
|
258
258
|
fetchServerModel(apiKey, selectedAgent.agentId),
|
|
259
259
|
]);
|
|
260
|
-
if (
|
|
261
|
-
agentHandler.pullPersona(
|
|
260
|
+
if (syncPersonaData?.persona) {
|
|
261
|
+
agentHandler.pullPersona(syncPersonaData.persona);
|
|
262
262
|
}
|
|
263
|
-
if (
|
|
264
|
-
agentHandler.pullName(
|
|
263
|
+
if (syncName) {
|
|
264
|
+
agentHandler.pullName(syncName);
|
|
265
265
|
}
|
|
266
|
-
if (
|
|
267
|
-
agentHandler.pullModel(
|
|
266
|
+
if (syncModel) {
|
|
267
|
+
agentHandler.pullModel(syncModel);
|
|
268
268
|
}
|
|
269
269
|
writeSuccess(' ā
Agent configuration synced');
|
|
270
270
|
}
|
|
@@ -272,22 +272,52 @@ export async function initCommand(options = {}) {
|
|
|
272
272
|
writeInfo(' ā Failed to sync agent config ā run "lua sync" manually');
|
|
273
273
|
}
|
|
274
274
|
}
|
|
275
|
+
// Resolve model for existing agents (new agents already prompted above).
|
|
276
|
+
// Backup restored: server sync (Step 4.6) already handled it.
|
|
277
|
+
// Existing (no backup): use server model if present, else prompt.
|
|
278
|
+
if (!sourcesRestored && !isNewAgent && !selectedModel) {
|
|
279
|
+
if (serverModel) {
|
|
280
|
+
selectedModel = serverModel;
|
|
281
|
+
}
|
|
282
|
+
else if (mode.type === 'interactive') {
|
|
283
|
+
const models = await fetchApprovedModels(apiKey);
|
|
284
|
+
if (models.length > 0) {
|
|
285
|
+
selectedModel = await promptModelSelection(models);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
// Show persona instructions (new agents only, after all prompts)
|
|
290
|
+
if (isNewAgent) {
|
|
291
|
+
displayPersonaInstructions();
|
|
292
|
+
}
|
|
293
|
+
// Push model to server only if the user explicitly selected/overrode it
|
|
294
|
+
// (don't push back a model we just fetched from the server)
|
|
295
|
+
const userChoseModel = selectedModel && selectedModel !== serverModel;
|
|
296
|
+
if (userChoseModel) {
|
|
297
|
+
try {
|
|
298
|
+
writeProgress(`š¤ Setting model: ${selectedModel}...`);
|
|
299
|
+
await updateAgentModel(apiKey, selectedAgent.agentId, selectedModel);
|
|
300
|
+
writeProgress(`ā
Model set: ${selectedModel}`);
|
|
301
|
+
}
|
|
302
|
+
catch (error) {
|
|
303
|
+
writeInfo(`ā ļø Could not set model on server ā you can push it later with \`lua push agent\``);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
275
306
|
// Step 5: Initialize or update project
|
|
276
307
|
if (yamlExists) {
|
|
277
308
|
// Update existing YAML and LuaAgent in index.ts
|
|
278
309
|
writeInfo("š Updating existing lua.skill.yaml with new agent...");
|
|
279
310
|
updateYamlAgent(selectedAgent.agentId, selectedOrg.id);
|
|
280
|
-
// Also update LuaAgent in index.ts if it exists
|
|
281
311
|
const { updateAgentConfig } = await import("../compiler/index.js");
|
|
282
|
-
updateAgentConfig({ name: selectedAgent.name, persona }, { projectDir: process.cwd() });
|
|
312
|
+
updateAgentConfig({ name: selectedAgent.name, persona, model: selectedModel }, { projectDir: process.cwd() });
|
|
283
313
|
writeSuccess("ā
lua.skill.yaml updated successfully!");
|
|
284
314
|
writeSuccess("ā
LuaAgent configuration updated!");
|
|
285
315
|
}
|
|
286
316
|
else {
|
|
287
317
|
// Full project initialization
|
|
288
318
|
// Skip template source files if sources were restored from backup
|
|
289
|
-
const currentDir = initializeProject(selectedAgent.agentId, selectedOrg.id, persona, selectedAgent.name, withExamples, sourcesRestored // skipSourceTemplates - don't copy src/
|
|
290
|
-
);
|
|
319
|
+
const currentDir = initializeProject(selectedAgent.agentId, selectedOrg.id, persona, selectedAgent.name, withExamples, sourcesRestored, // skipSourceTemplates - don't copy src/ if restored
|
|
320
|
+
selectedModel);
|
|
291
321
|
// Step 6: Install dependencies
|
|
292
322
|
await installDependencies(currentDir);
|
|
293
323
|
if (sourcesRestored) {
|
|
@@ -311,6 +341,8 @@ export async function initCommand(options = {}) {
|
|
|
311
341
|
restore_from_backup: options.restoreSources || false,
|
|
312
342
|
examples_included: withExamples,
|
|
313
343
|
sources_restored: sourcesRestored,
|
|
344
|
+
model_selected: !!selectedModel,
|
|
345
|
+
model: selectedModel,
|
|
314
346
|
});
|
|
315
347
|
}, "initialization");
|
|
316
348
|
}
|
|
@@ -332,12 +364,13 @@ async function selectExistingAgent(userData, apiKey) {
|
|
|
332
364
|
const selectedOrg = await promptOrganizationSelection(orgs);
|
|
333
365
|
// Select agent from organization
|
|
334
366
|
const selectedAgent = await promptAgentSelection(selectedOrg);
|
|
335
|
-
// Fetch agent details to get persona
|
|
367
|
+
// Fetch agent details to get persona and model
|
|
336
368
|
const agentDetails = await fetchExistingAgentDetails(apiKey, selectedAgent.agentId);
|
|
337
369
|
return {
|
|
338
370
|
agent: selectedAgent,
|
|
339
371
|
org: selectedOrg,
|
|
340
|
-
persona: agentDetails.persona
|
|
372
|
+
persona: agentDetails.persona,
|
|
373
|
+
model: agentDetails.model,
|
|
341
374
|
};
|
|
342
375
|
}
|
|
343
376
|
/**
|
|
@@ -360,12 +393,13 @@ async function selectExistingAgentById(userData, apiKey, agentId) {
|
|
|
360
393
|
const agent = org.agents?.find((a) => a.agentId === agentId);
|
|
361
394
|
if (agent) {
|
|
362
395
|
writeProgress(`ā
Found agent: ${agent.name}`);
|
|
363
|
-
// Fetch agent details to get persona
|
|
396
|
+
// Fetch agent details to get persona and model
|
|
364
397
|
const agentDetails = await fetchExistingAgentDetails(apiKey, agentId);
|
|
365
398
|
return {
|
|
366
399
|
agent: { agentId: agent.agentId, name: agent.name },
|
|
367
400
|
org: { id: org.id, name: org.registeredName, agents: org.agents },
|
|
368
|
-
persona: agentDetails.persona
|
|
401
|
+
persona: agentDetails.persona,
|
|
402
|
+
model: agentDetails.model,
|
|
369
403
|
};
|
|
370
404
|
}
|
|
371
405
|
}
|
|
@@ -494,11 +528,17 @@ async function createNewAgentFlow(apiKey, userData, promoCode) {
|
|
|
494
528
|
// Collect agent name
|
|
495
529
|
const agentName = await promptAgentName();
|
|
496
530
|
linesToClear += 1; // agentName prompt
|
|
531
|
+
// Prompt for model (last config step before creation)
|
|
532
|
+
let selectedModel;
|
|
533
|
+
const models = await fetchApprovedModels(apiKey);
|
|
534
|
+
if (models.length > 0) {
|
|
535
|
+
selectedModel = await promptModelSelection(models);
|
|
536
|
+
}
|
|
497
537
|
// Clear all prompts
|
|
498
538
|
clearLinesIfNeeded(linesToClear);
|
|
499
539
|
// Create the agent
|
|
500
540
|
const result = await createNewAgent(apiKey, selectedAgentType, agentName, metadata, features, orgId, orgName, promoCode);
|
|
501
|
-
return result;
|
|
541
|
+
return { ...result, model: selectedModel };
|
|
502
542
|
}
|
|
503
543
|
/**
|
|
504
544
|
* Check if user has access to a specific agent
|
|
@@ -518,39 +558,62 @@ function checkUserHasAccessToAgent(userData, agentId) {
|
|
|
518
558
|
*/
|
|
519
559
|
async function handleAgentSwitch(userData, apiKey, existingYaml) {
|
|
520
560
|
writeInfo("\nš Let's switch to a different agent...\n");
|
|
521
|
-
// Prompt for agent choice
|
|
522
561
|
const agentChoice = await promptAgentChoice();
|
|
523
562
|
let selectedAgent;
|
|
524
563
|
let selectedOrg;
|
|
525
564
|
let persona;
|
|
565
|
+
let serverModel;
|
|
566
|
+
let isNewAgent = false;
|
|
567
|
+
let selectedModel;
|
|
526
568
|
if (agentChoice === "existing") {
|
|
527
|
-
// Select existing agent
|
|
528
569
|
const result = await selectExistingAgent(userData, apiKey);
|
|
529
570
|
selectedAgent = result.agent;
|
|
530
571
|
selectedOrg = result.org;
|
|
531
572
|
persona = result.persona;
|
|
573
|
+
serverModel = result.model;
|
|
574
|
+
// Use server model if present, else prompt
|
|
575
|
+
if (serverModel) {
|
|
576
|
+
selectedModel = serverModel;
|
|
577
|
+
}
|
|
578
|
+
else {
|
|
579
|
+
const models = await fetchApprovedModels(apiKey);
|
|
580
|
+
if (models.length > 0) {
|
|
581
|
+
selectedModel = await promptModelSelection(models);
|
|
582
|
+
}
|
|
583
|
+
}
|
|
532
584
|
}
|
|
533
585
|
else {
|
|
534
|
-
// Create new agent
|
|
535
586
|
const result = await createNewAgentFlow(apiKey, userData);
|
|
536
587
|
selectedAgent = result.agent;
|
|
537
588
|
selectedOrg = result.org;
|
|
538
589
|
persona = result.persona;
|
|
539
|
-
|
|
590
|
+
selectedModel = result.model;
|
|
591
|
+
isNewAgent = true;
|
|
540
592
|
displayPersonaInstructions();
|
|
541
593
|
}
|
|
542
594
|
// Ask about persona
|
|
543
595
|
const finalPersona = await promptPersonaReplacement(existingYaml, persona);
|
|
596
|
+
// Push model to server only if user explicitly chose a new one
|
|
597
|
+
const userChoseModel = selectedModel && selectedModel !== serverModel;
|
|
598
|
+
if (userChoseModel) {
|
|
599
|
+
try {
|
|
600
|
+
writeProgress(`š¤ Setting model: ${selectedModel}...`);
|
|
601
|
+
await updateAgentModel(apiKey, selectedAgent.agentId, selectedModel);
|
|
602
|
+
writeProgress(`ā
Model set: ${selectedModel}`);
|
|
603
|
+
}
|
|
604
|
+
catch (error) {
|
|
605
|
+
writeInfo(`ā ļø Could not set model on server ā you can push it later with \`lua push agent\``);
|
|
606
|
+
}
|
|
607
|
+
}
|
|
544
608
|
// Update existing YAML file with new agent
|
|
545
609
|
writeInfo("\nš Updating lua.skill.yaml with new agent...");
|
|
546
610
|
updateYamlAgent(selectedAgent.agentId, selectedOrg.id);
|
|
547
|
-
// Also update LuaAgent in index.ts if it exists
|
|
548
611
|
const { updateAgentConfig } = await import("../compiler/index.js");
|
|
549
|
-
updateAgentConfig({ name: selectedAgent.name, persona: finalPersona }, { projectDir: process.cwd() });
|
|
612
|
+
updateAgentConfig({ name: selectedAgent.name, persona: finalPersona, model: selectedModel }, { projectDir: process.cwd() });
|
|
550
613
|
writeSuccess("ā
lua.skill.yaml updated successfully!");
|
|
551
614
|
writeSuccess("ā
LuaAgent configuration updated!");
|
|
552
615
|
writeInfo("\nš” Your project now uses the new agent. Run 'lua compile' to update your skills.\n");
|
|
553
|
-
trackEvent('cli_init_agent_switched');
|
|
616
|
+
trackEvent('cli_init_agent_switched', { model_selected: !!selectedModel, model: selectedModel });
|
|
554
617
|
}
|
|
555
618
|
/**
|
|
556
619
|
* Prompt user about replacing existing persona
|