lua-cli 3.10.3 → 3.11.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/dist/api/agents.api.service.d.ts +21 -0
- package/dist/api/agents.api.service.d.ts.map +1 -0
- package/dist/api/agents.api.service.js +49 -0
- package/dist/api/agents.api.service.js.map +1 -0
- package/dist/api/device-trigger.api.service.d.ts +136 -0
- package/dist/api/device-trigger.api.service.d.ts.map +1 -0
- package/dist/api/device-trigger.api.service.js +120 -0
- package/dist/api/device-trigger.api.service.js.map +1 -0
- package/dist/api/lazy-instances.d.ts +8 -0
- package/dist/api/lazy-instances.d.ts.map +1 -1
- package/dist/api/lazy-instances.js +16 -0
- package/dist/api/lazy-instances.js.map +1 -1
- package/dist/api-exports.d.ts +57 -2
- package/dist/api-exports.d.ts.map +1 -1
- package/dist/api-exports.js +36 -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 +14 -1
- package/dist/cli/command-definitions.js.map +1 -1
- package/dist/commands/governance.d.ts +7 -0
- package/dist/commands/governance.d.ts.map +1 -0
- package/dist/commands/governance.js +256 -0
- package/dist/commands/governance.js.map +1 -0
- package/dist/commands/index.d.ts +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +1 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +7 -3
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/pushBackup.d.ts.map +1 -1
- package/dist/commands/pushBackup.js +53 -2
- package/dist/commands/pushBackup.js.map +1 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +157 -58
- 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/plugins/agent.plugin.d.ts +5 -0
- package/dist/compiler/plugins/agent.plugin.d.ts.map +1 -1
- package/dist/compiler/plugins/agent.plugin.js +13 -0
- package/dist/compiler/plugins/agent.plugin.js.map +1 -1
- package/dist/compiler/plugins/device-trigger.plugin.d.ts +38 -0
- package/dist/compiler/plugins/device-trigger.plugin.d.ts.map +1 -0
- package/dist/compiler/plugins/device-trigger.plugin.js +103 -0
- package/dist/compiler/plugins/device-trigger.plugin.js.map +1 -0
- package/dist/compiler/plugins/device.plugin.d.ts +2 -9
- package/dist/compiler/plugins/device.plugin.d.ts.map +1 -1
- package/dist/compiler/plugins/device.plugin.js +2 -204
- package/dist/compiler/plugins/device.plugin.js.map +1 -1
- 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/types.d.ts +21 -35
- 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/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces/agent.d.ts +3 -1
- package/dist/interfaces/agent.d.ts.map +1 -1
- package/dist/interfaces/device-triggers.d.ts +82 -0
- package/dist/interfaces/device-triggers.d.ts.map +1 -0
- package/dist/interfaces/device-triggers.js +6 -0
- package/dist/interfaces/device-triggers.js.map +1 -0
- package/dist/primitives/agent.handler.d.ts +7 -2
- package/dist/primitives/agent.handler.d.ts.map +1 -1
- package/dist/primitives/agent.handler.js +43 -6
- package/dist/primitives/agent.handler.js.map +1 -1
- package/dist/primitives/device-trigger.handler.d.ts +56 -0
- package/dist/primitives/device-trigger.handler.d.ts.map +1 -0
- package/dist/primitives/device-trigger.handler.js +100 -0
- package/dist/primitives/device-trigger.handler.js.map +1 -0
- package/dist/primitives/device.handler.d.ts.map +1 -1
- package/dist/primitives/device.handler.js +0 -2
- package/dist/primitives/device.handler.js.map +1 -1
- 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/types/skill.d.ts +65 -8
- package/dist/types/skill.d.ts.map +1 -1
- package/dist/types/skill.js +18 -0
- package/dist/types/skill.js.map +1 -1
- package/dist/types/yaml.types.d.ts +7 -0
- package/dist/types/yaml.types.d.ts.map +1 -1
- package/dist/utils/artifact-loader.d.ts +2 -1
- package/dist/utils/artifact-loader.d.ts.map +1 -1
- package/dist/utils/artifact-loader.js +3 -0
- package/dist/utils/artifact-loader.js.map +1 -1
- package/dist/utils/backup-helpers.d.ts +83 -0
- package/dist/utils/backup-helpers.d.ts.map +1 -1
- package/dist/utils/backup-helpers.js +157 -0
- package/dist/utils/backup-helpers.js.map +1 -1
- package/dist/utils/sandbox.d.ts.map +1 -1
- package/dist/utils/sandbox.js +10 -0
- package/dist/utils/sandbox.js.map +1 -1
- package/dist/utils/sync-display.d.ts +1 -0
- package/dist/utils/sync-display.d.ts.map +1 -1
- package/dist/utils/sync-display.js +8 -0
- package/dist/utils/sync-display.js.map +1 -1
- package/dist/utils/sync-fetch.d.ts +9 -2
- package/dist/utils/sync-fetch.d.ts.map +1 -1
- package/dist/utils/sync-fetch.js +21 -7
- package/dist/utils/sync-fetch.js.map +1 -1
- package/dist/utils/sync-helpers.d.ts +2 -2
- package/dist/utils/sync-helpers.d.ts.map +1 -1
- package/dist/utils/sync-helpers.js +2 -2
- package/dist/utils/sync-helpers.js.map +1 -1
- package/node_modules/@lua/shared-types/dist/index.d.mts +122 -1
- package/node_modules/@lua/shared-types/dist/index.d.ts +122 -1
- package/node_modules/@lua/shared-types/src/agent-config.types.ts +31 -0
- package/node_modules/@lua/shared-types/src/agent-invocation.types.ts +73 -0
- package/node_modules/@lua/shared-types/src/device.types.ts +18 -0
- package/node_modules/@lua/shared-types/src/index.ts +2 -0
- package/package.json +2 -1
- package/template/package.json +1 -1
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Device Trigger Interfaces
|
|
3
|
+
* Structures for device trigger management
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* DTO for creating a new device trigger
|
|
7
|
+
*/
|
|
8
|
+
export interface CreateDeviceTriggerDTO {
|
|
9
|
+
name: string;
|
|
10
|
+
description?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* DTO for pushing a device trigger version
|
|
14
|
+
*/
|
|
15
|
+
export interface PushDeviceTriggerVersionDTO {
|
|
16
|
+
name: string;
|
|
17
|
+
version: string;
|
|
18
|
+
description?: string;
|
|
19
|
+
deviceTriggerId: string;
|
|
20
|
+
payloadSchema?: any;
|
|
21
|
+
code?: string;
|
|
22
|
+
executeFunction?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* DTO for updating a device trigger version
|
|
26
|
+
*/
|
|
27
|
+
export interface UpdateDeviceTriggerVersionDTO {
|
|
28
|
+
version?: string;
|
|
29
|
+
description?: string;
|
|
30
|
+
payloadSchema?: any;
|
|
31
|
+
code?: string;
|
|
32
|
+
executeFunction?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Device trigger version information
|
|
36
|
+
*/
|
|
37
|
+
export interface DeviceTriggerVersion {
|
|
38
|
+
id: string;
|
|
39
|
+
version: string;
|
|
40
|
+
description: string;
|
|
41
|
+
active: boolean;
|
|
42
|
+
payloadSchema?: any;
|
|
43
|
+
createdAt: string;
|
|
44
|
+
updatedAt: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Device trigger information
|
|
48
|
+
*/
|
|
49
|
+
export interface DeviceTrigger {
|
|
50
|
+
id: string;
|
|
51
|
+
name: string;
|
|
52
|
+
description: string;
|
|
53
|
+
active: boolean;
|
|
54
|
+
createdAt: string;
|
|
55
|
+
updatedAt: string;
|
|
56
|
+
versions: DeviceTriggerVersion[];
|
|
57
|
+
activeVersionId?: string;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Response from get all device triggers API endpoint
|
|
61
|
+
*/
|
|
62
|
+
export interface GetDeviceTriggersResponse {
|
|
63
|
+
deviceTriggers: DeviceTrigger[];
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Response from delete device trigger API endpoint
|
|
67
|
+
*/
|
|
68
|
+
export interface DeleteDeviceTriggerResponse {
|
|
69
|
+
message: string;
|
|
70
|
+
deleted: boolean;
|
|
71
|
+
deactivated: boolean;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Response from create device trigger API endpoint
|
|
75
|
+
*/
|
|
76
|
+
export interface CreateDeviceTriggerResponse {
|
|
77
|
+
id: string;
|
|
78
|
+
name: string;
|
|
79
|
+
description?: string;
|
|
80
|
+
agentId: string;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=device-triggers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-triggers.d.ts","sourceRoot":"","sources":["../../src/interfaces/device-triggers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,cAAc,EAAE,aAAa,EAAE,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-triggers.js","sourceRoot":"","sources":["../../src/interfaces/device-triggers.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -11,13 +11,14 @@
|
|
|
11
11
|
* - Drift: detect differences between local and server state
|
|
12
12
|
* - Unified push: push all agent config from manifest in one call
|
|
13
13
|
*/
|
|
14
|
-
import type { PersonaDrift, NameDrift, ModelDrift } from '../utils/sync-fetch.js';
|
|
14
|
+
import type { PersonaDrift, NameDrift, ModelDrift, GovernanceDrift } from '../utils/sync-fetch.js';
|
|
15
15
|
import type { CompilationManifest } from '../compiler/types.js';
|
|
16
|
-
import { BatchingConfig } from '
|
|
16
|
+
import type { BatchingConfig } from '@lua/shared-types';
|
|
17
17
|
export interface AgentDrift {
|
|
18
18
|
name: NameDrift | null;
|
|
19
19
|
persona: PersonaDrift | null;
|
|
20
20
|
model: ModelDrift | null;
|
|
21
|
+
governance: GovernanceDrift | null;
|
|
21
22
|
}
|
|
22
23
|
export interface AgentPushResult {
|
|
23
24
|
persona?: {
|
|
@@ -30,6 +31,9 @@ export interface AgentPushResult {
|
|
|
30
31
|
batching?: {
|
|
31
32
|
success: boolean;
|
|
32
33
|
};
|
|
34
|
+
governance?: {
|
|
35
|
+
success: boolean;
|
|
36
|
+
};
|
|
33
37
|
}
|
|
34
38
|
interface SyncContext {
|
|
35
39
|
apiKey: string;
|
|
@@ -48,6 +52,7 @@ export declare class AgentHandler {
|
|
|
48
52
|
}>;
|
|
49
53
|
pushModel(ctx: SyncContext, model?: string | null, modelResolver?: string | null): Promise<boolean>;
|
|
50
54
|
pushBatching(ctx: SyncContext, batchingConfig: BatchingConfig | null): Promise<boolean>;
|
|
55
|
+
pushGovernance(ctx: SyncContext, governance: any | null): Promise<boolean>;
|
|
51
56
|
pullName(serverName: string): boolean;
|
|
52
57
|
pullPersona(serverPersona: string): boolean;
|
|
53
58
|
pullModel(serverModel: string): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.handler.d.ts","sourceRoot":"","sources":["../../src/primitives/agent.handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.handler.d.ts","sourceRoot":"","sources":["../../src/primitives/agent.handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACnG,OAAO,KAAK,EAAE,mBAAmB,EAAiB,MAAM,sBAAsB,CAAC;AAM/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAMxD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,eAAe,GAAG,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjD,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAChC,UAAU,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;CACnC;AAED,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAWD,qBAAa,YAAY;IAMvB;;;OAGG;IACG,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,mBAAmB,GAC5B,OAAO,CAAC,eAAe,CAAC;IA4GrB,QAAQ,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM1D,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAS/F,SAAS,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAMnG,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAMvF,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAahF,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAIrC,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO;IAI3C,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAQvC;;;OAGG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAWtE;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO;CAGrC;AAED,eAAO,MAAM,YAAY,cAAqB,CAAC"}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import { writeProgress, writeSuccess } from '../utils/cli.js';
|
|
15
15
|
import { setAgentName, setAgentPersona, setAgentModel } from '../compiler/index.js';
|
|
16
|
-
import { checkPersonaDrift, checkNameDrift, checkModelDrift } from '../utils/sync-fetch.js';
|
|
16
|
+
import { fetchServerAgent, checkPersonaDrift, checkNameDrift, checkModelDrift, checkGovernanceDrift } from '../utils/sync-fetch.js';
|
|
17
17
|
import { PrimitiveKind } from '../compiler/types.js';
|
|
18
18
|
import { getPrimitivesByKind, loadArtifact, compressForPush } from '../utils/artifact-loader.js';
|
|
19
19
|
import PersonaApi from '../api/persona.api.service.js';
|
|
@@ -22,6 +22,10 @@ import { BASE_URLS } from '../config/constants.js';
|
|
|
22
22
|
// =============================================================================
|
|
23
23
|
// AGENT HANDLER
|
|
24
24
|
// =============================================================================
|
|
25
|
+
function stripApiKey(governance) {
|
|
26
|
+
const { apiKey: _stripped, ...rest } = governance;
|
|
27
|
+
return rest;
|
|
28
|
+
}
|
|
25
29
|
export class AgentHandler {
|
|
26
30
|
// ===========================================================================
|
|
27
31
|
// UNIFIED PUSH (from manifest — used by "lua push all" and "lua push agent")
|
|
@@ -109,6 +113,29 @@ export class AgentHandler {
|
|
|
109
113
|
console.error(` ❌ Failed to push batching config: ${error.message}`);
|
|
110
114
|
result.batching = { success: false };
|
|
111
115
|
}
|
|
116
|
+
// Push governance config only when the manifest actually defines it.
|
|
117
|
+
// Agents that never configured governance don't trigger an unrelated
|
|
118
|
+
// server write on every push. To explicitly clear a previously-set
|
|
119
|
+
// config, use `lua governance remove`, which sends null via the same
|
|
120
|
+
// pushGovernance path.
|
|
121
|
+
const governance = agent?.governance;
|
|
122
|
+
if (governance) {
|
|
123
|
+
writeProgress('\n🛡️ Pushing governance configuration...');
|
|
124
|
+
try {
|
|
125
|
+
const success = await this.pushGovernance({ apiKey, agentId }, governance);
|
|
126
|
+
result.governance = { success };
|
|
127
|
+
if (success) {
|
|
128
|
+
writeSuccess(` ✅ Governance config pushed (${governance.mode} mode)`);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
console.error(' ❌ Failed to push governance config');
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
console.error(` ❌ Failed to push governance config: ${error.message}`);
|
|
136
|
+
result.governance = { success: false };
|
|
137
|
+
}
|
|
138
|
+
}
|
|
112
139
|
return result;
|
|
113
140
|
}
|
|
114
141
|
// ===========================================================================
|
|
@@ -137,6 +164,14 @@ export class AgentHandler {
|
|
|
137
164
|
const result = await agentApi.updateAgent(ctx.agentId, { batchingConfig });
|
|
138
165
|
return result.success;
|
|
139
166
|
}
|
|
167
|
+
async pushGovernance(ctx, governance) {
|
|
168
|
+
const agentApi = new AgentApi(BASE_URLS.API, ctx.apiKey);
|
|
169
|
+
// Defence-in-depth: strip any raw apiKey before hitting the wire, even
|
|
170
|
+
// if an older governance.ts still has one. Only apiKeyEnvVar is allowed.
|
|
171
|
+
const safeGovernance = governance ? stripApiKey(governance) : governance;
|
|
172
|
+
const result = await agentApi.updateAgent(ctx.agentId, { governance: safeGovernance });
|
|
173
|
+
return result.success;
|
|
174
|
+
}
|
|
140
175
|
// ===========================================================================
|
|
141
176
|
// PULL (server → local source code, used by sync command)
|
|
142
177
|
// ===========================================================================
|
|
@@ -157,18 +192,20 @@ export class AgentHandler {
|
|
|
157
192
|
* Runs all checks in parallel.
|
|
158
193
|
*/
|
|
159
194
|
async checkDrift(apiKey, agentId) {
|
|
160
|
-
const
|
|
161
|
-
|
|
195
|
+
const agent = await fetchServerAgent(apiKey, agentId);
|
|
196
|
+
const [name, persona, model, governance] = await Promise.all([
|
|
197
|
+
checkNameDrift(apiKey, agentId, agent),
|
|
162
198
|
checkPersonaDrift(apiKey, agentId),
|
|
163
|
-
checkModelDrift(apiKey, agentId),
|
|
199
|
+
checkModelDrift(apiKey, agentId, agent),
|
|
200
|
+
checkGovernanceDrift(apiKey, agentId, agent),
|
|
164
201
|
]);
|
|
165
|
-
return { name, persona, model };
|
|
202
|
+
return { name, persona, model, governance };
|
|
166
203
|
}
|
|
167
204
|
/**
|
|
168
205
|
* Returns true if any agent field has drifted.
|
|
169
206
|
*/
|
|
170
207
|
hasDrift(drift) {
|
|
171
|
-
return !!(drift.name || drift.persona || drift.model);
|
|
208
|
+
return !!(drift.name || drift.persona || drift.model || drift.governance);
|
|
172
209
|
}
|
|
173
210
|
}
|
|
174
211
|
export const agentHandler = new AgentHandler();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.handler.js","sourceRoot":"","sources":["../../src/primitives/agent.handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.handler.js","sourceRoot":"","sources":["../../src/primitives/agent.handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Device Trigger Handler
|
|
3
|
+
*
|
|
4
|
+
* Handles CLI operations for device trigger primitives.
|
|
5
|
+
*
|
|
6
|
+
* Device triggers:
|
|
7
|
+
* - Use 'active' field on entity
|
|
8
|
+
* - Use 'isActive' field on versions
|
|
9
|
+
*/
|
|
10
|
+
import { PrimitiveKind, ManifestPrimitive } from '../compiler/types.js';
|
|
11
|
+
import DeviceTriggerApi from '../api/device-trigger.api.service.js';
|
|
12
|
+
import type { PushDeviceTriggerVersionDTO } from '../interfaces/device-triggers.js';
|
|
13
|
+
import { BaseVersionedHandler } from './base.handler.js';
|
|
14
|
+
import type { YamlPrimitiveConfig, ServerSyncData } from './types.js';
|
|
15
|
+
import type { YamlConfigDeviceTrigger } from '../types/yaml.types.js';
|
|
16
|
+
/**
|
|
17
|
+
* Device trigger primitive handler
|
|
18
|
+
*/
|
|
19
|
+
export declare class DeviceTriggerHandler extends BaseVersionedHandler<YamlConfigDeviceTrigger, PushDeviceTriggerVersionDTO> {
|
|
20
|
+
readonly kind = PrimitiveKind.DEVICE_TRIGGER;
|
|
21
|
+
readonly displayName = "device trigger";
|
|
22
|
+
readonly displayNamePlural = "device triggers";
|
|
23
|
+
readonly deleteCommand = "lua device-triggers delete";
|
|
24
|
+
readonly yamlConfig: YamlPrimitiveConfig;
|
|
25
|
+
/**
|
|
26
|
+
* Override fetchServerState to treat auth/network errors as non-fatal.
|
|
27
|
+
*
|
|
28
|
+
* The Device Gateway is feature-gated on the server
|
|
29
|
+
* (DEVICE_GATEWAY_ENABLED). When the feature is off or the endpoint
|
|
30
|
+
* doesn't exist for a given agent, the server returns 401 or 404.
|
|
31
|
+
* Device triggers are an optional primitive. A missing or inaccessible
|
|
32
|
+
* endpoint should not block compiling other primitives.
|
|
33
|
+
*/
|
|
34
|
+
fetchServerState(apiKey: string, agentId: string): Promise<ServerSyncData>;
|
|
35
|
+
protected getApi(apiKey: string, agentId: string): DeviceTriggerApi;
|
|
36
|
+
protected fetchFromServer(api: DeviceTriggerApi): Promise<any[] | null>;
|
|
37
|
+
protected createOnServer(api: DeviceTriggerApi, primitive: ManifestPrimitive): Promise<string | null>;
|
|
38
|
+
/**
|
|
39
|
+
* Device triggers use 'active' field directly on the entity.
|
|
40
|
+
*/
|
|
41
|
+
isActive(serverItem: any): boolean;
|
|
42
|
+
pushToServer(apiKey: string, agentId: string, entityId: string, pushData: PushDeviceTriggerVersionDTO): Promise<{
|
|
43
|
+
success: boolean;
|
|
44
|
+
error: string | undefined;
|
|
45
|
+
}>;
|
|
46
|
+
publishVersion(apiKey: string, agentId: string, entityId: string, version: string): Promise<{
|
|
47
|
+
success: boolean;
|
|
48
|
+
error: string | undefined;
|
|
49
|
+
}>;
|
|
50
|
+
/**
|
|
51
|
+
* Override to include device trigger payload schema in push data.
|
|
52
|
+
*/
|
|
53
|
+
protected buildPushData(primitive: ManifestPrimitive, compressedCode: string): Record<string, unknown>;
|
|
54
|
+
}
|
|
55
|
+
export declare const deviceTriggerHandler: DeviceTriggerHandler;
|
|
56
|
+
//# sourceMappingURL=device-trigger.handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-trigger.handler.d.ts","sourceRoot":"","sources":["../../src/primitives/device-trigger.handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAyB,MAAM,sBAAsB,CAAC;AAE/F,OAAO,gBAAgB,MAAM,sCAAsC,CAAC;AACpE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AACpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEtE;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,oBAAoB,CAAC,uBAAuB,EAAE,2BAA2B,CAAC;IAClH,QAAQ,CAAC,IAAI,gCAAgC;IAC7C,QAAQ,CAAC,WAAW,oBAAoB;IACxC,QAAQ,CAAC,iBAAiB,qBAAqB;IAC/C,QAAQ,CAAC,aAAa,gCAAgC;IACtD,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAGtC;IAEF;;;;;;;;OAQG;IACG,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAWhF,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,gBAAgB;cAInD,eAAe,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;cAQ7D,cAAc,CAAC,GAAG,EAAE,gBAAgB,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAS3G;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,GAAG,GAAG,OAAO;IAI5B,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,2BAA2B;;;;IAMrG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;;;;IAMvF;;OAEG;IACH,SAAS,CAAC,aAAa,CAAC,SAAS,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAUvG;AAGD,eAAO,MAAM,oBAAoB,sBAA6B,CAAC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Device Trigger Handler
|
|
3
|
+
*
|
|
4
|
+
* Handles CLI operations for device trigger primitives.
|
|
5
|
+
*
|
|
6
|
+
* Device triggers:
|
|
7
|
+
* - Use 'active' field on entity
|
|
8
|
+
* - Use 'isActive' field on versions
|
|
9
|
+
*/
|
|
10
|
+
import { PrimitiveKind } from '../compiler/types.js';
|
|
11
|
+
import { BASE_URLS } from '../config/constants.js';
|
|
12
|
+
import DeviceTriggerApi from '../api/device-trigger.api.service.js';
|
|
13
|
+
import { BaseVersionedHandler } from './base.handler.js';
|
|
14
|
+
/**
|
|
15
|
+
* Device trigger primitive handler
|
|
16
|
+
*/
|
|
17
|
+
export class DeviceTriggerHandler extends BaseVersionedHandler {
|
|
18
|
+
constructor() {
|
|
19
|
+
super(...arguments);
|
|
20
|
+
this.kind = PrimitiveKind.DEVICE_TRIGGER;
|
|
21
|
+
this.displayName = 'device trigger';
|
|
22
|
+
this.displayNamePlural = 'device triggers';
|
|
23
|
+
this.deleteCommand = 'lua device-triggers delete';
|
|
24
|
+
this.yamlConfig = {
|
|
25
|
+
yamlKey: 'deviceTriggers',
|
|
26
|
+
idField: 'deviceTriggerId',
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Override fetchServerState to treat auth/network errors as non-fatal.
|
|
31
|
+
*
|
|
32
|
+
* The Device Gateway is feature-gated on the server
|
|
33
|
+
* (DEVICE_GATEWAY_ENABLED). When the feature is off or the endpoint
|
|
34
|
+
* doesn't exist for a given agent, the server returns 401 or 404.
|
|
35
|
+
* Device triggers are an optional primitive. A missing or inaccessible
|
|
36
|
+
* endpoint should not block compiling other primitives.
|
|
37
|
+
*/
|
|
38
|
+
async fetchServerState(apiKey, agentId) {
|
|
39
|
+
try {
|
|
40
|
+
const api = this.getApi(apiKey, agentId);
|
|
41
|
+
const serverItems = await this.fetchFromServer(api);
|
|
42
|
+
return { serverItems };
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// Silently degrade — device trigger sync is optional.
|
|
46
|
+
return { serverItems: null };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
getApi(apiKey, agentId) {
|
|
50
|
+
return new DeviceTriggerApi(BASE_URLS.API, apiKey, agentId);
|
|
51
|
+
}
|
|
52
|
+
async fetchFromServer(api) {
|
|
53
|
+
const response = await api.getDeviceTriggers();
|
|
54
|
+
if (!response.success || !response.data?.deviceTriggers) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
return response.data.deviceTriggers;
|
|
58
|
+
}
|
|
59
|
+
async createOnServer(api, primitive) {
|
|
60
|
+
const response = await api.createDeviceTrigger({
|
|
61
|
+
name: primitive.name,
|
|
62
|
+
description: primitive.description || `A Lua device trigger for ${primitive.name}`,
|
|
63
|
+
});
|
|
64
|
+
if (!response.success || !response.data?.id)
|
|
65
|
+
return null;
|
|
66
|
+
return response.data.id;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Device triggers use 'active' field directly on the entity.
|
|
70
|
+
*/
|
|
71
|
+
isActive(serverItem) {
|
|
72
|
+
return serverItem.active !== false;
|
|
73
|
+
}
|
|
74
|
+
async pushToServer(apiKey, agentId, entityId, pushData) {
|
|
75
|
+
const api = this.getApi(apiKey, agentId);
|
|
76
|
+
const response = await api.pushDeviceTrigger(entityId, { ...pushData, deviceTriggerId: entityId });
|
|
77
|
+
return { success: response.success, error: response.error?.message };
|
|
78
|
+
}
|
|
79
|
+
async publishVersion(apiKey, agentId, entityId, version) {
|
|
80
|
+
const api = this.getApi(apiKey, agentId);
|
|
81
|
+
const response = await api.publishDeviceTriggerVersion(entityId, version);
|
|
82
|
+
return { success: response.success, error: response.error?.message };
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Override to include device trigger payload schema in push data.
|
|
86
|
+
*/
|
|
87
|
+
buildPushData(primitive, compressedCode) {
|
|
88
|
+
const deviceTrigger = primitive;
|
|
89
|
+
return {
|
|
90
|
+
name: deviceTrigger.name,
|
|
91
|
+
description: deviceTrigger.description,
|
|
92
|
+
code: compressedCode,
|
|
93
|
+
executeFunction: compressedCode,
|
|
94
|
+
payloadSchema: deviceTrigger.schemas?.payload || undefined,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// Export singleton instance
|
|
99
|
+
export const deviceTriggerHandler = new DeviceTriggerHandler();
|
|
100
|
+
//# sourceMappingURL=device-trigger.handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-trigger.handler.js","sourceRoot":"","sources":["../../src/primitives/device-trigger.handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device.handler.d.ts","sourceRoot":"","sources":["../../src/primitives/device.handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAkB,MAAM,sBAAsB,CAAC;AAExF,OAAO,SAAS,MAAM,8BAA8B,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D;;GAEG;AACH,qBAAa,aAAc,SAAQ,oBAAoB,CAAC,gBAAgB,EAAE,oBAAoB,CAAC;IAC7F,QAAQ,CAAC,IAAI,wBAAwB;IACrC,QAAQ,CAAC,WAAW,YAAY;IAChC,QAAQ,CAAC,iBAAiB,aAAa;IACvC,QAAQ,CAAC,aAAa,wBAAwB;IAC9C,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAGtC;IAEF,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS;IAI5D;;;;;;;;;;;;OAYG;IACG,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;cAWhE,eAAe,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;cAQtD,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAWpG,QAAQ,CAAC,UAAU,EAAE,GAAG,GAAG,OAAO;IAI5B,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB;;;;IAM9F,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;;;;IAMvF;;OAEG;IACH,SAAS,CAAC,aAAa,CAAC,SAAS,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"device.handler.d.ts","sourceRoot":"","sources":["../../src/primitives/device.handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAkB,MAAM,sBAAsB,CAAC;AAExF,OAAO,SAAS,MAAM,8BAA8B,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D;;GAEG;AACH,qBAAa,aAAc,SAAQ,oBAAoB,CAAC,gBAAgB,EAAE,oBAAoB,CAAC;IAC7F,QAAQ,CAAC,IAAI,wBAAwB;IACrC,QAAQ,CAAC,WAAW,YAAY;IAChC,QAAQ,CAAC,iBAAiB,aAAa;IACvC,QAAQ,CAAC,aAAa,wBAAwB;IAC9C,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAGtC;IAEF,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS;IAI5D;;;;;;;;;;;;OAYG;IACG,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;cAWhE,eAAe,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;cAQtD,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAWpG,QAAQ,CAAC,UAAU,EAAE,GAAG,GAAG,OAAO;IAI5B,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB;;;;IAM9F,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;;;;IAMvF;;OAEG;IACH,SAAS,CAAC,aAAa,CAAC,SAAS,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAWvG;AAGD,eAAO,MAAM,aAAa,eAAsB,CAAC"}
|
|
@@ -93,8 +93,6 @@ export class DeviceHandler extends BaseVersionedHandler {
|
|
|
93
93
|
name: device.name,
|
|
94
94
|
description: device.description,
|
|
95
95
|
group: device.group,
|
|
96
|
-
commands: device.commands,
|
|
97
|
-
triggers: device.triggers,
|
|
98
96
|
code: compressedCode,
|
|
99
97
|
executeFunction: compressedCode,
|
|
100
98
|
artifactHash: device.hash,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device.handler.js","sourceRoot":"","sources":["../../src/primitives/device.handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,aAAa,EAAqC,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,SAAS,MAAM,8BAA8B,CAAC;AAErD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAIzD;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,oBAA4D;IAA/F;;QACW,SAAI,GAAG,aAAa,CAAC,MAAM,CAAC;QAC5B,gBAAW,GAAG,QAAQ,CAAC;QACvB,sBAAiB,GAAG,SAAS,CAAC;QAC9B,kBAAa,GAAG,oBAAoB,CAAC;QACrC,eAAU,GAAwB;YACzC,OAAO,EAAE,SAAS;YAClB,OAAO,EAAE,UAAU;SACpB,CAAC;
|
|
1
|
+
{"version":3,"file":"device.handler.js","sourceRoot":"","sources":["../../src/primitives/device.handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,7 @@ export { PreprocessorHandler } from './preprocessor.handler.js';
|
|
|
15
15
|
export { PostprocessorHandler } from './postprocessor.handler.js';
|
|
16
16
|
export { MCPServerHandler } from './mcp-server.handler.js';
|
|
17
17
|
export { DeviceHandler } from './device.handler.js';
|
|
18
|
+
export { DeviceTriggerHandler } from './device-trigger.handler.js';
|
|
18
19
|
export { skillHandler } from './skill.handler.js';
|
|
19
20
|
export { webhookHandler } from './webhook.handler.js';
|
|
20
21
|
export { jobHandler } from './job.handler.js';
|
|
@@ -22,6 +23,7 @@ export { preprocessorHandler } from './preprocessor.handler.js';
|
|
|
22
23
|
export { postprocessorHandler } from './postprocessor.handler.js';
|
|
23
24
|
export { mcpServerHandler } from './mcp-server.handler.js';
|
|
24
25
|
export { deviceHandler } from './device.handler.js';
|
|
26
|
+
export { deviceTriggerHandler } from './device-trigger.handler.js';
|
|
25
27
|
/**
|
|
26
28
|
* Map of primitive handlers by kind.
|
|
27
29
|
* 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;AAUhE,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;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGnE,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;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAS9E,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
|
@@ -14,6 +14,7 @@ import { preprocessorHandler } from './preprocessor.handler.js';
|
|
|
14
14
|
import { postprocessorHandler } from './postprocessor.handler.js';
|
|
15
15
|
import { mcpServerHandler } from './mcp-server.handler.js';
|
|
16
16
|
import { deviceHandler } from './device.handler.js';
|
|
17
|
+
import { deviceTriggerHandler } from './device-trigger.handler.js';
|
|
17
18
|
// Re-export types and helpers
|
|
18
19
|
export { isVersionedHandler } from './types.js';
|
|
19
20
|
// Re-export handler classes (for testing/extension)
|
|
@@ -24,6 +25,7 @@ export { PreprocessorHandler } from './preprocessor.handler.js';
|
|
|
24
25
|
export { PostprocessorHandler } from './postprocessor.handler.js';
|
|
25
26
|
export { MCPServerHandler } from './mcp-server.handler.js';
|
|
26
27
|
export { DeviceHandler } from './device.handler.js';
|
|
28
|
+
export { DeviceTriggerHandler } from './device-trigger.handler.js';
|
|
27
29
|
// Re-export singleton instances
|
|
28
30
|
export { skillHandler } from './skill.handler.js';
|
|
29
31
|
export { webhookHandler } from './webhook.handler.js';
|
|
@@ -32,6 +34,7 @@ export { preprocessorHandler } from './preprocessor.handler.js';
|
|
|
32
34
|
export { postprocessorHandler } from './postprocessor.handler.js';
|
|
33
35
|
export { mcpServerHandler } from './mcp-server.handler.js';
|
|
34
36
|
export { deviceHandler } from './device.handler.js';
|
|
37
|
+
export { deviceTriggerHandler } from './device-trigger.handler.js';
|
|
35
38
|
/**
|
|
36
39
|
* Map of primitive handlers by kind.
|
|
37
40
|
* Note: TOOL kind has no handler — tools are managed as part of skills.
|
|
@@ -44,6 +47,7 @@ export const primitiveHandlers = {
|
|
|
44
47
|
[PrimitiveKind.POSTPROCESSOR]: postprocessorHandler,
|
|
45
48
|
[PrimitiveKind.MCP_SERVER]: mcpServerHandler,
|
|
46
49
|
[PrimitiveKind.DEVICE]: deviceHandler,
|
|
50
|
+
[PrimitiveKind.DEVICE_TRIGGER]: deviceTriggerHandler,
|
|
47
51
|
};
|
|
48
52
|
/**
|
|
49
53
|
* 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;AAC7E,OAAO,EAAE,aAAa,EAAiB,MAAM,qBAAqB,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;AACnE,OAAO,EAAE,oBAAoB,EAAwB,MAAM,6BAA6B,CAAC;AAEzF,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;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,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;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE;;;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;IACrC,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,oBAAoB;CACrD,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"}
|
package/dist/types/skill.d.ts
CHANGED
|
@@ -795,14 +795,7 @@ export declare class LuaMCPServer {
|
|
|
795
795
|
* });
|
|
796
796
|
* ```
|
|
797
797
|
*/
|
|
798
|
-
|
|
799
|
-
/** Hold on the first message before processing (ms) to allow rapid follow-ups to batch together. 0 = disabled. */
|
|
800
|
-
firstMessageDelayMs?: number;
|
|
801
|
-
/** Window to collect subsequent messages while one is in-flight (ms). 0 = batching disabled. */
|
|
802
|
-
debounceWindowMs?: number;
|
|
803
|
-
/** Maximum messages collected in a single batch. */
|
|
804
|
-
maxBatchMessages?: number;
|
|
805
|
-
}
|
|
798
|
+
import type { BatchingConfig, GovernanceConfig } from '@lua/shared-types';
|
|
806
799
|
/**
|
|
807
800
|
* Type for the agent's model property.
|
|
808
801
|
*
|
|
@@ -845,8 +838,12 @@ export interface LuaAgentConfig {
|
|
|
845
838
|
mcpServers?: LuaMCPServer[];
|
|
846
839
|
/** Array of devices (external hardware that the agent can send commands to and receive triggers from) */
|
|
847
840
|
devices?: LuaDevice[];
|
|
841
|
+
/** Standalone device triggers — agent-side logic that any device can fire */
|
|
842
|
+
deviceTriggers?: LuaDeviceTrigger[];
|
|
848
843
|
/** Per-agent message batching/debounce configuration. Overrides platform env var defaults. */
|
|
849
844
|
batching?: BatchingConfig;
|
|
845
|
+
/** Governance policy configuration. When set, tool calls, preprocessors, and postprocessors are governed. */
|
|
846
|
+
governance?: GovernanceConfig;
|
|
850
847
|
}
|
|
851
848
|
/**
|
|
852
849
|
* LuaAgent class.
|
|
@@ -887,7 +884,9 @@ export declare class LuaAgent {
|
|
|
887
884
|
private readonly postProcessors;
|
|
888
885
|
private readonly mcpServers;
|
|
889
886
|
private readonly devices;
|
|
887
|
+
private readonly deviceTriggers;
|
|
890
888
|
private readonly batching?;
|
|
889
|
+
private readonly governance?;
|
|
891
890
|
/**
|
|
892
891
|
* Creates a new LuaAgent instance.
|
|
893
892
|
*
|
|
@@ -1010,4 +1009,62 @@ export declare class LuaDevice {
|
|
|
1010
1009
|
readonly triggers: Record<string, DeviceTriggerConfig>;
|
|
1011
1010
|
constructor(config: LuaDeviceConfig);
|
|
1012
1011
|
}
|
|
1012
|
+
/**
|
|
1013
|
+
* Configuration for a standalone device trigger primitive.
|
|
1014
|
+
*
|
|
1015
|
+
* Device triggers represent events fired from a device to an agent.
|
|
1016
|
+
* Unlike triggers defined inline within a `defineDevice()`, standalone
|
|
1017
|
+
* device triggers are first-class primitives that can be compiled,
|
|
1018
|
+
* versioned, and pushed independently.
|
|
1019
|
+
*
|
|
1020
|
+
* @example
|
|
1021
|
+
* ```typescript
|
|
1022
|
+
* import { defineDeviceTrigger } from 'lua-cli';
|
|
1023
|
+
* import { z } from 'zod';
|
|
1024
|
+
*
|
|
1025
|
+
* export const paperLow = defineDeviceTrigger({
|
|
1026
|
+
* name: 'paper-low',
|
|
1027
|
+
* description: 'Fired when printer paper drops below threshold',
|
|
1028
|
+
* payloadSchema: z.object({ level: z.number() }),
|
|
1029
|
+
* execute: async (payload, { agent, device }) => {
|
|
1030
|
+
* await agent.chat(`Printer ${device.name} paper low: ${payload.level}%`);
|
|
1031
|
+
* },
|
|
1032
|
+
* });
|
|
1033
|
+
* ```
|
|
1034
|
+
*/
|
|
1035
|
+
export interface LuaDeviceTriggerConfig {
|
|
1036
|
+
/** Trigger name (lowercase, hyphens, e.g., 'paper-low') */
|
|
1037
|
+
name: string;
|
|
1038
|
+
/** Description of when this trigger fires */
|
|
1039
|
+
description?: string;
|
|
1040
|
+
/** Zod schema for trigger payload validation */
|
|
1041
|
+
payloadSchema?: ZodType;
|
|
1042
|
+
/** Function that executes when the trigger fires */
|
|
1043
|
+
execute: (payload: any, context: {
|
|
1044
|
+
agent: any;
|
|
1045
|
+
device: {
|
|
1046
|
+
name: string;
|
|
1047
|
+
};
|
|
1048
|
+
}) => Promise<any>;
|
|
1049
|
+
}
|
|
1050
|
+
/**
|
|
1051
|
+
* Lua Device Trigger class.
|
|
1052
|
+
*
|
|
1053
|
+
* Standalone device trigger primitive. Can be used with either:
|
|
1054
|
+
* - Class-based: `export default new LuaDeviceTrigger({ ... })`
|
|
1055
|
+
* - Function-based: `export const myTrigger = defineDeviceTrigger({ ... })` (preferred)
|
|
1056
|
+
*/
|
|
1057
|
+
export declare class LuaDeviceTrigger {
|
|
1058
|
+
config: LuaDeviceTriggerConfig;
|
|
1059
|
+
readonly name: string;
|
|
1060
|
+
readonly description: string;
|
|
1061
|
+
readonly payloadSchema?: ZodType;
|
|
1062
|
+
readonly execute: (payload: any, context: {
|
|
1063
|
+
agent: any;
|
|
1064
|
+
device: {
|
|
1065
|
+
name: string;
|
|
1066
|
+
};
|
|
1067
|
+
}) => Promise<any>;
|
|
1068
|
+
constructor(config: LuaDeviceTriggerConfig);
|
|
1069
|
+
}
|
|
1013
1070
|
//# sourceMappingURL=skill.d.ts.map
|