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.
Files changed (170) hide show
  1. package/README.md +90 -2
  2. package/dist/api/agent.api.service.d.ts +8 -0
  3. package/dist/api/agent.api.service.d.ts.map +1 -1
  4. package/dist/api/agent.api.service.js +12 -0
  5. package/dist/api/agent.api.service.js.map +1 -1
  6. package/dist/api/device.api.service.d.ts +61 -0
  7. package/dist/api/device.api.service.d.ts.map +1 -0
  8. package/dist/api/device.api.service.js +72 -0
  9. package/dist/api/device.api.service.js.map +1 -0
  10. package/dist/api/lazy-instances.d.ts +1 -0
  11. package/dist/api/lazy-instances.d.ts.map +1 -1
  12. package/dist/api/lazy-instances.js +12 -0
  13. package/dist/api/lazy-instances.js.map +1 -1
  14. package/dist/api-exports.d.ts +38 -2
  15. package/dist/api-exports.d.ts.map +1 -1
  16. package/dist/api-exports.js +45 -2
  17. package/dist/api-exports.js.map +1 -1
  18. package/dist/cli/command-definitions.d.ts.map +1 -1
  19. package/dist/cli/command-definitions.js +100 -33
  20. package/dist/cli/command-definitions.js.map +1 -1
  21. package/dist/commands/agents.d.ts.map +1 -1
  22. package/dist/commands/agents.js +2 -11
  23. package/dist/commands/agents.js.map +1 -1
  24. package/dist/commands/apiKey.d.ts +1 -21
  25. package/dist/commands/apiKey.d.ts.map +1 -1
  26. package/dist/commands/apiKey.js +7 -25
  27. package/dist/commands/apiKey.js.map +1 -1
  28. package/dist/commands/compile.d.ts.map +1 -1
  29. package/dist/commands/compile.js +11 -3
  30. package/dist/commands/compile.js.map +1 -1
  31. package/dist/commands/configure.d.ts +2 -2
  32. package/dist/commands/configure.js +2 -2
  33. package/dist/commands/destroy.d.ts +0 -24
  34. package/dist/commands/destroy.d.ts.map +1 -1
  35. package/dist/commands/destroy.js +8 -30
  36. package/dist/commands/destroy.js.map +1 -1
  37. package/dist/commands/devices.d.ts +6 -0
  38. package/dist/commands/devices.d.ts.map +1 -0
  39. package/dist/commands/devices.js +266 -0
  40. package/dist/commands/devices.js.map +1 -0
  41. package/dist/commands/index.d.ts +2 -0
  42. package/dist/commands/index.d.ts.map +1 -1
  43. package/dist/commands/index.js +2 -0
  44. package/dist/commands/index.js.map +1 -1
  45. package/dist/commands/init.d.ts +1 -0
  46. package/dist/commands/init.d.ts.map +1 -1
  47. package/dist/commands/init.js +102 -39
  48. package/dist/commands/init.js.map +1 -1
  49. package/dist/commands/jobs.js +29 -9
  50. package/dist/commands/jobs.js.map +1 -1
  51. package/dist/commands/models.d.ts +18 -0
  52. package/dist/commands/models.d.ts.map +1 -0
  53. package/dist/commands/models.js +206 -0
  54. package/dist/commands/models.js.map +1 -0
  55. package/dist/commands/push.d.ts.map +1 -1
  56. package/dist/commands/push.js +8 -4
  57. package/dist/commands/push.js.map +1 -1
  58. package/dist/commands/pushBackup.d.ts.map +1 -1
  59. package/dist/commands/pushBackup.js +9 -1
  60. package/dist/commands/pushBackup.js.map +1 -1
  61. package/dist/commands/sync.d.ts +2 -0
  62. package/dist/commands/sync.d.ts.map +1 -1
  63. package/dist/commands/sync.js +116 -17
  64. package/dist/commands/sync.js.map +1 -1
  65. package/dist/compiler/agent-traverser.d.ts.map +1 -1
  66. package/dist/compiler/agent-traverser.js +1 -0
  67. package/dist/compiler/agent-traverser.js.map +1 -1
  68. package/dist/compiler/index.d.ts +1 -1
  69. package/dist/compiler/index.d.ts.map +1 -1
  70. package/dist/compiler/index.js +1 -1
  71. package/dist/compiler/index.js.map +1 -1
  72. package/dist/compiler/plugins/device.plugin.d.ts +46 -0
  73. package/dist/compiler/plugins/device.plugin.d.ts.map +1 -0
  74. package/dist/compiler/plugins/device.plugin.js +279 -0
  75. package/dist/compiler/plugins/device.plugin.js.map +1 -0
  76. package/dist/compiler/plugins/registry.d.ts.map +1 -1
  77. package/dist/compiler/plugins/registry.js +2 -0
  78. package/dist/compiler/plugins/registry.js.map +1 -1
  79. package/dist/compiler/source-writer.d.ts +17 -1
  80. package/dist/compiler/source-writer.d.ts.map +1 -1
  81. package/dist/compiler/source-writer.js +114 -29
  82. package/dist/compiler/source-writer.js.map +1 -1
  83. package/dist/compiler/types.d.ts +44 -2
  84. package/dist/compiler/types.d.ts.map +1 -1
  85. package/dist/compiler/types.js +1 -0
  86. package/dist/compiler/types.js.map +1 -1
  87. package/dist/config/constants.d.ts +7 -11
  88. package/dist/config/constants.d.ts.map +1 -1
  89. package/dist/config/constants.js +7 -11
  90. package/dist/config/constants.js.map +1 -1
  91. package/dist/index.js +0 -0
  92. package/dist/interfaces/agent.d.ts +11 -0
  93. package/dist/interfaces/agent.d.ts.map +1 -1
  94. package/dist/interfaces/devices.d.ts +75 -0
  95. package/dist/interfaces/devices.d.ts.map +1 -0
  96. package/dist/interfaces/devices.js +5 -0
  97. package/dist/interfaces/devices.js.map +1 -0
  98. package/dist/primitives/base.handler.d.ts.map +1 -1
  99. package/dist/primitives/base.handler.js +31 -7
  100. package/dist/primitives/base.handler.js.map +1 -1
  101. package/dist/primitives/device.handler.d.ts +43 -0
  102. package/dist/primitives/device.handler.d.ts.map +1 -0
  103. package/dist/primitives/device.handler.js +82 -0
  104. package/dist/primitives/device.handler.js.map +1 -0
  105. package/dist/primitives/index.d.ts +2 -0
  106. package/dist/primitives/index.d.ts.map +1 -1
  107. package/dist/primitives/index.js +4 -0
  108. package/dist/primitives/index.js.map +1 -1
  109. package/dist/services/analytics.d.ts.map +1 -1
  110. package/dist/services/analytics.js +6 -2
  111. package/dist/services/analytics.js.map +1 -1
  112. package/dist/services/auth.d.ts +16 -26
  113. package/dist/services/auth.d.ts.map +1 -1
  114. package/dist/services/auth.js +45 -101
  115. package/dist/services/auth.js.map +1 -1
  116. package/dist/types/skill.d.ts +98 -0
  117. package/dist/types/skill.d.ts.map +1 -1
  118. package/dist/types/skill.js +21 -0
  119. package/dist/types/skill.js.map +1 -1
  120. package/dist/types/yaml.types.d.ts +8 -0
  121. package/dist/types/yaml.types.d.ts.map +1 -1
  122. package/dist/utils/auth-flows.d.ts.map +1 -1
  123. package/dist/utils/auth-flows.js +8 -12
  124. package/dist/utils/auth-flows.js.map +1 -1
  125. package/dist/utils/backup-helpers.d.ts +41 -10
  126. package/dist/utils/backup-helpers.d.ts.map +1 -1
  127. package/dist/utils/backup-helpers.js +227 -15
  128. package/dist/utils/backup-helpers.js.map +1 -1
  129. package/dist/utils/cli.d.ts.map +1 -1
  130. package/dist/utils/cli.js +2 -3
  131. package/dist/utils/cli.js.map +1 -1
  132. package/dist/utils/command-utils.d.ts +4 -3
  133. package/dist/utils/command-utils.d.ts.map +1 -1
  134. package/dist/utils/command-utils.js +9 -20
  135. package/dist/utils/command-utils.js.map +1 -1
  136. package/dist/utils/init-agent.d.ts +37 -1
  137. package/dist/utils/init-agent.d.ts.map +1 -1
  138. package/dist/utils/init-agent.js +69 -1
  139. package/dist/utils/init-agent.js.map +1 -1
  140. package/dist/utils/init-helpers.d.ts +2 -1
  141. package/dist/utils/init-helpers.d.ts.map +1 -1
  142. package/dist/utils/init-helpers.js +3 -2
  143. package/dist/utils/init-helpers.js.map +1 -1
  144. package/dist/utils/init-prompts.d.ts +11 -1
  145. package/dist/utils/init-prompts.d.ts.map +1 -1
  146. package/dist/utils/init-prompts.js +49 -22
  147. package/dist/utils/init-prompts.js.map +1 -1
  148. package/dist/utils/sandbox-storage.d.ts +24 -18
  149. package/dist/utils/sandbox-storage.d.ts.map +1 -1
  150. package/dist/utils/sandbox-storage.js +108 -101
  151. package/dist/utils/sandbox-storage.js.map +1 -1
  152. package/dist/utils/sandbox.d.ts.map +1 -1
  153. package/dist/utils/sandbox.js +23 -0
  154. package/dist/utils/sandbox.js.map +1 -1
  155. package/docs/CLI_REFERENCE.md +152 -2
  156. package/docs/README.md +5 -3
  157. package/node_modules/@lua/shared-types/dist/index.d.mts +188 -2
  158. package/node_modules/@lua/shared-types/dist/index.d.ts +188 -2
  159. package/node_modules/@lua/shared-types/dist/index.js +171 -2
  160. package/node_modules/@lua/shared-types/dist/index.mjs +164 -1
  161. package/node_modules/@lua/shared-types/src/channel.type.ts +1 -0
  162. package/node_modules/@lua/shared-types/src/device.types.ts +172 -0
  163. package/node_modules/@lua/shared-types/src/index.ts +2 -0
  164. package/node_modules/@lua/shared-types/src/persona-defaults.ts +59 -0
  165. package/package.json +5 -7
  166. package/template/package.json +1 -1
  167. package/dist/utils/keytar-loader.d.ts +0 -20
  168. package/dist/utils/keytar-loader.d.ts.map +0 -1
  169. package/dist/utils/keytar-loader.js +0 -35
  170. package/dist/utils/keytar-loader.js.map +0 -1
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Device compilation plugin.
3
+ *
4
+ * Detects BOTH patterns:
5
+ * 1. Class-based (legacy): new LuaDevice({ ... })
6
+ * 2. Function-based (new): const myDevice = defineDevice({ ... })
7
+ *
8
+ * Devices are bidirectional:
9
+ * - commands: agent → device (each becomes a Mastra tool at runtime)
10
+ * - triggers: device → agent (each has an execute handler that runs on lua-core)
11
+ */
12
+ import { ObjectLiteralExpression, Project } from 'ts-morph';
13
+ import { type DeviceMetadata, type DeviceMetadataFields, type ValidationResult, type SchemaSet, type CompiledPrimitive, type ManifestPrimitive } from '../types.js';
14
+ import { BasePlugin } from './base.js';
15
+ /**
16
+ * Plugin for compiling device primitives.
17
+ * Extends BasePlugin for common detection/entry point/postProcess logic.
18
+ */
19
+ export declare class DevicePlugin extends BasePlugin<DeviceMetadataFields> {
20
+ readonly kind = "device";
21
+ readonly displayName = "Device";
22
+ readonly defineFunction = "defineDevice";
23
+ readonly legacyClassNames: string[];
24
+ /**
25
+ * Extract metadata from device config object.
26
+ */
27
+ protected extractFromConfig(config: ObjectLiteralExpression, exportName: string, sourcePath: string, position: {
28
+ line: number;
29
+ column: number;
30
+ }, pattern: 'function' | 'class'): DeviceMetadata | null;
31
+ validate(metadata: DeviceMetadata): ValidationResult;
32
+ /**
33
+ * Add device-specific fields to the entry point's __lua_primitive__ object.
34
+ */
35
+ /**
36
+ * Extract inputSchema (commands) and payloadSchema (triggers) as JSON Schema.
37
+ */
38
+ extractSchemas(metadata: DeviceMetadata, project: Project): Promise<SchemaSet | undefined>;
39
+ protected getEntryPointFields(metadata: DeviceMetadata): string;
40
+ /**
41
+ * Runtime validation: device artifact must have commands or triggers map.
42
+ */
43
+ protected getRuntimeValidation(): string;
44
+ toManifestEntry(compiled: CompiledPrimitive, _allPrimitives?: CompiledPrimitive[]): ManifestPrimitive;
45
+ }
46
+ //# sourceMappingURL=device.plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device.plugin.d.ts","sourceRoot":"","sources":["../../../src/compiler/plugins/device.plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAQ,uBAAuB,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EAEvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,UAAU,EAAsC,MAAM,WAAW,CAAC;AAO3E;;;GAGG;AACH,qBAAa,YAAa,SAAQ,UAAU,CAAC,oBAAoB,CAAC;IAChE,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,WAAW,YAAY;IAChC,QAAQ,CAAC,cAAc,kBAAkB;IACzC,QAAQ,CAAC,gBAAgB,WAAiB;IAE1C;;OAEG;IACH,SAAS,CAAC,iBAAiB,CACzB,MAAM,EAAE,uBAAuB,EAC/B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAC1C,OAAO,EAAE,UAAU,GAAG,OAAO,GAC5B,cAAc,GAAG,IAAI;IAqGxB,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,gBAAgB;IAmDpD;;OAEG;IACH;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAqEhG,SAAS,CAAC,mBAAmB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM;IAS/D;;OAEG;IACH,SAAS,CAAC,oBAAoB,IAAI,MAAM;IAWxC,eAAe,CAAC,QAAQ,EAAE,iBAAiB,EAAE,cAAc,CAAC,EAAE,iBAAiB,EAAE,GAAG,iBAAiB;CAyBtG"}
@@ -0,0 +1,279 @@
1
+ /**
2
+ * Device compilation plugin.
3
+ *
4
+ * Detects BOTH patterns:
5
+ * 1. Class-based (legacy): new LuaDevice({ ... })
6
+ * 2. Function-based (new): const myDevice = defineDevice({ ... })
7
+ *
8
+ * Devices are bidirectional:
9
+ * - commands: agent → device (each becomes a Mastra tool at runtime)
10
+ * - triggers: device → agent (each has an execute handler that runs on lua-core)
11
+ */
12
+ import { Node } from 'ts-morph';
13
+ import { BasePlugin, validationError, validationWarning } from './base.js';
14
+ import { extractStringProperty, extractSchemaProperty } from '../utils/ast-helpers.js';
15
+ import { zodToJsonSchema } from '../utils/schema-converter.js';
16
+ /** Reserved system trigger names (auto-fired by the gateway) */
17
+ const SYSTEM_TRIGGERS = ['device_connected', 'device_disconnected'];
18
+ /**
19
+ * Plugin for compiling device primitives.
20
+ * Extends BasePlugin for common detection/entry point/postProcess logic.
21
+ */
22
+ export class DevicePlugin extends BasePlugin {
23
+ constructor() {
24
+ super(...arguments);
25
+ this.kind = 'device';
26
+ this.displayName = 'Device';
27
+ this.defineFunction = 'defineDevice';
28
+ this.legacyClassNames = ['LuaDevice'];
29
+ }
30
+ /**
31
+ * Extract metadata from device config object.
32
+ */
33
+ extractFromConfig(config, exportName, sourcePath, position, pattern) {
34
+ const common = this.extractCommonFields(config, exportName, sourcePath, position);
35
+ if (!common)
36
+ return null;
37
+ const group = extractStringProperty(config, 'group');
38
+ // Extract command names from commands: { print: {...}, status: {...} }
39
+ const commandNames = [];
40
+ const commandDescriptions = {};
41
+ const commandHasInputSchema = {};
42
+ const commandHasRetry = {};
43
+ const commandRetryConfig = {};
44
+ const commandHasTimeout = {};
45
+ const commandTimeoutMs = {};
46
+ const commandsProp = config.getProperty('commands');
47
+ if (commandsProp && Node.isPropertyAssignment(commandsProp)) {
48
+ const commandsInit = commandsProp.getInitializer();
49
+ if (commandsInit && Node.isObjectLiteralExpression(commandsInit)) {
50
+ for (const prop of commandsInit.getProperties()) {
51
+ if (Node.isPropertyAssignment(prop)) {
52
+ const cmdName = prop.getName();
53
+ commandNames.push(cmdName);
54
+ const cmdObj = prop.getInitializer();
55
+ if (cmdObj && Node.isObjectLiteralExpression(cmdObj)) {
56
+ commandDescriptions[cmdName] = extractStringProperty(cmdObj, 'description') || '';
57
+ commandHasInputSchema[cmdName] = cmdObj.getProperty('inputSchema') !== undefined;
58
+ commandHasRetry[cmdName] = cmdObj.getProperty('retry') !== undefined;
59
+ commandHasTimeout[cmdName] = cmdObj.getProperty('timeoutMs') !== undefined;
60
+ // Extract actual retry config values
61
+ const retryProp = cmdObj.getProperty('retry');
62
+ if (retryProp && Node.isPropertyAssignment(retryProp)) {
63
+ const retryInit = retryProp.getInitializer();
64
+ if (retryInit && Node.isObjectLiteralExpression(retryInit)) {
65
+ try {
66
+ const maxAttempts = parseInt(extractStringProperty(retryInit, 'maxAttempts') || '3');
67
+ const backoffMs = parseInt(extractStringProperty(retryInit, 'backoffMs') || '1000');
68
+ commandRetryConfig[cmdName] = { maxAttempts, backoffMs };
69
+ }
70
+ catch { /* use undefined */ }
71
+ }
72
+ }
73
+ // Extract actual timeout value
74
+ const timeoutProp = cmdObj.getProperty('timeoutMs');
75
+ if (timeoutProp && Node.isPropertyAssignment(timeoutProp)) {
76
+ try {
77
+ const timeoutVal = timeoutProp.getInitializer()?.getText();
78
+ if (timeoutVal)
79
+ commandTimeoutMs[cmdName] = parseInt(timeoutVal);
80
+ }
81
+ catch { /* use undefined */ }
82
+ }
83
+ }
84
+ }
85
+ }
86
+ }
87
+ }
88
+ // Extract trigger names from triggers: { paper_low: {...}, error: {...} }
89
+ const triggerNames = [];
90
+ const triggerDescriptions = {};
91
+ const triggerHasPayloadSchema = {};
92
+ const triggerHasExecute = {};
93
+ const triggersProp = config.getProperty('triggers');
94
+ if (triggersProp && Node.isPropertyAssignment(triggersProp)) {
95
+ const triggersInit = triggersProp.getInitializer();
96
+ if (triggersInit && Node.isObjectLiteralExpression(triggersInit)) {
97
+ for (const prop of triggersInit.getProperties()) {
98
+ if (Node.isPropertyAssignment(prop)) {
99
+ const trigName = prop.getName();
100
+ triggerNames.push(trigName);
101
+ const trigObj = prop.getInitializer();
102
+ if (trigObj && Node.isObjectLiteralExpression(trigObj)) {
103
+ triggerDescriptions[trigName] = extractStringProperty(trigObj, 'description') || '';
104
+ triggerHasPayloadSchema[trigName] = trigObj.getProperty('payloadSchema') !== undefined;
105
+ triggerHasExecute[trigName] = trigObj.getProperty('execute') !== undefined;
106
+ }
107
+ }
108
+ }
109
+ }
110
+ }
111
+ return {
112
+ kind: this.kind,
113
+ ...common,
114
+ metadata: {
115
+ pattern,
116
+ group,
117
+ hasCommands: commandNames.length > 0,
118
+ commandNames,
119
+ commandDescriptions,
120
+ commandHasInputSchema,
121
+ commandHasRetry,
122
+ commandRetryConfig,
123
+ commandHasTimeout,
124
+ commandTimeoutMs,
125
+ hasTriggers: triggerNames.length > 0,
126
+ triggerNames,
127
+ triggerDescriptions,
128
+ triggerHasPayloadSchema,
129
+ triggerHasExecute,
130
+ },
131
+ };
132
+ }
133
+ validate(metadata) {
134
+ const { errors, warnings } = this.baseValidation(metadata);
135
+ const meta = metadata.metadata;
136
+ if (!meta.hasCommands && !meta.hasTriggers) {
137
+ warnings.push(validationWarning('Device should have at least one command or trigger defined', { line: metadata.line }));
138
+ }
139
+ // Check for duplicate command/trigger names
140
+ const allNames = [...meta.commandNames, ...meta.triggerNames];
141
+ const dupes = allNames.filter((name, i) => allNames.indexOf(name) !== i);
142
+ if (dupes.length > 0) {
143
+ errors.push(validationError(`Device has duplicate command/trigger names: ${dupes.join(', ')}`, { line: metadata.line }));
144
+ }
145
+ // Warn if trigger has payloadSchema but no execute handler
146
+ for (const trigName of meta.triggerNames) {
147
+ if (meta.triggerHasPayloadSchema[trigName] && !meta.triggerHasExecute[trigName]) {
148
+ warnings.push(validationWarning(`Trigger '${trigName}' has a payloadSchema but no execute handler`, { line: metadata.line }));
149
+ }
150
+ }
151
+ // Warn about system trigger naming
152
+ for (const trigName of meta.triggerNames) {
153
+ if (SYSTEM_TRIGGERS.includes(trigName) && meta.triggerHasPayloadSchema[trigName]) {
154
+ warnings.push(validationWarning(`System trigger '${trigName}' uses a system-provided payload; custom payloadSchema will be ignored`, { line: metadata.line }));
155
+ }
156
+ }
157
+ if (metadata.name && !/^[a-z][a-z0-9-]*$/.test(metadata.name)) {
158
+ warnings.push(validationWarning('Device name should be lowercase with hyphens only (e.g., "label-printer")', { line: metadata.line }));
159
+ }
160
+ return { valid: errors.length === 0, errors, warnings };
161
+ }
162
+ /**
163
+ * Add device-specific fields to the entry point's __lua_primitive__ object.
164
+ */
165
+ /**
166
+ * Extract inputSchema (commands) and payloadSchema (triggers) as JSON Schema.
167
+ */
168
+ async extractSchemas(metadata, project) {
169
+ const sourceFile = project.getSourceFile(metadata.sourcePath);
170
+ if (!sourceFile)
171
+ return undefined;
172
+ const varDecl = sourceFile.getVariableDeclaration(metadata.exportName);
173
+ if (!varDecl)
174
+ return undefined;
175
+ const initializer = varDecl.getInitializer();
176
+ if (!initializer || !Node.isCallExpression(initializer))
177
+ return undefined;
178
+ const args = initializer.getArguments();
179
+ if (args.length === 0)
180
+ return undefined;
181
+ const config = args[0];
182
+ if (!Node.isObjectLiteralExpression(config))
183
+ return undefined;
184
+ const schemas = {};
185
+ // Extract command inputSchemas
186
+ const commandsProp = config.getProperty('commands');
187
+ if (commandsProp && Node.isPropertyAssignment(commandsProp)) {
188
+ const commandsInit = commandsProp.getInitializer();
189
+ if (commandsInit && Node.isObjectLiteralExpression(commandsInit)) {
190
+ for (const prop of commandsInit.getProperties()) {
191
+ if (Node.isPropertyAssignment(prop)) {
192
+ const cmdName = prop.getName();
193
+ const cmdObj = prop.getInitializer();
194
+ if (cmdObj && Node.isObjectLiteralExpression(cmdObj)) {
195
+ const schemaNode = extractSchemaProperty(cmdObj, 'inputSchema');
196
+ if (schemaNode) {
197
+ try {
198
+ schemas[`command_${cmdName}`] = await zodToJsonSchema(schemaNode);
199
+ }
200
+ catch {
201
+ // Schema extraction failed — continue without it
202
+ }
203
+ }
204
+ }
205
+ }
206
+ }
207
+ }
208
+ }
209
+ // Extract trigger payloadSchemas
210
+ const triggersProp = config.getProperty('triggers');
211
+ if (triggersProp && Node.isPropertyAssignment(triggersProp)) {
212
+ const triggersInit = triggersProp.getInitializer();
213
+ if (triggersInit && Node.isObjectLiteralExpression(triggersInit)) {
214
+ for (const prop of triggersInit.getProperties()) {
215
+ if (Node.isPropertyAssignment(prop)) {
216
+ const trigName = prop.getName();
217
+ const trigObj = prop.getInitializer();
218
+ if (trigObj && Node.isObjectLiteralExpression(trigObj)) {
219
+ const schemaNode = extractSchemaProperty(trigObj, 'payloadSchema');
220
+ if (schemaNode) {
221
+ try {
222
+ schemas[`trigger_${trigName}`] = await zodToJsonSchema(schemaNode);
223
+ }
224
+ catch {
225
+ // Schema extraction failed — continue without it
226
+ }
227
+ }
228
+ }
229
+ }
230
+ }
231
+ }
232
+ }
233
+ return Object.keys(schemas).length > 0 ? schemas : undefined;
234
+ }
235
+ getEntryPointFields(metadata) {
236
+ const meta = metadata.metadata;
237
+ return [
238
+ `commands: ${JSON.stringify(meta.commandNames)},`,
239
+ `triggers: ${JSON.stringify(meta.triggerNames)},`,
240
+ meta.group ? `group: ${JSON.stringify(meta.group)},` : '',
241
+ ].filter(Boolean).join('\n ');
242
+ }
243
+ /**
244
+ * Runtime validation: device artifact must have commands or triggers map.
245
+ */
246
+ getRuntimeValidation() {
247
+ return `
248
+ const p = primitive.primitive;
249
+ if (!p) {
250
+ throw new Error('[Lua] Invalid device artifact: missing primitive export');
251
+ }
252
+ if (!p.commands && !p.triggers) {
253
+ throw new Error('[Lua] Invalid device artifact: must have commands or triggers');
254
+ }`;
255
+ }
256
+ toManifestEntry(compiled, _allPrimitives) {
257
+ const meta = compiled.metadata;
258
+ const commands = meta.commandNames.map(name => ({
259
+ name,
260
+ description: meta.commandDescriptions[name] || '',
261
+ inputSchema: compiled.schemas?.[`command_${name}`],
262
+ retry: meta.commandRetryConfig[name],
263
+ timeoutMs: meta.commandTimeoutMs[name],
264
+ }));
265
+ const triggers = meta.triggerNames.map(name => ({
266
+ name,
267
+ description: meta.triggerDescriptions[name] || '',
268
+ payloadSchema: compiled.schemas?.[`trigger_${name}`],
269
+ hasExecute: meta.triggerHasExecute[name] || false,
270
+ }));
271
+ return {
272
+ ...this.baseManifestFields(compiled),
273
+ group: meta.group,
274
+ commands,
275
+ triggers,
276
+ };
277
+ }
278
+ }
279
+ //# sourceMappingURL=device.plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device.plugin.js","sourceRoot":"","sources":["../../../src/compiler/plugins/device.plugin.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/compiler/plugins/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAUnD;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAA6C;;IAoB5D;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAWzC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIhD;;OAEG;IACH,MAAM,IAAI,iBAAiB,EAAE;IAI7B;;OAEG;IACH,WAAW,IAAI,MAAM,EAAE;IAIvB;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF;AAMD;;;GAGG;AACH,eAAO,MAAM,cAAc,gBAAuB,CAAC;AAMnD;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAEzF"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/compiler/plugins/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAWnD;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAA6C;;IAqB5D;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAWzC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIhD;;OAEG;IACH,MAAM,IAAI,iBAAiB,EAAE;IAI7B;;OAEG;IACH,WAAW,IAAI,MAAM,EAAE;IAIvB;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF;AAMD;;;GAGG;AACH,eAAO,MAAM,cAAc,gBAAuB,CAAC;AAMnD;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAEzF"}
@@ -17,6 +17,7 @@ import { PostProcessorPlugin } from './postprocessor.plugin.js';
17
17
  import { MCPServerPlugin } from './mcp-server.plugin.js';
