@principal-ai/principal-view-core 0.22.0 → 0.23.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/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/node.d.ts +2 -2
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +1 -1
- package/dist/node.js.map +1 -1
- package/dist/registry/VersionRegistry.d.ts +51 -0
- package/dist/registry/VersionRegistry.d.ts.map +1 -0
- package/dist/registry/VersionRegistry.js +100 -0
- package/dist/registry/VersionRegistry.js.map +1 -0
- package/dist/storyboard/builder.js +2 -2
- package/dist/storyboard/builder.js.map +1 -1
- package/dist/types/version-registry.d.ts +112 -0
- package/dist/types/version-registry.d.ts.map +1 -0
- package/dist/types/version-registry.js +9 -0
- package/dist/types/version-registry.js.map +1 -0
- package/dist/workflow/example.d.ts.map +1 -1
- package/dist/workflow/example.js +6 -23
- package/dist/workflow/example.js.map +1 -1
- package/dist/workflow/index.d.ts +2 -2
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +1 -1
- package/dist/workflow/index.js.map +1 -1
- package/dist/workflow/scenario-matcher.d.ts +11 -27
- package/dist/workflow/scenario-matcher.d.ts.map +1 -1
- package/dist/workflow/scenario-matcher.js +26 -123
- package/dist/workflow/scenario-matcher.js.map +1 -1
- package/dist/workflow/types.d.ts +4 -42
- package/dist/workflow/types.d.ts.map +1 -1
- package/dist/workflow/validator.d.ts +34 -2
- package/dist/workflow/validator.d.ts.map +1 -1
- package/dist/workflow/validator.js +199 -116
- package/dist/workflow/validator.js.map +1 -1
- package/package.json +2 -1
- package/src/index.ts +11 -4
- package/src/node.ts +1 -4
- package/src/registry/VersionRegistry.test.ts +223 -0
- package/src/registry/VersionRegistry.ts +121 -0
- package/src/storyboard/builder.ts +2 -2
- package/src/types/version-registry.ts +123 -0
- package/src/workflow/__tests__/validator.test.ts +691 -107
- package/src/workflow/example.ts +6 -23
- package/src/workflow/index.ts +1 -3
- package/src/workflow/scenario-matcher.ts +32 -145
- package/src/workflow/types.ts +6 -61
- package/src/workflow/validator.ts +222 -124
|
@@ -4,32 +4,27 @@
|
|
|
4
4
|
* Selects the appropriate workflow scenario based on which events occurred
|
|
5
5
|
* during execution. Uses priority-based, first-match-wins algorithm.
|
|
6
6
|
*/
|
|
7
|
-
import type {
|
|
7
|
+
import type { WorkflowScenario, WorkflowTemplate, OtelEvent, ScenarioMatchResult } from './types';
|
|
8
|
+
/**
|
|
9
|
+
* Get required events for a scenario (derived from template.events)
|
|
10
|
+
*
|
|
11
|
+
* @param scenario - Scenario to extract events from
|
|
12
|
+
* @returns Array of event names required for this scenario to match
|
|
13
|
+
*/
|
|
14
|
+
export declare function getRequiredEvents(scenario: WorkflowScenario): string[];
|
|
8
15
|
/**
|
|
9
16
|
* Select the first matching scenario from a workflow template
|
|
10
17
|
*
|
|
11
18
|
* Scenarios are evaluated in priority order (lowest priority number first).
|
|
12
|
-
* Returns the first scenario whose
|
|
19
|
+
* Returns the first scenario whose events are all present.
|
|
13
20
|
*
|
|
14
21
|
* @param template - Workflow template with scenarios
|
|
15
22
|
* @param events - Collected OTEL events
|
|
16
|
-
* @param attributes - Aggregated attributes (computed from events)
|
|
23
|
+
* @param attributes - Aggregated attributes (computed from events) - DEPRECATED, no longer used
|
|
17
24
|
* @returns Matched scenario and metadata
|
|
18
|
-
* @throws Error if no scenario matches
|
|
25
|
+
* @throws Error if no scenario matches
|
|
19
26
|
*/
|
|
20
27
|
export declare function selectScenario(template: WorkflowTemplate, events: OtelEvent[], attributes?: Record<string, unknown>): ScenarioMatchResult;
|
|
21
|
-
/**
|
|
22
|
-
* Check if a scenario condition matches the given events and attributes
|
|
23
|
-
*
|
|
24
|
-
* @param condition - Scenario condition to evaluate
|
|
25
|
-
* @param events - Collected OTEL events
|
|
26
|
-
* @param attributes - Aggregated attributes
|
|
27
|
-
* @returns Match result with reason if not matched
|
|
28
|
-
*/
|
|
29
|
-
export declare function matchesCondition(condition: ScenarioCondition, events: OtelEvent[], attributes: Record<string, unknown>): {
|
|
30
|
-
matches: boolean;
|
|
31
|
-
reason?: string;
|
|
32
|
-
};
|
|
33
28
|
/**
|
|
34
29
|
* Check if any event matches the given pattern (supports glob-style wildcards)
|
|
35
30
|
*
|
|
@@ -44,17 +39,6 @@ export declare function matchesCondition(condition: ScenarioCondition, events: O
|
|
|
44
39
|
* @returns True if any event matches the pattern
|
|
45
40
|
*/
|
|
46
41
|
export declare function hasEventMatching(events: OtelEvent[], pattern: string): boolean;
|
|
47
|
-
/**
|
|
48
|
-
* Evaluate an assertion against a value
|
|
49
|
-
*
|
|
50
|
-
* @param value - Value to test
|
|
51
|
-
* @param assertion - Assertion operators
|
|
52
|
-
* @returns Match result with reason if not matched
|
|
53
|
-
*/
|
|
54
|
-
export declare function evaluateAssertion(value: unknown, assertion: Assertion): {
|
|
55
|
-
matches: boolean;
|
|
56
|
-
reason?: string;
|
|
57
|
-
};
|
|
58
42
|
/**
|
|
59
43
|
* Get nested value from object using dot notation
|
|
60
44
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scenario-matcher.d.ts","sourceRoot":"","sources":["../../src/workflow/scenario-matcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"scenario-matcher.d.ts","sourceRoot":"","sources":["../../src/workflow/scenario-matcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACT,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAEjB;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAEtE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,SAAS,EAAE,EACnB,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACvC,mBAAmB,CA8CrB;AAGD;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAS9E;AAGD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAqBlF;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAc/F;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuC9E"}
|
|
@@ -4,17 +4,26 @@
|
|
|
4
4
|
* Selects the appropriate workflow scenario based on which events occurred
|
|
5
5
|
* during execution. Uses priority-based, first-match-wins algorithm.
|
|
6
6
|
*/
|
|
7
|
+
/**
|
|
8
|
+
* Get required events for a scenario (derived from template.events)
|
|
9
|
+
*
|
|
10
|
+
* @param scenario - Scenario to extract events from
|
|
11
|
+
* @returns Array of event names required for this scenario to match
|
|
12
|
+
*/
|
|
13
|
+
export function getRequiredEvents(scenario) {
|
|
14
|
+
return Object.keys(scenario.template?.events || {});
|
|
15
|
+
}
|
|
7
16
|
/**
|
|
8
17
|
* Select the first matching scenario from a workflow template
|
|
9
18
|
*
|
|
10
19
|
* Scenarios are evaluated in priority order (lowest priority number first).
|
|
11
|
-
* Returns the first scenario whose
|
|
20
|
+
* Returns the first scenario whose events are all present.
|
|
12
21
|
*
|
|
13
22
|
* @param template - Workflow template with scenarios
|
|
14
23
|
* @param events - Collected OTEL events
|
|
15
|
-
* @param attributes - Aggregated attributes (computed from events)
|
|
24
|
+
* @param attributes - Aggregated attributes (computed from events) - DEPRECATED, no longer used
|
|
16
25
|
* @returns Matched scenario and metadata
|
|
17
|
-
* @throws Error if no scenario matches
|
|
26
|
+
* @throws Error if no scenario matches
|
|
18
27
|
*/
|
|
19
28
|
export function selectScenario(template, events, attributes = {}) {
|
|
20
29
|
// Sort scenarios by priority (should already be sorted in template)
|
|
@@ -23,77 +32,32 @@ export function selectScenario(template, events, attributes = {}) {
|
|
|
23
32
|
const matchReasons = {};
|
|
24
33
|
// Find first matching scenario
|
|
25
34
|
for (const scenario of sorted) {
|
|
26
|
-
const
|
|
27
|
-
if
|
|
35
|
+
const requiredEvents = getRequiredEvents(scenario);
|
|
36
|
+
// Check if ALL required events are present
|
|
37
|
+
const hasAllEvents = requiredEvents.every((eventName) => hasEventMatching(events, eventName));
|
|
38
|
+
if (hasAllEvents) {
|
|
28
39
|
// Check if there are other applicable scenarios (for UI)
|
|
29
40
|
for (const other of sorted) {
|
|
30
|
-
if (other.id !== scenario.id
|
|
31
|
-
|
|
41
|
+
if (other.id !== scenario.id) {
|
|
42
|
+
const otherRequired = getRequiredEvents(other);
|
|
43
|
+
const otherMatches = otherRequired.every((eventName) => hasEventMatching(events, eventName));
|
|
44
|
+
if (otherMatches) {
|
|
45
|
+
applicableScenarios.push(other);
|
|
46
|
+
}
|
|
32
47
|
}
|
|
33
48
|
}
|
|
34
49
|
return {
|
|
35
50
|
scenario,
|
|
36
|
-
isDefault:
|
|
51
|
+
isDefault: false,
|
|
37
52
|
applicableScenarios: [scenario, ...applicableScenarios],
|
|
38
53
|
matchReasons,
|
|
39
54
|
};
|
|
40
55
|
}
|
|
41
|
-
|
|
56
|
+
const missingEvents = requiredEvents.filter((eventName) => !hasEventMatching(events, eventName));
|
|
57
|
+
matchReasons[scenario.id] = `Missing required event(s): ${missingEvents.join(', ')}`;
|
|
42
58
|
}
|
|
43
59
|
throw new Error(`No scenario matched for template "${template.name}". ` +
|
|
44
|
-
`
|
|
45
|
-
`Events: ${events.map((e) => e.name).join(', ')}`);
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Check if a scenario condition matches the given events and attributes
|
|
49
|
-
*
|
|
50
|
-
* @param condition - Scenario condition to evaluate
|
|
51
|
-
* @param events - Collected OTEL events
|
|
52
|
-
* @param attributes - Aggregated attributes
|
|
53
|
-
* @returns Match result with reason if not matched
|
|
54
|
-
*/
|
|
55
|
-
export function matchesCondition(condition, events, attributes) {
|
|
56
|
-
// 1. Check default condition (always matches)
|
|
57
|
-
if (condition.default) {
|
|
58
|
-
return { matches: true };
|
|
59
|
-
}
|
|
60
|
-
// 2. Check required events
|
|
61
|
-
if (condition.requires) {
|
|
62
|
-
const matchMode = condition.any ? 'some' : 'every';
|
|
63
|
-
const hasRequired = condition.requires[matchMode]((pattern) => hasEventMatching(events, pattern));
|
|
64
|
-
if (!hasRequired) {
|
|
65
|
-
const missing = condition.requires.filter((pattern) => !hasEventMatching(events, pattern));
|
|
66
|
-
return {
|
|
67
|
-
matches: false,
|
|
68
|
-
reason: `Missing required event(s): ${missing.join(', ')}`,
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
// 3. Check excluded events
|
|
73
|
-
if (condition.excludes) {
|
|
74
|
-
const excluded = condition.excludes.find((pattern) => hasEventMatching(events, pattern));
|
|
75
|
-
if (excluded) {
|
|
76
|
-
return {
|
|
77
|
-
matches: false,
|
|
78
|
-
reason: `Found excluded event: ${excluded}`,
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
// 4. Check attribute assertions
|
|
83
|
-
if (condition.assertions) {
|
|
84
|
-
for (const [key, assertion] of Object.entries(condition.assertions)) {
|
|
85
|
-
const value = getNestedValue(attributes, key);
|
|
86
|
-
const assertionResult = evaluateAssertion(value, assertion);
|
|
87
|
-
if (!assertionResult.matches) {
|
|
88
|
-
return {
|
|
89
|
-
matches: false,
|
|
90
|
-
reason: `Assertion failed for "${key}": ${assertionResult.reason}`,
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
// All checks passed
|
|
96
|
-
return { matches: true };
|
|
60
|
+
`Events in trace: ${events.map((e) => e.name).join(', ')}`);
|
|
97
61
|
}
|
|
98
62
|
/**
|
|
99
63
|
* Check if any event matches the given pattern (supports glob-style wildcards)
|
|
@@ -116,67 +80,6 @@ export function hasEventMatching(events, pattern) {
|
|
|
116
80
|
const regex = new RegExp(`^${regexPattern}$`);
|
|
117
81
|
return events.some((event) => regex.test(event.name));
|
|
118
82
|
}
|
|
119
|
-
/**
|
|
120
|
-
* Evaluate an assertion against a value
|
|
121
|
-
*
|
|
122
|
-
* @param value - Value to test
|
|
123
|
-
* @param assertion - Assertion operators
|
|
124
|
-
* @returns Match result with reason if not matched
|
|
125
|
-
*/
|
|
126
|
-
export function evaluateAssertion(value, assertion) {
|
|
127
|
-
// $exists check
|
|
128
|
-
if (assertion.$exists !== undefined) {
|
|
129
|
-
const exists = value !== undefined && value !== null;
|
|
130
|
-
if (exists !== assertion.$exists) {
|
|
131
|
-
return {
|
|
132
|
-
matches: false,
|
|
133
|
-
reason: assertion.$exists ? 'Value does not exist' : 'Value exists but should not',
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
// If only checking existence, we're done
|
|
137
|
-
if (Object.keys(assertion).length === 1) {
|
|
138
|
-
return { matches: true };
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
// If value doesn't exist and we're checking other operators, fail
|
|
142
|
-
if (value === undefined || value === null) {
|
|
143
|
-
return { matches: false, reason: 'Value is undefined or null' };
|
|
144
|
-
}
|
|
145
|
-
// Numeric comparisons
|
|
146
|
-
if (typeof value === 'number') {
|
|
147
|
-
if (assertion.$gt !== undefined && !(value > assertion.$gt)) {
|
|
148
|
-
return { matches: false, reason: `${value} is not > ${assertion.$gt}` };
|
|
149
|
-
}
|
|
150
|
-
if (assertion.$gte !== undefined && !(value >= assertion.$gte)) {
|
|
151
|
-
return { matches: false, reason: `${value} is not >= ${assertion.$gte}` };
|
|
152
|
-
}
|
|
153
|
-
if (assertion.$lt !== undefined && !(value < assertion.$lt)) {
|
|
154
|
-
return { matches: false, reason: `${value} is not < ${assertion.$lt}` };
|
|
155
|
-
}
|
|
156
|
-
if (assertion.$lte !== undefined && !(value <= assertion.$lte)) {
|
|
157
|
-
return { matches: false, reason: `${value} is not <= ${assertion.$lte}` };
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
// Equality checks
|
|
161
|
-
if (assertion.$eq !== undefined && value !== assertion.$eq) {
|
|
162
|
-
return { matches: false, reason: `${value} !== ${assertion.$eq}` };
|
|
163
|
-
}
|
|
164
|
-
if (assertion.$ne !== undefined && value === assertion.$ne) {
|
|
165
|
-
return { matches: false, reason: `${value} === ${assertion.$ne} (should not equal)` };
|
|
166
|
-
}
|
|
167
|
-
// Array membership
|
|
168
|
-
if (assertion.$in !== undefined) {
|
|
169
|
-
if (!assertion.$in.includes(value)) {
|
|
170
|
-
return { matches: false, reason: `${value} not in [${assertion.$in.join(', ')}]` };
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
if (assertion.$nin !== undefined) {
|
|
174
|
-
if (assertion.$nin.includes(value)) {
|
|
175
|
-
return { matches: false, reason: `${value} found in excluded list [${assertion.$nin.join(', ')}]` };
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
return { matches: true };
|
|
179
|
-
}
|
|
180
83
|
/**
|
|
181
84
|
* Get nested value from object using dot notation
|
|
182
85
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scenario-matcher.js","sourceRoot":"","sources":["../../src/workflow/scenario-matcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"scenario-matcher.js","sourceRoot":"","sources":["../../src/workflow/scenario-matcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAA0B;IAC1D,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAC5B,QAA0B,EAC1B,MAAmB,EACnB,aAAsC,EAAE;IAExC,oEAAoE;IACpE,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IAE/E,MAAM,mBAAmB,GAAuB,EAAE,CAAC;IACnD,MAAM,YAAY,GAA2B,EAAE,CAAC;IAEhD,+BAA+B;IAC/B,KAAK,MAAM,QAAQ,IAAI,MAAM,EAAE;QAC7B,MAAM,cAAc,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAEnD,2CAA2C;QAC3C,MAAM,YAAY,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,EAAE,CACtD,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CACpC,CAAC;QAEF,IAAI,YAAY,EAAE;YAChB,yDAAyD;YACzD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;gBAC1B,IAAI,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,EAAE;oBAC5B,MAAM,aAAa,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;oBAC/C,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,EAAE,CACrD,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CACpC,CAAC;oBACF,IAAI,YAAY,EAAE;wBAChB,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBACjC;iBACF;aACF;YAED,OAAO;gBACL,QAAQ;gBACR,SAAS,EAAE,KAAK;gBAChB,mBAAmB,EAAE,CAAC,QAAQ,EAAE,GAAG,mBAAmB,CAAC;gBACvD,YAAY;aACb,CAAC;SACH;QAED,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;QACjG,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,8BAA8B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;KACtF;IAED,MAAM,IAAI,KAAK,CACb,qCAAqC,QAAQ,CAAC,IAAI,KAAK;QACrD,oBAAoB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC7D,CAAC;AACJ,CAAC;AAGD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAmB,EAAE,OAAe;IACnE,gCAAgC;IAChC,MAAM,YAAY,GAAG,OAAO;SACzB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,cAAc;SACpC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,kBAAkB;IAE3C,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,YAAY,GAAG,CAAC,CAAC;IAE9C,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACxD,CAAC;AAGD;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,GAA4B,EAAE,IAAY;IACvE,8EAA8E;IAC9E,IAAI,IAAI,IAAI,GAAG,EAAE;QACf,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;KAClB;IAED,0BAA0B;IAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,OAAO,GAAY,GAAG,CAAC;IAE3B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;QACtB,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE;YAC7C,OAAO,SAAS,CAAC;SAClB;QACD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YAC/B,OAAO,SAAS,CAAC;SAClB;QACD,OAAO,GAAI,OAAmC,CAAC,GAAG,CAAC,CAAC;KACrD;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,GAA4B,EAAE,IAAY,EAAE,KAAc;IACvF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,OAAO,GAA4B,GAAG,CAAC;IAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE;YAClE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;SACnB;QACD,OAAO,GAAG,OAAO,CAAC,GAAG,CAA4B,CAAC;KACnD;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;AAC3B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAmB;IACnD,MAAM,UAAU,GAA4B;QAC1C,eAAe;QACf,eAAe,EAAE,MAAM,CAAC,MAAM;QAC9B,cAAc,EAAE,MAAM,CAAC,MAAM;QAE7B,QAAQ;QACR,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,MAAM;QAE7D,OAAO;QACP,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,MAAM;QAC3D,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM;QACjG,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,IAAI,EAAE,CAC1F,CAAC,MAAM;QACR,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAC9B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,IAAI,CAAC,CACxF,CAAC,MAAM;KACT,CAAC;IAEF,0EAA0E;IAC1E,yEAAyE;IACzE,4EAA4E;IAC5E,MAAM,oBAAoB,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC7E,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACxC,oBAAoB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CACjE,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE;QACjC,IAAI,KAAK,CAAC,UAAU,EAAE;YACpB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE;gBAC3D,6DAA6D;gBAC7D,2EAA2E;gBAC3E,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;aACzB;SACF;KACF;IAED,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
package/dist/workflow/types.d.ts
CHANGED
|
@@ -50,6 +50,8 @@ export interface WorkflowTemplate {
|
|
|
50
50
|
name: string;
|
|
51
51
|
/** Purpose of this workflow view */
|
|
52
52
|
description: string;
|
|
53
|
+
/** Exact span name this workflow applies to */
|
|
54
|
+
spanPattern: string;
|
|
53
55
|
/** How to structure the workflow */
|
|
54
56
|
mode: WorkflowMode;
|
|
55
57
|
/** Scenario selection strategy */
|
|
@@ -70,8 +72,8 @@ export type WorkflowMode = 'span-tree' | 'timeline';
|
|
|
70
72
|
/**
|
|
71
73
|
* Workflow scenario definition
|
|
72
74
|
*
|
|
73
|
-
* Scenarios are mutually exclusive workflow templates
|
|
74
|
-
*
|
|
75
|
+
* Scenarios are mutually exclusive workflow templates.
|
|
76
|
+
* Required events are automatically derived from template.events keys.
|
|
75
77
|
*/
|
|
76
78
|
export interface WorkflowScenario {
|
|
77
79
|
/** Unique scenario identifier (kebab-case) */
|
|
@@ -80,49 +82,9 @@ export interface WorkflowScenario {
|
|
|
80
82
|
priority: number;
|
|
81
83
|
/** What this scenario represents */
|
|
82
84
|
description: string;
|
|
83
|
-
/** Conditions that must be met for this scenario to match */
|
|
84
|
-
condition: ScenarioCondition;
|
|
85
85
|
/** Workflow template content */
|
|
86
86
|
template: ScenarioTemplate;
|
|
87
87
|
}
|
|
88
|
-
/**
|
|
89
|
-
* Scenario matching conditions
|
|
90
|
-
*/
|
|
91
|
-
export interface ScenarioCondition {
|
|
92
|
-
/** Must have these events (supports glob patterns like "*.error") */
|
|
93
|
-
requires?: string[];
|
|
94
|
-
/** Must NOT have these events (supports glob patterns) */
|
|
95
|
-
excludes?: string[];
|
|
96
|
-
/** Assertions on event attributes */
|
|
97
|
-
assertions?: Record<string, Assertion>;
|
|
98
|
-
/** Always matches (use as fallback) */
|
|
99
|
-
default?: boolean;
|
|
100
|
-
/** Match if ANY requires condition met (instead of ALL) */
|
|
101
|
-
any?: boolean;
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Attribute assertion operators
|
|
105
|
-
*/
|
|
106
|
-
export interface Assertion {
|
|
107
|
-
/** Greater than */
|
|
108
|
-
$gt?: number;
|
|
109
|
-
/** Greater than or equal */
|
|
110
|
-
$gte?: number;
|
|
111
|
-
/** Less than */
|
|
112
|
-
$lt?: number;
|
|
113
|
-
/** Less than or equal */
|
|
114
|
-
$lte?: number;
|
|
115
|
-
/** Equal to */
|
|
116
|
-
$eq?: string | number | boolean;
|
|
117
|
-
/** Not equal to */
|
|
118
|
-
$ne?: string | number | boolean;
|
|
119
|
-
/** Attribute exists/doesn't exist */
|
|
120
|
-
$exists?: boolean;
|
|
121
|
-
/** Value in array */
|
|
122
|
-
$in?: (string | number | boolean)[];
|
|
123
|
-
/** Value not in array */
|
|
124
|
-
$nin?: (string | number | boolean)[];
|
|
125
|
-
}
|
|
126
88
|
/**
|
|
127
89
|
* Scenario template content
|
|
128
90
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/workflow/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEvE;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IAEb,sBAAsB;IACtB,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IAE3B,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IAEjC,uBAAuB;IACvB,UAAU,CAAC,EAAE,cAAc,CAAC;IAE5B,wBAAwB;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,6BAA6B;IAC7B,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAExC,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAE/B,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAEhB,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;IAEf,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IAEb,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;IAGpB,oCAAoC;IACpC,IAAI,EAAE,YAAY,CAAC;IAEnB,kCAAkC;IAClC,iBAAiB,EAAE,aAAa,GAAG,QAAQ,CAAC;IAG5C,2DAA2D;IAC3D,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAG5B,4CAA4C;IAC5C,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAG9B,qCAAqC;IACrC,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,WAAW,GACX,UAAU,CAAC;AAEf;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAE/B,8CAA8C;IAC9C,EAAE,EAAE,MAAM,CAAC;IAEX,gEAAgE;IAChE,QAAQ,EAAE,MAAM,CAAC;IAEjB,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;IAGpB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/workflow/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -80,6 +80,19 @@ export declare class WorkflowValidator {
|
|
|
80
80
|
* Validate a workflow template
|
|
81
81
|
*/
|
|
82
82
|
validate(context: WorkflowValidationContext): Promise<WorkflowValidationResult>;
|
|
83
|
+
/**
|
|
84
|
+
* Validate multiple workflows for duplicate spanPatterns
|
|
85
|
+
*
|
|
86
|
+
* This is a CLI-level validation that checks for conflicts across workflows.
|
|
87
|
+
* Call this method after validating individual workflows.
|
|
88
|
+
*
|
|
89
|
+
* @param workflows Array of workflow templates with their file paths
|
|
90
|
+
* @returns Array of violations for duplicate spanPatterns
|
|
91
|
+
*/
|
|
92
|
+
static validateSpanPatterns(workflows: Array<{
|
|
93
|
+
workflow: WorkflowTemplate;
|
|
94
|
+
workflowPath: string;
|
|
95
|
+
}>): WorkflowViolation[];
|
|
83
96
|
/**
|
|
84
97
|
* Check schema validity (required fields, valid values)
|
|
85
98
|
*/
|
|
@@ -88,6 +101,10 @@ export declare class WorkflowValidator {
|
|
|
88
101
|
* Check that the referenced canvas file exists
|
|
89
102
|
*/
|
|
90
103
|
private checkCanvasExists;
|
|
104
|
+
/**
|
|
105
|
+
* Check for deprecated fields (condition, condition.requires, etc.)
|
|
106
|
+
*/
|
|
107
|
+
private checkDeprecatedFields;
|
|
91
108
|
/**
|
|
92
109
|
* Check that events referenced in templates exist in the canvas
|
|
93
110
|
*
|
|
@@ -101,9 +118,24 @@ export declare class WorkflowValidator {
|
|
|
101
118
|
*/
|
|
102
119
|
private checkScenarios;
|
|
103
120
|
/**
|
|
104
|
-
* Check
|
|
121
|
+
* Check for subset relationships between scenarios
|
|
122
|
+
*
|
|
123
|
+
* Ensures no scenario's event set is a strict subset of another scenario's event set.
|
|
124
|
+
* This prevents ambiguous matching where a trace could match multiple scenarios.
|
|
125
|
+
*/
|
|
126
|
+
private checkScenarioSubsets;
|
|
127
|
+
/**
|
|
128
|
+
* Check if set A is a strict subset of set B
|
|
129
|
+
*
|
|
130
|
+
* A is a strict subset of B if:
|
|
131
|
+
* 1. All elements of A are in B
|
|
132
|
+
* 2. A has fewer elements than B
|
|
133
|
+
*/
|
|
134
|
+
private isStrictSubset;
|
|
135
|
+
/**
|
|
136
|
+
* Generate helpful suggestion for fixing subset relationship
|
|
105
137
|
*/
|
|
106
|
-
private
|
|
138
|
+
private generateSubsetFixSuggestion;
|
|
107
139
|
/**
|
|
108
140
|
* Check that template uses valid fields (not legacy format)
|
|
109
141
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/workflow/validator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/workflow/validator.ts"],"names":[],"mappings":"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"}
|