@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
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import type { AnalysisSummaryInput, AnalysisRecordInput } from '@uluops/ops-sdk';
|
|
2
|
+
import type { AgentResult } from '../types/agent.js';
|
|
3
|
+
import type { ResolvedDefinition } from '../types/registry.js';
|
|
4
|
+
/**
|
|
5
|
+
* Result of analysis extraction from an agent execution.
|
|
6
|
+
*/
|
|
7
|
+
export interface AnalysisExtractionResult {
|
|
8
|
+
summary: AnalysisSummaryInput;
|
|
9
|
+
records: AnalysisRecordInput[];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Extracts analysis summary and records from AgentResult + ResolvedDefinition.
|
|
13
|
+
*
|
|
14
|
+
* Two data sources are merged with precedence:
|
|
15
|
+
*
|
|
16
|
+
* 1. **Agent analysis block** (from rawOutput JSON code fence) — domain-specific
|
|
17
|
+
* metrics, typed records with meaningful IDs, agent-specific epistemic
|
|
18
|
+
* assessment. This is what the MCP autosave hook has always captured.
|
|
19
|
+
*
|
|
20
|
+
* 2. **Structured output fields** (from rawJson via agentOutputSchema) —
|
|
21
|
+
* explorationMaps, epistemicAssessment, auditImplications added in v0.10.0.
|
|
22
|
+
* Used as fallback when the analysis block doesn't have them.
|
|
23
|
+
*
|
|
24
|
+
* 3. **Execution envelope** (from AgentResult.metrics) — tokens, duration,
|
|
25
|
+
* model. Always included in systemMetrics alongside domain metrics.
|
|
26
|
+
*/
|
|
27
|
+
export declare class AnalysisSummaryExtractor {
|
|
28
|
+
extract(result: AgentResult, resolved: ResolvedDefinition): AnalysisExtractionResult;
|
|
29
|
+
private buildSummary;
|
|
30
|
+
/**
|
|
31
|
+
* Parse the JSON code fence from the agent's markdown report.
|
|
32
|
+
* Agents produce a ```json block containing { agent, result, categories, analysis }.
|
|
33
|
+
* The `analysis` key holds domain-specific metrics, records, and assessments.
|
|
34
|
+
*/
|
|
35
|
+
private parseAnalysisBlock;
|
|
36
|
+
/**
|
|
37
|
+
* Build decision vocabulary string from definition.
|
|
38
|
+
* Format: "POSITIVE/CONDITIONAL/NEGATIVE" or "COMPLETE/PARTIAL/FAILED" for executors.
|
|
39
|
+
*/
|
|
40
|
+
private buildDecisionVocabulary;
|
|
41
|
+
/**
|
|
42
|
+
* Map result categories to CategoryScore[] using definition weights.
|
|
43
|
+
* Preserves raw score/maxScore ratio rather than normalizing to percentage.
|
|
44
|
+
*/
|
|
45
|
+
private buildCategoryScores;
|
|
46
|
+
/**
|
|
47
|
+
* Build system metrics by merging domain metrics with execution metrics.
|
|
48
|
+
*
|
|
49
|
+
* Priority: analysis block system_metrics > structured output domainMetrics > execution metrics only.
|
|
50
|
+
* Domain metrics (e.g., "Promising: 3", "Candidates Identified: 5") are what the
|
|
51
|
+
* dashboard displays. Execution metrics (tokens, duration, model) always included.
|
|
52
|
+
*/
|
|
53
|
+
private buildSystemMetrics;
|
|
54
|
+
/**
|
|
55
|
+
* Extract domain metrics from structured output's domainMetrics array.
|
|
56
|
+
* Converts [{key, value}] entries to a flat Record<string, unknown>.
|
|
57
|
+
*/
|
|
58
|
+
private extractDomainMetrics;
|
|
59
|
+
/**
|
|
60
|
+
* Resolve epistemic assessment: prefer analysis block (agent-specific),
|
|
61
|
+
* fall back to structured output (generic schema).
|
|
62
|
+
*/
|
|
63
|
+
private resolveEpistemicAssessment;
|
|
64
|
+
/**
|
|
65
|
+
* Resolve audit implications: prefer analysis block, fall back to structured output.
|
|
66
|
+
*/
|
|
67
|
+
private resolveAuditImplications;
|
|
68
|
+
/**
|
|
69
|
+
* Extract exploration maps from rawJson, reshaping LLM output to API format.
|
|
70
|
+
*
|
|
71
|
+
* The LLM produces sections with {type, label, summary, entries: [{key, value}]}
|
|
72
|
+
* (OpenAI strict mode compatible). The API expects per-type fields like
|
|
73
|
+
* {type: 'inventory', items: [...]}. This method bridges the two formats.
|
|
74
|
+
*/
|
|
75
|
+
private extractExplorationMaps;
|
|
76
|
+
/**
|
|
77
|
+
* Reshape a section from LLM format (entries) to API format (typed fields).
|
|
78
|
+
* If the section already has typed fields (e.g., items, entities), pass through.
|
|
79
|
+
*/
|
|
80
|
+
private reshapeSection;
|
|
81
|
+
/**
|
|
82
|
+
* Build analysis records with 4-tier precedence:
|
|
83
|
+
* 1. Analysis block records (from JSON code fence — richest: typed, meaningful IDs)
|
|
84
|
+
* 2. Structured output analysisRecords (from agentOutputSchema — typed, meaningful IDs)
|
|
85
|
+
* 3. Derived from exploration maps (inventory items, agenda questions, etc.)
|
|
86
|
+
* 4. Auto-generated from recommendations (fallback — evidence_finding, hash IDs)
|
|
87
|
+
*/
|
|
88
|
+
private buildAnalysisRecords;
|
|
89
|
+
/**
|
|
90
|
+
* Extract analysis records from structured output's analysisRecords array.
|
|
91
|
+
* Converts entries-based data [{key, value}] to the API's Record<string, unknown> format.
|
|
92
|
+
*/
|
|
93
|
+
private extractStructuredRecords;
|
|
94
|
+
/**
|
|
95
|
+
* Derive analysis records from exploration map sections.
|
|
96
|
+
*
|
|
97
|
+
* Maps section types to record types:
|
|
98
|
+
* - inventory items → record type from section label context
|
|
99
|
+
* - agenda questions → inquiry_question
|
|
100
|
+
* - limitation blind spots → limitation
|
|
101
|
+
* - synthesis patterns → evidence_finding
|
|
102
|
+
* - mapping translations → evidence_finding
|
|
103
|
+
* - topology entities → evidence_finding
|
|
104
|
+
*
|
|
105
|
+
* Capped at 100 records to avoid overwhelming the tracker.
|
|
106
|
+
*/
|
|
107
|
+
private deriveRecordsFromExplorationMaps;
|
|
108
|
+
/**
|
|
109
|
+
* Get the list of items from a section based on its type.
|
|
110
|
+
* Handles both entries-based format and typed field format.
|
|
111
|
+
*/
|
|
112
|
+
private getSectionItems;
|
|
113
|
+
/**
|
|
114
|
+
* Section type → record type + ID prefix.
|
|
115
|
+
* Record types must match the API's AnalysisRecordType enum.
|
|
116
|
+
*/
|
|
117
|
+
private static readonly SECTION_TYPE_CONFIG;
|
|
118
|
+
private static readonly DEFAULT_SECTION_CONFIG;
|
|
119
|
+
private sectionTypeToRecordType;
|
|
120
|
+
private sectionTypeToPrefix;
|
|
121
|
+
/**
|
|
122
|
+
* Extract a field from rawJson, trying camelCase then snake_case.
|
|
123
|
+
*/
|
|
124
|
+
private extractJsonField;
|
|
125
|
+
/**
|
|
126
|
+
* Get AgentDefinition from ResolvedDefinition, if available.
|
|
127
|
+
*/
|
|
128
|
+
private getAgentDefinition;
|
|
129
|
+
/**
|
|
130
|
+
* Produce a recordId that fits within the 20-char SDK limit.
|
|
131
|
+
* Uses failureCode if present and <=20 chars, otherwise hashes.
|
|
132
|
+
*/
|
|
133
|
+
private safeRecordId;
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=AnalysisSummaryExtractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AnalysisSummaryExtractor.d.ts","sourceRoot":"","sources":["../../src/analysis/AnalysisSummaryExtractor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAiC,MAAM,iBAAiB,CAAC;AAChH,OAAO,KAAK,EAAE,WAAW,EAAmB,MAAM,mBAAmB,CAAC;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,oBAAoB,CAAC;IAC9B,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC;AAeD;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,kBAAkB,GAAG,wBAAwB;IAWpF,OAAO,CAAC,YAAY;IAsBpB;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAmB1B;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAqB/B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAuB3B;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;IA8B1B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAkB5B;;;OAGG;IACH,OAAO,CAAC,0BAA0B;IAalC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAahC;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IAqB9B;;;OAGG;IACH,OAAO,CAAC,cAAc;IAmCtB;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IA+C5B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAwBhC;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,gCAAgC;IAuDxC;;;OAGG;IACH,OAAO,CAAC,eAAe;IAevB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CASzC;IAEF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAqD;IAEnG,OAAO,CAAC,uBAAuB;IAI/B,OAAO,CAAC,mBAAmB;IAM3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAS1B;;;OAGG;IACH,OAAO,CAAC,YAAY;CAIrB"}
|
|
@@ -0,0 +1,465 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
/**
|
|
3
|
+
* Extracts analysis summary and records from AgentResult + ResolvedDefinition.
|
|
4
|
+
*
|
|
5
|
+
* Two data sources are merged with precedence:
|
|
6
|
+
*
|
|
7
|
+
* 1. **Agent analysis block** (from rawOutput JSON code fence) — domain-specific
|
|
8
|
+
* metrics, typed records with meaningful IDs, agent-specific epistemic
|
|
9
|
+
* assessment. This is what the MCP autosave hook has always captured.
|
|
10
|
+
*
|
|
11
|
+
* 2. **Structured output fields** (from rawJson via agentOutputSchema) —
|
|
12
|
+
* explorationMaps, epistemicAssessment, auditImplications added in v0.10.0.
|
|
13
|
+
* Used as fallback when the analysis block doesn't have them.
|
|
14
|
+
*
|
|
15
|
+
* 3. **Execution envelope** (from AgentResult.metrics) — tokens, duration,
|
|
16
|
+
* model. Always included in systemMetrics alongside domain metrics.
|
|
17
|
+
*/
|
|
18
|
+
export class AnalysisSummaryExtractor {
|
|
19
|
+
extract(result, resolved) {
|
|
20
|
+
const analysisBlock = this.parseAnalysisBlock(result.rawOutput);
|
|
21
|
+
return {
|
|
22
|
+
summary: this.buildSummary(result, resolved, analysisBlock),
|
|
23
|
+
records: this.buildAnalysisRecords(result, analysisBlock),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
// ─── Summary ────────────────────────────────────────────────────────────
|
|
27
|
+
buildSummary(result, resolved, analysisBlock) {
|
|
28
|
+
const definition = this.getAgentDefinition(resolved);
|
|
29
|
+
return {
|
|
30
|
+
agentName: result.name,
|
|
31
|
+
decision: result.decision,
|
|
32
|
+
score: result.score,
|
|
33
|
+
decisionVocabulary: this.buildDecisionVocabulary(definition),
|
|
34
|
+
categoryScores: analysisBlock?.category_scores ?? this.buildCategoryScores(result, definition),
|
|
35
|
+
systemMetrics: this.buildSystemMetrics(result, analysisBlock),
|
|
36
|
+
epistemicAssessment: this.resolveEpistemicAssessment(analysisBlock, result.rawJson),
|
|
37
|
+
auditImplications: this.resolveAuditImplications(analysisBlock, result.rawJson),
|
|
38
|
+
explorationMaps: this.extractExplorationMaps(result.rawJson),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
// ─── Analysis Block Parsing ─────────────────────────────────────────────
|
|
42
|
+
/**
|
|
43
|
+
* Parse the JSON code fence from the agent's markdown report.
|
|
44
|
+
* Agents produce a ```json block containing { agent, result, categories, analysis }.
|
|
45
|
+
* The `analysis` key holds domain-specific metrics, records, and assessments.
|
|
46
|
+
*/
|
|
47
|
+
parseAnalysisBlock(rawOutput) {
|
|
48
|
+
if (!rawOutput)
|
|
49
|
+
return null;
|
|
50
|
+
const jsonMatch = rawOutput.match(/```json\n([\s\S]*?)```/);
|
|
51
|
+
if (!jsonMatch)
|
|
52
|
+
return null;
|
|
53
|
+
try {
|
|
54
|
+
// jsonMatch[1] is always defined when the regex matches (capture group 1)
|
|
55
|
+
const data = JSON.parse(jsonMatch[1]);
|
|
56
|
+
const analysis = data?.analysis;
|
|
57
|
+
if (!analysis || typeof analysis !== 'object')
|
|
58
|
+
return null;
|
|
59
|
+
return analysis;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// ─── Decision Vocabulary ────────────────────────────────────────────────
|
|
66
|
+
/**
|
|
67
|
+
* Build decision vocabulary string from definition.
|
|
68
|
+
* Format: "POSITIVE/CONDITIONAL/NEGATIVE" or "COMPLETE/PARTIAL/FAILED" for executors.
|
|
69
|
+
*/
|
|
70
|
+
buildDecisionVocabulary(definition) {
|
|
71
|
+
const agent = definition?.agent;
|
|
72
|
+
if (!agent)
|
|
73
|
+
return null;
|
|
74
|
+
const decisions = agent.decisions?.vocabulary;
|
|
75
|
+
if (decisions) {
|
|
76
|
+
const parts = [decisions.positive, decisions.conditional, decisions.negative].filter(Boolean);
|
|
77
|
+
return parts.length > 0 ? parts.join('/') : null;
|
|
78
|
+
}
|
|
79
|
+
const completion = agent.completion?.vocabulary;
|
|
80
|
+
if (completion) {
|
|
81
|
+
const parts = [completion.complete, completion.partial, completion.failed].filter(Boolean);
|
|
82
|
+
return parts.length > 0 ? parts.join('/') : null;
|
|
83
|
+
}
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
// ─── Category Scores ────────────────────────────────────────────────────
|
|
87
|
+
/**
|
|
88
|
+
* Map result categories to CategoryScore[] using definition weights.
|
|
89
|
+
* Preserves raw score/maxScore ratio rather than normalizing to percentage.
|
|
90
|
+
*/
|
|
91
|
+
buildCategoryScores(result, definition) {
|
|
92
|
+
if (!result.categories || result.categories.length === 0)
|
|
93
|
+
return null;
|
|
94
|
+
const definitionCategories = definition?.agent?.scoring?.categories;
|
|
95
|
+
const weightMap = new Map();
|
|
96
|
+
if (definitionCategories) {
|
|
97
|
+
for (const cat of definitionCategories) {
|
|
98
|
+
weightMap.set(cat.name, cat.weight);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
const equalWeight = definitionCategories ? undefined : Math.round(100 / result.categories.length);
|
|
102
|
+
return result.categories.map(cat => ({
|
|
103
|
+
name: cat.name,
|
|
104
|
+
weight: weightMap.get(cat.name) ?? equalWeight ?? 1,
|
|
105
|
+
score: cat.score,
|
|
106
|
+
}));
|
|
107
|
+
}
|
|
108
|
+
// ─── System Metrics ─────────────────────────────────────────────────────
|
|
109
|
+
/**
|
|
110
|
+
* Build system metrics by merging domain metrics with execution metrics.
|
|
111
|
+
*
|
|
112
|
+
* Priority: analysis block system_metrics > structured output domainMetrics > execution metrics only.
|
|
113
|
+
* Domain metrics (e.g., "Promising: 3", "Candidates Identified: 5") are what the
|
|
114
|
+
* dashboard displays. Execution metrics (tokens, duration, model) always included.
|
|
115
|
+
*/
|
|
116
|
+
buildSystemMetrics(result, analysisBlock) {
|
|
117
|
+
const executionMetrics = {
|
|
118
|
+
inputTokens: result.metrics.inputTokens,
|
|
119
|
+
outputTokens: result.metrics.outputTokens,
|
|
120
|
+
cacheCreationTokens: result.metrics.cacheCreationTokens,
|
|
121
|
+
cacheReadTokens: result.metrics.cacheReadTokens,
|
|
122
|
+
thinkingTokens: result.metrics.thinkingTokens,
|
|
123
|
+
totalEffectiveTokens: result.metrics.totalEffectiveTokens,
|
|
124
|
+
durationMs: result.metrics.durationMs,
|
|
125
|
+
model: result.metrics.model,
|
|
126
|
+
toolCallCount: result.metrics.toolCallCount,
|
|
127
|
+
costUsd: result.metrics.costUsd,
|
|
128
|
+
extractionConfidence: result.extractionConfidence,
|
|
129
|
+
extractionMethod: result.extractionMethod,
|
|
130
|
+
};
|
|
131
|
+
// Prefer analysis block domain metrics (from JSON code fence)
|
|
132
|
+
if (analysisBlock?.system_metrics && typeof analysisBlock.system_metrics === 'object') {
|
|
133
|
+
return { ...executionMetrics, ...analysisBlock.system_metrics };
|
|
134
|
+
}
|
|
135
|
+
// Fall back to structured output domainMetrics (from agentOutputSchema)
|
|
136
|
+
const domainMetrics = this.extractDomainMetrics(result.rawJson);
|
|
137
|
+
if (domainMetrics) {
|
|
138
|
+
return { ...executionMetrics, ...domainMetrics };
|
|
139
|
+
}
|
|
140
|
+
return executionMetrics;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Extract domain metrics from structured output's domainMetrics array.
|
|
144
|
+
* Converts [{key, value}] entries to a flat Record<string, unknown>.
|
|
145
|
+
*/
|
|
146
|
+
extractDomainMetrics(rawJson) {
|
|
147
|
+
const raw = this.extractJsonField(rawJson, 'domainMetrics', 'domain_metrics');
|
|
148
|
+
if (!Array.isArray(raw) || raw.length === 0)
|
|
149
|
+
return null;
|
|
150
|
+
const metrics = {};
|
|
151
|
+
for (const entry of raw) {
|
|
152
|
+
if (entry && typeof entry === 'object' && 'key' in entry && 'value' in entry) {
|
|
153
|
+
const { key, value } = entry;
|
|
154
|
+
// Parse numeric strings back to numbers
|
|
155
|
+
const num = Number(value);
|
|
156
|
+
metrics[key] = isNaN(num) ? value : num;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return Object.keys(metrics).length > 0 ? metrics : null;
|
|
160
|
+
}
|
|
161
|
+
// ─── Epistemic Assessment ───────────────────────────────────────────────
|
|
162
|
+
/**
|
|
163
|
+
* Resolve epistemic assessment: prefer analysis block (agent-specific),
|
|
164
|
+
* fall back to structured output (generic schema).
|
|
165
|
+
*/
|
|
166
|
+
resolveEpistemicAssessment(analysisBlock, rawJson) {
|
|
167
|
+
if (analysisBlock?.epistemic_assessment) {
|
|
168
|
+
return analysisBlock.epistemic_assessment;
|
|
169
|
+
}
|
|
170
|
+
const raw = this.extractJsonField(rawJson, 'epistemicAssessment', 'epistemic_assessment');
|
|
171
|
+
return raw && typeof raw === 'object' && !Array.isArray(raw) ? raw : null;
|
|
172
|
+
}
|
|
173
|
+
// ─── Audit Implications ─────────────────────────────────────────────────
|
|
174
|
+
/**
|
|
175
|
+
* Resolve audit implications: prefer analysis block, fall back to structured output.
|
|
176
|
+
*/
|
|
177
|
+
resolveAuditImplications(analysisBlock, rawJson) {
|
|
178
|
+
if (analysisBlock?.audit_implications && Array.isArray(analysisBlock.audit_implications)) {
|
|
179
|
+
return analysisBlock.audit_implications;
|
|
180
|
+
}
|
|
181
|
+
const raw = this.extractJsonField(rawJson, 'auditImplications', 'audit_implications');
|
|
182
|
+
return Array.isArray(raw) ? raw : null;
|
|
183
|
+
}
|
|
184
|
+
// ─── Exploration Maps ──────────────────────────────────────────────────
|
|
185
|
+
/**
|
|
186
|
+
* Extract exploration maps from rawJson, reshaping LLM output to API format.
|
|
187
|
+
*
|
|
188
|
+
* The LLM produces sections with {type, label, summary, entries: [{key, value}]}
|
|
189
|
+
* (OpenAI strict mode compatible). The API expects per-type fields like
|
|
190
|
+
* {type: 'inventory', items: [...]}. This method bridges the two formats.
|
|
191
|
+
*/
|
|
192
|
+
extractExplorationMaps(rawJson) {
|
|
193
|
+
const raw = this.extractJsonField(rawJson, 'explorationMaps', 'exploration_maps');
|
|
194
|
+
if (!Array.isArray(raw))
|
|
195
|
+
return null;
|
|
196
|
+
const maps = [];
|
|
197
|
+
for (const entry of raw) {
|
|
198
|
+
if (!entry || typeof entry !== 'object' || !('metadata' in entry) || !('sections' in entry))
|
|
199
|
+
continue;
|
|
200
|
+
const e = entry;
|
|
201
|
+
if (typeof e.metadata !== 'object' || !Array.isArray(e.sections))
|
|
202
|
+
continue;
|
|
203
|
+
const sections = e.sections.map(s => this.reshapeSection(s));
|
|
204
|
+
maps.push({
|
|
205
|
+
metadata: e.metadata,
|
|
206
|
+
// Safe: reshapeSection guarantees required discriminant fields per section type
|
|
207
|
+
sections: sections,
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
return maps.length > 0 ? maps : null;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Reshape a section from LLM format (entries) to API format (typed fields).
|
|
214
|
+
* If the section already has typed fields (e.g., items, entities), pass through.
|
|
215
|
+
*/
|
|
216
|
+
reshapeSection(section) {
|
|
217
|
+
const type = section.type;
|
|
218
|
+
const base = { type, label: section.label, summary: section.summary };
|
|
219
|
+
if (!('entries' in section))
|
|
220
|
+
return section;
|
|
221
|
+
const entries = section.entries;
|
|
222
|
+
if (!entries || !Array.isArray(entries))
|
|
223
|
+
return section;
|
|
224
|
+
const items = entries.map(e => ({ key: e.key, value: e.value }));
|
|
225
|
+
switch (type) {
|
|
226
|
+
case 'inventory':
|
|
227
|
+
return { ...base, items, gaps: [] };
|
|
228
|
+
case 'topology':
|
|
229
|
+
return { ...base, entities: items, relationships: [] };
|
|
230
|
+
case 'landscape':
|
|
231
|
+
return { ...base, dimensions: items.map(i => i.key), findings: items };
|
|
232
|
+
case 'classification':
|
|
233
|
+
return { ...base, hierarchy: items };
|
|
234
|
+
case 'mapping':
|
|
235
|
+
return { ...base, translations: items };
|
|
236
|
+
case 'synthesis':
|
|
237
|
+
return { ...base, patterns: items };
|
|
238
|
+
case 'limitation':
|
|
239
|
+
return { ...base, blindSpots: items };
|
|
240
|
+
case 'agenda':
|
|
241
|
+
return { ...base, questions: items };
|
|
242
|
+
default:
|
|
243
|
+
return section;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
// ─── Analysis Records ──────────────────────────────────────────────────
|
|
247
|
+
/**
|
|
248
|
+
* Build analysis records with 4-tier precedence:
|
|
249
|
+
* 1. Analysis block records (from JSON code fence — richest: typed, meaningful IDs)
|
|
250
|
+
* 2. Structured output analysisRecords (from agentOutputSchema — typed, meaningful IDs)
|
|
251
|
+
* 3. Derived from exploration maps (inventory items, agenda questions, etc.)
|
|
252
|
+
* 4. Auto-generated from recommendations (fallback — evidence_finding, hash IDs)
|
|
253
|
+
*/
|
|
254
|
+
buildAnalysisRecords(result, analysisBlock) {
|
|
255
|
+
// Tier 1: analysis block records (JSON code fence)
|
|
256
|
+
if (analysisBlock?.records && Array.isArray(analysisBlock.records) && analysisBlock.records.length > 0) {
|
|
257
|
+
return analysisBlock.records.map(rec => ({
|
|
258
|
+
...rec,
|
|
259
|
+
agentName: rec.agentName ?? result.name,
|
|
260
|
+
}));
|
|
261
|
+
}
|
|
262
|
+
// Tier 2: structured output analysisRecords
|
|
263
|
+
const structuredRecords = this.extractStructuredRecords(result.rawJson, result.name);
|
|
264
|
+
if (structuredRecords.length > 0) {
|
|
265
|
+
return structuredRecords;
|
|
266
|
+
}
|
|
267
|
+
// Tier 3: derived from exploration maps
|
|
268
|
+
const mapRecords = this.deriveRecordsFromExplorationMaps(result.rawJson, result.name);
|
|
269
|
+
if (mapRecords.length > 0) {
|
|
270
|
+
return mapRecords;
|
|
271
|
+
}
|
|
272
|
+
// Tier 4: auto-generated from recommendations
|
|
273
|
+
return result.recommendations.map(rec => ({
|
|
274
|
+
agentName: result.name,
|
|
275
|
+
recordType: rec.failureDomain ?? 'evidence_finding',
|
|
276
|
+
recordId: this.safeRecordId(rec.failureCode, `${result.name}/${rec.title}`),
|
|
277
|
+
title: rec.title,
|
|
278
|
+
classification: rec.failureCode ?? null,
|
|
279
|
+
severity: rec.severity ?? null,
|
|
280
|
+
data: {
|
|
281
|
+
priority: rec.priority,
|
|
282
|
+
description: rec.description,
|
|
283
|
+
filePath: rec.filePath,
|
|
284
|
+
lineNumber: rec.lineNumber,
|
|
285
|
+
category: rec.category,
|
|
286
|
+
failureMode: rec.failureMode,
|
|
287
|
+
classificationConfidence: rec.classificationConfidence,
|
|
288
|
+
classifiedBy: rec.classifiedBy,
|
|
289
|
+
secondaryFailureCodes: rec.secondaryFailureCodes,
|
|
290
|
+
taxonomyVersion: rec.taxonomyVersion,
|
|
291
|
+
},
|
|
292
|
+
}));
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Extract analysis records from structured output's analysisRecords array.
|
|
296
|
+
* Converts entries-based data [{key, value}] to the API's Record<string, unknown> format.
|
|
297
|
+
*/
|
|
298
|
+
extractStructuredRecords(rawJson, agentName) {
|
|
299
|
+
const raw = this.extractJsonField(rawJson, 'analysisRecords', 'analysis_records');
|
|
300
|
+
if (!Array.isArray(raw) || raw.length === 0)
|
|
301
|
+
return [];
|
|
302
|
+
return raw.filter((r) => r && typeof r === 'object' && 'recordType' in r && 'recordId' in r && 'title' in r).map(r => {
|
|
303
|
+
// Convert entries-based data to flat record
|
|
304
|
+
const dataEntries = Array.isArray(r.data)
|
|
305
|
+
? Object.fromEntries(r.data.map(e => [e.key, e.value]))
|
|
306
|
+
: r.data ?? {};
|
|
307
|
+
return {
|
|
308
|
+
agentName,
|
|
309
|
+
recordType: String(r.recordType),
|
|
310
|
+
recordId: this.safeRecordId(String(r.recordId), `${agentName}/${r.title}`),
|
|
311
|
+
title: String(r.title),
|
|
312
|
+
classification: r.classification ? String(r.classification) : null,
|
|
313
|
+
severity: r.severity ? String(r.severity) : null,
|
|
314
|
+
data: dataEntries,
|
|
315
|
+
};
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Derive analysis records from exploration map sections.
|
|
320
|
+
*
|
|
321
|
+
* Maps section types to record types:
|
|
322
|
+
* - inventory items → record type from section label context
|
|
323
|
+
* - agenda questions → inquiry_question
|
|
324
|
+
* - limitation blind spots → limitation
|
|
325
|
+
* - synthesis patterns → evidence_finding
|
|
326
|
+
* - mapping translations → evidence_finding
|
|
327
|
+
* - topology entities → evidence_finding
|
|
328
|
+
*
|
|
329
|
+
* Capped at 100 records to avoid overwhelming the tracker.
|
|
330
|
+
*/
|
|
331
|
+
deriveRecordsFromExplorationMaps(rawJson, agentName) {
|
|
332
|
+
const raw = this.extractJsonField(rawJson, 'explorationMaps', 'exploration_maps');
|
|
333
|
+
if (!Array.isArray(raw) || raw.length === 0)
|
|
334
|
+
return [];
|
|
335
|
+
const records = [];
|
|
336
|
+
let counter = 0;
|
|
337
|
+
for (const map of raw) {
|
|
338
|
+
if (!map || typeof map !== 'object' || !('sections' in map))
|
|
339
|
+
continue;
|
|
340
|
+
const sections = map.sections;
|
|
341
|
+
if (!Array.isArray(sections))
|
|
342
|
+
continue;
|
|
343
|
+
for (const section of sections) {
|
|
344
|
+
if (!section || typeof section !== 'object')
|
|
345
|
+
continue;
|
|
346
|
+
const s = section;
|
|
347
|
+
const type = s.type;
|
|
348
|
+
const items = this.getSectionItems(s);
|
|
349
|
+
if (!items || items.length === 0)
|
|
350
|
+
continue;
|
|
351
|
+
const recordType = this.sectionTypeToRecordType(type);
|
|
352
|
+
const prefix = this.sectionTypeToPrefix(type);
|
|
353
|
+
for (const item of items) {
|
|
354
|
+
counter++;
|
|
355
|
+
if (counter > 100)
|
|
356
|
+
break;
|
|
357
|
+
const key = typeof item === 'object' && item !== null && 'key' in item
|
|
358
|
+
? String(item.key)
|
|
359
|
+
: `${prefix}-${counter}`;
|
|
360
|
+
const value = typeof item === 'object' && item !== null && 'value' in item
|
|
361
|
+
? String(item.value)
|
|
362
|
+
: typeof item === 'string' ? item : JSON.stringify(item);
|
|
363
|
+
records.push({
|
|
364
|
+
agentName,
|
|
365
|
+
recordType,
|
|
366
|
+
recordId: this.safeRecordId(undefined, `${agentName}/${key}`),
|
|
367
|
+
title: key.length > 200 ? key.substring(0, 200) : key,
|
|
368
|
+
classification: null,
|
|
369
|
+
severity: null,
|
|
370
|
+
data: {
|
|
371
|
+
sectionType: type,
|
|
372
|
+
sectionLabel: s.label,
|
|
373
|
+
content: value.length > 2000 ? value.substring(0, 2000) : value,
|
|
374
|
+
},
|
|
375
|
+
});
|
|
376
|
+
}
|
|
377
|
+
if (counter > 100)
|
|
378
|
+
break;
|
|
379
|
+
}
|
|
380
|
+
if (counter > 100)
|
|
381
|
+
break;
|
|
382
|
+
}
|
|
383
|
+
return records;
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Get the list of items from a section based on its type.
|
|
387
|
+
* Handles both entries-based format and typed field format.
|
|
388
|
+
*/
|
|
389
|
+
getSectionItems(section) {
|
|
390
|
+
// Entries-based format (from structured output)
|
|
391
|
+
if (Array.isArray(section.entries) && section.entries.length > 0)
|
|
392
|
+
return section.entries;
|
|
393
|
+
// Typed field formats (from reshaped or JSON fence)
|
|
394
|
+
if (Array.isArray(section.items))
|
|
395
|
+
return section.items;
|
|
396
|
+
if (Array.isArray(section.questions))
|
|
397
|
+
return section.questions;
|
|
398
|
+
if (Array.isArray(section.blindSpots))
|
|
399
|
+
return section.blindSpots;
|
|
400
|
+
if (Array.isArray(section.patterns))
|
|
401
|
+
return section.patterns;
|
|
402
|
+
if (Array.isArray(section.translations))
|
|
403
|
+
return section.translations;
|
|
404
|
+
if (Array.isArray(section.entities))
|
|
405
|
+
return section.entities;
|
|
406
|
+
if (Array.isArray(section.hierarchy))
|
|
407
|
+
return section.hierarchy;
|
|
408
|
+
if (Array.isArray(section.findings))
|
|
409
|
+
return section.findings;
|
|
410
|
+
return null;
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* Section type → record type + ID prefix.
|
|
414
|
+
* Record types must match the API's AnalysisRecordType enum.
|
|
415
|
+
*/
|
|
416
|
+
static SECTION_TYPE_CONFIG = {
|
|
417
|
+
agenda: { recordType: 'inquiry_question', prefix: 'IQ' },
|
|
418
|
+
limitation: { recordType: 'evidence_finding', prefix: 'LM' },
|
|
419
|
+
inventory: { recordType: 'evidence_finding', prefix: 'INV' },
|
|
420
|
+
topology: { recordType: 'evidence_finding', prefix: 'TOP' },
|
|
421
|
+
landscape: { recordType: 'evidence_finding', prefix: 'LSC' },
|
|
422
|
+
classification: { recordType: 'evidence_finding', prefix: 'CLS' },
|
|
423
|
+
mapping: { recordType: 'evidence_finding', prefix: 'MAP' },
|
|
424
|
+
synthesis: { recordType: 'evidence_finding', prefix: 'SYN' },
|
|
425
|
+
};
|
|
426
|
+
static DEFAULT_SECTION_CONFIG = { recordType: 'evidence_finding', prefix: 'REC' };
|
|
427
|
+
sectionTypeToRecordType(sectionType) {
|
|
428
|
+
return (AnalysisSummaryExtractor.SECTION_TYPE_CONFIG[sectionType] ?? AnalysisSummaryExtractor.DEFAULT_SECTION_CONFIG).recordType;
|
|
429
|
+
}
|
|
430
|
+
sectionTypeToPrefix(sectionType) {
|
|
431
|
+
return (AnalysisSummaryExtractor.SECTION_TYPE_CONFIG[sectionType] ?? AnalysisSummaryExtractor.DEFAULT_SECTION_CONFIG).prefix;
|
|
432
|
+
}
|
|
433
|
+
// ─── Helpers ────────────────────────────────────────────────────────────
|
|
434
|
+
/**
|
|
435
|
+
* Extract a field from rawJson, trying camelCase then snake_case.
|
|
436
|
+
*/
|
|
437
|
+
extractJsonField(rawJson, camelKey, snakeKey) {
|
|
438
|
+
if (!rawJson || typeof rawJson !== 'object')
|
|
439
|
+
return null;
|
|
440
|
+
const obj = rawJson;
|
|
441
|
+
return obj[camelKey] ?? obj[snakeKey] ?? null;
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* Get AgentDefinition from ResolvedDefinition, if available.
|
|
445
|
+
*/
|
|
446
|
+
getAgentDefinition(resolved) {
|
|
447
|
+
if (resolved.type !== 'agent')
|
|
448
|
+
return undefined;
|
|
449
|
+
const def = resolved.definition;
|
|
450
|
+
if (def && typeof def === 'object' && 'agent' in def) {
|
|
451
|
+
return def;
|
|
452
|
+
}
|
|
453
|
+
return undefined;
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* Produce a recordId that fits within the 20-char SDK limit.
|
|
457
|
+
* Uses failureCode if present and <=20 chars, otherwise hashes.
|
|
458
|
+
*/
|
|
459
|
+
safeRecordId(failureCode, fallbackInput) {
|
|
460
|
+
if (failureCode && failureCode.length <= 20)
|
|
461
|
+
return failureCode;
|
|
462
|
+
return 'r-' + createHash('sha256').update(failureCode ?? fallbackInput).digest('hex').substring(0, 16);
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
//# sourceMappingURL=AnalysisSummaryExtractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AnalysisSummaryExtractor.js","sourceRoot":"","sources":["../../src/analysis/AnalysisSummaryExtractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analysis/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,KAAK,wBAAwB,EAAE,MAAM,+BAA+B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analysis/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAiC,MAAM,+BAA+B,CAAC"}
|