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,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Device Handler
|
|
3
|
+
*
|
|
4
|
+
* Handles CLI operations for device primitives.
|
|
5
|
+
*
|
|
6
|
+
* Devices are versioned primitives (like webhooks, jobs) because
|
|
7
|
+
* their trigger handlers are compiled artifacts that need to be
|
|
8
|
+
* uploaded and versioned alongside the definition.
|
|
9
|
+
*/
|
|
10
|
+
import { PrimitiveKind } from '../compiler/types.js';
|
|
11
|
+
import { BASE_URLS } from '../config/constants.js';
|
|
12
|
+
import DeviceApi from '../api/device.api.service.js';
|
|
13
|
+
import { BaseVersionedHandler } from './base.handler.js';
|
|
14
|
+
/**
|
|
15
|
+
* Device primitive handler
|
|
16
|
+
*/
|
|
17
|
+
export class DeviceHandler extends BaseVersionedHandler {
|
|
18
|
+
constructor() {
|
|
19
|
+
super(...arguments);
|
|
20
|
+
this.kind = PrimitiveKind.DEVICE;
|
|
21
|
+
this.displayName = 'device';
|
|
22
|
+
this.displayNamePlural = 'devices';
|
|
23
|
+
this.deleteCommand = 'lua devices remove';
|
|
24
|
+
this.yamlConfig = {
|
|
25
|
+
yamlKey: 'devices',
|
|
26
|
+
idField: 'deviceId',
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
getApi(apiKey, agentId) {
|
|
30
|
+
return new DeviceApi(BASE_URLS.API, apiKey, agentId);
|
|
31
|
+
}
|
|
32
|
+
async fetchFromServer(api) {
|
|
33
|
+
const response = await api.getDevices();
|
|
34
|
+
if (!response.success || !response.data?.devices) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
return response.data.devices;
|
|
38
|
+
}
|
|
39
|
+
async createOnServer(api, primitive) {
|
|
40
|
+
const device = primitive;
|
|
41
|
+
const response = await api.createDevice({
|
|
42
|
+
name: primitive.name,
|
|
43
|
+
description: primitive.description || `A Lua device for ${primitive.name}`,
|
|
44
|
+
group: device.group,
|
|
45
|
+
});
|
|
46
|
+
if (!response.success || !response.data?.id)
|
|
47
|
+
return null;
|
|
48
|
+
return response.data.id;
|
|
49
|
+
}
|
|
50
|
+
isActive(serverItem) {
|
|
51
|
+
return serverItem.active !== false;
|
|
52
|
+
}
|
|
53
|
+
async pushToServer(apiKey, agentId, entityId, pushData) {
|
|
54
|
+
const api = this.getApi(apiKey, agentId);
|
|
55
|
+
const response = await api.pushDevice(entityId, { ...pushData, deviceId: entityId });
|
|
56
|
+
return { success: response.success, error: response.error?.message };
|
|
57
|
+
}
|
|
58
|
+
async publishVersion(apiKey, agentId, entityId, version) {
|
|
59
|
+
const api = this.getApi(apiKey, agentId);
|
|
60
|
+
const response = await api.publishDeviceVersion(entityId, version);
|
|
61
|
+
return { success: response.success, error: response.error?.message };
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Override to include device commands, triggers, and artifact in push data.
|
|
65
|
+
*/
|
|
66
|
+
buildPushData(primitive, compressedCode) {
|
|
67
|
+
const device = primitive;
|
|
68
|
+
return {
|
|
69
|
+
name: device.name,
|
|
70
|
+
description: device.description,
|
|
71
|
+
group: device.group,
|
|
72
|
+
commands: device.commands,
|
|
73
|
+
triggers: device.triggers,
|
|
74
|
+
code: compressedCode,
|
|
75
|
+
executeFunction: compressedCode,
|
|
76
|
+
artifactHash: device.hash,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Export singleton instance
|
|
81
|
+
export const deviceHandler = new DeviceHandler();
|
|
82
|
+
//# sourceMappingURL=device.handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device.handler.js","sourceRoot":"","sources":["../../src/primitives/device.handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,12 +14,14 @@ export { JobHandler } from './job.handler.js';
|
|
|
14
14
|
export { PreprocessorHandler } from './preprocessor.handler.js';
|
|
15
15
|
export { PostprocessorHandler } from './postprocessor.handler.js';
|
|
16
16
|
export { MCPServerHandler } from './mcp-server.handler.js';
|
|
17
|
+
export { DeviceHandler } from './device.handler.js';
|
|
17
18
|
export { skillHandler } from './skill.handler.js';
|
|
18
19
|
export { webhookHandler } from './webhook.handler.js';
|
|
19
20
|
export { jobHandler } from './job.handler.js';
|
|
20
21
|
export { preprocessorHandler } from './preprocessor.handler.js';
|
|
21
22
|
export { postprocessorHandler } from './postprocessor.handler.js';
|
|
22
23
|
export { mcpServerHandler } from './mcp-server.handler.js';
|
|
24
|
+
export { deviceHandler } from './device.handler.js';
|
|
23
25
|
/**
|
|
24
26
|
* Map of primitive handlers by kind.
|
|
25
27
|
* Note: TOOL kind has no handler — tools are managed as part of skills.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/primitives/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAsB,KAAK,gBAAgB,EAAE,KAAK,yBAAyB,EAAmB,MAAM,YAAY,CAAC;AAGxH,OAAO,EAAgB,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/primitives/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAsB,KAAK,gBAAgB,EAAE,KAAK,yBAAyB,EAAmB,MAAM,YAAY,CAAC;AAGxH,OAAO,EAAgB,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAShE,OAAO,EAAE,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,KAAK,yBAAyB,EAAE,KAAK,UAAU,EAAE,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGlJ,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAQ9E,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,gBAAgB,GAAG,SAAS,CAE5E;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAE9C;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,yBAAyB,EACe,CAAC;AAEzE;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,gBAAgB,EAA2D,CAAC"}
|
package/dist/primitives/index.js
CHANGED
|
@@ -13,6 +13,7 @@ import { jobHandler } from './job.handler.js';
|
|
|
13
13
|
import { preprocessorHandler } from './preprocessor.handler.js';
|
|
14
14
|
import { postprocessorHandler } from './postprocessor.handler.js';
|
|
15
15
|
import { mcpServerHandler } from './mcp-server.handler.js';
|
|
16
|
+
import { deviceHandler } from './device.handler.js';
|
|
16
17
|
// Re-export types and helpers
|
|
17
18
|
export { isVersionedHandler } from './types.js';
|
|
18
19
|
// Re-export handler classes (for testing/extension)
|
|
@@ -22,6 +23,7 @@ export { JobHandler } from './job.handler.js';
|
|
|
22
23
|
export { PreprocessorHandler } from './preprocessor.handler.js';
|
|
23
24
|
export { PostprocessorHandler } from './postprocessor.handler.js';
|
|
24
25
|
export { MCPServerHandler } from './mcp-server.handler.js';
|
|
26
|
+
export { DeviceHandler } from './device.handler.js';
|
|
25
27
|
// Re-export singleton instances
|
|
26
28
|
export { skillHandler } from './skill.handler.js';
|
|
27
29
|
export { webhookHandler } from './webhook.handler.js';
|
|
@@ -29,6 +31,7 @@ export { jobHandler } from './job.handler.js';
|
|
|
29
31
|
export { preprocessorHandler } from './preprocessor.handler.js';
|
|
30
32
|
export { postprocessorHandler } from './postprocessor.handler.js';
|
|
31
33
|
export { mcpServerHandler } from './mcp-server.handler.js';
|
|
34
|
+
export { deviceHandler } from './device.handler.js';
|
|
32
35
|
/**
|
|
33
36
|
* Map of primitive handlers by kind.
|
|
34
37
|
* Note: TOOL kind has no handler — tools are managed as part of skills.
|
|
@@ -40,6 +43,7 @@ export const primitiveHandlers = {
|
|
|
40
43
|
[PrimitiveKind.PREPROCESSOR]: preprocessorHandler,
|
|
41
44
|
[PrimitiveKind.POSTPROCESSOR]: postprocessorHandler,
|
|
42
45
|
[PrimitiveKind.MCP_SERVER]: mcpServerHandler,
|
|
46
|
+
[PrimitiveKind.DEVICE]: deviceHandler,
|
|
43
47
|
};
|
|
44
48
|
/**
|
|
45
49
|
* Get a primitive handler by kind.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/primitives/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAA0E,MAAM,YAAY,CAAC;AAExH,sBAAsB;AACtB,OAAO,EAAE,YAAY,EAAgB,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAkB,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAc,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAuB,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAwB,MAAM,4BAA4B,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAoB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/primitives/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAA0E,MAAM,YAAY,CAAC;AAExH,sBAAsB;AACtB,OAAO,EAAE,YAAY,EAAgB,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAkB,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAc,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAuB,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAwB,MAAM,4BAA4B,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAoB,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAiB,MAAM,qBAAqB,CAAC;AAEnE,8BAA8B;AAC9B,OAAO,EAAE,kBAAkB,EAAoG,MAAM,YAAY,CAAC;AAElJ,oDAAoD;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,gCAAgC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAqD;IACjF,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,YAAY;IACnC,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,cAAc;IACvC,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,UAAU;IAC/B,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,mBAAmB;IACjD,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,oBAAoB;IACnD,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,gBAAgB;IAC5C,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,aAAa;CACtC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,IAAmB;IAC5C,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAgC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC;KAC3F,MAAM,CAAC,CAAC,CAAC,EAAkC,EAAE,CAAC,kBAAkB,CAAC,CAAE,CAAC,CAAC,CAAC;AAEzE;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAuB,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAuB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/services/analytics.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgHH;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,IAAI,CAclD;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/services/analytics.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgHH;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,IAAI,CAclD;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CA4E5D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAClC,GAAG,IAAI,CA6BP;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAwBpF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAI1D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAO/E;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAYzC;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAavD"}
|
|
@@ -11,7 +11,7 @@ import crypto from 'crypto';
|
|
|
11
11
|
import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'fs';
|
|
12
12
|
import { platform, release, arch } from 'os';
|
|
13
13
|
import { POSTHOG_API_KEY, POSTHOG_HOST, TELEMETRY_FILE, CLI_CONFIG_DIR } from '../config/constants.js';
|
|
14
|
-
import {
|
|
14
|
+
import { getToken, checkApiKey } from '../services/auth.js';
|
|
15
15
|
import { readYamlConfig } from '../utils/files.js';
|
|
16
16
|
let client = null;
|
|
17
17
|
let sessionConfig = null;
|
|
@@ -120,7 +120,11 @@ export async function enrichAnalyticsContext() {
|
|
|
120
120
|
if (isTelemetryDisabled())
|
|
121
121
|
return;
|
|
122
122
|
try {
|
|
123
|
-
|
|
123
|
+
let apiKey = null;
|
|
124
|
+
try {
|
|
125
|
+
apiKey = getToken();
|
|
126
|
+
}
|
|
127
|
+
catch { /* no key — enrich without identity */ }
|
|
124
128
|
if (apiKey) {
|
|
125
129
|
// Check if transitioning from anonymous to authenticated
|
|
126
130
|
const previousDistinctId = sessionDistinctId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/services/analytics.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACvG,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/services/analytics.ts"],"names":[],"mappings":"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"}
|
package/dist/services/auth.d.ts
CHANGED
|
@@ -2,42 +2,32 @@
|
|
|
2
2
|
* Authentication Service
|
|
3
3
|
* Handles all authentication operations including API key management and OTP flows
|
|
4
4
|
*/
|
|
5
|
+
import 'dotenv/config';
|
|
5
6
|
import { UserData } from "../interfaces/admin.js";
|
|
6
7
|
/**
|
|
7
|
-
*
|
|
8
|
+
* Retrieves the API key from the following sources in priority order:
|
|
9
|
+
* 1. LUA_API_KEY environment variable (CI/CD, Docker, manual export)
|
|
10
|
+
* — this also covers .env files, since dotenv/config (imported above)
|
|
11
|
+
* loads them into process.env before this function is called.
|
|
12
|
+
* 2. ~/.lua-cli/credentials file (written by `lua auth configure`)
|
|
8
13
|
*
|
|
9
|
-
*
|
|
10
|
-
* @returns Promise resolving to true if saved, false on failure
|
|
14
|
+
* Throws AuthenticationError with clear instructions if no key is found.
|
|
11
15
|
*/
|
|
12
|
-
export declare function
|
|
16
|
+
export declare function getToken(): string;
|
|
13
17
|
/**
|
|
14
|
-
* Saves
|
|
15
|
-
*
|
|
16
|
-
* then reads back to confirm the write succeeded.
|
|
18
|
+
* Saves API key to ~/.lua-cli/credentials with owner-only permissions (0600).
|
|
19
|
+
* Called by `lua auth configure` after successful server validation.
|
|
17
20
|
*
|
|
18
|
-
* @param
|
|
19
|
-
* @returns Promise resolving to true if the new key was verified saved, false otherwise
|
|
21
|
+
* @param apiKey - The API key to store
|
|
20
22
|
*/
|
|
21
|
-
export declare function
|
|
23
|
+
export declare function saveApiKey(apiKey: string): void;
|
|
22
24
|
/**
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* 2. LUA_API_KEY environment variable
|
|
26
|
-
* 3. LUA_API_KEY from .env file
|
|
25
|
+
* Deletes the credentials file.
|
|
26
|
+
* Called by `lua auth logout`.
|
|
27
27
|
*
|
|
28
|
-
*
|
|
29
|
-
* keychain access isn't available.
|
|
30
|
-
*
|
|
31
|
-
* @returns Promise resolving to API key or null if not found in any source
|
|
32
|
-
*/
|
|
33
|
-
export declare function loadApiKey(): Promise<string | null>;
|
|
34
|
-
/**
|
|
35
|
-
* Deletes API key from secure system keychain.
|
|
36
|
-
* This is used for logout functionality.
|
|
37
|
-
*
|
|
38
|
-
* @returns Promise resolving to true if deleted, false if not found
|
|
28
|
+
* @returns true if deleted successfully, false if not found or deletion failed
|
|
39
29
|
*/
|
|
40
|
-
export declare function deleteApiKey():
|
|
30
|
+
export declare function deleteApiKey(): boolean;
|
|
41
31
|
/**
|
|
42
32
|
* Validates an API key with the server and retrieves user data.
|
|
43
33
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/services/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/services/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,eAAe,CAAC;AAGvB,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AASlD;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,IAAI,MAAM,CAyBjC;AAMD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAG/C;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAOtC;AAMD;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CASnE;AAMD;;;;;;GAMG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CASrE;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAS7F;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAShF"}
|
package/dist/services/auth.js
CHANGED
|
@@ -2,129 +2,73 @@
|
|
|
2
2
|
* Authentication Service
|
|
3
3
|
* Handles all authentication operations including API key management and OTP flows
|
|
4
4
|
*/
|
|
5
|
-
import
|
|
5
|
+
import 'dotenv/config';
|
|
6
|
+
import { readFileSync, writeFileSync, mkdirSync, unlinkSync } from 'fs';
|
|
7
|
+
import { dirname } from 'path';
|
|
6
8
|
import AuthApi from "../api/auth.api.service.js";
|
|
7
|
-
import { BASE_URLS,
|
|
9
|
+
import { BASE_URLS, CREDENTIALS_FILE } from "../config/constants.js";
|
|
8
10
|
import { AuthenticationError } from "../errors/auth.error.js";
|
|
9
11
|
// ============================================================================
|
|
10
|
-
//
|
|
12
|
+
// TOKEN RESOLUTION
|
|
11
13
|
// ============================================================================
|
|
12
14
|
/**
|
|
13
|
-
*
|
|
15
|
+
* Retrieves the API key from the following sources in priority order:
|
|
16
|
+
* 1. LUA_API_KEY environment variable (CI/CD, Docker, manual export)
|
|
17
|
+
* — this also covers .env files, since dotenv/config (imported above)
|
|
18
|
+
* loads them into process.env before this function is called.
|
|
19
|
+
* 2. ~/.lua-cli/credentials file (written by `lua auth configure`)
|
|
14
20
|
*
|
|
15
|
-
*
|
|
16
|
-
* @returns Promise resolving to true if saved, false on failure
|
|
21
|
+
* Throws AuthenticationError with clear instructions if no key is found.
|
|
17
22
|
*/
|
|
18
|
-
export
|
|
19
|
-
|
|
20
|
-
if (
|
|
21
|
-
|
|
22
|
-
"Set LUA_API_KEY environment variable or add it to your .env file instead.");
|
|
23
|
-
return false;
|
|
23
|
+
export function getToken() {
|
|
24
|
+
// Priority 1: Environment variable (also catches .env values loaded by dotenv)
|
|
25
|
+
if (process.env.LUA_API_KEY) {
|
|
26
|
+
return process.env.LUA_API_KEY;
|
|
24
27
|
}
|
|
28
|
+
// Priority 2: Credentials file (written by `lua auth configure`)
|
|
25
29
|
try {
|
|
26
|
-
|
|
27
|
-
|
|
30
|
+
const token = readFileSync(CREDENTIALS_FILE, 'utf8').trim();
|
|
31
|
+
if (token)
|
|
32
|
+
return token;
|
|
28
33
|
}
|
|
29
34
|
catch {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
* @returns Promise resolving to true if the new key was verified saved, false otherwise
|
|
42
|
-
*/
|
|
43
|
-
export async function replaceApiKey(newApiKey) {
|
|
44
|
-
const saved = await saveApiKey(newApiKey);
|
|
45
|
-
if (!saved)
|
|
46
|
-
return false;
|
|
47
|
-
// Verify via read-back to catch silent keychain failures
|
|
48
|
-
const keytar = await getKeytar();
|
|
49
|
-
if (!keytar)
|
|
50
|
-
return false;
|
|
51
|
-
try {
|
|
52
|
-
const stored = await keytar.getPassword(KEYTAR_SERVICE, KEYTAR_ACCOUNT);
|
|
53
|
-
if (stored !== newApiKey) {
|
|
54
|
-
console.warn("Warning: API key verification failed — stored key does not match.");
|
|
55
|
-
return false;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
catch {
|
|
59
|
-
console.warn("Warning: Could not verify saved API key.");
|
|
60
|
-
return false;
|
|
61
|
-
}
|
|
62
|
-
return true;
|
|
35
|
+
// File doesn't exist or is not readable — fall through to error
|
|
36
|
+
}
|
|
37
|
+
throw new AuthenticationError('No API key found.\n' +
|
|
38
|
+
'\n' +
|
|
39
|
+
' Authenticate using one of these methods:\n' +
|
|
40
|
+
'\n' +
|
|
41
|
+
' ➜ lua auth configure\n' +
|
|
42
|
+
' ➜ export LUA_API_KEY="your-api-key-here"\n' +
|
|
43
|
+
' ➜ Add LUA_API_KEY=... to a .env file\n' +
|
|
44
|
+
'\n' +
|
|
45
|
+
' 🔑 Get your API key at https://admin.heylua.ai');
|
|
63
46
|
}
|
|
47
|
+
// ============================================================================
|
|
48
|
+
// CREDENTIALS FILE OPERATIONS (Local Storage)
|
|
49
|
+
// ============================================================================
|
|
64
50
|
/**
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
* 2. LUA_API_KEY environment variable
|
|
68
|
-
* 3. LUA_API_KEY from .env file
|
|
69
|
-
*
|
|
70
|
-
* This fallback mechanism allows the CLI to work in CI/CD environments where
|
|
71
|
-
* keychain access isn't available.
|
|
51
|
+
* Saves API key to ~/.lua-cli/credentials with owner-only permissions (0600).
|
|
52
|
+
* Called by `lua auth configure` after successful server validation.
|
|
72
53
|
*
|
|
73
|
-
* @
|
|
54
|
+
* @param apiKey - The API key to store
|
|
74
55
|
*/
|
|
75
|
-
export
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
if (keytar) {
|
|
79
|
-
try {
|
|
80
|
-
const keychainKey = await keytar.getPassword(KEYTAR_SERVICE, KEYTAR_ACCOUNT);
|
|
81
|
-
if (keychainKey) {
|
|
82
|
-
return keychainKey;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
catch {
|
|
86
|
-
// Keychain unavailable (e.g., no DBUS in Docker containers)
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
// Priority 2: Check environment variable
|
|
90
|
-
if (process.env.LUA_API_KEY) {
|
|
91
|
-
return process.env.LUA_API_KEY;
|
|
92
|
-
}
|
|
93
|
-
// Priority 3: Check .env file
|
|
94
|
-
try {
|
|
95
|
-
const fs = await import('fs');
|
|
96
|
-
const path = await import('path');
|
|
97
|
-
const envPath = path.join(process.cwd(), '.env');
|
|
98
|
-
if (fs.existsSync(envPath)) {
|
|
99
|
-
const envContent = fs.readFileSync(envPath, 'utf8');
|
|
100
|
-
const match = envContent.match(/^LUA_API_KEY=(.+)$/m);
|
|
101
|
-
if (match && match[1]) {
|
|
102
|
-
// Remove quotes and inline comments
|
|
103
|
-
return match[1].trim().replace(/^["']|["']$/g, '').split('#')[0].trim();
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
catch (error) {
|
|
108
|
-
// Silently fail if .env file can't be read
|
|
109
|
-
}
|
|
110
|
-
return null;
|
|
56
|
+
export function saveApiKey(apiKey) {
|
|
57
|
+
mkdirSync(dirname(CREDENTIALS_FILE), { recursive: true });
|
|
58
|
+
writeFileSync(CREDENTIALS_FILE, apiKey, { mode: 0o600 });
|
|
111
59
|
}
|
|
112
60
|
/**
|
|
113
|
-
* Deletes
|
|
114
|
-
*
|
|
61
|
+
* Deletes the credentials file.
|
|
62
|
+
* Called by `lua auth logout`.
|
|
115
63
|
*
|
|
116
|
-
* @returns
|
|
64
|
+
* @returns true if deleted successfully, false if not found or deletion failed
|
|
117
65
|
*/
|
|
118
|
-
export
|
|
119
|
-
const keytar = await getKeytar();
|
|
120
|
-
if (!keytar) {
|
|
121
|
-
return false;
|
|
122
|
-
}
|
|
66
|
+
export function deleteApiKey() {
|
|
123
67
|
try {
|
|
124
|
-
|
|
68
|
+
unlinkSync(CREDENTIALS_FILE);
|
|
69
|
+
return true;
|
|
125
70
|
}
|
|
126
71
|
catch {
|
|
127
|
-
console.warn("Warning: Could not access system keychain to delete API key.");
|
|
128
72
|
return false;
|
|
129
73
|
}
|
|
130
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/services/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/services/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/types/skill.d.ts
CHANGED
|
@@ -843,6 +843,8 @@ export interface LuaAgentConfig {
|
|
|
843
843
|
postProcessors?: PostProcessor[];
|
|
844
844
|
/** Array of MCP servers (Model Context Protocol) for external tool integrations */
|
|
845
845
|
mcpServers?: LuaMCPServer[];
|
|
846
|
+
/** Array of devices (external hardware that the agent can send commands to and receive triggers from) */
|
|
847
|
+
devices?: LuaDevice[];
|
|
846
848
|
/** Per-agent message batching/debounce configuration. Overrides platform env var defaults. */
|
|
847
849
|
batching?: BatchingConfig;
|
|
848
850
|
}
|
|
@@ -884,6 +886,7 @@ export declare class LuaAgent {
|
|
|
884
886
|
private readonly preProcessors;
|
|
885
887
|
private readonly postProcessors;
|
|
886
888
|
private readonly mcpServers;
|
|
889
|
+
private readonly devices;
|
|
887
890
|
private readonly batching?;
|
|
888
891
|
/**
|
|
889
892
|
* Creates a new LuaAgent instance.
|
|
@@ -898,6 +901,7 @@ export declare class LuaAgent {
|
|
|
898
901
|
* @param config.preProcessors - Optional array of preprocessors
|
|
899
902
|
* @param config.postProcessors - Optional array of postprocessors
|
|
900
903
|
* @param config.mcpServers - Optional array of MCP servers
|
|
904
|
+
* @param config.devices - Optional array of devices (external hardware)
|
|
901
905
|
* @param config.batching - Optional per-agent batching/debounce configuration
|
|
902
906
|
*/
|
|
903
907
|
constructor(config: LuaAgentConfig);
|
|
@@ -911,5 +915,99 @@ export declare class LuaAgent {
|
|
|
911
915
|
getPostProcessors(): PostProcessor[];
|
|
912
916
|
getMCPServers(): LuaMCPServer[];
|
|
913
917
|
getBatching(): BatchingConfig | undefined;
|
|
918
|
+
getDevices(): LuaDevice[];
|
|
919
|
+
}
|
|
920
|
+
/** Configuration for a single device command (agent → device) */
|
|
921
|
+
export interface DeviceCommandConfig {
|
|
922
|
+
/** Description of what this command does */
|
|
923
|
+
description: string;
|
|
924
|
+
/** Zod schema for command input validation */
|
|
925
|
+
inputSchema?: ZodType;
|
|
926
|
+
/** Retry configuration for failed commands */
|
|
927
|
+
retry?: {
|
|
928
|
+
maxAttempts: number;
|
|
929
|
+
backoffMs: number;
|
|
930
|
+
};
|
|
931
|
+
/** Timeout in milliseconds (default: 30000) */
|
|
932
|
+
timeoutMs?: number;
|
|
933
|
+
}
|
|
934
|
+
/** Configuration for a single device trigger (device → agent) */
|
|
935
|
+
export interface DeviceTriggerConfig {
|
|
936
|
+
/** Description of when this trigger fires */
|
|
937
|
+
description: string;
|
|
938
|
+
/** Zod schema for trigger payload validation */
|
|
939
|
+
payloadSchema?: ZodType;
|
|
940
|
+
/**
|
|
941
|
+
* Handler that runs on lua-core when the device fires this trigger.
|
|
942
|
+
* Has full access to agent context (can call agent.chat(), use tools, etc.)
|
|
943
|
+
*/
|
|
944
|
+
execute?: (payload: any, context: {
|
|
945
|
+
agent: any;
|
|
946
|
+
device: any;
|
|
947
|
+
trigger: any;
|
|
948
|
+
}) => Promise<any>;
|
|
949
|
+
}
|
|
950
|
+
/**
|
|
951
|
+
* Configuration for defining a device that an agent can communicate with.
|
|
952
|
+
*
|
|
953
|
+
* @example
|
|
954
|
+
* ```typescript
|
|
955
|
+
* import { defineDevice } from 'lua-cli';
|
|
956
|
+
* import { z } from 'zod';
|
|
957
|
+
*
|
|
958
|
+
* export const printer = defineDevice({
|
|
959
|
+
* name: 'label-printer',
|
|
960
|
+
* description: 'Thermal label printer on Raspberry Pi',
|
|
961
|
+
* group: 'printers',
|
|
962
|
+
* commands: {
|
|
963
|
+
* print: {
|
|
964
|
+
* description: 'Print a label',
|
|
965
|
+
* inputSchema: z.object({ text: z.string(), copies: z.number().default(1) }),
|
|
966
|
+
* retry: { maxAttempts: 3, backoffMs: 1000 },
|
|
967
|
+
* timeoutMs: 30000,
|
|
968
|
+
* },
|
|
969
|
+
* status: {
|
|
970
|
+
* description: 'Get printer status',
|
|
971
|
+
* timeoutMs: 5000,
|
|
972
|
+
* },
|
|
973
|
+
* },
|
|
974
|
+
* triggers: {
|
|
975
|
+
* paper_low: {
|
|
976
|
+
* description: 'Fired when paper level drops below threshold',
|
|
977
|
+
* payloadSchema: z.object({ level: z.number(), threshold: z.number() }),
|
|
978
|
+
* execute: async (payload, { agent }) => {
|
|
979
|
+
* await agent.chat(\`Printer paper low: \${payload.level}%\`);
|
|
980
|
+
* },
|
|
981
|
+
* },
|
|
982
|
+
* },
|
|
983
|
+
* });
|
|
984
|
+
* ```
|
|
985
|
+
*/
|
|
986
|
+
export interface LuaDeviceConfig {
|
|
987
|
+
/** Unique device name (lowercase, hyphens, e.g., 'label-printer') */
|
|
988
|
+
name: string;
|
|
989
|
+
/** Description of the device */
|
|
990
|
+
description?: string;
|
|
991
|
+
/** Optional group name for fan-out commands (e.g., 'printers') */
|
|
992
|
+
group?: string;
|
|
993
|
+
/** Commands the agent can send to the device */
|
|
994
|
+
commands?: Record<string, DeviceCommandConfig>;
|
|
995
|
+
/** Triggers the device can fire to the agent */
|
|
996
|
+
triggers?: Record<string, DeviceTriggerConfig>;
|
|
997
|
+
}
|
|
998
|
+
/**
|
|
999
|
+
* LuaDevice class — represents an external device that an agent can communicate with.
|
|
1000
|
+
*
|
|
1001
|
+
* Used in two ways:
|
|
1002
|
+
* - Class-based: `export default new LuaDevice({ ... })`
|
|
1003
|
+
* - Function-based: `export const myDevice = defineDevice({ ... })` (preferred)
|
|
1004
|
+
*/
|
|
1005
|
+
export declare class LuaDevice {
|
|
1006
|
+
readonly name: string;
|
|
1007
|
+
readonly description: string;
|
|
1008
|
+
readonly group?: string;
|
|
1009
|
+
readonly commands: Record<string, DeviceCommandConfig>;
|
|
1010
|
+
readonly triggers: Record<string, DeviceTriggerConfig>;
|
|
1011
|
+
constructor(config: LuaDeviceConfig);
|
|
914
1012
|
}
|
|
915
1013
|
//# sourceMappingURL=skill.d.ts.map
|