@action-llama/action-llama 0.15.0 → 0.16.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 (137) hide show
  1. package/dist/build-info.json +1 -1
  2. package/dist/cli/commands/doctor.d.ts +1 -0
  3. package/dist/cli/commands/doctor.d.ts.map +1 -1
  4. package/dist/cli/commands/doctor.js +101 -4
  5. package/dist/cli/commands/doctor.js.map +1 -1
  6. package/dist/cli/commands/webhook.d.ts +11 -0
  7. package/dist/cli/commands/webhook.d.ts.map +1 -0
  8. package/dist/cli/commands/webhook.js +271 -0
  9. package/dist/cli/commands/webhook.js.map +1 -0
  10. package/dist/cli/main.js +17 -0
  11. package/dist/cli/main.js.map +1 -1
  12. package/dist/docker/local-runtime.d.ts.map +1 -1
  13. package/dist/docker/local-runtime.js +36 -7
  14. package/dist/docker/local-runtime.js.map +1 -1
  15. package/dist/docker/runtime.d.ts +4 -0
  16. package/dist/docker/runtime.d.ts.map +1 -1
  17. package/dist/gateway/index.d.ts +2 -0
  18. package/dist/gateway/index.d.ts.map +1 -1
  19. package/dist/gateway/index.js +1 -1
  20. package/dist/gateway/index.js.map +1 -1
  21. package/dist/gateway/routes/webhooks.d.ts +2 -1
  22. package/dist/gateway/routes/webhooks.d.ts.map +1 -1
  23. package/dist/gateway/routes/webhooks.js +3 -2
  24. package/dist/gateway/routes/webhooks.js.map +1 -1
  25. package/dist/remote/push.d.ts.map +1 -1
  26. package/dist/remote/push.js +11 -2
  27. package/dist/remote/push.js.map +1 -1
  28. package/dist/scheduler/event-queue-unified.d.ts +50 -0
  29. package/dist/scheduler/event-queue-unified.d.ts.map +1 -0
  30. package/dist/scheduler/event-queue-unified.js +280 -0
  31. package/dist/scheduler/event-queue-unified.js.map +1 -0
  32. package/dist/scheduler/execution.d.ts +2 -1
  33. package/dist/scheduler/execution.d.ts.map +1 -1
  34. package/dist/scheduler/execution.js +48 -8
  35. package/dist/scheduler/execution.js.map +1 -1
  36. package/dist/scheduler/gateway-setup.d.ts +2 -1
  37. package/dist/scheduler/gateway-setup.d.ts.map +1 -1
  38. package/dist/scheduler/gateway-setup.js +2 -1
  39. package/dist/scheduler/gateway-setup.js.map +1 -1
  40. package/dist/scheduler/index.js +1 -1
  41. package/dist/scheduler/index.js.map +1 -1
  42. package/dist/scheduler/lifecycle/agent-lifecycle.d.ts +114 -0
  43. package/dist/scheduler/lifecycle/agent-lifecycle.d.ts.map +1 -0
  44. package/dist/scheduler/lifecycle/agent-lifecycle.js +236 -0
  45. package/dist/scheduler/lifecycle/agent-lifecycle.js.map +1 -0
  46. package/dist/scheduler/lifecycle/index.d.ts +60 -0
  47. package/dist/scheduler/lifecycle/index.d.ts.map +1 -0
  48. package/dist/scheduler/lifecycle/index.js +103 -0
  49. package/dist/scheduler/lifecycle/index.js.map +1 -0
  50. package/dist/scheduler/lifecycle/instance-lifecycle.d.ts +88 -0
  51. package/dist/scheduler/lifecycle/instance-lifecycle.d.ts.map +1 -0
  52. package/dist/scheduler/lifecycle/instance-lifecycle.js +142 -0
  53. package/dist/scheduler/lifecycle/instance-lifecycle.js.map +1 -0
  54. package/dist/scheduler/types.d.ts +2 -0
  55. package/dist/scheduler/types.d.ts.map +1 -1
  56. package/dist/scheduler/webhook-setup.d.ts +1 -0
  57. package/dist/scheduler/webhook-setup.d.ts.map +1 -1
  58. package/dist/scheduler/webhook-setup.js +14 -2
  59. package/dist/scheduler/webhook-setup.js.map +1 -1
  60. package/dist/shared/config.d.ts +1 -0
  61. package/dist/shared/config.d.ts.map +1 -1
  62. package/dist/shared/config.js.map +1 -1
  63. package/dist/shared/constants.d.ts +16 -0
  64. package/dist/shared/constants.d.ts.map +1 -1
  65. package/dist/shared/constants.js +54 -0
  66. package/dist/shared/constants.js.map +1 -1
  67. package/dist/shared/persistence/adapters/state-store.d.ts +24 -0
  68. package/dist/shared/persistence/adapters/state-store.d.ts.map +1 -0
  69. package/dist/shared/persistence/adapters/state-store.js +32 -0
  70. package/dist/shared/persistence/adapters/state-store.js.map +1 -0
  71. package/dist/shared/persistence/adapters/stats-store.d.ts +49 -0
  72. package/dist/shared/persistence/adapters/stats-store.d.ts.map +1 -0
  73. package/dist/shared/persistence/adapters/stats-store.js +213 -0
  74. package/dist/shared/persistence/adapters/stats-store.js.map +1 -0
  75. package/dist/shared/persistence/backends/memory.d.ts +39 -0
  76. package/dist/shared/persistence/backends/memory.d.ts.map +1 -0
  77. package/dist/shared/persistence/backends/memory.js +214 -0
  78. package/dist/shared/persistence/backends/memory.js.map +1 -0
  79. package/dist/shared/persistence/backends/sqlite.d.ts +38 -0
  80. package/dist/shared/persistence/backends/sqlite.d.ts.map +1 -0
  81. package/dist/shared/persistence/backends/sqlite.js +250 -0
  82. package/dist/shared/persistence/backends/sqlite.js.map +1 -0
  83. package/dist/shared/persistence/event-store.d.ts +77 -0
  84. package/dist/shared/persistence/event-store.d.ts.map +1 -0
  85. package/dist/shared/persistence/event-store.js +139 -0
  86. package/dist/shared/persistence/event-store.js.map +1 -0
  87. package/dist/shared/persistence/index.d.ts +119 -0
  88. package/dist/shared/persistence/index.d.ts.map +1 -0
  89. package/dist/shared/persistence/index.js +93 -0
  90. package/dist/shared/persistence/index.js.map +1 -0
  91. package/dist/shared/persistence/migration.d.ts +47 -0
  92. package/dist/shared/persistence/migration.d.ts.map +1 -0
  93. package/dist/shared/persistence/migration.js +297 -0
  94. package/dist/shared/persistence/migration.js.map +1 -0
  95. package/dist/shared/validation.d.ts +61 -0
  96. package/dist/shared/validation.d.ts.map +1 -0
  97. package/dist/shared/validation.js +280 -0
  98. package/dist/shared/validation.js.map +1 -0
  99. package/dist/stats/event-store.d.ts +37 -0
  100. package/dist/stats/event-store.d.ts.map +1 -0
  101. package/dist/stats/event-store.js +366 -0
  102. package/dist/stats/event-store.js.map +1 -0
  103. package/dist/tui/status-tracker.d.ts +19 -0
  104. package/dist/tui/status-tracker.d.ts.map +1 -1
  105. package/dist/tui/status-tracker.js +96 -1
  106. package/dist/tui/status-tracker.js.map +1 -1
  107. package/dist/webhooks/providers/github.d.ts +1 -1
  108. package/dist/webhooks/providers/github.d.ts.map +1 -1
  109. package/dist/webhooks/providers/github.js +2 -2
  110. package/dist/webhooks/providers/github.js.map +1 -1
  111. package/dist/webhooks/providers/linear.d.ts +1 -1
  112. package/dist/webhooks/providers/linear.d.ts.map +1 -1
  113. package/dist/webhooks/providers/linear.js +2 -2
  114. package/dist/webhooks/providers/linear.js.map +1 -1
  115. package/dist/webhooks/providers/mintlify.d.ts +1 -1
  116. package/dist/webhooks/providers/mintlify.d.ts.map +1 -1
  117. package/dist/webhooks/providers/mintlify.js +2 -2
  118. package/dist/webhooks/providers/mintlify.js.map +1 -1
  119. package/dist/webhooks/providers/sentry.d.ts +1 -1
  120. package/dist/webhooks/providers/sentry.d.ts.map +1 -1
  121. package/dist/webhooks/providers/sentry.js +2 -2
  122. package/dist/webhooks/providers/sentry.js.map +1 -1
  123. package/dist/webhooks/providers/test.d.ts +1 -1
  124. package/dist/webhooks/providers/test.d.ts.map +1 -1
  125. package/dist/webhooks/providers/test.js +1 -1
  126. package/dist/webhooks/providers/test.js.map +1 -1
  127. package/dist/webhooks/registry.d.ts +8 -2
  128. package/dist/webhooks/registry.d.ts.map +1 -1
  129. package/dist/webhooks/registry.js +155 -3
  130. package/dist/webhooks/registry.js.map +1 -1
  131. package/dist/webhooks/types.d.ts +28 -1
  132. package/dist/webhooks/types.d.ts.map +1 -1
  133. package/dist/webhooks/validation.d.ts +7 -6
  134. package/dist/webhooks/validation.d.ts.map +1 -1
  135. package/dist/webhooks/validation.js +11 -9
  136. package/dist/webhooks/validation.js.map +1 -1
  137. package/package.json +1 -1
