@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.
Files changed (136) hide show
  1. package/README.md +84 -25
  2. package/dist/ai/AIProvider.d.ts.map +1 -1
  3. package/dist/ai/AIProvider.js +28 -12
  4. package/dist/ai/AIProvider.js.map +1 -1
  5. package/dist/ai/ModelCatalog.js +2 -2
  6. package/dist/ai/ModelCatalog.js.map +1 -1
  7. package/dist/ai/ToolAdapter.d.ts.map +1 -1
  8. package/dist/ai/ToolAdapter.js +16 -27
  9. package/dist/ai/ToolAdapter.js.map +1 -1
  10. package/dist/ai/{ShellExecutor.d.ts.map → shellExecutor.d.ts.map} +1 -1
  11. package/dist/ai/{ShellExecutor.js → shellExecutor.js} +3 -2
  12. package/dist/ai/{ShellExecutor.js.map → shellExecutor.js.map} +1 -1
  13. package/dist/analysis/AnalysisSummaryExtractor.d.ts +135 -0
  14. package/dist/analysis/AnalysisSummaryExtractor.d.ts.map +1 -0
  15. package/dist/analysis/AnalysisSummaryExtractor.js +465 -0
  16. package/dist/analysis/AnalysisSummaryExtractor.js.map +1 -0
  17. package/dist/analysis/index.d.ts +2 -0
  18. package/dist/analysis/index.d.ts.map +1 -0
  19. package/dist/analysis/index.js +2 -0
  20. package/dist/analysis/index.js.map +1 -0
  21. package/dist/client/UluOpsClient.d.ts +12 -9
  22. package/dist/client/UluOpsClient.d.ts.map +1 -1
  23. package/dist/client/UluOpsClient.js +76 -47
  24. package/dist/client/UluOpsClient.js.map +1 -1
  25. package/dist/constants.d.ts +4 -3
  26. package/dist/constants.d.ts.map +1 -1
  27. package/dist/constants.js +13 -3
  28. package/dist/constants.js.map +1 -1
  29. package/dist/errors/index.d.ts +38 -8
  30. package/dist/errors/index.d.ts.map +1 -1
  31. package/dist/errors/index.js +52 -7
  32. package/dist/errors/index.js.map +1 -1
  33. package/dist/executor/AgentExecutor.d.ts +2 -0
  34. package/dist/executor/AgentExecutor.d.ts.map +1 -1
  35. package/dist/executor/AgentExecutor.js +33 -16
  36. package/dist/executor/AgentExecutor.js.map +1 -1
  37. package/dist/executor/CommandExecutor.d.ts +3 -1
  38. package/dist/executor/CommandExecutor.d.ts.map +1 -1
  39. package/dist/executor/CommandExecutor.js +17 -39
  40. package/dist/executor/CommandExecutor.js.map +1 -1
  41. package/dist/executor/PipelineExecutor.d.ts +12 -4
  42. package/dist/executor/PipelineExecutor.d.ts.map +1 -1
  43. package/dist/executor/PipelineExecutor.js +127 -23
  44. package/dist/executor/PipelineExecutor.js.map +1 -1
  45. package/dist/executor/ToolHandler.d.ts +5 -0
  46. package/dist/executor/ToolHandler.d.ts.map +1 -1
  47. package/dist/executor/ToolHandler.js +23 -14
  48. package/dist/executor/ToolHandler.js.map +1 -1
  49. package/dist/executor/WorkflowExecutor.d.ts +18 -2
  50. package/dist/executor/WorkflowExecutor.d.ts.map +1 -1
  51. package/dist/executor/WorkflowExecutor.js +107 -37
  52. package/dist/executor/WorkflowExecutor.js.map +1 -1
  53. package/dist/executor/classifyDecision.d.ts +2 -1
  54. package/dist/executor/classifyDecision.d.ts.map +1 -1
  55. package/dist/executor/classifyDecision.js +4 -2
  56. package/dist/executor/classifyDecision.js.map +1 -1
  57. package/dist/executor/mapCategory.d.ts +5 -0
  58. package/dist/executor/mapCategory.d.ts.map +1 -0
  59. package/dist/executor/mapCategory.js +5 -0
  60. package/dist/executor/mapCategory.js.map +1 -0
  61. package/dist/executor/preflight.d.ts.map +1 -1
  62. package/dist/executor/preflight.js +53 -12
  63. package/dist/executor/preflight.js.map +1 -1
  64. package/dist/index.d.ts +6 -5
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +5 -3
  67. package/dist/index.js.map +1 -1
  68. package/dist/parser/OutputExtractor.d.ts +7 -25
  69. package/dist/parser/OutputExtractor.d.ts.map +1 -1
  70. package/dist/parser/OutputExtractor.js +23 -528
  71. package/dist/parser/OutputExtractor.js.map +1 -1
  72. package/dist/parser/OutputNormalizer.d.ts +45 -0
  73. package/dist/parser/OutputNormalizer.d.ts.map +1 -0
  74. package/dist/parser/OutputNormalizer.js +572 -0
  75. package/dist/parser/OutputNormalizer.js.map +1 -0
  76. package/dist/parser/outputSchemas.d.ts +266 -36
  77. package/dist/parser/outputSchemas.d.ts.map +1 -1
  78. package/dist/parser/outputSchemas.js +109 -0
  79. package/dist/parser/outputSchemas.js.map +1 -1
  80. package/dist/registry/RegistryClient.d.ts +9 -7
  81. package/dist/registry/RegistryClient.d.ts.map +1 -1
  82. package/dist/registry/RegistryClient.js +82 -51
  83. package/dist/registry/RegistryClient.js.map +1 -1
  84. package/dist/submission/SubmissionClient.d.ts +81 -0
  85. package/dist/submission/SubmissionClient.d.ts.map +1 -0
  86. package/dist/submission/SubmissionClient.js +266 -0
  87. package/dist/submission/SubmissionClient.js.map +1 -0
  88. package/dist/types/agent.d.ts +13 -1
  89. package/dist/types/agent.d.ts.map +1 -1
  90. package/dist/types/command.d.ts +1 -1
  91. package/dist/types/command.d.ts.map +1 -1
  92. package/dist/types/config.d.ts +21 -7
  93. package/dist/types/config.d.ts.map +1 -1
  94. package/dist/types/execution.d.ts +7 -0
  95. package/dist/types/execution.d.ts.map +1 -1
  96. package/dist/types/index.d.ts +1 -1
  97. package/dist/types/pipeline.d.ts +18 -6
  98. package/dist/types/pipeline.d.ts.map +1 -1
  99. package/dist/types/registry.d.ts +11 -4
  100. package/dist/types/registry.d.ts.map +1 -1
  101. package/dist/types/submission.d.ts +116 -0
  102. package/dist/types/submission.d.ts.map +1 -0
  103. package/dist/types/submission.js +2 -0
  104. package/dist/types/submission.js.map +1 -0
  105. package/dist/types/validation.d.ts +4 -0
  106. package/dist/types/validation.d.ts.map +1 -1
  107. package/dist/types/workflow.d.ts +7 -1
  108. package/dist/types/workflow.d.ts.map +1 -1
  109. package/dist/utils/aggregateScores.d.ts +26 -0
  110. package/dist/utils/aggregateScores.d.ts.map +1 -0
  111. package/dist/utils/aggregateScores.js +45 -0
  112. package/dist/utils/aggregateScores.js.map +1 -0
  113. package/dist/utils/parseRef.d.ts.map +1 -1
  114. package/dist/utils/parseRef.js +3 -1
  115. package/dist/utils/parseRef.js.map +1 -1
  116. package/dist/utils/topoSort.d.ts.map +1 -1
  117. package/dist/utils/topoSort.js +5 -2
  118. package/dist/utils/topoSort.js.map +1 -1
  119. package/dist/validation/ValidationClient.d.ts +30 -0
  120. package/dist/validation/ValidationClient.d.ts.map +1 -1
  121. package/dist/validation/ValidationClient.js +106 -18
  122. package/dist/validation/ValidationClient.js.map +1 -1
  123. package/package.json +6 -6
  124. package/dist/ai/index.d.ts +0 -6
  125. package/dist/ai/index.d.ts.map +0 -1
  126. package/dist/ai/index.js +0 -4
  127. package/dist/ai/index.js.map +0 -1
  128. package/dist/registry/index.d.ts +0 -2
  129. package/dist/registry/index.d.ts.map +0 -1
  130. package/dist/registry/index.js +0 -2
  131. package/dist/registry/index.js.map +0 -1
  132. package/dist/validation/index.d.ts +0 -2
  133. package/dist/validation/index.d.ts.map +0 -1
  134. package/dist/validation/index.js +0 -2
  135. package/dist/validation/index.js.map +0 -1
  136. /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,2 @@
1
+ export { AnalysisSummaryExtractor, type AnalysisExtractionResult } from './AnalysisSummaryExtractor.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -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,2 @@
1
+ export { AnalysisSummaryExtractor } from './AnalysisSummaryExtractor.js';
2
+ //# sourceMappingURL=index.js.map
@@ -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"}