@ankh-studio/ai-enablement 1.0.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 (111) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +243 -0
  3. package/dist/analyzers/tech-stack-analyzer.d.ts +63 -0
  4. package/dist/analyzers/tech-stack-analyzer.d.ts.map +1 -0
  5. package/dist/analyzers/tech-stack-analyzer.js +401 -0
  6. package/dist/analyzers/tech-stack-analyzer.js.map +1 -0
  7. package/dist/cli/index.d.ts +9 -0
  8. package/dist/cli/index.d.ts.map +1 -0
  9. package/dist/cli/index.js +347 -0
  10. package/dist/cli/index.js.map +1 -0
  11. package/dist/collectors/evidence-collector.d.ts +57 -0
  12. package/dist/collectors/evidence-collector.d.ts.map +1 -0
  13. package/dist/collectors/evidence-collector.js +386 -0
  14. package/dist/collectors/evidence-collector.js.map +1 -0
  15. package/dist/core/assessment-engine.d.ts +76 -0
  16. package/dist/core/assessment-engine.d.ts.map +1 -0
  17. package/dist/core/assessment-engine.js +310 -0
  18. package/dist/core/assessment-engine.js.map +1 -0
  19. package/dist/generators/adr-generator.d.ts +35 -0
  20. package/dist/generators/adr-generator.d.ts.map +1 -0
  21. package/dist/generators/adr-generator.js +339 -0
  22. package/dist/generators/adr-generator.js.map +1 -0
  23. package/dist/generators-backup-phase-2/adr-generator.d.ts +31 -0
  24. package/dist/generators-backup-phase-2/adr-generator.d.ts.map +1 -0
  25. package/dist/generators-backup-phase-2/adr-generator.js +309 -0
  26. package/dist/generators-backup-phase-2/adr-generator.js.map +1 -0
  27. package/dist/llm/coalescer.d.ts +45 -0
  28. package/dist/llm/coalescer.d.ts.map +1 -0
  29. package/dist/llm/coalescer.js +258 -0
  30. package/dist/llm/coalescer.js.map +1 -0
  31. package/dist/llm/copilot-client.d.ts +53 -0
  32. package/dist/llm/copilot-client.d.ts.map +1 -0
  33. package/dist/llm/copilot-client.js +198 -0
  34. package/dist/llm/copilot-client.js.map +1 -0
  35. package/dist/llm/prompt-templates.d.ts +24 -0
  36. package/dist/llm/prompt-templates.d.ts.map +1 -0
  37. package/dist/llm/prompt-templates.js +255 -0
  38. package/dist/llm/prompt-templates.js.map +1 -0
  39. package/dist/llm/response-processor.d.ts +50 -0
  40. package/dist/llm/response-processor.d.ts.map +1 -0
  41. package/dist/llm/response-processor.js +321 -0
  42. package/dist/llm/response-processor.js.map +1 -0
  43. package/dist/llm/structured-types.d.ts +184 -0
  44. package/dist/llm/structured-types.d.ts.map +1 -0
  45. package/dist/llm/structured-types.js +61 -0
  46. package/dist/llm/structured-types.js.map +1 -0
  47. package/dist/llm/validation.d.ts +57 -0
  48. package/dist/llm/validation.d.ts.map +1 -0
  49. package/dist/llm/validation.js +273 -0
  50. package/dist/llm/validation.js.map +1 -0
  51. package/dist/llm-backup-phase-1/coalescer.d.ts +40 -0
  52. package/dist/llm-backup-phase-1/coalescer.d.ts.map +1 -0
  53. package/dist/llm-backup-phase-1/coalescer.js +209 -0
  54. package/dist/llm-backup-phase-1/coalescer.js.map +1 -0
  55. package/dist/llm-backup-phase-1/copilot-client.d.ts +53 -0
  56. package/dist/llm-backup-phase-1/copilot-client.d.ts.map +1 -0
  57. package/dist/llm-backup-phase-1/copilot-client.js +198 -0
  58. package/dist/llm-backup-phase-1/copilot-client.js.map +1 -0
  59. package/dist/llm-backup-phase-1/prompt-templates.d.ts +23 -0
  60. package/dist/llm-backup-phase-1/prompt-templates.d.ts.map +1 -0
  61. package/dist/llm-backup-phase-1/prompt-templates.js +197 -0
  62. package/dist/llm-backup-phase-1/prompt-templates.js.map +1 -0
  63. package/dist/llm-backup-phase-1/response-processor.d.ts +44 -0
  64. package/dist/llm-backup-phase-1/response-processor.d.ts.map +1 -0
  65. package/dist/llm-backup-phase-1/response-processor.js +200 -0
  66. package/dist/llm-backup-phase-1/response-processor.js.map +1 -0
  67. package/dist/llm-backup-phase-1/validation.d.ts +57 -0
  68. package/dist/llm-backup-phase-1/validation.d.ts.map +1 -0
  69. package/dist/llm-backup-phase-1/validation.js +273 -0
  70. package/dist/llm-backup-phase-1/validation.js.map +1 -0
  71. package/dist/personas/base-persona.d.ts +28 -0
  72. package/dist/personas/base-persona.d.ts.map +1 -0
  73. package/dist/personas/base-persona.js +140 -0
  74. package/dist/personas/base-persona.js.map +1 -0
  75. package/dist/personas/consultant-persona.d.ts +25 -0
  76. package/dist/personas/consultant-persona.d.ts.map +1 -0
  77. package/dist/personas/consultant-persona.js +288 -0
  78. package/dist/personas/consultant-persona.js.map +1 -0
  79. package/dist/personas/persona-factory.d.ts +17 -0
  80. package/dist/personas/persona-factory.d.ts.map +1 -0
  81. package/dist/personas/persona-factory.js +53 -0
  82. package/dist/personas/persona-factory.js.map +1 -0
  83. package/dist/personas/research-backed-consultant.d.ts +12 -0
  84. package/dist/personas/research-backed-consultant.d.ts.map +1 -0
  85. package/dist/personas/research-backed-consultant.js +100 -0
  86. package/dist/personas/research-backed-consultant.js.map +1 -0
  87. package/dist/personas-backup-phase-1/base-persona.d.ts +28 -0
  88. package/dist/personas-backup-phase-1/base-persona.d.ts.map +1 -0
  89. package/dist/personas-backup-phase-1/base-persona.js +140 -0
  90. package/dist/personas-backup-phase-1/base-persona.js.map +1 -0
  91. package/dist/personas-backup-phase-1/consultant-persona.d.ts +24 -0
  92. package/dist/personas-backup-phase-1/consultant-persona.d.ts.map +1 -0
  93. package/dist/personas-backup-phase-1/consultant-persona.js +197 -0
  94. package/dist/personas-backup-phase-1/consultant-persona.js.map +1 -0
  95. package/dist/personas-backup-phase-1/persona-factory.d.ts +17 -0
  96. package/dist/personas-backup-phase-1/persona-factory.d.ts.map +1 -0
  97. package/dist/personas-backup-phase-1/persona-factory.js +53 -0
  98. package/dist/personas-backup-phase-1/persona-factory.js.map +1 -0
  99. package/dist/scanners/copilot-feature-scanner.d.ts +55 -0
  100. package/dist/scanners/copilot-feature-scanner.d.ts.map +1 -0
  101. package/dist/scanners/copilot-feature-scanner.js +259 -0
  102. package/dist/scanners/copilot-feature-scanner.js.map +1 -0
  103. package/dist/scorers/readiness-scorer.d.ts +42 -0
  104. package/dist/scorers/readiness-scorer.d.ts.map +1 -0
  105. package/dist/scorers/readiness-scorer.js +279 -0
  106. package/dist/scorers/readiness-scorer.js.map +1 -0
  107. package/dist/types/persona.d.ts +69 -0
  108. package/dist/types/persona.d.ts.map +1 -0
  109. package/dist/types/persona.js +9 -0
  110. package/dist/types/persona.js.map +1 -0
  111. package/package.json +77 -0