18
18
  import { SkillPlugin } from './skill.plugin.js';
19
19
  import { AgentPlugin } from './agent.plugin.js';
20
+ import { DevicePlugin } from './device.plugin.js';
20
21
  /**
21
22
  * Registry of all compilation plugins.
22
23
  *
@@ -38,6 +39,7 @@ export class PluginRegistry {
38
39
  this.register(new MCPServerPlugin());
39
40
  this.register(new SkillPlugin());
40
41
  this.register(new AgentPlugin());
42
+ this.register(new DevicePlugin());
41
43
  // =========================================================================
42
44
  }
43
45
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/compiler/plugins/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/compiler/plugins/registry.ts"],"names":[],"mappings":"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"}
@@ -65,7 +65,7 @@ export interface SourceWriteOptions {
65
65
  *
66
66
  * @param updates - Object with property names and their new values (undefined values are skipped)
67
67
  * @param options - Optional configuration
68
- * @returns true if update succeeded, false otherwise
68
+ * @returns true if the LuaAgent constructor was found and properties were written, false otherwise
69
69
  *
70
70
  * @example
71
71
  * ```typescript
@@ -105,4 +105,20 @@ export declare function setAgentPersona(persona: string, options?: SourceWriteOp
105
105
  * @returns true if update succeeded, false otherwise
106
106
  */
