@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.
- package/dist/build-info.json +1 -1
- package/dist/cli/commands/doctor.d.ts +1 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +101 -4
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/webhook.d.ts +11 -0
- package/dist/cli/commands/webhook.d.ts.map +1 -0
- package/dist/cli/commands/webhook.js +271 -0
- package/dist/cli/commands/webhook.js.map +1 -0
- package/dist/cli/main.js +17 -0
- package/dist/cli/main.js.map +1 -1
- package/dist/docker/local-runtime.d.ts.map +1 -1
- package/dist/docker/local-runtime.js +36 -7
- package/dist/docker/local-runtime.js.map +1 -1
- package/dist/docker/runtime.d.ts +4 -0
- package/dist/docker/runtime.d.ts.map +1 -1
- package/dist/gateway/index.d.ts +2 -0
- package/dist/gateway/index.d.ts.map +1 -1
- package/dist/gateway/index.js +1 -1
- package/dist/gateway/index.js.map +1 -1
- package/dist/gateway/routes/webhooks.d.ts +2 -1
- package/dist/gateway/routes/webhooks.d.ts.map +1 -1
- package/dist/gateway/routes/webhooks.js +3 -2
- package/dist/gateway/routes/webhooks.js.map +1 -1
- package/dist/remote/push.d.ts.map +1 -1
- package/dist/remote/push.js +11 -2
- package/dist/remote/push.js.map +1 -1
- package/dist/scheduler/event-queue-unified.d.ts +50 -0
- package/dist/scheduler/event-queue-unified.d.ts.map +1 -0
- package/dist/scheduler/event-queue-unified.js +280 -0
- package/dist/scheduler/event-queue-unified.js.map +1 -0
- package/dist/scheduler/execution.d.ts +2 -1
- package/dist/scheduler/execution.d.ts.map +1 -1
- package/dist/scheduler/execution.js +48 -8
- package/dist/scheduler/execution.js.map +1 -1
- package/dist/scheduler/gateway-setup.d.ts +2 -1
- package/dist/scheduler/gateway-setup.d.ts.map +1 -1
- package/dist/scheduler/gateway-setup.js +2 -1
- package/dist/scheduler/gateway-setup.js.map +1 -1
- package/dist/scheduler/index.js +1 -1
- package/dist/scheduler/index.js.map +1 -1
- package/dist/scheduler/lifecycle/agent-lifecycle.d.ts +114 -0
- package/dist/scheduler/lifecycle/agent-lifecycle.d.ts.map +1 -0
- package/dist/scheduler/lifecycle/agent-lifecycle.js +236 -0
- package/dist/scheduler/lifecycle/agent-lifecycle.js.map +1 -0
- package/dist/scheduler/lifecycle/index.d.ts +60 -0
- package/dist/scheduler/lifecycle/index.d.ts.map +1 -0
- package/dist/scheduler/lifecycle/index.js +103 -0
- package/dist/scheduler/lifecycle/index.js.map +1 -0
- package/dist/scheduler/lifecycle/instance-lifecycle.d.ts +88 -0
- package/dist/scheduler/lifecycle/instance-lifecycle.d.ts.map +1 -0
- package/dist/scheduler/lifecycle/instance-lifecycle.js +142 -0
- package/dist/scheduler/lifecycle/instance-lifecycle.js.map +1 -0
- package/dist/scheduler/types.d.ts +2 -0
- package/dist/scheduler/types.d.ts.map +1 -1
- package/dist/scheduler/webhook-setup.d.ts +1 -0
- package/dist/scheduler/webhook-setup.d.ts.map +1 -1
- package/dist/scheduler/webhook-setup.js +14 -2
- package/dist/scheduler/webhook-setup.js.map +1 -1
- package/dist/shared/config.d.ts +1 -0
- package/dist/shared/config.d.ts.map +1 -1
- package/dist/shared/config.js.map +1 -1
- package/dist/shared/constants.d.ts +16 -0
- package/dist/shared/constants.d.ts.map +1 -1
- package/dist/shared/constants.js +54 -0
- package/dist/shared/constants.js.map +1 -1
- package/dist/shared/persistence/adapters/state-store.d.ts +24 -0
- package/dist/shared/persistence/adapters/state-store.d.ts.map +1 -0
- package/dist/shared/persistence/adapters/state-store.js +32 -0
- package/dist/shared/persistence/adapters/state-store.js.map +1 -0
- package/dist/shared/persistence/adapters/stats-store.d.ts +49 -0
- package/dist/shared/persistence/adapters/stats-store.d.ts.map +1 -0
- package/dist/shared/persistence/adapters/stats-store.js +213 -0
- package/dist/shared/persistence/adapters/stats-store.js.map +1 -0
- package/dist/shared/persistence/backends/memory.d.ts +39 -0
- package/dist/shared/persistence/backends/memory.d.ts.map +1 -0
- package/dist/shared/persistence/backends/memory.js +214 -0
- package/dist/shared/persistence/backends/memory.js.map +1 -0
- package/dist/shared/persistence/backends/sqlite.d.ts +38 -0
- package/dist/shared/persistence/backends/sqlite.d.ts.map +1 -0
- package/dist/shared/persistence/backends/sqlite.js +250 -0
- package/dist/shared/persistence/backends/sqlite.js.map +1 -0
- package/dist/shared/persistence/event-store.d.ts +77 -0
- package/dist/shared/persistence/event-store.d.ts.map +1 -0
- package/dist/shared/persistence/event-store.js +139 -0
- package/dist/shared/persistence/event-store.js.map +1 -0
- package/dist/shared/persistence/index.d.ts +119 -0
- package/dist/shared/persistence/index.d.ts.map +1 -0
- package/dist/shared/persistence/index.js +93 -0
- package/dist/shared/persistence/index.js.map +1 -0
- package/dist/shared/persistence/migration.d.ts +47 -0
- package/dist/shared/persistence/migration.d.ts.map +1 -0
- package/dist/shared/persistence/migration.js +297 -0
- package/dist/shared/persistence/migration.js.map +1 -0
- package/dist/shared/validation.d.ts +61 -0
- package/dist/shared/validation.d.ts.map +1 -0
- package/dist/shared/validation.js +280 -0
- package/dist/shared/validation.js.map +1 -0
- package/dist/stats/event-store.d.ts +37 -0
- package/dist/stats/event-store.d.ts.map +1 -0
- package/dist/stats/event-store.js +366 -0
- package/dist/stats/event-store.js.map +1 -0
- package/dist/tui/status-tracker.d.ts +19 -0
- package/dist/tui/status-tracker.d.ts.map +1 -1
- package/dist/tui/status-tracker.js +96 -1
- package/dist/tui/status-tracker.js.map +1 -1
- package/dist/webhooks/providers/github.d.ts +1 -1
- package/dist/webhooks/providers/github.d.ts.map +1 -1
- package/dist/webhooks/providers/github.js +2 -2
- package/dist/webhooks/providers/github.js.map +1 -1
- package/dist/webhooks/providers/linear.d.ts +1 -1
- package/dist/webhooks/providers/linear.d.ts.map +1 -1
- package/dist/webhooks/providers/linear.js +2 -2
- package/dist/webhooks/providers/linear.js.map +1 -1
- package/dist/webhooks/providers/mintlify.d.ts +1 -1
- package/dist/webhooks/providers/mintlify.d.ts.map +1 -1
- package/dist/webhooks/providers/mintlify.js +2 -2
- package/dist/webhooks/providers/mintlify.js.map +1 -1
- package/dist/webhooks/providers/sentry.d.ts +1 -1
- package/dist/webhooks/providers/sentry.d.ts.map +1 -1
- package/dist/webhooks/providers/sentry.js +2 -2
- package/dist/webhooks/providers/sentry.js.map +1 -1
- package/dist/webhooks/providers/test.d.ts +1 -1
- package/dist/webhooks/providers/test.d.ts.map +1 -1
- package/dist/webhooks/providers/test.js +1 -1
- package/dist/webhooks/providers/test.js.map +1 -1
- package/dist/webhooks/registry.d.ts +8 -2
- package/dist/webhooks/registry.d.ts.map +1 -1
- package/dist/webhooks/registry.js +155 -3
- package/dist/webhooks/registry.js.map +1 -1
- package/dist/webhooks/types.d.ts +28 -1
- package/dist/webhooks/types.d.ts.map +1 -1
- package/dist/webhooks/validation.d.ts +7 -6
- package/dist/webhooks/validation.d.ts.map +1 -1
- package/dist/webhooks/validation.js +11 -9
- package/dist/webhooks/validation.js.map +1 -1
- 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"}
|