@uluops/core 0.8.2 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +84 -25
- package/dist/ai/AIProvider.d.ts.map +1 -1
- package/dist/ai/AIProvider.js +28 -12
- package/dist/ai/AIProvider.js.map +1 -1
- package/dist/ai/ModelCatalog.js +2 -2
- package/dist/ai/ModelCatalog.js.map +1 -1
- package/dist/ai/ToolAdapter.d.ts.map +1 -1
- package/dist/ai/ToolAdapter.js +16 -27
- package/dist/ai/ToolAdapter.js.map +1 -1
- package/dist/ai/{ShellExecutor.d.ts.map → shellExecutor.d.ts.map} +1 -1
- package/dist/ai/{ShellExecutor.js → shellExecutor.js} +3 -2
- package/dist/ai/{ShellExecutor.js.map → shellExecutor.js.map} +1 -1
- package/dist/analysis/AnalysisSummaryExtractor.d.ts +135 -0
- package/dist/analysis/AnalysisSummaryExtractor.d.ts.map +1 -0
- package/dist/analysis/AnalysisSummaryExtractor.js +465 -0
- package/dist/analysis/AnalysisSummaryExtractor.js.map +1 -0
- package/dist/analysis/index.d.ts +2 -0
- package/dist/analysis/index.d.ts.map +1 -0
- package/dist/analysis/index.js +2 -0
- package/dist/analysis/index.js.map +1 -0
- package/dist/client/UluOpsClient.d.ts +12 -9
- package/dist/client/UluOpsClient.d.ts.map +1 -1
- package/dist/client/UluOpsClient.js +76 -47
- package/dist/client/UluOpsClient.js.map +1 -1
- package/dist/constants.d.ts +4 -3
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +13 -3
- package/dist/constants.js.map +1 -1
- package/dist/errors/index.d.ts +38 -8
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +52 -7
- package/dist/errors/index.js.map +1 -1
- package/dist/executor/AgentExecutor.d.ts +2 -0
- package/dist/executor/AgentExecutor.d.ts.map +1 -1
- package/dist/executor/AgentExecutor.js +33 -16
- package/dist/executor/AgentExecutor.js.map +1 -1
- package/dist/executor/CommandExecutor.d.ts +3 -1
- package/dist/executor/CommandExecutor.d.ts.map +1 -1
- package/dist/executor/CommandExecutor.js +17 -39
- package/dist/executor/CommandExecutor.js.map +1 -1
- package/dist/executor/PipelineExecutor.d.ts +12 -4
- package/dist/executor/PipelineExecutor.d.ts.map +1 -1
- package/dist/executor/PipelineExecutor.js +127 -23
- package/dist/executor/PipelineExecutor.js.map +1 -1
- package/dist/executor/ToolHandler.d.ts +5 -0
- package/dist/executor/ToolHandler.d.ts.map +1 -1
- package/dist/executor/ToolHandler.js +23 -14
- package/dist/executor/ToolHandler.js.map +1 -1
- package/dist/executor/WorkflowExecutor.d.ts +18 -2
- package/dist/executor/WorkflowExecutor.d.ts.map +1 -1
- package/dist/executor/WorkflowExecutor.js +107 -37
- package/dist/executor/WorkflowExecutor.js.map +1 -1
- package/dist/executor/classifyDecision.d.ts +2 -1
- package/dist/executor/classifyDecision.d.ts.map +1 -1
- package/dist/executor/classifyDecision.js +4 -2
- package/dist/executor/classifyDecision.js.map +1 -1
- package/dist/executor/mapCategory.d.ts +5 -0
- package/dist/executor/mapCategory.d.ts.map +1 -0
- package/dist/executor/mapCategory.js +5 -0
- package/dist/executor/mapCategory.js.map +1 -0
- package/dist/executor/preflight.d.ts.map +1 -1
- package/dist/executor/preflight.js +53 -12
- package/dist/executor/preflight.js.map +1 -1
- package/dist/index.d.ts +6 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/parser/OutputExtractor.d.ts +7 -25
- package/dist/parser/OutputExtractor.d.ts.map +1 -1
- package/dist/parser/OutputExtractor.js +23 -528
- package/dist/parser/OutputExtractor.js.map +1 -1
- package/dist/parser/OutputNormalizer.d.ts +45 -0
- package/dist/parser/OutputNormalizer.d.ts.map +1 -0
- package/dist/parser/OutputNormalizer.js +572 -0
- package/dist/parser/OutputNormalizer.js.map +1 -0
- package/dist/parser/outputSchemas.d.ts +266 -36
- package/dist/parser/outputSchemas.d.ts.map +1 -1
- package/dist/parser/outputSchemas.js +109 -0
- package/dist/parser/outputSchemas.js.map +1 -1
- package/dist/registry/RegistryClient.d.ts +9 -7
- package/dist/registry/RegistryClient.d.ts.map +1 -1
- package/dist/registry/RegistryClient.js +82 -51
- package/dist/registry/RegistryClient.js.map +1 -1
- package/dist/submission/SubmissionClient.d.ts +81 -0
- package/dist/submission/SubmissionClient.d.ts.map +1 -0
- package/dist/submission/SubmissionClient.js +266 -0
- package/dist/submission/SubmissionClient.js.map +1 -0
- package/dist/types/agent.d.ts +13 -1
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/command.d.ts +1 -1
- package/dist/types/command.d.ts.map +1 -1
- package/dist/types/config.d.ts +21 -7
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/execution.d.ts +7 -0
- package/dist/types/execution.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/pipeline.d.ts +18 -6
- package/dist/types/pipeline.d.ts.map +1 -1
- package/dist/types/registry.d.ts +11 -4
- package/dist/types/registry.d.ts.map +1 -1
- package/dist/types/submission.d.ts +116 -0
- package/dist/types/submission.d.ts.map +1 -0
- package/dist/types/submission.js +2 -0
- package/dist/types/submission.js.map +1 -0
- package/dist/types/validation.d.ts +4 -0
- package/dist/types/validation.d.ts.map +1 -1
- package/dist/types/workflow.d.ts +7 -1
- package/dist/types/workflow.d.ts.map +1 -1
- package/dist/utils/aggregateScores.d.ts +26 -0
- package/dist/utils/aggregateScores.d.ts.map +1 -0
- package/dist/utils/aggregateScores.js +45 -0
- package/dist/utils/aggregateScores.js.map +1 -0
- package/dist/utils/parseRef.d.ts.map +1 -1
- package/dist/utils/parseRef.js +3 -1
- package/dist/utils/parseRef.js.map +1 -1
- package/dist/utils/topoSort.d.ts.map +1 -1
- package/dist/utils/topoSort.js +5 -2
- package/dist/utils/topoSort.js.map +1 -1
- package/dist/validation/ValidationClient.d.ts +30 -0
- package/dist/validation/ValidationClient.d.ts.map +1 -1
- package/dist/validation/ValidationClient.js +106 -18
- package/dist/validation/ValidationClient.js.map +1 -1
- package/package.json +6 -6
- package/dist/ai/index.d.ts +0 -6
- package/dist/ai/index.d.ts.map +0 -1
- package/dist/ai/index.js +0 -4
- package/dist/ai/index.js.map +0 -1
- package/dist/registry/index.d.ts +0 -2
- package/dist/registry/index.d.ts.map +0 -1
- package/dist/registry/index.js +0 -2
- package/dist/registry/index.js.map +0 -1
- package/dist/validation/index.d.ts +0 -2
- package/dist/validation/index.d.ts.map +0 -1
- package/dist/validation/index.js +0 -2
- package/dist/validation/index.js.map +0 -1
- /package/dist/ai/{ShellExecutor.d.ts → shellExecutor.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/types/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/types/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import type { ExecutionResult, Recommendation } from './execution.js';
|
|
2
|
+
import type { AgentResult } from './agent.js';
|
|
3
|
+
import type { ResolvedDefinition } from './registry.js';
|
|
4
|
+
/**
|
|
5
|
+
* SDK's high-level run submission input
|
|
6
|
+
*/
|
|
7
|
+
export interface RunSubmission {
|
|
8
|
+
/** Project name */
|
|
9
|
+
project: string;
|
|
10
|
+
/** Workflow/definition name */
|
|
11
|
+
workflowType: string;
|
|
12
|
+
/** Execution result to submit (agent results are also accepted) */
|
|
13
|
+
result: ExecutionResult | AgentResult;
|
|
14
|
+
/** Optional idempotency key */
|
|
15
|
+
idempotencyKey?: string;
|
|
16
|
+
/** Optional raw markdown output */
|
|
17
|
+
rawMarkdown?: string;
|
|
18
|
+
/** Resolved definition — enables analysis summary extraction at submission time.
|
|
19
|
+
* Passed through from UluOpsClient.trackIfEnabled() when available. */
|
|
20
|
+
resolvedDefinition?: ResolvedDefinition;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* SDK's high-level response after submission.
|
|
24
|
+
*
|
|
25
|
+
* Correlation contains issue counts from the Submission API.
|
|
26
|
+
* For full issue details (CorrelatedIssue arrays), use `@uluops/ops-sdk` directly.
|
|
27
|
+
*/
|
|
28
|
+
export interface RunSubmissionResponse {
|
|
29
|
+
/** Unique run identifier */
|
|
30
|
+
runId: string;
|
|
31
|
+
/** Run number within project */
|
|
32
|
+
runNumber: number;
|
|
33
|
+
/** Project ID */
|
|
34
|
+
projectId: string;
|
|
35
|
+
/** Dashboard URL for this run */
|
|
36
|
+
dashboardUrl: string;
|
|
37
|
+
/** Whether all gates passed */
|
|
38
|
+
allGatesPassed: boolean;
|
|
39
|
+
/** Average score across validators */
|
|
40
|
+
averageScore: number;
|
|
41
|
+
/** Issue correlation counts from submission API */
|
|
42
|
+
correlation: {
|
|
43
|
+
newIssues: number;
|
|
44
|
+
recurringIssues: number;
|
|
45
|
+
regressions: number;
|
|
46
|
+
};
|
|
47
|
+
/** Whether this was a deduplicated response */
|
|
48
|
+
deduplicated: boolean;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Recommendation with fingerprint from submission service
|
|
52
|
+
*/
|
|
53
|
+
export interface FingerprintedRecommendation extends Recommendation {
|
|
54
|
+
/** Stable fingerprint for correlation */
|
|
55
|
+
fingerprint: string;
|
|
56
|
+
/** First seen timestamp */
|
|
57
|
+
firstSeen: string;
|
|
58
|
+
/** Occurrence count across runs */
|
|
59
|
+
occurrenceCount: number;
|
|
60
|
+
/** Status */
|
|
61
|
+
status: 'new' | 'recurring' | 'resolved';
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Regression information
|
|
65
|
+
*/
|
|
66
|
+
export interface RegressionInfo {
|
|
67
|
+
/** Recommendation that regressed */
|
|
68
|
+
recommendation: FingerprintedRecommendation;
|
|
69
|
+
/** Previous run where it was resolved */
|
|
70
|
+
previousRunId: string;
|
|
71
|
+
/** How long it was resolved */
|
|
72
|
+
resolvedDuration: string;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Query options for submission service run history
|
|
76
|
+
*/
|
|
77
|
+
export interface SubmissionQueryOptions {
|
|
78
|
+
/** Filter by project */
|
|
79
|
+
project?: string;
|
|
80
|
+
/** Filter by workflow type */
|
|
81
|
+
workflowType?: string;
|
|
82
|
+
/** Limit results (1-100) */
|
|
83
|
+
limit?: number;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Run history entry - matches Submission API Run model
|
|
87
|
+
*/
|
|
88
|
+
export interface RunHistoryEntry {
|
|
89
|
+
/** Run UUID */
|
|
90
|
+
id: string;
|
|
91
|
+
/** Project UUID */
|
|
92
|
+
projectId: string;
|
|
93
|
+
/** Sequential run number within project */
|
|
94
|
+
runNumber: number;
|
|
95
|
+
/** Workflow type */
|
|
96
|
+
workflowType: string;
|
|
97
|
+
/** Run timestamp */
|
|
98
|
+
timestamp: string;
|
|
99
|
+
/** Whether all gates passed */
|
|
100
|
+
allGatesPassed: boolean;
|
|
101
|
+
/** Average score across validators */
|
|
102
|
+
averageScore: number;
|
|
103
|
+
/** Raw markdown output (if stored) */
|
|
104
|
+
rawMarkdown?: string;
|
|
105
|
+
/** Archive timestamp (if archived) */
|
|
106
|
+
archivedAt?: string;
|
|
107
|
+
/** Archive reason (if archived) */
|
|
108
|
+
archiveReason?: string;
|
|
109
|
+
/** Idempotency key (if provided) */
|
|
110
|
+
idempotencyKey?: string;
|
|
111
|
+
/** Creation timestamp */
|
|
112
|
+
createdAt: string;
|
|
113
|
+
/** Last update timestamp */
|
|
114
|
+
updatedAt: string;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=submission.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submission.d.ts","sourceRoot":"","sources":["../../src/types/submission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;IAEhB,+BAA+B;IAC/B,YAAY,EAAE,MAAM,CAAC;IAErB,mEAAmE;IACnE,MAAM,EAAE,eAAe,GAAG,WAAW,CAAC;IAEtC,+BAA+B;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,mCAAmC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;2EACuE;IACvE,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACzC;AAED;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACpC,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IAEd,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAElB,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAElB,iCAAiC;IACjC,YAAY,EAAE,MAAM,CAAC;IAErB,+BAA+B;IAC/B,cAAc,EAAE,OAAO,CAAC;IAExB,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IAErB,mDAAmD;IACnD,WAAW,EAAE;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,MAAM,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAEF,+CAA+C;IAC/C,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,2BAA4B,SAAQ,cAAc;IACjE,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAC;IAEpB,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;IAElB,mCAAmC;IACnC,eAAe,EAAE,MAAM,CAAC;IAExB,aAAa;IACb,MAAM,EAAE,KAAK,GAAG,WAAW,GAAG,UAAU,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,oCAAoC;IACpC,cAAc,EAAE,2BAA2B,CAAC;IAE5C,yCAAyC;IACzC,aAAa,EAAE,MAAM,CAAC;IAEtB,+BAA+B;IAC/B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,wBAAwB;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,8BAA8B;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,eAAe;IACf,EAAE,EAAE,MAAM,CAAC;IAEX,mBAAmB;IACnB,SAAS,EAAE,MAAM,CAAC;IAElB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAElB,oBAAoB;IACpB,YAAY,EAAE,MAAM,CAAC;IAErB,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;IAElB,+BAA+B;IAC/B,cAAc,EAAE,OAAO,CAAC;IAExB,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IAErB,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,mCAAmC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,oCAAoC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAElB,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submission.js","sourceRoot":"","sources":["../../src/types/submission.ts"],"names":[],"mappings":""}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ExecutionResult, Recommendation } from './execution.js';
|
|
2
2
|
import type { AgentResult } from './agent.js';
|
|
3
|
+
import type { ResolvedDefinition } from './registry.js';
|
|
3
4
|
/**
|
|
4
5
|
* SDK's high-level run submission input
|
|
5
6
|
*/
|
|
@@ -14,6 +15,9 @@ export interface RunSubmission {
|
|
|
14
15
|
idempotencyKey?: string;
|
|
15
16
|
/** Optional raw markdown output */
|
|
16
17
|
rawMarkdown?: string;
|
|
18
|
+
/** Resolved definition — enables analysis summary extraction at submission time.
|
|
19
|
+
* Passed through from UluOpsClient.trackIfEnabled() when available. */
|
|
20
|
+
resolvedDefinition?: ResolvedDefinition;
|
|
17
21
|
}
|
|
18
22
|
/**
|
|
19
23
|
* SDK's high-level response after submission.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/types/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/types/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;IAEhB,+BAA+B;IAC/B,YAAY,EAAE,MAAM,CAAC;IAErB,mEAAmE;IACnE,MAAM,EAAE,eAAe,GAAG,WAAW,CAAC;IAEtC,+BAA+B;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,mCAAmC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;2EACuE;IACvE,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACzC;AAED;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACpC,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IAEd,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAElB,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAElB,iCAAiC;IACjC,YAAY,EAAE,MAAM,CAAC;IAErB,0CAA0C;IAC1C,cAAc,EAAE,OAAO,CAAC;IAExB,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IAErB,mDAAmD;IACnD,WAAW,EAAE;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,MAAM,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAEF,+CAA+C;IAC/C,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,2BAA4B,SAAQ,cAAc;IACjE,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAC;IAEpB,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;IAElB,mCAAmC;IACnC,eAAe,EAAE,MAAM,CAAC;IAExB,aAAa;IACb,MAAM,EAAE,KAAK,GAAG,WAAW,GAAG,UAAU,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,oCAAoC;IACpC,cAAc,EAAE,2BAA2B,CAAC;IAE5C,yCAAyC;IACzC,aAAa,EAAE,MAAM,CAAC;IAEtB,+BAA+B;IAC/B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,wBAAwB;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,8BAA8B;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,eAAe;IACf,EAAE,EAAE,MAAM,CAAC;IAEX,mBAAmB;IACnB,SAAS,EAAE,MAAM,CAAC;IAElB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAElB,oBAAoB;IACpB,YAAY,EAAE,MAAM,CAAC;IAErB,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;IAElB,0CAA0C;IAC1C,cAAc,EAAE,OAAO,CAAC;IAExB,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IAErB,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,mCAAmC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,oCAAoC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAElB,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
package/dist/types/workflow.d.ts
CHANGED
|
@@ -23,7 +23,11 @@ export interface WorkflowDefinition {
|
|
|
23
23
|
/** Maximum concurrent phases (default: unlimited) */
|
|
24
24
|
max_parallel?: number;
|
|
25
25
|
};
|
|
26
|
-
/** Result aggregation
|
|
26
|
+
/** Result aggregation.
|
|
27
|
+
*
|
|
28
|
+
* All declared methods are enacted by WorkflowExecutor.aggregate() (fixed
|
|
29
|
+
* 2026-04-16 — previously only weighted_average was implemented regardless
|
|
30
|
+
* of method). CommandExecutor.aggregateResults() was fixed in 25b434a. */
|
|
27
31
|
aggregation: {
|
|
28
32
|
/** Score aggregation */
|
|
29
33
|
score: {
|
|
@@ -49,6 +53,8 @@ export interface PhaseDefinition {
|
|
|
49
53
|
type?: 'validate' | 'execute' | 'mixed';
|
|
50
54
|
/** Commands to execute in this phase (refs in name@version format) */
|
|
51
55
|
commands: string[];
|
|
56
|
+
/** Agent refs to execute directly (refs in name@version format, from WDL steps[].agent) */
|
|
57
|
+
agentRefs?: string[];
|
|
52
58
|
/** Execute commands in parallel */
|
|
53
59
|
parallel?: boolean;
|
|
54
60
|
/** Phase dependencies */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/types/workflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE;QACR,wBAAwB;QACxB,SAAS,EAAE;YACT,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,EAAE,MAAM,CAAC;YAChB,WAAW,EAAE,MAAM,CAAC;YACpB,WAAW,EAAE,MAAM,CAAC;YACpB,MAAM,EAAE,MAAM,CAAC;YACf,SAAS,CAAC,EAAE,MAAM,CAAC;SACpB,CAAC;QAEF,0BAA0B;QAC1B,aAAa,EAAE;YACb,qBAAqB;YACrB,MAAM,EAAE,eAAe,EAAE,CAAC;YAE1B,gCAAgC;YAChC,UAAU,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;YAEnD,qDAAqD;YACrD,YAAY,CAAC,EAAE,MAAM,CAAC;SACvB,CAAC;QAEF
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/types/workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared score aggregation for multi-agent/multi-phase results.
|
|
3
|
+
*
|
|
4
|
+
* Used by both CommandExecutor and WorkflowExecutor to eliminate
|
|
5
|
+
* duplicated switch blocks that had already begun to diverge
|
|
6
|
+
* (Math.round applied in WorkflowExecutor but not CommandExecutor).
|
|
7
|
+
*
|
|
8
|
+
* Both callers now get consistent behavior: weighted_average and
|
|
9
|
+
* average are rounded to the nearest integer.
|
|
10
|
+
*/
|
|
11
|
+
export type AggregationMethod = 'min' | 'max' | 'sum' | 'weighted_average' | 'average';
|
|
12
|
+
export interface ScoredItem {
|
|
13
|
+
/** Key used to look up weight in the weights map */
|
|
14
|
+
key: string;
|
|
15
|
+
score: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Aggregate scores using the specified method.
|
|
19
|
+
*
|
|
20
|
+
* @param items - Scored items with keys for weight lookup
|
|
21
|
+
* @param method - Aggregation method (defaults to 'average')
|
|
22
|
+
* @param weights - Weight map keyed by item key (defaults to equal weight of 1)
|
|
23
|
+
* @returns Aggregated score, rounded for average/weighted_average
|
|
24
|
+
*/
|
|
25
|
+
export declare function aggregateScores(items: ScoredItem[], method?: string, weights?: Record<string, number>): number;
|
|
26
|
+
//# sourceMappingURL=aggregateScores.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregateScores.d.ts","sourceRoot":"","sources":["../../src/utils/aggregateScores.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,kBAAkB,GAAG,SAAS,CAAC;AAEvF,MAAM,WAAW,UAAU;IACzB,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,UAAU,EAAE,EACnB,MAAM,GAAE,MAAkB,EAC1B,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACnC,MAAM,CA0BR"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared score aggregation for multi-agent/multi-phase results.
|
|
3
|
+
*
|
|
4
|
+
* Used by both CommandExecutor and WorkflowExecutor to eliminate
|
|
5
|
+
* duplicated switch blocks that had already begun to diverge
|
|
6
|
+
* (Math.round applied in WorkflowExecutor but not CommandExecutor).
|
|
7
|
+
*
|
|
8
|
+
* Both callers now get consistent behavior: weighted_average and
|
|
9
|
+
* average are rounded to the nearest integer.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Aggregate scores using the specified method.
|
|
13
|
+
*
|
|
14
|
+
* @param items - Scored items with keys for weight lookup
|
|
15
|
+
* @param method - Aggregation method (defaults to 'average')
|
|
16
|
+
* @param weights - Weight map keyed by item key (defaults to equal weight of 1)
|
|
17
|
+
* @returns Aggregated score, rounded for average/weighted_average
|
|
18
|
+
*/
|
|
19
|
+
export function aggregateScores(items, method = 'average', weights = {}) {
|
|
20
|
+
if (items.length === 0)
|
|
21
|
+
return 0;
|
|
22
|
+
const scores = items.map(i => i.score);
|
|
23
|
+
switch (method) {
|
|
24
|
+
case 'min':
|
|
25
|
+
return Math.min(...scores);
|
|
26
|
+
case 'max':
|
|
27
|
+
return Math.max(...scores);
|
|
28
|
+
case 'sum':
|
|
29
|
+
return scores.reduce((a, b) => a + b, 0);
|
|
30
|
+
case 'weighted_average': {
|
|
31
|
+
let totalWeight = 0;
|
|
32
|
+
let weightedSum = 0;
|
|
33
|
+
for (const item of items) {
|
|
34
|
+
const w = weights[item.key] ?? 1;
|
|
35
|
+
totalWeight += w;
|
|
36
|
+
weightedSum += item.score * w;
|
|
37
|
+
}
|
|
38
|
+
return totalWeight > 0 ? Math.round(weightedSum / totalWeight) : 0;
|
|
39
|
+
}
|
|
40
|
+
case 'average':
|
|
41
|
+
default:
|
|
42
|
+
return Math.round(scores.reduce((a, b) => a + b, 0) / scores.length);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=aggregateScores.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregateScores.js","sourceRoot":"","sources":["../../src/utils/aggregateScores.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAmB,EACnB,SAAiB,SAAS,EAC1B,UAAkC,EAAE;IAEpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEjC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAEvC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,KAAK;YACR,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QAC7B,KAAK,KAAK;YACR,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QAC7B,KAAK,KAAK;YACR,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,IAAI,WAAW,GAAG,CAAC,CAAC;YACpB,IAAI,WAAW,GAAG,CAAC,CAAC;YACpB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACjC,WAAW,IAAI,CAAC,CAAC;gBACjB,WAAW,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YAChC,CAAC;YACD,OAAO,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;QACD,KAAK,SAAS,CAAC;QACf;YACE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACzE,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseRef.d.ts","sourceRoot":"","sources":["../../src/utils/parseRef.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"parseRef.d.ts","sourceRoot":"","sources":["../../src/utils/parseRef.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC,CAMjF"}
|
package/dist/utils/parseRef.js
CHANGED
|
@@ -11,6 +11,8 @@ export function parseRef(ref) {
|
|
|
11
11
|
const atIndex = ref.indexOf('@');
|
|
12
12
|
if (atIndex === -1)
|
|
13
13
|
return [ref, undefined];
|
|
14
|
-
|
|
14
|
+
const version = ref.slice(atIndex + 1) || undefined;
|
|
15
|
+
// 'latest' is a tag, not a semver version — treat as unversioned (resolve latest published)
|
|
16
|
+
return [ref.slice(0, atIndex), version === 'latest' ? undefined : version];
|
|
15
17
|
}
|
|
16
18
|
//# sourceMappingURL=parseRef.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseRef.js","sourceRoot":"","sources":["../../src/utils/parseRef.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,OAAO,KAAK,CAAC,CAAC;QAAE,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC5C,OAAO,
|
|
1
|
+
{"version":3,"file":"parseRef.js","sourceRoot":"","sources":["../../src/utils/parseRef.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,OAAO,KAAK,CAAC,CAAC;QAAE,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC;IACpD,4FAA4F;IAC5F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AAC7E,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"topoSort.d.ts","sourceRoot":"","sources":["../../src/utils/topoSort.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"topoSort.d.ts","sourceRoot":"","sources":["../../src/utils/topoSort.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,eAAe,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAuD7E"}
|
package/dist/utils/topoSort.js
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* have their dependencies satisfied by phases in earlier levels.
|
|
6
6
|
* Phases within the same level are independent and can run in parallel.
|
|
7
7
|
*/
|
|
8
|
+
import { ConfigurationError } from '../errors/index.js';
|
|
8
9
|
/**
|
|
9
10
|
* Group phases into topological execution levels.
|
|
10
11
|
*
|
|
@@ -26,7 +27,8 @@ export function topoGroupLevels(phases) {
|
|
|
26
27
|
for (const phase of phases) {
|
|
27
28
|
for (const dep of phase.depends_on ?? []) {
|
|
28
29
|
if (!phaseMap.has(dep)) {
|
|
29
|
-
throw new
|
|
30
|
+
throw new ConfigurationError(`Phase "${phase.id}" depends on "${dep}" which does not exist. ` +
|
|
31
|
+
`Available phases: ${[...phaseMap.keys()].join(', ')}`);
|
|
30
32
|
}
|
|
31
33
|
}
|
|
32
34
|
}
|
|
@@ -48,7 +50,8 @@ export function topoGroupLevels(phases) {
|
|
|
48
50
|
const remaining = phases
|
|
49
51
|
.filter(p => !placed.has(p.id))
|
|
50
52
|
.map(p => p.id);
|
|
51
|
-
throw new
|
|
53
|
+
throw new ConfigurationError(`Cycle detected in phase dependencies: ${remaining.join(', ')}. ` +
|
|
54
|
+
`Check depends_on fields for circular references.`);
|
|
52
55
|
}
|
|
53
56
|
for (const phase of level) {
|
|
54
57
|
placed.add(phase.id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"topoSort.js","sourceRoot":"","sources":["../../src/utils/topoSort.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"topoSort.js","sourceRoot":"","sources":["../../src/utils/topoSort.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAOxD;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAA4B,MAAW;IACpE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAa,CAAC;IACtC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,sDAAsD;IACtD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;YACzC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,IAAI,kBAAkB,CAC1B,UAAU,KAAK,CAAC,EAAE,iBAAiB,GAAG,0BAA0B;oBAChE,qBAAqB,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACvD,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAU,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IAEjC,OAAO,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,KAAK,GAAQ,EAAE,CAAC;QAEtB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBAAE,SAAS;YAEnC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;YACpC,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAE5D,IAAI,gBAAgB,EAAE,CAAC;gBACrB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,wCAAwC;YACxC,MAAM,SAAS,GAAG,MAAM;iBACrB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAClB,MAAM,IAAI,kBAAkB,CAC1B,yCAAyC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;gBACjE,kDAAkD,CACnD,CAAC;QACJ,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;YAC1B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -15,6 +15,7 @@ import type { RunSubmission, RunSubmissionResponse, RunHistoryEntry, ValidationQ
|
|
|
15
15
|
export declare class ValidationClient {
|
|
16
16
|
private config;
|
|
17
17
|
private ops;
|
|
18
|
+
private readonly analysisExtractor;
|
|
18
19
|
constructor(config: ResolvedConfig);
|
|
19
20
|
/**
|
|
20
21
|
* Submit execution results to validation service
|
|
@@ -39,10 +40,39 @@ export declare class ValidationClient {
|
|
|
39
40
|
* Get details for a specific run by ID
|
|
40
41
|
*/
|
|
41
42
|
getRun(runId: string): Promise<RunSubmissionResponse>;
|
|
43
|
+
/**
|
|
44
|
+
* Determine if a decision is positive using decisionCategory (agents) or raw string fallback.
|
|
45
|
+
* Resolves Aporia A3: cognitive lens agents with non-PASS positive decisions
|
|
46
|
+
* (EXAMINED, VITAL, FLOWING, etc.) now correctly report allGatesPassed: true.
|
|
47
|
+
*/
|
|
48
|
+
private isPositiveDecision;
|
|
42
49
|
/**
|
|
43
50
|
* Transform SDK RunSubmission to OpsClient SaveFeaturesListInput format
|
|
44
51
|
*/
|
|
45
52
|
private transformToOpsInput;
|
|
53
|
+
/**
|
|
54
|
+
* Check if a result is an AgentResult (type === 'agent').
|
|
55
|
+
*/
|
|
56
|
+
private isAgentResult;
|
|
57
|
+
/**
|
|
58
|
+
* Check if a result is a WorkflowResult with decomposable phases.
|
|
59
|
+
*/
|
|
60
|
+
private isWorkflowResult;
|
|
61
|
+
/**
|
|
62
|
+
* Extract individual agent entries from workflow phases.
|
|
63
|
+
* Each command result within a phase becomes its own agent entry.
|
|
64
|
+
*/
|
|
65
|
+
private extractWorkflowAgents;
|
|
66
|
+
/**
|
|
67
|
+
* Convert a single ExecutionResult or AgentResult into an agent tracker entry.
|
|
68
|
+
*/
|
|
69
|
+
private resultToAgent;
|
|
70
|
+
/**
|
|
71
|
+
* Convert a CommandResult into an agent tracker entry.
|
|
72
|
+
*/
|
|
73
|
+
private commandToAgent;
|
|
74
|
+
/** Extract token metrics into the tracker's expected shape. */
|
|
75
|
+
private extractTokens;
|
|
46
76
|
/**
|
|
47
77
|
* Create a local-only response when tracking is disabled
|
|
48
78
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ValidationClient.d.ts","sourceRoot":"","sources":["../../src/validation/ValidationClient.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"ValidationClient.d.ts","sourceRoot":"","sources":["../../src/validation/ValidationClient.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,uBAAuB,CAAC;AAC/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAG5H;;;;;;;;;GASG;AACH,qBAAa,gBAAgB;IAIf,OAAO,CAAC,MAAM;IAH1B,OAAO,CAAC,GAAG,CAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkC;gBAEhD,MAAM,EAAE,cAAc;IAQ1C;;OAEG;IACG,MAAM,CAAC,UAAU,EAAE,aAAa,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAwBvE;;;;OAIG;IACG,WAAW,CACf,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,eAAe,GAAG,WAAW,GACpC,OAAO,CAAC;QACT,WAAW,EAAE,OAAO,CAAC;QACrB,WAAW,EAAE,OAAO,CAAC;QACrB,YAAY,EAAE,OAAO,CAAC;QACtB,gBAAgB,EAAE,MAAM,EAAE,CAAC;KAC5B,CAAC;IAYF;;OAEG;IACG,UAAU,CACd,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,IAAI,CAAC,sBAAsB,EAAE,SAAS,CAAC,GAChD,OAAO,CAAC,eAAe,EAAE,CAAC;IAuB7B;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAkB3D;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAO1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwD3B;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAkB7B;;OAEG;IACH,OAAO,CAAC,aAAa;IAcrB;;OAEG;IACH,OAAO,CAAC,cAAc;IActB,+DAA+D;IAC/D,OAAO,CAAC,aAAa;IAWrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAgB5B"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { OpsClient } from '@uluops/ops-sdk';
|
|
2
|
+
import { AnalysisSummaryExtractor } from '../analysis/AnalysisSummaryExtractor.js';
|
|
2
3
|
/**
|
|
3
4
|
* Thin wrapper around @uluops/ops-sdk for execution result submission.
|
|
4
5
|
*
|
|
@@ -12,6 +13,7 @@ import { OpsClient } from '@uluops/ops-sdk';
|
|
|
12
13
|
export class ValidationClient {
|
|
13
14
|
config;
|
|
14
15
|
ops;
|
|
16
|
+
analysisExtractor = new AnalysisSummaryExtractor();
|
|
15
17
|
constructor(config) {
|
|
16
18
|
this.config = config;
|
|
17
19
|
this.ops = new OpsClient({
|
|
@@ -102,36 +104,45 @@ export class ValidationClient {
|
|
|
102
104
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
103
105
|
// Private Methods
|
|
104
106
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
107
|
+
/**
|
|
108
|
+
* Determine if a decision is positive using decisionCategory (agents) or raw string fallback.
|
|
109
|
+
* Resolves Aporia A3: cognitive lens agents with non-PASS positive decisions
|
|
110
|
+
* (EXAMINED, VITAL, FLOWING, etc.) now correctly report allGatesPassed: true.
|
|
111
|
+
*/
|
|
112
|
+
isPositiveDecision(result) {
|
|
113
|
+
if ('decisionCategory' in result && result.decisionCategory) {
|
|
114
|
+
return result.decisionCategory === 'positive';
|
|
115
|
+
}
|
|
116
|
+
return result.decision === 'PASS' || result.decision === 'SHIP';
|
|
117
|
+
}
|
|
105
118
|
/**
|
|
106
119
|
* Transform SDK RunSubmission to OpsClient SaveFeaturesListInput format
|
|
107
120
|
*/
|
|
108
121
|
transformToOpsInput(submission) {
|
|
109
122
|
const { result } = submission;
|
|
123
|
+
// Workflow/pipeline results: decompose phases into per-agent entries
|
|
124
|
+
const agents = this.isWorkflowResult(result)
|
|
125
|
+
? this.extractWorkflowAgents(result)
|
|
126
|
+
: [this.resultToAgent(result)];
|
|
127
|
+
// Extract analysis summary and records when definition is available and result is an agent
|
|
128
|
+
let analysisSummary;
|
|
129
|
+
let analysisRecords;
|
|
130
|
+
if (submission.resolvedDefinition && this.isAgentResult(result)) {
|
|
131
|
+
const analysis = this.analysisExtractor.extract(result, submission.resolvedDefinition);
|
|
132
|
+
analysisSummary = analysis.summary;
|
|
133
|
+
analysisRecords = analysis.records.length > 0 ? analysis.records : undefined;
|
|
134
|
+
}
|
|
110
135
|
return {
|
|
111
136
|
project: submission.project,
|
|
112
137
|
workflowType: submission.workflowType,
|
|
113
138
|
idempotencyKey: submission.idempotencyKey,
|
|
114
|
-
agents
|
|
115
|
-
name: result.name,
|
|
116
|
-
score: result.score ?? 0,
|
|
117
|
-
maxScore: 100,
|
|
118
|
-
decision: result.decision,
|
|
119
|
-
model: result.metrics.model,
|
|
120
|
-
tokens: {
|
|
121
|
-
inputTokens: result.metrics.inputTokens,
|
|
122
|
-
outputTokens: result.metrics.outputTokens,
|
|
123
|
-
cacheCreationTokens: result.metrics.cacheCreationTokens,
|
|
124
|
-
cacheReadTokens: result.metrics.cacheReadTokens,
|
|
125
|
-
totalEffectiveTokens: result.metrics.totalEffectiveTokens,
|
|
126
|
-
},
|
|
127
|
-
durationMs: result.metrics.durationMs,
|
|
128
|
-
}],
|
|
139
|
+
agents,
|
|
129
140
|
recommendations: result.recommendations.map(r => ({
|
|
130
141
|
agent: r.agent ?? 'unknown',
|
|
131
142
|
title: r.title,
|
|
132
143
|
priority: r.priority,
|
|
133
144
|
severity: r.severity,
|
|
134
|
-
failureCode: r.failureCode,
|
|
145
|
+
failureCode: r.failureCode && /^(STR|SEM|PRA|EPI)-[A-Z]{3}\/[CHMLI]$/.test(r.failureCode) ? r.failureCode : undefined,
|
|
135
146
|
failureDomain: r.failureDomain,
|
|
136
147
|
failureMode: r.failureMode,
|
|
137
148
|
category: r.category,
|
|
@@ -146,13 +157,90 @@ export class ValidationClient {
|
|
|
146
157
|
timestamp: new Date().toISOString(),
|
|
147
158
|
rawMarkdown: submission.rawMarkdown,
|
|
148
159
|
summary: {
|
|
149
|
-
allGatesPassed:
|
|
160
|
+
allGatesPassed: this.isPositiveDecision(result),
|
|
150
161
|
averageScore: result.score ?? 0,
|
|
151
162
|
},
|
|
152
163
|
definitionType: result.type,
|
|
153
164
|
definitionName: result.name,
|
|
154
165
|
definitionVersion: result.version !== 'unknown' ? result.version : undefined,
|
|
155
166
|
definitionHash: result.definitionHash?.replace(/^sha256:/, ''),
|
|
167
|
+
definitionMinSubscription: result.minSubscription,
|
|
168
|
+
analysisSummary,
|
|
169
|
+
analysisRecords,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Check if a result is an AgentResult (type === 'agent').
|
|
174
|
+
*/
|
|
175
|
+
isAgentResult(result) {
|
|
176
|
+
return result.type === 'agent';
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Check if a result is a WorkflowResult with decomposable phases.
|
|
180
|
+
*/
|
|
181
|
+
isWorkflowResult(result) {
|
|
182
|
+
return result.type === 'workflow' && 'phases' in result && Array.isArray(result.phases);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Extract individual agent entries from workflow phases.
|
|
186
|
+
* Each command result within a phase becomes its own agent entry.
|
|
187
|
+
*/
|
|
188
|
+
extractWorkflowAgents(result) {
|
|
189
|
+
const agents = [];
|
|
190
|
+
for (const phase of result.phases) {
|
|
191
|
+
if (phase.decision === 'skipped' || phase.decision === 'aborted')
|
|
192
|
+
continue;
|
|
193
|
+
for (const cmd of phase.commands) {
|
|
194
|
+
agents.push(this.commandToAgent(cmd));
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// Fallback: if no agents were extracted (all phases skipped), create a single entry
|
|
198
|
+
if (agents.length === 0) {
|
|
199
|
+
agents.push(this.resultToAgent(result));
|
|
200
|
+
}
|
|
201
|
+
return agents;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Convert a single ExecutionResult or AgentResult into an agent tracker entry.
|
|
205
|
+
*/
|
|
206
|
+
resultToAgent(result) {
|
|
207
|
+
return {
|
|
208
|
+
name: result.name,
|
|
209
|
+
definitionVersion: result.version !== 'unknown' ? result.version : undefined,
|
|
210
|
+
score: result.score ?? 0,
|
|
211
|
+
maxScore: 100,
|
|
212
|
+
decision: result.decision,
|
|
213
|
+
summary: 'summary' in result ? result.summary : undefined,
|
|
214
|
+
model: result.metrics.model,
|
|
215
|
+
tokens: this.extractTokens(result.metrics),
|
|
216
|
+
durationMs: result.metrics.durationMs,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Convert a CommandResult into an agent tracker entry.
|
|
221
|
+
*/
|
|
222
|
+
commandToAgent(cmd) {
|
|
223
|
+
return {
|
|
224
|
+
name: cmd.name,
|
|
225
|
+
definitionVersion: cmd.version !== 'unknown' ? cmd.version : undefined,
|
|
226
|
+
score: cmd.score ?? 0,
|
|
227
|
+
maxScore: cmd.maxScore ?? 100,
|
|
228
|
+
decision: cmd.decision,
|
|
229
|
+
summary: undefined,
|
|
230
|
+
model: cmd.metrics.model,
|
|
231
|
+
tokens: this.extractTokens(cmd.metrics),
|
|
232
|
+
durationMs: cmd.metrics.durationMs,
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
/** Extract token metrics into the tracker's expected shape. */
|
|
236
|
+
extractTokens(metrics) {
|
|
237
|
+
return {
|
|
238
|
+
inputTokens: metrics.inputTokens,
|
|
239
|
+
outputTokens: metrics.outputTokens,
|
|
240
|
+
cacheCreationTokens: metrics.cacheCreationTokens,
|
|
241
|
+
cacheReadTokens: metrics.cacheReadTokens,
|
|
242
|
+
thinkingTokens: metrics.thinkingTokens,
|
|
243
|
+
totalEffectiveTokens: metrics.totalEffectiveTokens,
|
|
156
244
|
};
|
|
157
245
|
}
|
|
158
246
|
/**
|
|
@@ -164,7 +252,7 @@ export class ValidationClient {
|
|
|
164
252
|
runNumber: 0,
|
|
165
253
|
projectId: 'local',
|
|
166
254
|
dashboardUrl: '',
|
|
167
|
-
allGatesPassed:
|
|
255
|
+
allGatesPassed: this.isPositiveDecision(submission.result),
|
|
168
256
|
averageScore: submission.result.score ?? 0,
|
|
169
257
|
correlation: {
|
|
170
258
|
newIssues: submission.result.recommendations.length,
|