107
107
  export declare function setAgentModel(model: string, options?: SourceWriteOptions): boolean;
108
+ /**
109
+ * Remove a property from the LuaAgent config object in source code.
110
+ *
111
+ * @param propertyName - Name of the property to remove (e.g. 'model')
112
+ * @param options - Optional configuration
113
+ * @returns true if the LuaAgent constructor was found (property may already be absent), false if not found or on error
114
+ */
115
+ export declare function removeAgentConfigProperty(propertyName: string, options?: SourceWriteOptions): boolean;
116
+ /**
117
+ * Remove the model property from the LuaAgent config in source code,
118
+ * causing the platform to fall back to its default model.
119
+ *
120
+ * @param options - Optional configuration
121
+ * @returns true if the LuaAgent constructor was found, false if not found or on error
122
+ */
123
+ export declare function removeAgentModel(options?: SourceWriteOptions): boolean;
108
124
  //# sourceMappingURL=source-writer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"source-writer.d.ts","sourceRoot":"","sources":["../../src/compiler/source-writer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAOH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAC3C,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAiFT;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAEhF;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAEtF;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAElF"}
1
+ {"version":3,"file":"source-writer.d.ts","sourceRoot":"","sources":["../../src/compiler/source-writer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAOH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAqCD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAC3C,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CA+ET;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAEhF;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAEtF;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAElF;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAuCrG;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAEtE"}
@@ -52,6 +52,40 @@ import { Project, Node } from 'ts-morph';
52
52
  import fs from 'fs';
53
53
  import path from 'path';
54
54
  import { findEntryPoint } from './utils/file-discovery.js';
55
+ /**
56
+ * Resolves the entry-point file path for source-writing operations.
57
+ * Checks options.indexFile first, then runs entry-point discovery,
58
+ * falling back to src/index.ts.
59
+ *
60
+ * @returns The resolved path, or null if the file does not exist.
61
+ */
62
+ function resolveEntryPath(options) {
63
+ let indexPath;
64
+ try {
65
+ if (options?.indexFile) {
66
+ indexPath = options.indexFile;
67
+ }
68
+ else {
69
+ const entryPoint = findEntryPoint(options?.projectDir);
70
+ if (entryPoint) {
71
+ indexPath = entryPoint;
72
+ }
73
+ else {
74
+ const baseDir = options?.projectDir || process.cwd();
75
+ indexPath = path.join(baseDir, 'src', 'index.ts');
76
+ }
77
+ }
78
+ }
79
+ catch {
80
+ const baseDir = options?.projectDir || process.cwd();
81
+ indexPath = path.join(baseDir, 'src', 'index.ts');
82
+ }
83
+ if (!fs.existsSync(indexPath)) {
84
+ console.warn(`Warning: Entry file not found at ${indexPath}`);
85
+ return null;
86
+ }
87
+ return indexPath;
88
+ }
55
89
  /**
56
90
  * Update string properties in the LuaAgent configuration in source code.
57
91
  *
@@ -60,7 +94,7 @@ import { findEntryPoint } from './utils/file-discovery.js';
60
94
  *
61
95
  * @param updates - Object with property names and their new values (undefined values are skipped)
62
96
  * @param options - Optional configuration
63
- * @returns true if update succeeded, false otherwise
97
+ * @returns true if the LuaAgent constructor was found and properties were written, false otherwise
64
98
  *
65
99
  * @example
66
100
  * ```typescript
@@ -85,33 +119,9 @@ export function updateAgentConfig(updates, options) {
85
119
  if (Object.keys(filteredUpdates).length === 0) {
86
120
  return true; // Nothing to update
87
121
  }
88
- let indexPath;
89
- try {
90
- if (options?.indexFile) {
91
- indexPath = options.indexFile;
92
- }
93
- else {
94
- // Try to find the entry point
95
- const entryPoint = findEntryPoint(options?.projectDir);
96
- if (entryPoint) {
97
- indexPath = entryPoint;
98
- }
99
- else {
100
- // Fallback to src/index.ts
101
- const baseDir = options?.projectDir || process.cwd();
102
- indexPath = path.join(baseDir, 'src', 'index.ts');
103
- }
104
- }
105
- }
106
- catch {
107
- // Fallback to src/index.ts if discovery fails
108
- const baseDir = options?.projectDir || process.cwd();
109
- indexPath = path.join(baseDir, 'src', 'index.ts');
110
- }
111
- if (!fs.existsSync(indexPath)) {
112
- console.warn(`Warning: Entry file not found at ${indexPath}`);
122
+ const indexPath = resolveEntryPath(options);
123
+ if (!indexPath)
113
124
  return false;
114
- }
115
125
  try {
116
126
  const project = new Project({ skipAddingFilesFromTsConfig: true });
117
127
  const sourceFile = project.addSourceFileAtPath(indexPath);
@@ -121,7 +131,9 @@ export function updateAgentConfig(updates, options) {
121
131
  const args = node.getArguments();
122
132
  if (args.length > 0 && Node.isObjectLiteralExpression(args[0])) {
123
133
  const configObj = args[0];
124
- configObj.getProperties().forEach((prop) => {
134
+ const replacedKeys = new Set();
135
+ let lastReplacedIndex = -1;
136
+ configObj.getProperties().forEach((prop, index) => {
125
137
  if (Node.isPropertyAssignment(prop)) {
126
138
  const propName = prop.getName();
127
139
  if (Object.prototype.hasOwnProperty.call(filteredUpdates, propName)) {
@@ -130,18 +142,37 @@ export function updateAgentConfig(updates, options) {
130
142
  if (init) {
131
143
  const formattedValue = formatValueForProperty(propName, newValue);
132
144
  init.replaceWithText(formattedValue);
145
+ replacedKeys.add(propName);
146
+ if (index > lastReplacedIndex)
147
+ lastReplacedIndex = index;
133
148
  updated = true;
134
149
  }
135
150
  }
136
151
  }
137
152
  });
153
+ // Insert properties that were requested but don't exist yet.
154
+ // Place them right after the last replaced property (e.g. model after persona)
155
+ // rather than at the end of the object (which would land after comments).
156
+ for (const [key, value] of Object.entries(filteredUpdates)) {
157
+ if (!replacedKeys.has(key)) {
158
+ const insertIdx = lastReplacedIndex >= 0
159
+ ? lastReplacedIndex + 1
160
+ : configObj.getProperties().length;
161
+ configObj.insertPropertyAssignment(insertIdx, {
162
+ name: key,
163
+ initializer: formatValueForProperty(key, value),
164
+ });
165
+ lastReplacedIndex = insertIdx;
166
+ updated = true;
167
+ }
168
+ }
138
169
  }
139
170
  }
140
171
  });
141
172
  if (updated) {
142
173
  sourceFile.saveSync();
143
174
  }
144
- return true;
175
+ return updated;
145
176
  }
146
177
  catch (error) {
147
178
  console.warn('Warning: Could not update agent config in source:', error);
@@ -179,6 +210,60 @@ export function setAgentPersona(persona, options) {
179
210
  export function setAgentModel(model, options) {
180
211
  return updateAgentConfig({ model }, options);
181
212
  }
213
+ /**
214
+ * Remove a property from the LuaAgent config object in source code.
215
+ *
216
+ * @param propertyName - Name of the property to remove (e.g. 'model')
217
+ * @param options - Optional configuration
218
+ * @returns true if the LuaAgent constructor was found (property may already be absent), false if not found or on error
219
+ */
220
+ export function removeAgentConfigProperty(propertyName, options) {
221
+ const indexPath = resolveEntryPath(options);
222
+ if (!indexPath)
223
+ return false;
224
+ try {
225
+ const project = new Project({ skipAddingFilesFromTsConfig: true });
226
+ const sourceFile = project.addSourceFileAtPath(indexPath);
227
+ let foundConstructor = false;
228
+ let removed = false;
229
+ sourceFile.forEachDescendant((node) => {
230
+ if (Node.isNewExpression(node) && node.getExpression().getText() === 'LuaAgent') {
231
+ const args = node.getArguments();
232
+ if (args.length > 0 && Node.isObjectLiteralExpression(args[0])) {
233
+ foundConstructor = true;
234
+ const configObj = args[0];
235
+ const props = configObj.getProperties();
236
+ for (const prop of props) {
237
+ if (Node.isPropertyAssignment(prop) && prop.getName() === propertyName) {
238
+ prop.remove();
239
+ removed = true;
240
+ break;
241
+ }
242
+ }
243
+ }
244
+ }
245
+ });
246
+ if (removed) {
247
+ sourceFile.saveSync();
248
+ }
249
+ // Success if we found the constructor (property may or may not have been present)
250
+ return foundConstructor;
251
+ }
252
+ catch (error) {
253
+ console.warn('Warning: Could not remove agent config property from source:', error);
254
+ return false;
255
+ }
256
+ }
257
+ /**
258
+ * Remove the model property from the LuaAgent config in source code,
259
+ * causing the platform to fall back to its default model.
260
+ *
261
+ * @param options - Optional configuration
262
+ * @returns true if the LuaAgent constructor was found, false if not found or on error
263
+ */
264
+ export function removeAgentModel(options) {
265
+ return removeAgentConfigProperty('model', options);
266
+ }
182
267
  // =============================================================================
183
268
  // FUTURE: GENERIC PRIMITIVE UPDATE TYPES
184
269
  // =============================================================================
@@ -1 +1 @@
1
- {"version":3,"file":"source-writer.js","sourceRoot":"","sources":["../../src/compiler/source-writer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"source-writer.js","sourceRoot":"","sources":["../../src/compiler/source-writer.ts"],"names":[],"mappings":"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"}