@@ -0,0 +1,280 @@
1
+ /**
2
+ * Enhanced validation functions for Action Llama configurations.
3
+ * Provides schema validation, unknown field detection, cron validation,
4
+ * model/provider compatibility checks, and unsafe config warnings.
5
+ */
6
+ import { Cron } from "croner";
7
+ import { PROVIDER_MODELS } from "./constants.js";
8
+ // --- Schema definitions ---
9
+ const GLOBAL_CONFIG_SCHEMA = {
10
+ required: new Set(),
11
+ optional: new Set([
12
+ "models", "local", "gateway", "webhooks", "telemetry", "feedback",
13
+ "projectName", "maxReruns", "maxCallDepth", "maxTriggerDepth",
14
+ "webhookQueueSize", "workQueueSize", "resourceLockTimeout", "scale"
15
+ ]),
16
+ nested: {
17
+ models: {
18
+ required: new Set(),
19
+ optional: new Set(["provider", "model", "thinkingLevel", "authType"]),
20
+ nested: {}
21
+ },
22
+ local: {
23
+ required: new Set(),
24
+ optional: new Set(["enabled", "image", "memory", "cpus", "timeout"]),
25
+ nested: {}
26
+ },
27
+ gateway: {
28
+ required: new Set(),
29
+ optional: new Set(["port", "url"]),
30
+ nested: {}
31
+ },
32
+ telemetry: {
33
+ required: new Set(),
34
+ optional: new Set(["enabled", "provider", "endpoint", "serviceName", "headers", "samplingRate"]),
35
+ nested: {}
36
+ },
37
+ feedback: {
38
+ required: new Set(),
39
+ optional: new Set(["enabled", "agent", "errorPatterns", "contextLines"]),
40
+ nested: {}
41
+ }
42
+ }
43
+ };
44
+ const AGENT_CONFIG_SCHEMA = {
45
+ required: new Set(["name", "credentials", "models"]),
46
+ optional: new Set([
47
+ "description", "schedule", "webhooks", "hooks", "params", "scale",
48
+ "timeout", "feedback", "license", "compatibility"
49
+ ]),
50
+ nested: {
51
+ hooks: {
52
+ required: new Set(),
53
+ optional: new Set(["pre", "post"]),
54
+ nested: {}
55
+ },
56
+ feedback: {
57
+ required: new Set(),
58
+ optional: new Set(["enabled"]),
59
+ nested: {}
60
+ }
61
+ }
62
+ };
63
+ /**
64
+ * Validate a cron expression using the croner library.
65
+ */
66
+ export function validateCronExpression(schedule) {
67
+ try {
68
+ // Test by creating a Cron instance - if invalid, it will throw
69
+ const job = new Cron(schedule, { paused: true });
70
+ job.stop(); // Clean up immediately
71
+ return { valid: true };
72
+ }
73
+ catch (err) {
74
+ return {
75
+ valid: false,
76
+ error: err instanceof Error ? err.message : String(err)
77
+ };
78
+ }
79
+ }
80
+ /**
81
+ * Validate model/provider/authType compatibility.
82
+ */
83
+ export function validateModelProviderCompat(provider, model, authType) {
84
+ const providerConfig = PROVIDER_MODELS[provider];
85
+ if (!providerConfig) {
86
+ const knownProviders = Object.keys(PROVIDER_MODELS).join(", ");
87
+ return {
88
+ valid: false,
89
+ error: `Unknown provider "${provider}". Known providers: ${knownProviders}`
90
+ };
91
+ }
92
+ // Check if model matches any of the provider's model patterns
93
+ const modelMatches = providerConfig.models.some(pattern => {
94
+ if (pattern.endsWith("*")) {
95
+ return model.startsWith(pattern.slice(0, -1));
96
+ }
97
+ return model === pattern;
98
+ });
99
+ if (!modelMatches) {
100
+ const supportedModels = providerConfig.models.join(", ");
101
+ return {
102
+ valid: false,
103
+ error: `Model "${model}" is not supported by provider "${provider}". Supported models: ${supportedModels}`
104
+ };
105
+ }
106
+ // Check if authType is supported
107
+ if (!providerConfig.authTypes.includes(authType)) {
108
+ const supportedAuth = providerConfig.authTypes.join(", ");
109
+ return {
110
+ valid: false,
111
+ error: `Auth type "${authType}" is not supported by provider "${provider}". Supported auth types: ${supportedAuth}`
112
+ };
113
+ }
114
+ return { valid: true };
115
+ }
116
+ /**
117
+ * Validate config against a schema and return validation errors.
118
+ */
119
+ export function validateConfigSchema(config, schema, path = "") {
120
+ const errors = [];
121
+ const warnings = [];
122
+ if (typeof config !== "object" || config === null) {
123
+ errors.push({
124
+ type: "error",
125
+ message: "Configuration must be an object",
126
+ field: path
127
+ });
128
+ return { valid: false, errors, warnings };
129
+ }
130
+ const configObj = config;
131
+ // Check required fields
132
+ for (const field of schema.required) {
133
+ if (!(field in configObj)) {
134
+ errors.push({
135
+ type: "error",
136
+ message: `Required field "${field}" is missing`,
137
+ field: path ? `${path}.${field}` : field
138
+ });
139
+ }
140
+ }
141
+ // Validate nested objects
142
+ for (const [field, nestedSchema] of Object.entries(schema.nested)) {
143
+ if (field in configObj && configObj[field] != null) {
144
+ const nestedPath = path ? `${path}.${field}` : field;
145
+ if (typeof configObj[field] === "object") {
146
+ const nestedResult = validateConfigSchema(configObj[field], nestedSchema, nestedPath);
147
+ errors.push(...nestedResult.errors);
148
+ warnings.push(...nestedResult.warnings);
149
+ }
150
+ }
151
+ }
152
+ return {
153
+ valid: errors.length === 0,
154
+ errors,
155
+ warnings
156
+ };
157
+ }
158
+ /**
159
+ * Detect unknown fields in config that are not in the schema.
160
+ */
161
+ export function detectUnknownFields(config, schema, path = "") {
162
+ const unknownFields = [];
163
+ if (typeof config !== "object" || config === null) {
164
+ return unknownFields;
165
+ }
166
+ const configObj = config;
167
+ const allowedFields = new Set([...schema.required, ...schema.optional, ...Object.keys(schema.nested)]);
168
+ for (const field of Object.keys(configObj)) {
169
+ const fieldPath = path ? `${path}.${field}` : field;
170
+ if (!allowedFields.has(field)) {
171
+ unknownFields.push(fieldPath);
172
+ }
173
+ else if (field in schema.nested && configObj[field] != null) {
174
+ // Recursively check nested objects
175
+ if (typeof configObj[field] === "object") {
176
+ unknownFields.push(...detectUnknownFields(configObj[field], schema.nested[field], fieldPath));
177
+ }
178
+ }
179
+ }
180
+ return unknownFields;
181
+ }
182
+ /**
183
+ * Validate global config with comprehensive checks.
184
+ */
185
+ export function validateGlobalConfig(config, raw) {
186
+ const errors = [];
187
+ const warnings = [];
188
+ // Schema validation
189
+ if (raw) {
190
+ const schemaResult = validateConfigSchema(raw, GLOBAL_CONFIG_SCHEMA);
191
+ errors.push(...schemaResult.errors);
192
+ warnings.push(...schemaResult.warnings);
193
+ }
194
+ // Model validation
195
+ if (config.models) {
196
+ for (const [name, modelConfig] of Object.entries(config.models)) {
197
+ const compatResult = validateModelProviderCompat(modelConfig.provider, modelConfig.model, modelConfig.authType);
198
+ if (!compatResult.valid) {
199
+ errors.push({
200
+ type: "error",
201
+ message: `Model "${name}": ${compatResult.error}`,
202
+ field: `models.${name}`,
203
+ context: "model compatibility"
204
+ });
205
+ }
206
+ }
207
+ }
208
+ // Unsafe config warnings
209
+ if (config.gateway?.url?.includes("0.0.0.0")) {
210
+ warnings.push({
211
+ type: "warning",
212
+ message: "Gateway is bound to 0.0.0.0 (public interface). Consider using localhost for security.",
213
+ field: "gateway.url",
214
+ context: "unsafe configuration"
215
+ });
216
+ }
217
+ return { valid: errors.length === 0, errors, warnings };
218
+ }
219
+ /**
220
+ * Validate agent config with comprehensive checks.
221
+ */
222
+ export function validateAgentConfig(config, raw) {
223
+ const errors = [];
224
+ const warnings = [];
225
+ // Schema validation
226
+ if (raw) {
227
+ const schemaResult = validateConfigSchema(raw, AGENT_CONFIG_SCHEMA);
228
+ errors.push(...schemaResult.errors);
229
+ warnings.push(...schemaResult.warnings);
230
+ }
231
+ // Cron validation
232
+ if (config.schedule) {
233
+ const cronResult = validateCronExpression(config.schedule);
234
+ if (!cronResult.valid) {
235
+ errors.push({
236
+ type: "error",
237
+ message: `Invalid cron expression "${config.schedule}": ${cronResult.error}`,
238
+ field: "schedule",
239
+ context: "cron validation"
240
+ });
241
+ }
242
+ }
243
+ // Model validation (models should already be resolved to ModelConfig objects)
244
+ if (config.models) {
245
+ for (const [index, modelConfig] of config.models.entries()) {
246
+ const compatResult = validateModelProviderCompat(modelConfig.provider, modelConfig.model, modelConfig.authType);
247
+ if (!compatResult.valid) {
248
+ errors.push({
249
+ type: "error",
250
+ message: `Model ${index}: ${compatResult.error}`,
251
+ field: `models[${index}]`,
252
+ context: "model compatibility"
253
+ });
254
+ }
255
+ // pi_auth warning (already checked elsewhere, but included for completeness)
256
+ if (modelConfig.authType === "pi_auth") {
257
+ warnings.push({
258
+ type: "warning",
259
+ message: `Model ${index} uses pi_auth which is not supported in container mode`,
260
+ field: `models[${index}].authType`,
261
+ context: "unsafe configuration"
262
+ });
263
+ }
264
+ }
265
+ }
266
+ return { valid: errors.length === 0, errors, warnings };
267
+ }
268
+ /**
269
+ * Check for unknown fields in global config.
270
+ */
271
+ export function detectGlobalConfigUnknownFields(raw) {
272
+ return detectUnknownFields(raw, GLOBAL_CONFIG_SCHEMA);
273
+ }
274
+ /**
275
+ * Check for unknown fields in agent config.
276
+ */
277
+ export function detectAgentConfigUnknownFields(raw) {
278
+ return detectUnknownFields(raw, AGENT_CONFIG_SCHEMA);
279
+ }
280
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/shared/validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Event-sourced stats store using the new unified persistence layer.
3
+ *
4
+ * Replaces direct SQL operations with event sourcing for better auditability,
5
+ * replay capabilities, and eventual consistency support.
6
+ */
7
+ import type { PersistenceStore } from "../shared/persistence/index.js";
8
+ import type { RunRecord, CallEdgeRecord, RunQuery, AgentSummary, CallEdgeSummary } from "./store.js";
9
+ export declare class EventSourcedStatsStore {
10
+ private persistence;
11
+ private statsStream;
12
+ private callIdCounter;
13
+ private agentSummaryCache;
14
+ private globalSummaryCache;
15
+ private cacheTimeout;
16
+ constructor(persistence: PersistenceStore);
17
+ recordRun(run: RunRecord): Promise<void>;
18
+ recordCallEdge(edge: CallEdgeRecord): Promise<number>;
19
+ updateCallEdge(id: number, updates: {
20
+ durationMs?: number;
21
+ status?: string;
22
+ targetInstance?: string;
23
+ }): Promise<void>;
24
+ queryRuns(query?: RunQuery): Promise<any[]>;
25
+ queryAgentSummary(query?: {
26
+ agent?: string;
27
+ since?: number;
28
+ }): Promise<AgentSummary[]>;
29
+ queryCallGraph(query?: {
30
+ since?: number;
31
+ }): Promise<CallEdgeSummary[]>;
32
+ private invalidateCache;
33
+ close(): Promise<void>;
34
+ createSnapshot(): Promise<void>;
35
+ loadSnapshot(): Promise<void>;
36
+ }
37
+ //# sourceMappingURL=event-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-store.d.ts","sourceRoot":"","sources":["../../src/stats/event-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAEvE,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAErG,qBAAa,sBAAsB;IASrB,OAAO,CAAC,WAAW;IAR/B,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,aAAa,CAAK;IAG1B,OAAO,CAAC,iBAAiB,CAAiE;IAC1F,OAAO,CAAC,kBAAkB,CAAkD;IAC5E,OAAO,CAAC,YAAY,CAAiB;gBAEjB,WAAW,EAAE,gBAAgB;IAI3C,SAAS,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAmDxC,cAAc,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAgDrD,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBrH,SAAS,CAAC,KAAK,GAAE,QAAa,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAmF/C,iBAAiB,CAAC,KAAK,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAgJ1F,cAAc,CAAC,KAAK,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IA8ChF,OAAO,CAAC,eAAe;IAKjB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAS/B,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;CAYpC"}