resolve-solo 1.0.0 → 1.1.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 (117) hide show
  1. package/dist/cli-progress/index.d.ts +9 -0
  2. package/dist/cli-progress/index.d.ts.map +1 -0
  3. package/dist/cli-progress/index.js +9 -0
  4. package/dist/cli-progress/index.js.map +1 -0
  5. package/dist/cli-progress/progress-bar.d.ts +12 -0
  6. package/dist/cli-progress/progress-bar.d.ts.map +1 -0
  7. package/dist/cli-progress/progress-bar.js +29 -0
  8. package/dist/cli-progress/progress-bar.js.map +1 -0
  9. package/dist/cli-progress/spinner.d.ts +21 -0
  10. package/dist/cli-progress/spinner.d.ts.map +1 -0
  11. package/dist/cli-progress/spinner.js +35 -0
  12. package/dist/cli-progress/spinner.js.map +1 -0
  13. package/dist/cli-progress/task-renderer.d.ts +57 -0
  14. package/dist/cli-progress/task-renderer.d.ts.map +1 -0
  15. package/dist/cli-progress/task-renderer.js +177 -0
  16. package/dist/cli-progress/task-renderer.js.map +1 -0
  17. package/dist/cli.d.ts.map +1 -1
  18. package/dist/cli.js +135 -24
  19. package/dist/cli.js.map +1 -1
  20. package/dist/data-sources/alerts-generator.d.ts +12 -0
  21. package/dist/data-sources/alerts-generator.d.ts.map +1 -0
  22. package/dist/data-sources/alerts-generator.js +168 -0
  23. package/dist/data-sources/alerts-generator.js.map +1 -0
  24. package/dist/data-sources/index.d.ts +10 -0
  25. package/dist/data-sources/index.d.ts.map +1 -0
  26. package/dist/data-sources/index.js +10 -0
  27. package/dist/data-sources/index.js.map +1 -0
  28. package/dist/data-sources/metrics-generator.d.ts +12 -0
  29. package/dist/data-sources/metrics-generator.d.ts.map +1 -0
  30. package/dist/data-sources/metrics-generator.js +169 -0
  31. package/dist/data-sources/metrics-generator.js.map +1 -0
  32. package/dist/data-sources/pipeline-generator.d.ts +12 -0
  33. package/dist/data-sources/pipeline-generator.d.ts.map +1 -0
  34. package/dist/data-sources/pipeline-generator.js +157 -0
  35. package/dist/data-sources/pipeline-generator.js.map +1 -0
  36. package/dist/data-sources/sla-generator.d.ts +12 -0
  37. package/dist/data-sources/sla-generator.d.ts.map +1 -0
  38. package/dist/data-sources/sla-generator.js +84 -0
  39. package/dist/data-sources/sla-generator.js.map +1 -0
  40. package/dist/demo-generator.d.ts +6 -2
  41. package/dist/demo-generator.d.ts.map +1 -1
  42. package/dist/demo-generator.js +40 -30
  43. package/dist/demo-generator.js.map +1 -1
  44. package/dist/demo-schema.d.ts +49 -0
  45. package/dist/demo-schema.d.ts.map +1 -1
  46. package/dist/findings/aggregator.d.ts +26 -0
  47. package/dist/findings/aggregator.d.ts.map +1 -0
  48. package/dist/findings/aggregator.js +149 -0
  49. package/dist/findings/aggregator.js.map +1 -0
  50. package/dist/findings/formatter.d.ts +50 -0
  51. package/dist/findings/formatter.d.ts.map +1 -0
  52. package/dist/findings/formatter.js +393 -0
  53. package/dist/findings/formatter.js.map +1 -0
  54. package/dist/findings/index.d.ts +4 -0
  55. package/dist/findings/index.d.ts.map +1 -0
  56. package/dist/findings/index.js +7 -0
  57. package/dist/findings/index.js.map +1 -0
  58. package/dist/findings/prioritizer.d.ts +15 -0
  59. package/dist/findings/prioritizer.d.ts.map +1 -0
  60. package/dist/findings/prioritizer.js +107 -0
  61. package/dist/findings/prioritizer.js.map +1 -0
  62. package/dist/handlers.d.ts +38 -0
  63. package/dist/handlers.d.ts.map +1 -1
  64. package/dist/handlers.js +135 -1
  65. package/dist/handlers.js.map +1 -1
  66. package/dist/investigation-engine/example.d.ts +9 -0
  67. package/dist/investigation-engine/example.d.ts.map +1 -0
  68. package/dist/investigation-engine/example.js +88 -0
  69. package/dist/investigation-engine/example.js.map +1 -0
  70. package/dist/investigation-engine/index.d.ts +9 -0
  71. package/dist/investigation-engine/index.d.ts.map +1 -0
  72. package/dist/investigation-engine/index.js +9 -0
  73. package/dist/investigation-engine/index.js.map +1 -0
  74. package/dist/investigation-engine/task-definitions.d.ts +10 -0
  75. package/dist/investigation-engine/task-definitions.d.ts.map +1 -0
  76. package/dist/investigation-engine/task-definitions.js +86 -0
  77. package/dist/investigation-engine/task-definitions.js.map +1 -0
  78. package/dist/investigation-engine/task-executor.d.ts +58 -0
  79. package/dist/investigation-engine/task-executor.d.ts.map +1 -0
  80. package/dist/investigation-engine/task-executor.js +211 -0
  81. package/dist/investigation-engine/task-executor.js.map +1 -0
  82. package/dist/investigation-engine/task-progress.d.ts +51 -0
  83. package/dist/investigation-engine/task-progress.d.ts.map +1 -0
  84. package/dist/investigation-engine/task-progress.js +107 -0
  85. package/dist/investigation-engine/task-progress.js.map +1 -0
  86. package/dist/investigation-engine/task-types.d.ts +44 -0
  87. package/dist/investigation-engine/task-types.d.ts.map +1 -0
  88. package/dist/investigation-engine/task-types.js +2 -0
  89. package/dist/investigation-engine/task-types.js.map +1 -0
  90. package/dist/mcp/tools.d.ts.map +1 -1
  91. package/dist/mcp/tools.js +22 -2
  92. package/dist/mcp/tools.js.map +1 -1
  93. package/dist/parser.d.ts.map +1 -1
  94. package/dist/parser.js +10 -0
  95. package/dist/parser.js.map +1 -1
  96. package/dist/repl.d.ts.map +1 -1
  97. package/dist/repl.js +143 -19
  98. package/dist/repl.js.map +1 -1
  99. package/dist/seeded-random.d.ts +15 -0
  100. package/dist/seeded-random.d.ts.map +1 -0
  101. package/dist/seeded-random.js +32 -0
  102. package/dist/seeded-random.js.map +1 -0
  103. package/dist/storage.d.ts +9 -5
  104. package/dist/storage.d.ts.map +1 -1
  105. package/dist/storage.js +75 -8
  106. package/dist/storage.js.map +1 -1
  107. package/dist/tool-config.d.ts +36 -0
  108. package/dist/tool-config.d.ts.map +1 -0
  109. package/dist/tool-config.js +83 -0
  110. package/dist/tool-config.js.map +1 -0
  111. package/dist/tool-discovery.d.ts +27 -0
  112. package/dist/tool-discovery.d.ts.map +1 -0
  113. package/dist/tool-discovery.js +150 -0
  114. package/dist/tool-discovery.js.map +1 -0
  115. package/dist/types.d.ts +1 -1
  116. package/dist/types.d.ts.map +1 -1
  117. package/package.json +1 -1
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Aggregate findings from completed investigation tasks
3
+ */
4
+ export function aggregateFindings(tasks) {
5
+ // Collect all findings from completed tasks
6
+ const allFindings = [];
7
+ for (const task of tasks) {
8
+ if (task.status === 'completed' && task.result?.findings) {
9
+ allFindings.push(...task.result.findings);
10
+ }
11
+ }
12
+ // Deduplicate findings
13
+ const deduped = deduplicateFindings(allFindings);
14
+ // Initialize aggregation structure
15
+ const aggregated = {
16
+ total: deduped.length,
17
+ byPriority: {
18
+ P0: [],
19
+ P1: [],
20
+ P2: [],
21
+ P3: [],
22
+ },
23
+ byCategory: {},
24
+ byService: {},
25
+ };
26
+ // Group by priority, category, and service
27
+ for (const finding of deduped) {
28
+ // By priority
29
+ aggregated.byPriority[finding.priority].push(finding);
30
+ // By category
31
+ if (!aggregated.byCategory[finding.category]) {
32
+ aggregated.byCategory[finding.category] = [];
33
+ }
34
+ aggregated.byCategory[finding.category].push(finding);
35
+ // By service
36
+ if (!aggregated.byService[finding.service]) {
37
+ aggregated.byService[finding.service] = [];
38
+ }
39
+ aggregated.byService[finding.service].push(finding);
40
+ }
41
+ return aggregated;
42
+ }
43
+ /**
44
+ * Merge duplicate or related findings
45
+ *
46
+ * Two findings are considered duplicates if:
47
+ * - Same service AND same category AND similar title (>80% overlap)
48
+ * - Keep the one with higher priority
49
+ * - Merge evidence arrays
50
+ */
51
+ export function deduplicateFindings(findings) {
52
+ if (findings.length === 0) {
53
+ return [];
54
+ }
55
+ const deduplicated = [];
56
+ const processed = new Set();
57
+ for (let i = 0; i < findings.length; i++) {
58
+ if (processed.has(i)) {
59
+ continue;
60
+ }
61
+ const current = findings[i];
62
+ const duplicates = [];
63
+ // Find duplicates
64
+ for (let j = i + 1; j < findings.length; j++) {
65
+ if (processed.has(j)) {
66
+ continue;
67
+ }
68
+ const candidate = findings[j];
69
+ if (areDuplicates(current, candidate)) {
70
+ duplicates.push(j);
71
+ processed.add(j);
72
+ }
73
+ }
74
+ // Merge duplicates into current finding
75
+ if (duplicates.length > 0) {
76
+ const merged = mergeFinding(current, duplicates.map(idx => findings[idx]));
77
+ deduplicated.push(merged);
78
+ }
79
+ else {
80
+ deduplicated.push(current);
81
+ }
82
+ processed.add(i);
83
+ }
84
+ return deduplicated;
85
+ }
86
+ /**
87
+ * Check if two findings are duplicates
88
+ */
89
+ function areDuplicates(f1, f2) {
90
+ // Must have same service and category
91
+ if (f1.service !== f2.service || f1.category !== f2.category) {
92
+ return false;
93
+ }
94
+ // Check title similarity (>80% overlap)
95
+ const similarity = calculateSimilarity(f1.title, f2.title);
96
+ return similarity > 0.8;
97
+ }
98
+ /**
99
+ * Calculate Jaccard similarity between two strings
100
+ */
101
+ function calculateSimilarity(str1, str2) {
102
+ const words1 = new Set(str1.toLowerCase().split(/\s+/));
103
+ const words2 = new Set(str2.toLowerCase().split(/\s+/));
104
+ const intersection = new Set([...words1].filter(x => words2.has(x)));
105
+ const union = new Set([...words1, ...words2]);
106
+ if (union.size === 0) {
107
+ return 0;
108
+ }
109
+ return intersection.size / union.size;
110
+ }
111
+ /**
112
+ * Merge a finding with its duplicates
113
+ * Keep the one with higher priority and merge evidence
114
+ */
115
+ function mergeFinding(primary, duplicates) {
116
+ const allFindings = [primary, ...duplicates];
117
+ // Sort by priority (P0 > P1 > P2 > P3)
118
+ const priorityOrder = { P0: 0, P1: 1, P2: 2, P3: 3 };
119
+ allFindings.sort((a, b) => priorityOrder[a.priority] - priorityOrder[b.priority]);
120
+ // Take the highest priority finding as base
121
+ const merged = { ...allFindings[0] };
122
+ // Merge all evidence
123
+ const evidenceSet = new Set();
124
+ for (const finding of allFindings) {
125
+ for (const evidence of finding.evidence) {
126
+ evidenceSet.add(evidence);
127
+ }
128
+ }
129
+ merged.evidence = Array.from(evidenceSet);
130
+ // Use the most detailed description
131
+ const longestDesc = allFindings
132
+ .map(f => f.description)
133
+ .reduce((longest, current) => current.length > longest.length ? current : longest);
134
+ merged.description = longestDesc;
135
+ // Prefer non-empty suggestedAction, owner, timeline
136
+ for (const finding of allFindings) {
137
+ if (!merged.suggestedAction && finding.suggestedAction) {
138
+ merged.suggestedAction = finding.suggestedAction;
139
+ }
140
+ if (!merged.owner && finding.owner) {
141
+ merged.owner = finding.owner;
142
+ }
143
+ if (!merged.timeline && finding.timeline) {
144
+ merged.timeline = finding.timeline;
145
+ }
146
+ }
147
+ return merged;
148
+ }
149
+ //# sourceMappingURL=aggregator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregator.js","sourceRoot":"","sources":["../../src/findings/aggregator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { FindingPriority } from '../investigation-engine/task-types.js';
2
+ import { AggregatedFindings } from './aggregator.js';
3
+ export interface MetricsSummary {
4
+ sla: {
5
+ status: 'healthy' | 'warning' | 'breached';
6
+ current: number;
7
+ target: number;
8
+ };
9
+ latency: {
10
+ status: 'healthy' | 'warning' | 'critical';
11
+ current: string;
12
+ target: string;
13
+ };
14
+ errorRate: {
15
+ status: 'healthy' | 'warning' | 'critical';
16
+ current: string;
17
+ target: string;
18
+ };
19
+ traffic: {
20
+ status: 'healthy' | 'warning' | 'critical';
21
+ current: string;
22
+ capacity: string;
23
+ };
24
+ }
25
+ export interface ActionItem {
26
+ priority: FindingPriority;
27
+ action: string;
28
+ owner?: string;
29
+ timeline?: string;
30
+ }
31
+ export interface ExecutiveSummary {
32
+ overview: string;
33
+ findings: AggregatedFindings;
34
+ metrics: MetricsSummary;
35
+ actionItems: ActionItem[];
36
+ suggestedNextSteps: string[];
37
+ }
38
+ /**
39
+ * Generate executive summary from aggregated findings
40
+ */
41
+ export declare function generateExecutiveSummary(aggregated: AggregatedFindings, metricsData?: any): ExecutiveSummary;
42
+ /**
43
+ * Format summary for CLI output with colors
44
+ */
45
+ export declare function formatSummaryForCLI(summary: ExecutiveSummary): string;
46
+ /**
47
+ * Format summary for markdown output
48
+ */
49
+ export declare function formatSummaryForMarkdown(summary: ExecutiveSummary): string;
50
+ //# sourceMappingURL=formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/findings/formatter.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGrD,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE;QAAE,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACrF,OAAO,EAAE;QAAE,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACzF,SAAS,EAAE;QAAE,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3F,OAAO,EAAE;QAAE,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5F;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,OAAO,EAAE,cAAc,CAAC;IACxB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,kBAAkB,EAC9B,WAAW,CAAC,EAAE,GAAG,GAChB,gBAAgB,CAwBlB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAoErE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CA6D1E"}
@@ -0,0 +1,393 @@
1
+ import chalk from 'chalk';
2
+ import { sortByPriority } from './prioritizer.js';
3
+ /**
4
+ * Generate executive summary from aggregated findings
5
+ */
6
+ export function generateExecutiveSummary(aggregated, metricsData) {
7
+ const p0Count = aggregated.byPriority.P0.length;
8
+ const p1Count = aggregated.byPriority.P1.length;
9
+ const p2Count = aggregated.byPriority.P2.length;
10
+ // Generate overview
11
+ const overview = generateOverview(p0Count, p1Count, p2Count);
12
+ // Generate metrics summary from findings or provided data
13
+ const metrics = metricsData || generateMetricsFromFindings(aggregated);
14
+ // Generate action items from findings
15
+ const actionItems = generateActionItems(aggregated);
16
+ // Generate suggested next steps
17
+ const suggestedNextSteps = generateNextSteps(aggregated, actionItems);
18
+ return {
19
+ overview,
20
+ findings: aggregated,
21
+ metrics,
22
+ actionItems,
23
+ suggestedNextSteps,
24
+ };
25
+ }
26
+ /**
27
+ * Format summary for CLI output with colors
28
+ */
29
+ export function formatSummaryForCLI(summary) {
30
+ const lines = [];
31
+ // Header
32
+ lines.push(chalk.bold.cyan('=== Executive Summary ==='));
33
+ lines.push('');
34
+ lines.push(summary.overview);
35
+ lines.push('');
36
+ // Findings by priority
37
+ const allFindings = [
38
+ ...summary.findings.byPriority.P0,
39
+ ...summary.findings.byPriority.P1,
40
+ ...summary.findings.byPriority.P2,
41
+ ...summary.findings.byPriority.P3,
42
+ ];
43
+ let itemNumber = 1;
44
+ if (summary.findings.byPriority.P0.length > 0) {
45
+ lines.push(chalk.bold.red(`## P0 - Critical (${summary.findings.byPriority.P0.length})`));
46
+ for (const finding of sortByPriority(summary.findings.byPriority.P0)) {
47
+ lines.push(...formatFindingCLI(finding, itemNumber++));
48
+ }
49
+ lines.push('');
50
+ }
51
+ if (summary.findings.byPriority.P1.length > 0) {
52
+ lines.push(chalk.bold.yellow(`## P1 - High (${summary.findings.byPriority.P1.length})`));
53
+ for (const finding of sortByPriority(summary.findings.byPriority.P1)) {
54
+ lines.push(...formatFindingCLI(finding, itemNumber++));
55
+ }
56
+ lines.push('');
57
+ }
58
+ if (summary.findings.byPriority.P2.length > 0) {
59
+ lines.push(chalk.bold.blue(`## P2 - Medium (${summary.findings.byPriority.P2.length})`));
60
+ for (const finding of sortByPriority(summary.findings.byPriority.P2)) {
61
+ lines.push(...formatFindingCLI(finding, itemNumber++));
62
+ }
63
+ lines.push('');
64
+ }
65
+ if (summary.findings.byPriority.P3.length > 0) {
66
+ lines.push(chalk.bold.gray(`## P3 - Low (${summary.findings.byPriority.P3.length})`));
67
+ for (const finding of sortByPriority(summary.findings.byPriority.P3)) {
68
+ lines.push(...formatFindingCLI(finding, itemNumber++));
69
+ }
70
+ lines.push('');
71
+ }
72
+ // Metrics Overview
73
+ lines.push(chalk.bold.cyan('## Metrics Overview'));
74
+ lines.push('');
75
+ lines.push(formatMetricsTableCLI(summary.metrics));
76
+ lines.push('');
77
+ // Suggested Next Steps
78
+ if (summary.suggestedNextSteps.length > 0) {
79
+ lines.push(chalk.bold.cyan('## Suggested Next Steps'));
80
+ lines.push('');
81
+ for (let i = 0; i < summary.suggestedNextSteps.length; i++) {
82
+ lines.push(`${i + 1}. ${summary.suggestedNextSteps[i]}`);
83
+ }
84
+ lines.push('');
85
+ }
86
+ return lines.join('\n');
87
+ }
88
+ /**
89
+ * Format summary for markdown output
90
+ */
91
+ export function formatSummaryForMarkdown(summary) {
92
+ const lines = [];
93
+ // Header
94
+ lines.push('# Executive Summary');
95
+ lines.push('');
96
+ lines.push(summary.overview);
97
+ lines.push('');
98
+ // Findings by priority
99
+ let itemNumber = 1;
100
+ if (summary.findings.byPriority.P0.length > 0) {
101
+ lines.push(`## P0 - Critical (${summary.findings.byPriority.P0.length})`);
102
+ lines.push('');
103
+ for (const finding of sortByPriority(summary.findings.byPriority.P0)) {
104
+ lines.push(...formatFindingMarkdown(finding, itemNumber++));
105
+ }
106
+ }
107
+ if (summary.findings.byPriority.P1.length > 0) {
108
+ lines.push(`## P1 - High (${summary.findings.byPriority.P1.length})`);
109
+ lines.push('');
110
+ for (const finding of sortByPriority(summary.findings.byPriority.P1)) {
111
+ lines.push(...formatFindingMarkdown(finding, itemNumber++));
112
+ }
113
+ }
114
+ if (summary.findings.byPriority.P2.length > 0) {
115
+ lines.push(`## P2 - Medium (${summary.findings.byPriority.P2.length})`);
116
+ lines.push('');
117
+ for (const finding of sortByPriority(summary.findings.byPriority.P2)) {
118
+ lines.push(...formatFindingMarkdown(finding, itemNumber++));
119
+ }
120
+ }
121
+ if (summary.findings.byPriority.P3.length > 0) {
122
+ lines.push(`## P3 - Low (${summary.findings.byPriority.P3.length})`);
123
+ lines.push('');
124
+ for (const finding of sortByPriority(summary.findings.byPriority.P3)) {
125
+ lines.push(...formatFindingMarkdown(finding, itemNumber++));
126
+ }
127
+ }
128
+ // Metrics Overview
129
+ lines.push('## Metrics Overview');
130
+ lines.push('');
131
+ lines.push(formatMetricsTableMarkdown(summary.metrics));
132
+ lines.push('');
133
+ // Suggested Next Steps
134
+ if (summary.suggestedNextSteps.length > 0) {
135
+ lines.push('## Suggested Next Steps');
136
+ lines.push('');
137
+ for (let i = 0; i < summary.suggestedNextSteps.length; i++) {
138
+ lines.push(`${i + 1}. ${summary.suggestedNextSteps[i]}`);
139
+ }
140
+ lines.push('');
141
+ }
142
+ return lines.join('\n');
143
+ }
144
+ /**
145
+ * Format a single finding for CLI
146
+ */
147
+ function formatFindingCLI(finding, itemNumber) {
148
+ const lines = [];
149
+ const priorityColor = getPriorityColor(finding.priority);
150
+ lines.push(` ${priorityColor(`[${itemNumber}]`)} ${chalk.bold(finding.title)}`);
151
+ lines.push(` Service: ${chalk.cyan(finding.service)}`);
152
+ // Evidence (show first 3 items)
153
+ if (finding.evidence.length > 0) {
154
+ const evidenceToShow = finding.evidence.slice(0, 3);
155
+ lines.push(` Evidence: ${evidenceToShow.join('; ')}`);
156
+ if (finding.evidence.length > 3) {
157
+ lines.push(` ... and ${finding.evidence.length - 3} more`);
158
+ }
159
+ }
160
+ // Action
161
+ if (finding.suggestedAction) {
162
+ lines.push(` Action: ${chalk.green(finding.suggestedAction)}`);
163
+ }
164
+ // Owner and timeline
165
+ if (finding.owner || finding.timeline) {
166
+ const parts = [];
167
+ if (finding.owner)
168
+ parts.push(`Owner: ${finding.owner}`);
169
+ if (finding.timeline)
170
+ parts.push(`Timeline: ${finding.timeline}`);
171
+ lines.push(` ${parts.join(' | ')}`);
172
+ }
173
+ lines.push('');
174
+ return lines;
175
+ }
176
+ /**
177
+ * Format a single finding for markdown
178
+ */
179
+ function formatFindingMarkdown(finding, itemNumber) {
180
+ const lines = [];
181
+ lines.push(`### [${itemNumber}] ${finding.title}`);
182
+ lines.push('');
183
+ lines.push(`**Service:** ${finding.service}`);
184
+ lines.push('');
185
+ if (finding.description) {
186
+ lines.push(finding.description);
187
+ lines.push('');
188
+ }
189
+ // Evidence
190
+ if (finding.evidence.length > 0) {
191
+ lines.push('**Evidence:**');
192
+ for (const evidence of finding.evidence) {
193
+ lines.push(`- ${evidence}`);
194
+ }
195
+ lines.push('');
196
+ }
197
+ // Action
198
+ if (finding.suggestedAction) {
199
+ lines.push(`**Action:** ${finding.suggestedAction}`);
200
+ lines.push('');
201
+ }
202
+ // Owner and timeline
203
+ if (finding.owner || finding.timeline) {
204
+ const parts = [];
205
+ if (finding.owner)
206
+ parts.push(`**Owner:** ${finding.owner}`);
207
+ if (finding.timeline)
208
+ parts.push(`**Timeline:** ${finding.timeline}`);
209
+ lines.push(parts.join(' | '));
210
+ lines.push('');
211
+ }
212
+ return lines;
213
+ }
214
+ /**
215
+ * Format metrics table for CLI
216
+ */
217
+ function formatMetricsTableCLI(metrics) {
218
+ const lines = [];
219
+ lines.push('| Metric | Status | Current | Target |');
220
+ lines.push('|-------------|----------|-----------|-----------|');
221
+ // SLA
222
+ const slaStatus = formatStatusCLI(metrics.sla.status);
223
+ lines.push(`| SLA | ${slaStatus} | ${metrics.sla.current}% | ${metrics.sla.target}% |`);
224
+ // Latency
225
+ const latencyStatus = formatStatusCLI(metrics.latency.status);
226
+ lines.push(`| P99 Latency | ${latencyStatus} | ${metrics.latency.current} | ${metrics.latency.target} |`);
227
+ // Error Rate
228
+ const errorStatus = formatStatusCLI(metrics.errorRate.status);
229
+ lines.push(`| Error Rate | ${errorStatus} | ${metrics.errorRate.current} | ${metrics.errorRate.target} |`);
230
+ // Traffic
231
+ const trafficStatus = formatStatusCLI(metrics.traffic.status);
232
+ lines.push(`| Traffic | ${trafficStatus} | ${metrics.traffic.current} | ${metrics.traffic.capacity} |`);
233
+ return lines.join('\n');
234
+ }
235
+ /**
236
+ * Format metrics table for markdown
237
+ */
238
+ function formatMetricsTableMarkdown(metrics) {
239
+ const lines = [];
240
+ lines.push('| Metric | Status | Current | Target |');
241
+ lines.push('|--------|--------|---------|--------|');
242
+ lines.push(`| SLA | ${metrics.sla.status.toUpperCase()} | ${metrics.sla.current}% | ${metrics.sla.target}% |`);
243
+ lines.push(`| P99 Latency | ${metrics.latency.status.toUpperCase()} | ${metrics.latency.current} | ${metrics.latency.target} |`);
244
+ lines.push(`| Error Rate | ${metrics.errorRate.status.toUpperCase()} | ${metrics.errorRate.current} | ${metrics.errorRate.target} |`);
245
+ lines.push(`| Traffic | ${metrics.traffic.status.toUpperCase()} | ${metrics.traffic.current} | ${metrics.traffic.capacity} |`);
246
+ return lines.join('\n');
247
+ }
248
+ /**
249
+ * Format status with color for CLI
250
+ */
251
+ function formatStatusCLI(status) {
252
+ const statusUpper = status.toUpperCase().padEnd(8);
253
+ switch (status) {
254
+ case 'healthy':
255
+ return chalk.green(statusUpper);
256
+ case 'warning':
257
+ return chalk.yellow(statusUpper);
258
+ case 'breached':
259
+ case 'critical':
260
+ return chalk.red(statusUpper);
261
+ default:
262
+ return statusUpper;
263
+ }
264
+ }
265
+ /**
266
+ * Get color function for priority
267
+ */
268
+ function getPriorityColor(priority) {
269
+ switch (priority) {
270
+ case 'P0':
271
+ return chalk.red;
272
+ case 'P1':
273
+ return chalk.yellow;
274
+ case 'P2':
275
+ return chalk.blue;
276
+ case 'P3':
277
+ return chalk.gray;
278
+ }
279
+ }
280
+ /**
281
+ * Generate overview text
282
+ */
283
+ function generateOverview(p0Count, p1Count, p2Count) {
284
+ const parts = [];
285
+ if (p0Count > 0) {
286
+ parts.push(`${p0Count} critical issue${p0Count === 1 ? '' : 's'}`);
287
+ }
288
+ if (p1Count > 0) {
289
+ parts.push(`${p1Count} high priority issue${p1Count === 1 ? '' : 's'}`);
290
+ }
291
+ if (p2Count > 0) {
292
+ parts.push(`${p2Count} warning${p2Count === 1 ? '' : 's'}`);
293
+ }
294
+ if (parts.length === 0) {
295
+ return 'No critical issues found.';
296
+ }
297
+ return `Found ${parts.join(' and ')}.`;
298
+ }
299
+ /**
300
+ * Generate metrics summary from findings
301
+ */
302
+ function generateMetricsFromFindings(aggregated) {
303
+ // Initialize with default healthy state
304
+ const metrics = {
305
+ sla: { status: 'healthy', current: 99.9, target: 99.5 },
306
+ latency: { status: 'healthy', current: '250ms', target: '500ms' },
307
+ errorRate: { status: 'healthy', current: '0.5%', target: '1%' },
308
+ traffic: { status: 'healthy', current: '10K rps', capacity: '15K' },
309
+ };
310
+ // Update based on findings
311
+ for (const finding of [...aggregated.byPriority.P0, ...aggregated.byPriority.P1, ...aggregated.byPriority.P2]) {
312
+ const title = finding.title.toLowerCase();
313
+ const description = finding.description.toLowerCase();
314
+ // SLA
315
+ if (finding.category === 'sla') {
316
+ metrics.sla.status = finding.priority === 'P0' ? 'breached' : 'warning';
317
+ const slaMatch = (title + ' ' + description).match(/(\d+\.?\d*)%/);
318
+ if (slaMatch) {
319
+ metrics.sla.current = parseFloat(slaMatch[1]);
320
+ }
321
+ }
322
+ // Latency
323
+ if (finding.category === 'latency') {
324
+ metrics.latency.status = finding.priority === 'P0' || finding.priority === 'P1' ? 'critical' : 'warning';
325
+ const latencyMatch = (title + ' ' + description).match(/(\d+)\s*ms/);
326
+ if (latencyMatch) {
327
+ metrics.latency.current = `${latencyMatch[1]}ms`;
328
+ }
329
+ }
330
+ // Error Rate
331
+ if (finding.category === 'errors') {
332
+ metrics.errorRate.status = finding.priority === 'P0' || finding.priority === 'P1' ? 'critical' : 'warning';
333
+ const errorMatch = (title + ' ' + description).match(/(\d+\.?\d*)%/);
334
+ if (errorMatch) {
335
+ metrics.errorRate.current = `${errorMatch[1]}%`;
336
+ }
337
+ }
338
+ // Traffic
339
+ if (finding.category === 'traffic') {
340
+ metrics.traffic.status = finding.priority === 'P0' || finding.priority === 'P1' ? 'critical' : 'warning';
341
+ }
342
+ }
343
+ return metrics;
344
+ }
345
+ /**
346
+ * Generate action items from findings
347
+ */
348
+ function generateActionItems(aggregated) {
349
+ const items = [];
350
+ // Get all findings with suggested actions
351
+ const allFindings = [
352
+ ...aggregated.byPriority.P0,
353
+ ...aggregated.byPriority.P1,
354
+ ...aggregated.byPriority.P2,
355
+ ...aggregated.byPriority.P3,
356
+ ];
357
+ for (const finding of sortByPriority(allFindings)) {
358
+ if (finding.suggestedAction) {
359
+ items.push({
360
+ priority: finding.priority,
361
+ action: finding.suggestedAction,
362
+ owner: finding.owner,
363
+ timeline: finding.timeline,
364
+ });
365
+ }
366
+ }
367
+ return items;
368
+ }
369
+ /**
370
+ * Generate suggested next steps
371
+ */
372
+ function generateNextSteps(aggregated, actionItems) {
373
+ const steps = [];
374
+ const p0Count = aggregated.byPriority.P0.length;
375
+ const p1Count = aggregated.byPriority.P1.length;
376
+ if (p0Count > 0) {
377
+ steps.push('resolveai show details for critical items');
378
+ steps.push('resolveai note "investigating P0 issues"');
379
+ }
380
+ if (p1Count > 0) {
381
+ steps.push('resolveai investigate high-priority issues');
382
+ }
383
+ if (actionItems.length > 0 && actionItems[0].priority === 'P0') {
384
+ steps.push(`resolveai close "${actionItems[0].action}"`);
385
+ }
386
+ // If no specific actions, provide general guidance
387
+ if (steps.length === 0) {
388
+ steps.push('resolveai status to check system health');
389
+ steps.push('resolveai timeline to view recent events');
390
+ }
391
+ return steps;
392
+ }
393
+ //# sourceMappingURL=formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/findings/formatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { aggregateFindings, deduplicateFindings, type AggregatedFindings, } from './aggregator.js';
2
+ export { assignPriority, sortByPriority, } from './prioritizer.js';
3
+ export { generateExecutiveSummary, formatSummaryForCLI, formatSummaryForMarkdown, type MetricsSummary, type ActionItem, type ExecutiveSummary, } from './formatter.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/findings/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,kBAAkB,GACxB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,cAAc,EACd,cAAc,GACf,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,wBAAwB,EACxB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,7 @@
1
+ // Export aggregator
2
+ export { aggregateFindings, deduplicateFindings, } from './aggregator.js';
3
+ // Export prioritizer
4
+ export { assignPriority, sortByPriority, } from './prioritizer.js';
5
+ // Export formatter
6
+ export { generateExecutiveSummary, formatSummaryForCLI, formatSummaryForMarkdown, } from './formatter.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/findings/index.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,OAAO,EACL,iBAAiB,EACjB,mBAAmB,GAEpB,MAAM,iBAAiB,CAAC;AAEzB,qBAAqB;AACrB,OAAO,EACL,cAAc,EACd,cAAc,GACf,MAAM,kBAAkB,CAAC;AAE1B,mBAAmB;AACnB,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,wBAAwB,GAIzB,MAAM,gBAAgB,CAAC"}