@@ -0,0 +1,200 @@
1
+ "use strict";
2
+ /**
3
+ * LLM Response Processor
4
+ *
5
+ * Handles structured parsing and validation of LLM responses
6
+ * for adversarial coalescing with deterministic analysis
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ResponseProcessor = void 0;
10
+ class ResponseProcessor {
11
+ static parseCoalescingResponse(llmContent) {
12
+ const enhancedInsights = this.extractSection(llmContent, this.SECTION_PATTERNS.enhancedInsights);
13
+ const adversarialChallenges = this.extractSection(llmContent, this.SECTION_PATTERNS.adversarialChallenges);
14
+ const confidenceAssessment = this.extractSection(llmContent, this.SECTION_PATTERNS.confidenceAssessment);
15
+ return {
16
+ enhancedInsights,
17
+ adversarialChallenges,
18
+ confidenceAssessment: confidenceAssessment[0] || "",
19
+ rawContent: llmContent,
20
+ };
21
+ }
22
+ static parseValidationResponse(llmContent) {
23
+ const resultMatch = llmContent.match(this.VALIDATION_RESULT_PATTERN);
24
+ const notesMatch = llmContent.match(this.VALIDATION_NOTES_PATTERN);
25
+ const isValid = resultMatch ? resultMatch[1]?.toUpperCase() === "PASS" : false;
26
+ const notes = notesMatch ? notesMatch[1]?.trim() || "" : "";
27
+ const issues = this.extractIssues(notes);
28
+ const suggestions = this.extractSuggestions(notes);
29
+ const confidence = this.calculateValidationConfidence(isValid, issues.length);
30
+ return {
31
+ isValid,
32
+ confidence,
33
+ issues,
34
+ suggestions,
35
+ };
36
+ }
37
+ static processEnhancedInsights(enhancedTexts, deterministicInsights) {
38
+ const processedInsights = [];
39
+ enhancedTexts.forEach((enhancedText, index) => {
40
+ if (index < deterministicInsights.length && deterministicInsights[index]) {
41
+ const original = deterministicInsights[index];
42
+ const enhanced = this.createEnhancedInsight(original, enhancedText);
43
+ processedInsights.push(enhanced);
44
+ }
45
+ else {
46
+ // Create new insight from enhanced text
47
+ const newInsight = this.createNewInsight(enhancedText, index);
48
+ processedInsights.push(newInsight);
49
+ }
50
+ });
51
+ return processedInsights;
52
+ }
53
+ static validateResponseStructure(parsed) {
54
+ const issues = [];
55
+ const suggestions = [];
56
+ // Check required sections
57
+ if (parsed.enhancedInsights.length === 0) {
58
+ issues.push("No enhanced insights found");
59
+ suggestions.push("Add at least one enhanced insight");
60
+ }
61
+ if (parsed.adversarialChallenges.length === 0) {
62
+ issues.push("No adversarial challenges found");
63
+ suggestions.push("Add at least one adversarial challenge");
64
+ }
65
+ if (!parsed.confidenceAssessment) {
66
+ issues.push("No confidence assessment provided");
67
+ suggestions.push("Add confidence assessment section");
68
+ }
69
+ // Check content quality
70
+ if (parsed.enhancedInsights.some(insight => insight.length < 20)) {
71
+ issues.push("Some enhanced insights are too brief");
72
+ suggestions.push("Provide more detailed insights");
73
+ }
74
+ if (parsed.adversarialChallenges.some(challenge => challenge.length < 15)) {
75
+ issues.push("Some adversarial challenges are too brief");
76
+ suggestions.push("Provide more substantive challenges");
77
+ }
78
+ const confidence = this.calculateValidationConfidence(issues.length === 0, issues.length);
79
+ return {
80
+ isValid: issues.length === 0,
81
+ confidence,
82
+ issues,
83
+ suggestions,
84
+ };
85
+ }
86
+ static extractSection(content, pattern) {
87
+ const match = content.match(pattern);
88
+ if (!match || !match[1])
89
+ return [];
90
+ return match[1]
91
+ .split("\n")
92
+ .filter(line => line.trim().startsWith("-"))
93
+ .map(line => line.replace(/^-\s*/, "").trim())
94
+ .filter(line => line.length > 0);
95
+ }
96
+ static extractIssues(notes) {
97
+ if (!notes)
98
+ return [];
99
+ const issuePatterns = [
100
+ /missing/gi,
101
+ /not found/gi,
102
+ /incomplete/gi,
103
+ /unclear/gi,
104
+ /vague/gi,
105
+ /insufficient/gi,
106
+ ];
107
+ const issues = [];
108
+ issuePatterns.forEach(pattern => {
109
+ if (pattern.test(notes)) {
110
+ issues.push(notes);
111
+ }
112
+ });
113
+ return issues.length > 0 ? issues : [notes];
114
+ }
115
+ static extractSuggestions(notes) {
116
+ const suggestionPatterns = [
117
+ /should/gi,
118
+ /recommend/gi,
119
+ /consider/gi,
120
+ /add/gi,
121
+ /include/gi,
122
+ /provide/gi,
123
+ ];
124
+ const suggestions = [];
125
+ suggestionPatterns.forEach(pattern => {
126
+ if (pattern.test(notes)) {
127
+ suggestions.push(notes);
128
+ }
129
+ });
130
+ return suggestions.length > 0 ? suggestions : ["Review response structure"];
131
+ }
132
+ static calculateValidationConfidence(isValid, issueCount) {
133
+ let confidence = isValid ? 0.9 : 0.5;
134
+ confidence -= issueCount * 0.1;
135
+ return Math.max(0, Math.min(1, confidence));
136
+ }
137
+ static createEnhancedInsight(original, enhancedText) {
138
+ return {
139
+ ...original,
140
+ description: enhancedText,
141
+ confidence: Math.min(original.confidence + 5, 100), // Slight confidence boost
142
+ };
143
+ }
144
+ static createNewInsight(enhancedText, index) {
145
+ return {
146
+ id: `llm-enhanced-${Date.now()}-${index}`,
147
+ type: "analysis",
148
+ title: this.extractTitleFromText(enhancedText),
149
+ description: enhancedText,
150
+ evidence: [], // LLM should not add new evidence
151
+ confidence: 70, // Default confidence for new insights
152
+ priority: "medium",
153
+ category: "strategy",
154
+ };
155
+ }
156
+ static extractTitleFromText(text) {
157
+ // Extract first sentence or create title from first 50 characters
158
+ const sentences = text.split(/[.!?]/);
159
+ const firstSentence = sentences[0]?.trim() || "";
160
+ if (firstSentence.length <= 50) {
161
+ return firstSentence;
162
+ }
163
+ return text.substring(0, 50).trim() + "...";
164
+ }
165
+ static sanitizeResponse(content) {
166
+ // Remove any potentially harmful content
167
+ return content
168
+ .replace(/<script[^>]*>.*?<\/script>/gis, "")
169
+ .replace(/javascript:/gi, "")
170
+ .replace(/on\w+\s*=/gi, "")
171
+ .trim();
172
+ }
173
+ static extractMetrics(parsed) {
174
+ const insightCount = parsed.enhancedInsights.length;
175
+ const challengeCount = parsed.adversarialChallenges.length;
176
+ const averageInsightLength = insightCount > 0
177
+ ? parsed.enhancedInsights.reduce((sum, insight) => sum + insight.length, 0) / insightCount
178
+ : 0;
179
+ const averageChallengeLength = challengeCount > 0
180
+ ? parsed.adversarialChallenges.reduce((sum, challenge) => sum + challenge.length, 0) / challengeCount
181
+ : 0;
182
+ const hasConfidenceAssessment = parsed.confidenceAssessment.length > 0;
183
+ return {
184
+ insightCount,
185
+ challengeCount,
186
+ averageInsightLength,
187
+ averageChallengeLength,
188
+ hasConfidenceAssessment,
189
+ };
190
+ }
191
+ }
192
+ exports.ResponseProcessor = ResponseProcessor;
193
+ ResponseProcessor.SECTION_PATTERNS = {
194
+ enhancedInsights: /ENHANCED_INSIGHTS:\s*\n([\s\S]*?)(?=\n\n|\n[A-Z_]+:|$)/,
195
+ adversarialChallenges: /ADVERSARIAL_CHALLENGES:\s*\n([\s\S]*?)(?=\n\n|\n[A-Z_]+:|$)/,
196
+ confidenceAssessment: /CONFIDENCE_ASSESSMENT:\s*\n([\s\S]*?)(?=\n\n|\n[A-Z_]+:|$)/,
197
+ };
198
+ ResponseProcessor.VALIDATION_RESULT_PATTERN = /VALIDATION_RESULT:\s*(PASS|FAIL)/i;
199
+ ResponseProcessor.VALIDATION_NOTES_PATTERN = /VALIDATION_NOTES:\s*\n([\s\S]*?)(?=\n\n|\n[A-Z_]+:|$)/;
200
+ //# sourceMappingURL=response-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-processor.js","sourceRoot":"","sources":["../../src/llm-backup-phase-1/response-processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Evidence-Based Validation Layer
3
+ *
4
+ * Ensures LLM responses remain grounded in deterministic findings
5
+ * and prevents hallucination while maintaining adversarial value
6
+ */
7
+ import { PersonaInsight } from "../types/persona";
8
+ import { ParsedLLMResponse } from "./response-processor";
9
+ export interface ValidationConfig {
10
+ evidenceThreshold: number;
11
+ confidenceThreshold: number;
12
+ maxNewInsights: number;
13
+ requireEvidenceGrounding: boolean;
14
+ }
15
+ export interface ValidationReport {
16
+ isValid: boolean;
17
+ score: number;
18
+ issues: ValidationIssue[];
19
+ metrics: ValidationMetrics;
20
+ recommendations: string[];
21
+ }
22
+ export interface ValidationIssue {
23
+ type: "evidence_drift" | "confidence_inflation" | "hallucination" | "priority_mismatch";
24
+ severity: "low" | "medium" | "high" | "critical";
25
+ description: string;
26
+ affectedInsights: string[];
27
+ suggestion: string;
28
+ }
29
+ export interface ValidationMetrics {
30
+ evidenceOverlap: number;
31
+ confidenceInflation: number;
32
+ priorityAlignment: number;
33
+ newInsightCount: number;
34
+ hallucinationRisk: number;
35
+ }
36
+ export declare class EvidenceValidator {
37
+ private config;
38
+ constructor(config?: Partial<ValidationConfig>);
39
+ validateLLMResponse(parsedResponse: ParsedLLMResponse, deterministicInsights: PersonaInsight[]): ValidationReport;
40
+ private validateEvidenceGrounding;
41
+ private validateConfidenceLevels;
42
+ private validatePriorityAlignment;
43
+ private detectHallucination;
44
+ private validateNewInsights;
45
+ private calculateMetrics;
46
+ private calculateEvidenceOverlap;
47
+ private calculateConfidenceInflation;
48
+ private calculatePriorityAlignment;
49
+ private calculateHallucinationRisk;
50
+ private calculateValidationScore;
51
+ private generateRecommendations;
52
+ private extractEvidenceFromText;
53
+ private parseConfidenceFromAssessment;
54
+ private countPriorityShifts;
55
+ private findContradictions;
56
+ }
57
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/llm-backup-phase-1/validation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,wBAAwB,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,gBAAgB,GAAG,sBAAsB,GAAG,eAAe,GAAG,mBAAmB,CAAC;IACxF,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAmB;gBAErB,MAAM,GAAE,OAAO,CAAC,gBAAgB,CAAM;IAUlD,mBAAmB,CACjB,cAAc,EAAE,iBAAiB,EACjC,qBAAqB,EAAE,cAAc,EAAE,GACtC,gBAAgB;IAsDnB,OAAO,CAAC,yBAAyB;IA+BjC,OAAO,CAAC,wBAAwB;IA4BhC,OAAO,CAAC,yBAAyB;IAsBjC,OAAO,CAAC,mBAAmB;IAyB3B,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,gBAAgB;IAmCxB,OAAO,CAAC,wBAAwB;IAsBhC,OAAO,CAAC,4BAA4B;IAapC,OAAO,CAAC,0BAA0B;IAKlC,OAAO,CAAC,0BAA0B;IAwBlC,OAAO,CAAC,wBAAwB;IAgChC,OAAO,CAAC,uBAAuB;IA4B/B,OAAO,CAAC,uBAAuB;IAmB/B,OAAO,CAAC,6BAA6B;IAiBrC,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,kBAAkB;CAkB3B"}
@@ -0,0 +1,273 @@
1
+ "use strict";
2
+ /**
3
+ * Evidence-Based Validation Layer
4
+ *
5
+ * Ensures LLM responses remain grounded in deterministic findings
6
+ * and prevents hallucination while maintaining adversarial value
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.EvidenceValidator = void 0;
10
+ class EvidenceValidator {
11
+ constructor(config = {}) {
12
+ this.config = {
13
+ evidenceThreshold: 0.8,
14
+ confidenceThreshold: 0.7,
15
+ maxNewInsights: 2,
16
+ requireEvidenceGrounding: true,
17
+ ...config,
18
+ };
19
+ }
20
+ validateLLMResponse(parsedResponse, deterministicInsights) {
21
+ const issues = [];
22
+ const metrics = this.calculateMetrics(parsedResponse, deterministicInsights);
23
+ // Validate evidence grounding
24
+ if (this.config.requireEvidenceGrounding) {
25
+ const evidenceIssues = this.validateEvidenceGrounding(parsedResponse, deterministicInsights);
26
+ issues.push(...evidenceIssues);
27
+ }
28
+ // Validate confidence levels
29
+ const confidenceIssues = this.validateConfidenceLevels(parsedResponse, deterministicInsights);
30
+ issues.push(...confidenceIssues);
31
+ // Validate priority alignment
32
+ const priorityIssues = this.validatePriorityAlignment(parsedResponse, deterministicInsights);
33
+ issues.push(...priorityIssues);
34
+ // Check for hallucination
35
+ const hallucinationIssues = this.detectHallucination(parsedResponse, deterministicInsights);
36
+ issues.push(...hallucinationIssues);
37
+ // Validate new insights
38
+ const newInsightIssues = this.validateNewInsights(parsedResponse, deterministicInsights);
39
+ issues.push(...newInsightIssues);
40
+ const score = this.calculateValidationScore(metrics, issues);
41
+ const isValid = score >= this.config.confidenceThreshold;
42
+ const recommendations = this.generateRecommendations(issues, metrics);
43
+ return {
44
+ isValid,
45
+ score,
46
+ issues,
47
+ metrics,
48
+ recommendations,
49
+ };
50
+ }
51
+ validateEvidenceGrounding(parsedResponse, deterministicInsights) {
52
+ const issues = [];
53
+ const deterministicEvidence = new Set(deterministicInsights.flatMap(insight => insight.evidence));
54
+ // Check each enhanced insight for evidence grounding
55
+ parsedResponse.enhancedInsights.forEach((insightText, index) => {
56
+ const insightEvidence = this.extractEvidenceFromText(insightText);
57
+ const hasDeterministicEvidence = insightEvidence.some(evidence => deterministicEvidence.has(evidence));
58
+ if (!hasDeterministicEvidence && deterministicEvidence.size > 0) {
59
+ issues.push({
60
+ type: "evidence_drift",
61
+ severity: "medium",
62
+ description: `Enhanced insight ${index + 1} introduces evidence not present in deterministic analysis`,
63
+ affectedInsights: [`insight-${index}`],
64
+ suggestion: "Ensure all enhanced insights reference existing deterministic evidence",
65
+ });
66
+ }
67
+ });
68
+ return issues;
69
+ }
70
+ validateConfidenceLevels(parsedResponse, deterministicInsights) {
71
+ const issues = [];
72
+ const deterministicAvgConfidence = deterministicInsights.reduce((sum, insight) => sum + insight.confidence, 0) /
73
+ deterministicInsights.length;
74
+ // Parse confidence from assessment if available
75
+ const llmConfidence = this.parseConfidenceFromAssessment(parsedResponse.confidenceAssessment);
76
+ if (llmConfidence > deterministicAvgConfidence + 20) {
77
+ issues.push({
78
+ type: "confidence_inflation",
79
+ severity: "medium",
80
+ description: "LLM confidence appears significantly inflated compared to deterministic analysis",
81
+ affectedInsights: ["all"],
82
+ suggestion: "Review confidence scoring and ensure it's grounded in evidence quality",
83
+ });
84
+ }
85
+ return issues;
86
+ }
87
+ validatePriorityAlignment(parsedResponse, deterministicInsights) {
88
+ const issues = [];
89
+ // This is a simplified check - in practice, we'd need to parse priorities from enhanced insights
90
+ const priorityShifts = this.countPriorityShifts(parsedResponse.enhancedInsights);
91
+ if (priorityShifts > deterministicInsights.length * 0.3) {
92
+ issues.push({
93
+ type: "priority_mismatch",
94
+ severity: "low",
95
+ description: "Significant priority changes detected in enhanced insights",
96
+ affectedInsights: ["multiple"],
97
+ suggestion: "Ensure priority changes are justified by additional evidence",
98
+ });
99
+ }
100
+ return issues;
101
+ }
102
+ detectHallucination(parsedResponse, deterministicInsights) {
103
+ const issues = [];
104
+ // Check for claims that contradict deterministic findings
105
+ const contradictions = this.findContradictions(parsedResponse.enhancedInsights, deterministicInsights);
106
+ contradictions.forEach((contradiction, index) => {
107
+ issues.push({
108
+ type: "hallucination",
109
+ severity: "high",
110
+ description: `Enhanced insight contradicts deterministic finding: ${contradiction}`,
111
+ affectedInsights: [`insight-${index}`],
112
+ suggestion: "Review enhanced insight for accuracy and evidence grounding",
113
+ });
114
+ });
115
+ return issues;
116
+ }
117
+ validateNewInsights(parsedResponse, deterministicInsights) {
118
+ const issues = [];
119
+ const newInsightCount = Math.max(0, parsedResponse.enhancedInsights.length - deterministicInsights.length);
120
+ if (newInsightCount > this.config.maxNewInsights) {
121
+ issues.push({
122
+ type: "hallucination",
123
+ severity: "medium",
124
+ description: `Too many new insights created (${newInsightCount} vs max ${this.config.maxNewInsights})`,
125
+ affectedInsights: ["new-insights"],
126
+ suggestion: "Limit new insights to those strongly supported by existing evidence",
127
+ });
128
+ }
129
+ return issues;
130
+ }
131
+ calculateMetrics(parsedResponse, deterministicInsights) {
132
+ const evidenceOverlap = this.calculateEvidenceOverlap(parsedResponse.enhancedInsights, deterministicInsights);
133
+ const confidenceInflation = this.calculateConfidenceInflation(parsedResponse.confidenceAssessment, deterministicInsights);
134
+ const priorityAlignment = this.calculatePriorityAlignment();
135
+ const newInsightCount = Math.max(0, parsedResponse.enhancedInsights.length - deterministicInsights.length);
136
+ const hallucinationRisk = this.calculateHallucinationRisk(parsedResponse, deterministicInsights);
137
+ return {
138
+ evidenceOverlap,
139
+ confidenceInflation,
140
+ priorityAlignment,
141
+ newInsightCount,
142
+ hallucinationRisk,
143
+ };
144
+ }
145
+ calculateEvidenceOverlap(enhancedInsights, deterministicInsights) {
146
+ const deterministicEvidence = new Set(deterministicInsights.flatMap(insight => insight.evidence));
147
+ if (deterministicEvidence.size === 0)
148
+ return 1.0;
149
+ let overlappingEvidence = 0;
150
+ enhancedInsights.forEach(insight => {
151
+ const insightEvidence = this.extractEvidenceFromText(insight);
152
+ const overlap = insightEvidence.filter(evidence => deterministicEvidence.has(evidence)).length;
153
+ overlappingEvidence += overlap;
154
+ });
155
+ return overlappingEvidence / (deterministicEvidence.size * enhancedInsights.length);
156
+ }
157
+ calculateConfidenceInflation(confidenceAssessment, deterministicInsights) {
158
+ const deterministicAvg = deterministicInsights.reduce((sum, insight) => sum + insight.confidence, 0) /
159
+ deterministicInsights.length;
160
+ const llmConfidence = this.parseConfidenceFromAssessment(confidenceAssessment);
161
+ return Math.max(0, (llmConfidence - deterministicAvg) / 100);
162
+ }
163
+ calculatePriorityAlignment() {
164
+ // Simplified calculation - in practice would parse actual priorities
165
+ return 0.8; // Placeholder
166
+ }
167
+ calculateHallucinationRisk(parsedResponse, deterministicInsights) {
168
+ let riskScore = 0;
169
+ // Risk factors
170
+ if (parsedResponse.enhancedInsights.length > deterministicInsights.length * 1.5) {
171
+ riskScore += 0.3;
172
+ }
173
+ if (parsedResponse.adversarialChallenges.length === 0) {
174
+ riskScore += 0.2;
175
+ }
176
+ const contradictions = this.findContradictions(parsedResponse.enhancedInsights, deterministicInsights);
177
+ riskScore += contradictions.length * 0.2;
178
+ return Math.min(1, riskScore);
179
+ }
180
+ calculateValidationScore(metrics, issues) {
181
+ let score = 1.0;
182
+ // Deduct points for each issue based on severity
183
+ issues.forEach(issue => {
184
+ switch (issue.severity) {
185
+ case "critical":
186
+ score -= 0.4;
187
+ break;
188
+ case "high":
189
+ score -= 0.3;
190
+ break;
191
+ case "medium":
192
+ score -= 0.2;
193
+ break;
194
+ case "low":
195
+ score -= 0.1;
196
+ break;
197
+ }
198
+ });
199
+ // Factor in metrics
200
+ score *= metrics.evidenceOverlap;
201
+ score *= (1 - metrics.hallucinationRisk);
202
+ score *= (1 - metrics.confidenceInflation);
203
+ return Math.max(0, Math.min(1, score));
204
+ }
205
+ generateRecommendations(issues, metrics) {
206
+ const recommendations = [];
207
+ if (metrics.evidenceOverlap < this.config.evidenceThreshold) {
208
+ recommendations.push("Improve evidence grounding by referencing more deterministic findings");
209
+ }
210
+ if (metrics.confidenceInflation > 0.2) {
211
+ recommendations.push("Review confidence scoring to ensure it reflects evidence quality");
212
+ }
213
+ if (metrics.hallucinationRisk > 0.3) {
214
+ recommendations.push("Reduce hallucination risk by limiting new insights and improving adversarial challenges");
215
+ }
216
+ issues.forEach(issue => {
217
+ if (!recommendations.includes(issue.suggestion)) {
218
+ recommendations.push(issue.suggestion);
219
+ }
220
+ });
221
+ return recommendations;
222
+ }
223
+ // Helper methods
224
+ extractEvidenceFromText(text) {
225
+ // Simple extraction - in practice would be more sophisticated
226
+ const evidencePatterns = [
227
+ /evidence[:\s]+([^\n]+)/gi,
228
+ /data[:\s]+([^\n]+)/gi,
229
+ /analysis[:\s]+([^\n]+)/gi,
230
+ ];
231
+ const evidence = [];
232
+ evidencePatterns.forEach(pattern => {
233
+ const matches = text.match(pattern);
234
+ if (matches) {
235
+ evidence.push(...matches.map(m => m.trim()));
236
+ }
237
+ });
238
+ return evidence;
239
+ }
240
+ parseConfidenceFromAssessment(assessment) {
241
+ const confidencePatterns = [
242
+ /(\d+)%/gi,
243
+ /confidence[:\s]+(\d+)/gi,
244
+ /(\d+)\s*percent/gi,
245
+ ];
246
+ for (const pattern of confidencePatterns) {
247
+ const match = assessment.match(pattern);
248
+ if (match && match[1]) {
249
+ return parseInt(match[1], 10);
250
+ }
251
+ }
252
+ return 75; // Default confidence
253
+ }
254
+ countPriorityShifts(enhancedInsights) {
255
+ // Simplified count - in practice would parse actual priorities
256
+ return Math.floor(enhancedInsights.length * 0.1);
257
+ }
258
+ findContradictions(enhancedInsights, deterministicInsights) {
259
+ const contradictions = [];
260
+ // Simple contradiction detection - in practice would be more sophisticated
261
+ deterministicInsights.forEach(deterministic => {
262
+ enhancedInsights.forEach(enhanced => {
263
+ if (enhanced.toLowerCase().includes("not") &&
264
+ deterministic.description.toLowerCase().includes(enhanced.replace(/\s+not\s+/gi, " ").trim())) {
265
+ contradictions.push(`${deterministic.title} vs enhanced insight`);
266
+ }
267
+ });
268
+ });
269
+ return contradictions;
270
+ }
271
+ }
272
+ exports.EvidenceValidator = EvidenceValidator;
273
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/llm-backup-phase-1/validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Base Persona Class
3
+ *
4
+ * Abstract base class for all expert personas providing
5
+ * common functionality and interface definitions
6
+ */
7
+ import { LLMResponse, PersonaConfig, PersonaContext, PersonaInsight, PersonaMetrics, PersonaResponse, PersonaType } from "../types/persona";
8
+ export declare abstract class BasePersona {
9
+ protected personaConfig: PersonaConfig;
10
+ protected personaMetrics: PersonaMetrics;
11
+ constructor(config: PersonaConfig);
12
+ abstract generateInsights(context: PersonaContext): Promise<PersonaInsight[]>;
13
+ abstract generatePrompt(context: PersonaContext): string;
14
+ abstract processLLMResponse(response: LLMResponse): PersonaResponse;
15
+ analyze(context: PersonaContext): Promise<PersonaResponse>;
16
+ protected generateSummary(insights: PersonaInsight[], context: PersonaContext): string;
17
+ protected generateNextSteps(insights: PersonaInsight[]): string[];
18
+ protected estimateTimeframe(insights: PersonaInsight[]): string;
19
+ protected calculateConfidence(insights: PersonaInsight[]): "high" | "medium" | "low";
20
+ protected getMaturityLevel(score: number): string;
21
+ protected updateMetrics(insights: PersonaInsight[], responseTime: number): void;
22
+ protected getPerspective(): string;
23
+ protected createInsight(type: PersonaInsight["type"], title: string, description: string, evidence: string[], confidence: number, priority: PersonaInsight["priority"], category: PersonaInsight["category"]): PersonaInsight;
24
+ get type(): PersonaType;
25
+ get config(): PersonaConfig;
26
+ get metrics(): PersonaMetrics;
27
+ }
28
+ //# sourceMappingURL=base-persona.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-persona.d.ts","sourceRoot":"","sources":["../../src/personas/base-persona.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,WAAW,EACX,aAAa,EACb,cAAc,EACd,cAAc,EACd,cAAc,EACd,eAAe,EACf,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAE1B,8BAAsB,WAAW;IAC/B,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC;IACvC,SAAS,CAAC,cAAc,EAAE,cAAc,CAAC;gBAE7B,MAAM,EAAE,aAAa;IAUjC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAC7E,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM;IACxD,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,EAAE,WAAW,GAAG,eAAe;IAG7D,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAmChE,SAAS,CAAC,eAAe,CACvB,QAAQ,EAAE,cAAc,EAAE,EAC1B,OAAO,EAAE,cAAc,GACtB,MAAM;IAmBT,SAAS,CAAC,iBAAiB,CACzB,QAAQ,EAAE,cAAc,EAAE,GACzB,MAAM,EAAE;IAWX,SAAS,CAAC,iBAAiB,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM;IAY/D,SAAS,CAAC,mBAAmB,CAC3B,QAAQ,EAAE,cAAc,EAAE,GACzB,MAAM,GAAG,QAAQ,GAAG,KAAK;IAgB5B,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAOjD,SAAS,CAAC,aAAa,CACrB,QAAQ,EAAE,cAAc,EAAE,EAC1B,YAAY,EAAE,MAAM,GACnB,IAAI;IAaP,SAAS,CAAC,cAAc,IAAI,MAAM;IAKlC,SAAS,CAAC,aAAa,CACrB,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,EAC5B,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAAE,EAClB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,EACpC,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,GACnC,cAAc;IAcjB,IAAI,IAAI,IAAI,WAAW,CAEtB;IAED,IAAI,MAAM,IAAI,aAAa,CAE1B;IAED,IAAI,OAAO,IAAI,cAAc,CAE5B;CACF"}