@uluops/core 0.22.0 → 0.22.1

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 (65) hide show
  1. package/README.md +56 -9
  2. package/dist/ai/AIProvider.d.ts +12 -0
  3. package/dist/ai/AIProvider.d.ts.map +1 -1
  4. package/dist/ai/AIProvider.js +12 -0
  5. package/dist/ai/AIProvider.js.map +1 -1
  6. package/dist/ai/ModelCatalog.d.ts +10 -2
  7. package/dist/ai/ModelCatalog.d.ts.map +1 -1
  8. package/dist/ai/ModelCatalog.js +10 -2
  9. package/dist/ai/ModelCatalog.js.map +1 -1
  10. package/dist/ai/TokenBudgetTracker.d.ts +6 -2
  11. package/dist/ai/TokenBudgetTracker.d.ts.map +1 -1
  12. package/dist/ai/TokenBudgetTracker.js +6 -2
  13. package/dist/ai/TokenBudgetTracker.js.map +1 -1
  14. package/dist/client/UluOpsClient.d.ts +105 -6
  15. package/dist/client/UluOpsClient.d.ts.map +1 -1
  16. package/dist/client/UluOpsClient.js +107 -8
  17. package/dist/client/UluOpsClient.js.map +1 -1
  18. package/dist/constants.d.ts +2 -2
  19. package/dist/constants.d.ts.map +1 -1
  20. package/dist/constants.js +2 -2
  21. package/dist/constants.js.map +1 -1
  22. package/dist/executor/CommandExecutor.d.ts +12 -1
  23. package/dist/executor/CommandExecutor.d.ts.map +1 -1
  24. package/dist/executor/CommandExecutor.js +13 -2
  25. package/dist/executor/CommandExecutor.js.map +1 -1
  26. package/dist/executor/PipelineExecutor.d.ts +20 -2
  27. package/dist/executor/PipelineExecutor.d.ts.map +1 -1
  28. package/dist/executor/PipelineExecutor.js +20 -2
  29. package/dist/executor/PipelineExecutor.js.map +1 -1
  30. package/dist/executor/WorkflowExecutor.d.ts +3 -0
  31. package/dist/executor/WorkflowExecutor.d.ts.map +1 -1
  32. package/dist/executor/WorkflowExecutor.js +3 -0
  33. package/dist/executor/WorkflowExecutor.js.map +1 -1
  34. package/dist/executor/classifyDecision.d.ts +23 -0
  35. package/dist/executor/classifyDecision.d.ts.map +1 -1
  36. package/dist/executor/classifyDecision.js +23 -0
  37. package/dist/executor/classifyDecision.js.map +1 -1
  38. package/dist/index.d.ts +2 -2
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js.map +1 -1
  41. package/dist/parser/OutputExtractor.d.ts +32 -2
  42. package/dist/parser/OutputExtractor.d.ts.map +1 -1
  43. package/dist/parser/OutputExtractor.js +32 -2
  44. package/dist/parser/OutputExtractor.js.map +1 -1
  45. package/dist/registry/RegistryClient.d.ts +33 -3
  46. package/dist/registry/RegistryClient.d.ts.map +1 -1
  47. package/dist/registry/RegistryClient.js +60 -6
  48. package/dist/registry/RegistryClient.js.map +1 -1
  49. package/dist/submission/SubmissionClient.d.ts +42 -4
  50. package/dist/submission/SubmissionClient.d.ts.map +1 -1
  51. package/dist/submission/SubmissionClient.js +51 -9
  52. package/dist/submission/SubmissionClient.js.map +1 -1
  53. package/dist/types/agent.d.ts +48 -0
  54. package/dist/types/agent.d.ts.map +1 -1
  55. package/dist/types/index.d.ts +2 -2
  56. package/dist/types/index.d.ts.map +1 -1
  57. package/package.json +2 -2
  58. package/dist/types/validation.d.ts +0 -116
  59. package/dist/types/validation.d.ts.map +0 -1
  60. package/dist/types/validation.js +0 -2
  61. package/dist/types/validation.js.map +0 -1
  62. package/dist/validation/ValidationClient.d.ts +0 -81
  63. package/dist/validation/ValidationClient.d.ts.map +0 -1
  64. package/dist/validation/ValidationClient.js +0 -266
  65. package/dist/validation/ValidationClient.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uluops/core",
3
- "version": "0.22.0",
3
+ "version": "0.22.1",
4
4
  "description": "The foundational execution engine for UluOps. Orchestrates AI-powered code analysis through a 4-layer execution hierarchy (Agent > Command > Workflow > Pipeline), manages LLM tool loops via Vercel AI SDK, and integrates with UluOps Registry and Validation services.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -53,7 +53,7 @@
53
53
  "@ai-sdk/google": "3.0.31",
54
54
  "@ai-sdk/openai": "3.0.33",
55
55
  "@uluops/ops-sdk": "3.1.0",
56
- "@uluops/registry-sdk": "0.32.1",
56
+ "@uluops/registry-sdk": "0.34.0",
57
57
  "@uluops/sdk-core": "0.12.0",
58
58
  "ai": "6.0.77",
59
59
  "glob": "11.1.0",
@@ -1,116 +0,0 @@
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 Validation 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 validation gates passed */
38
- allGatesPassed: boolean;
39
- /** Average score across validators */
40
- averageScore: number;
41
- /** Issue correlation counts from validation 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 validation 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 validation service run history
76
- */
77
- export interface ValidationQueryOptions {
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 Validation 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 validation 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=validation.d.ts.map
@@ -1 +0,0 @@
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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=validation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/types/validation.ts"],"names":[],"mappings":""}
@@ -1,81 +0,0 @@
1
- import type { ResolvedConfig } from '../types/config.js';
2
- import type { ExecutionResult } from '../types/execution.js';
3
- import type { AgentResult } from '../types/agent.js';
4
- import type { RunSubmission, RunSubmissionResponse, RunHistoryEntry, ValidationQueryOptions } from '../types/validation.js';
5
- /**
6
- * Thin wrapper around @uluops/ops-sdk for execution result submission.
7
- *
8
- * Delegates all API operations to OpsClient (which handles retry,
9
- * rate limiting, error mapping, auth). This class transforms
10
- * SDK ExecutionResult objects into the format expected by OpsClient.
11
- *
12
- * For full issue management, analytics, and taxonomy operations,
13
- * use `@uluops/ops-sdk` directly.
14
- */
15
- export declare class ValidationClient {
16
- private config;
17
- private ops;
18
- private readonly analysisExtractor;
19
- constructor(config: ResolvedConfig);
20
- /**
21
- * Submit execution results to validation service
22
- */
23
- submit(submission: RunSubmission): Promise<RunSubmissionResponse>;
24
- /**
25
- * Preview what a submission would do without saving (dry run).
26
- *
27
- * Accepts individual parameters matching the public UluOpsClient API.
28
- */
29
- validateRun(project: string, workflowType: string, result: ExecutionResult | AgentResult): Promise<{
30
- wouldCreate: boolean;
31
- wouldUpdate: boolean;
32
- wouldRegress: boolean;
33
- validationErrors: string[];
34
- }>;
35
- /**
36
- * Get run history for a project
37
- */
38
- getHistory(project: string, options?: Omit<ValidationQueryOptions, 'project'>): Promise<RunHistoryEntry[]>;
39
- /**
40
- * Get details for a specific run by ID
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;
49
- /**
50
- * Transform SDK RunSubmission to OpsClient SaveFeaturesListInput format
51
- */
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;
76
- /**
77
- * Create a local-only response when tracking is disabled
78
- */
79
- private createLocalResponse;
80
- }
81
- //# sourceMappingURL=ValidationClient.d.ts.map
@@ -1 +0,0 @@
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,266 +0,0 @@
1
- import { OpsClient } from '@uluops/ops-sdk';
2
- import { AnalysisSummaryExtractor } from '../analysis/AnalysisSummaryExtractor.js';
3
- /**
4
- * Thin wrapper around @uluops/ops-sdk for execution result submission.
5
- *
6
- * Delegates all API operations to OpsClient (which handles retry,
7
- * rate limiting, error mapping, auth). This class transforms
8
- * SDK ExecutionResult objects into the format expected by OpsClient.
9
- *
10
- * For full issue management, analytics, and taxonomy operations,
11
- * use `@uluops/ops-sdk` directly.
12
- */
13
- export class ValidationClient {
14
- config;
15
- ops;
16
- analysisExtractor = new AnalysisSummaryExtractor();
17
- constructor(config) {
18
- this.config = config;
19
- this.ops = new OpsClient({
20
- apiKey: config.apiKey,
21
- baseUrl: config.validationUrl,
22
- timeout: config.timeout,
23
- });
24
- }
25
- /**
26
- * Submit execution results to validation service
27
- */
28
- async submit(submission) {
29
- if (!this.config.trackingEnabled) {
30
- return this.createLocalResponse(submission);
31
- }
32
- const input = this.transformToOpsInput(submission);
33
- const response = await this.ops.runs.save(input);
34
- return {
35
- runId: response.run.id,
36
- runNumber: response.run.runNumber,
37
- projectId: response.run.projectId,
38
- dashboardUrl: `${this.config.dashboardUrl}/runs/${response.run.id}`,
39
- allGatesPassed: response.run.allGatesPassed,
40
- averageScore: response.run.averageScore ?? 0,
41
- correlation: {
42
- newIssues: response.correlation?.newIssues ?? 0,
43
- recurringIssues: response.correlation?.recurringIssues ?? 0,
44
- regressions: response.correlation?.regressions ?? 0,
45
- },
46
- deduplicated: response.deduplicated,
47
- };
48
- }
49
- /**
50
- * Preview what a submission would do without saving (dry run).
51
- *
52
- * Accepts individual parameters matching the public UluOpsClient API.
53
- */
54
- async validateRun(project, workflowType, result) {
55
- const input = this.transformToOpsInput({ project, workflowType, result });
56
- const response = await this.ops.runs.validate(input);
57
- return {
58
- wouldCreate: Boolean(response.wouldCreate),
59
- wouldUpdate: Boolean(response.wouldUpdate),
60
- wouldRegress: Boolean(response.wouldRegress),
61
- validationErrors: response.validationErrors,
62
- };
63
- }
64
- /**
65
- * Get run history for a project
66
- */
67
- async getHistory(project, options) {
68
- const runs = await this.ops.runs.listByProject(project, {
69
- workflowType: options?.workflowType,
70
- limit: options?.limit,
71
- });
72
- return runs.map(r => ({
73
- id: r.id,
74
- projectId: r.projectId,
75
- runNumber: r.runNumber,
76
- workflowType: r.workflowType,
77
- timestamp: r.timestamp,
78
- allGatesPassed: r.allGatesPassed,
79
- averageScore: r.averageScore ?? 0,
80
- rawMarkdown: r.rawMarkdown ?? undefined,
81
- archivedAt: r.archivedAt ?? undefined,
82
- archiveReason: r.archiveReason ?? undefined,
83
- idempotencyKey: r.idempotencyKey,
84
- createdAt: r.createdAt,
85
- updatedAt: r.updatedAt ?? r.createdAt,
86
- }));
87
- }
88
- /**
89
- * Get details for a specific run by ID
90
- */
91
- async getRun(runId) {
92
- const run = await this.ops.runs.get(runId);
93
- return {
94
- runId: run.id,
95
- runNumber: run.runNumber,
96
- projectId: run.projectId,
97
- dashboardUrl: `${this.config.dashboardUrl}/runs/${run.id}`,
98
- allGatesPassed: run.allGatesPassed,
99
- averageScore: run.averageScore ?? 0,
100
- correlation: { newIssues: 0, recurringIssues: 0, regressions: 0 },
101
- deduplicated: false,
102
- };
103
- }
104
- // ─────────────────────────────────────────────────────────────────────────────
105
- // Private Methods
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
- }
118
- /**
119
- * Transform SDK RunSubmission to OpsClient SaveFeaturesListInput format
120
- */
121
- transformToOpsInput(submission) {
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
- }
135
- return {
136
- project: submission.project,
137
- workflowType: submission.workflowType,
138
- idempotencyKey: submission.idempotencyKey,
139
- agents,
140
- recommendations: result.recommendations.map(r => ({
141
- agent: r.agent ?? 'unknown',
142
- title: r.title,
143
- priority: r.priority,
144
- severity: r.severity,
145
- failureCode: r.failureCode && /^(STR|SEM|PRA|EPI)-[A-Z]{3}\/[CHMLI]$/.test(r.failureCode) ? r.failureCode : undefined,
146
- failureDomain: r.failureDomain,
147
- failureMode: r.failureMode,
148
- category: r.category,
149
- filePath: r.filePath,
150
- lineNumber: r.lineNumber,
151
- description: r.description,
152
- classificationConfidence: r.classificationConfidence,
153
- classifiedBy: r.classifiedBy,
154
- secondaryFailureCodes: r.secondaryFailureCodes,
155
- taxonomyVersion: r.taxonomyVersion,
156
- })),
157
- timestamp: new Date().toISOString(),
158
- rawMarkdown: submission.rawMarkdown,
159
- summary: {
160
- allGatesPassed: this.isPositiveDecision(result),
161
- averageScore: result.score ?? 0,
162
- },
163
- definitionType: result.type,
164
- definitionName: result.name,
165
- definitionVersion: result.version !== 'unknown' ? result.version : undefined,
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,
244
- };
245
- }
246
- /**
247
- * Create a local-only response when tracking is disabled
248
- */
249
- createLocalResponse(submission) {
250
- return {
251
- runId: 'local',
252
- runNumber: 0,
253
- projectId: 'local',
254
- dashboardUrl: '',
255
- allGatesPassed: this.isPositiveDecision(submission.result),
256
- averageScore: submission.result.score ?? 0,
257
- correlation: {
258
- newIssues: submission.result.recommendations.length,
259
- recurringIssues: 0,
260
- regressions: 0,
261
- },
262
- deduplicated: false,
263
- };
264
- }
265
- }
266
- //# sourceMappingURL=ValidationClient.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ValidationClient.js","sourceRoot":"","sources":["../../src/validation/ValidationClient.ts"],"names":[],"mappings":"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"}