@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.
- package/LICENSE +21 -0
- package/README.md +243 -0
- package/dist/analyzers/tech-stack-analyzer.d.ts +63 -0
- package/dist/analyzers/tech-stack-analyzer.d.ts.map +1 -0
- package/dist/analyzers/tech-stack-analyzer.js +401 -0
- package/dist/analyzers/tech-stack-analyzer.js.map +1 -0
- package/dist/cli/index.d.ts +9 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +347 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/collectors/evidence-collector.d.ts +57 -0
- package/dist/collectors/evidence-collector.d.ts.map +1 -0
- package/dist/collectors/evidence-collector.js +386 -0
- package/dist/collectors/evidence-collector.js.map +1 -0
- package/dist/core/assessment-engine.d.ts +76 -0
- package/dist/core/assessment-engine.d.ts.map +1 -0
- package/dist/core/assessment-engine.js +310 -0
- package/dist/core/assessment-engine.js.map +1 -0
- package/dist/generators/adr-generator.d.ts +35 -0
- package/dist/generators/adr-generator.d.ts.map +1 -0
- package/dist/generators/adr-generator.js +339 -0
- package/dist/generators/adr-generator.js.map +1 -0
- package/dist/generators-backup-phase-2/adr-generator.d.ts +31 -0
- package/dist/generators-backup-phase-2/adr-generator.d.ts.map +1 -0
- package/dist/generators-backup-phase-2/adr-generator.js +309 -0
- package/dist/generators-backup-phase-2/adr-generator.js.map +1 -0
- package/dist/llm/coalescer.d.ts +45 -0
- package/dist/llm/coalescer.d.ts.map +1 -0
- package/dist/llm/coalescer.js +258 -0
- package/dist/llm/coalescer.js.map +1 -0
- package/dist/llm/copilot-client.d.ts +53 -0
- package/dist/llm/copilot-client.d.ts.map +1 -0
- package/dist/llm/copilot-client.js +198 -0
- package/dist/llm/copilot-client.js.map +1 -0
- package/dist/llm/prompt-templates.d.ts +24 -0
- package/dist/llm/prompt-templates.d.ts.map +1 -0
- package/dist/llm/prompt-templates.js +255 -0
- package/dist/llm/prompt-templates.js.map +1 -0
- package/dist/llm/response-processor.d.ts +50 -0
- package/dist/llm/response-processor.d.ts.map +1 -0
- package/dist/llm/response-processor.js +321 -0
- package/dist/llm/response-processor.js.map +1 -0
- package/dist/llm/structured-types.d.ts +184 -0
- package/dist/llm/structured-types.d.ts.map +1 -0
- package/dist/llm/structured-types.js +61 -0
- package/dist/llm/structured-types.js.map +1 -0
- package/dist/llm/validation.d.ts +57 -0
- package/dist/llm/validation.d.ts.map +1 -0
- package/dist/llm/validation.js +273 -0
- package/dist/llm/validation.js.map +1 -0
- package/dist/llm-backup-phase-1/coalescer.d.ts +40 -0
- package/dist/llm-backup-phase-1/coalescer.d.ts.map +1 -0
- package/dist/llm-backup-phase-1/coalescer.js +209 -0
- package/dist/llm-backup-phase-1/coalescer.js.map +1 -0
- package/dist/llm-backup-phase-1/copilot-client.d.ts +53 -0
- package/dist/llm-backup-phase-1/copilot-client.d.ts.map +1 -0
- package/dist/llm-backup-phase-1/copilot-client.js +198 -0
- package/dist/llm-backup-phase-1/copilot-client.js.map +1 -0
- package/dist/llm-backup-phase-1/prompt-templates.d.ts +23 -0
- package/dist/llm-backup-phase-1/prompt-templates.d.ts.map +1 -0
- package/dist/llm-backup-phase-1/prompt-templates.js +197 -0
- package/dist/llm-backup-phase-1/prompt-templates.js.map +1 -0
- package/dist/llm-backup-phase-1/response-processor.d.ts +44 -0
- package/dist/llm-backup-phase-1/response-processor.d.ts.map +1 -0
- package/dist/llm-backup-phase-1/response-processor.js +200 -0
- package/dist/llm-backup-phase-1/response-processor.js.map +1 -0
- package/dist/llm-backup-phase-1/validation.d.ts +57 -0
- package/dist/llm-backup-phase-1/validation.d.ts.map +1 -0
- package/dist/llm-backup-phase-1/validation.js +273 -0
- package/dist/llm-backup-phase-1/validation.js.map +1 -0
- package/dist/personas/base-persona.d.ts +28 -0
- package/dist/personas/base-persona.d.ts.map +1 -0
- package/dist/personas/base-persona.js +140 -0
- package/dist/personas/base-persona.js.map +1 -0
- package/dist/personas/consultant-persona.d.ts +25 -0
- package/dist/personas/consultant-persona.d.ts.map +1 -0
- package/dist/personas/consultant-persona.js +288 -0
- package/dist/personas/consultant-persona.js.map +1 -0
- package/dist/personas/persona-factory.d.ts +17 -0
- package/dist/personas/persona-factory.d.ts.map +1 -0
- package/dist/personas/persona-factory.js +53 -0
- package/dist/personas/persona-factory.js.map +1 -0
- package/dist/personas/research-backed-consultant.d.ts +12 -0
- package/dist/personas/research-backed-consultant.d.ts.map +1 -0
- package/dist/personas/research-backed-consultant.js +100 -0
- package/dist/personas/research-backed-consultant.js.map +1 -0
- package/dist/personas-backup-phase-1/base-persona.d.ts +28 -0
- package/dist/personas-backup-phase-1/base-persona.d.ts.map +1 -0
- package/dist/personas-backup-phase-1/base-persona.js +140 -0
- package/dist/personas-backup-phase-1/base-persona.js.map +1 -0
- package/dist/personas-backup-phase-1/consultant-persona.d.ts +24 -0
- package/dist/personas-backup-phase-1/consultant-persona.d.ts.map +1 -0
- package/dist/personas-backup-phase-1/consultant-persona.js +197 -0
- package/dist/personas-backup-phase-1/consultant-persona.js.map +1 -0
- package/dist/personas-backup-phase-1/persona-factory.d.ts +17 -0
- package/dist/personas-backup-phase-1/persona-factory.d.ts.map +1 -0
- package/dist/personas-backup-phase-1/persona-factory.js +53 -0
- package/dist/personas-backup-phase-1/persona-factory.js.map +1 -0
- package/dist/scanners/copilot-feature-scanner.d.ts +55 -0
- package/dist/scanners/copilot-feature-scanner.d.ts.map +1 -0
- package/dist/scanners/copilot-feature-scanner.js +259 -0
- package/dist/scanners/copilot-feature-scanner.js.map +1 -0
- package/dist/scorers/readiness-scorer.d.ts +42 -0
- package/dist/scorers/readiness-scorer.d.ts.map +1 -0
- package/dist/scorers/readiness-scorer.js +279 -0
- package/dist/scorers/readiness-scorer.js.map +1 -0
- package/dist/types/persona.d.ts +69 -0
- package/dist/types/persona.d.ts.map +1 -0
- package/dist/types/persona.js +9 -0
- package/dist/types/persona.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ADR Generator
|
|
4
|
+
*
|
|
5
|
+
* Generates professional Architecture Decision Records for AI enablement
|
|
6
|
+
* based on analysis results and evidence
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.ADRGenerator = void 0;
|
|
10
|
+
class ADRGenerator {
|
|
11
|
+
async generate(context) {
|
|
12
|
+
const { scores, copilotFeatures, techStack, evidence, recommendations } = context;
|
|
13
|
+
const timestamp = new Date().toISOString().split("T")[0];
|
|
14
|
+
const adrNumber = this.generateADRNumber();
|
|
15
|
+
const adr = `# ADR-${adrNumber}: AI Enablement Strategy
|
|
16
|
+
|
|
17
|
+
## Status
|
|
18
|
+
Accepted
|
|
19
|
+
|
|
20
|
+
## Context
|
|
21
|
+
This Architecture Decision Record outlines the strategic approach for AI enablement across the organization based on comprehensive repository analysis conducted on ${timestamp}.
|
|
22
|
+
|
|
23
|
+
### Current State Assessment
|
|
24
|
+
|
|
25
|
+
**Readiness Scores:**
|
|
26
|
+
- Repository Readiness: ${scores.repoReadiness}/100 (${this.getScoreDescription(scores.repoReadiness)})
|
|
27
|
+
- Team Readiness: ${scores.teamReadiness}/100 (${this.getScoreDescription(scores.teamReadiness)})
|
|
28
|
+
- Organization Readiness: ${scores.orgReadiness}/100 (${this.getScoreDescription(scores.orgReadiness)})
|
|
29
|
+
- Overall Maturity Level: ${scores.overallMaturity}/8 (${this.getMaturityDescription(scores.overallMaturity)})
|
|
30
|
+
|
|
31
|
+
**Technology Stack:**
|
|
32
|
+
- Primary Language: ${techStack.languages.primary}
|
|
33
|
+
- Frameworks: ${techStack.languages.frameworks.join(", ") || "None detected"}
|
|
34
|
+
- AI Dependencies: ${techStack.dependencies.aiRelated.length} found
|
|
35
|
+
- Package Manager: ${techStack.infrastructure.packageManager}
|
|
36
|
+
|
|
37
|
+
**AI Integration Status:**
|
|
38
|
+
- Copilot Instructions: ${copilotFeatures.githubFeatures.copilotInstructions.found ? "✅ Present" : "❌ Missing"}
|
|
39
|
+
- Code Ownership: ${copilotFeatures.githubFeatures.codeowners.found ? "✅ Defined" : "❌ Undefined"}
|
|
40
|
+
- PR Templates: ${copilotFeatures.githubFeatures.prTemplates.found ? "✅ Present" : "❌ Missing"}
|
|
41
|
+
- Issue Templates: ${copilotFeatures.githubFeatures.issueTemplates.found ? "✅ Present" : "❌ Missing"}
|
|
42
|
+
|
|
43
|
+
## Decision
|
|
44
|
+
We will implement a phased AI enablement strategy that prioritizes foundation improvements, security enhancements, and gradual AI tool adoption. This approach balances immediate value delivery with long-term sustainability.
|
|
45
|
+
|
|
46
|
+
### Strategic Approach
|
|
47
|
+
|
|
48
|
+
1. **Foundation First** (${scores.breakdown.foundation}/100)
|
|
49
|
+
- Establish robust development practices
|
|
50
|
+
- Implement comprehensive documentation
|
|
51
|
+
- Standardize tooling and configuration
|
|
52
|
+
|
|
53
|
+
2. **Security by Design** (${scores.breakdown.security}/100)
|
|
54
|
+
- Define code ownership and review processes
|
|
55
|
+
- Implement security scanning and monitoring
|
|
56
|
+
- Establish governance frameworks
|
|
57
|
+
|
|
58
|
+
3. **Workflow Optimization** (${scores.breakdown.workflow}/100)
|
|
59
|
+
- Automate repetitive tasks
|
|
60
|
+
- Enhance collaboration processes
|
|
61
|
+
- Improve code review efficiency
|
|
62
|
+
|
|
63
|
+
4. **AI Integration** (${scores.breakdown.ai}/100)
|
|
64
|
+
- Adopt AI coding assistants strategically
|
|
65
|
+
- Implement AI-friendly development practices
|
|
66
|
+
- Monitor AI tool effectiveness
|
|
67
|
+
|
|
68
|
+
5. **Governance Evolution** (${scores.breakdown.governance}/100)
|
|
69
|
+
- Establish clear decision-making processes
|
|
70
|
+
- Create feedback loops and improvement mechanisms
|
|
71
|
+
- Align AI adoption with business objectives
|
|
72
|
+
|
|
73
|
+
## Rationale
|
|
74
|
+
|
|
75
|
+
### Why This Approach
|
|
76
|
+
|
|
77
|
+
**Evidence-Based Decision Making:**
|
|
78
|
+
- Current maturity level (${scores.overallMaturity}/8) indicates ${this.getMaturityDescription(scores.overallMaturity)} readiness
|
|
79
|
+
- Repository readiness score of ${scores.repoReadiness}/100 suggests ${this.getScoreDescription(scores.repoReadiness)} foundation
|
|
80
|
+
- Team readiness of ${scores.teamReadiness}/100 shows ${this.getScoreDescription(scores.teamReadiness)} preparation for change
|
|
81
|
+
|
|
82
|
+
**Risk Mitigation:**
|
|
83
|
+
${this.generateRiskRationale(scores, evidence)}
|
|
84
|
+
|
|
85
|
+
**Value Maximization:**
|
|
86
|
+
${this.generateValueRationale(techStack, copilotFeatures)}
|
|
87
|
+
|
|
88
|
+
### Alternative Approaches Considered
|
|
89
|
+
|
|
90
|
+
1. **Aggressive AI Adoption**
|
|
91
|
+
- *Pros*: Faster AI benefits realization
|
|
92
|
+
- *Cons*: Higher risk of disruption, potential resistance
|
|
93
|
+
- *Rejected*: Current foundation (${scores.repoReadiness}/100) insufficient for aggressive approach
|
|
94
|
+
|
|
95
|
+
2. **Minimal AI Integration**
|
|
96
|
+
- *Pros*: Lower risk, minimal disruption
|
|
97
|
+
- *Cons*: Slower value realization, competitive disadvantage
|
|
98
|
+
- *Rejected*: Team readiness (${scores.teamReadiness}/100) supports more comprehensive adoption
|
|
99
|
+
|
|
100
|
+
3. **External Consultant-Led Transformation**
|
|
101
|
+
- *Pros*: Expert guidance, faster execution
|
|
102
|
+
- *Cons*: Higher cost, reduced internal capability building
|
|
103
|
+
- *Rejected*: Current team capabilities support internal-led approach
|
|
104
|
+
|
|
105
|
+
## Implementation Plan
|
|
106
|
+
|
|
107
|
+
### Phase 1: Foundation Strengthening (30 days)
|
|
108
|
+
${this.generatePhaseImplementation(recommendations.filter((r) => r.category === "foundation"))}
|
|
109
|
+
|
|
110
|
+
### Phase 2: Security & Governance (45 days)
|
|
111
|
+
${this.generatePhaseImplementation(recommendations.filter((r) => r.category === "security" || r.category === "governance"))}
|
|
112
|
+
|
|
113
|
+
### Phase 3: AI Tool Integration (60 days)
|
|
114
|
+
${this.generatePhaseImplementation(recommendations.filter((r) => r.category === "ai" || r.category === "workflow"))}
|
|
115
|
+
|
|
116
|
+
### Phase 4: Optimization & Scaling (90 days)
|
|
117
|
+
- Monitor AI tool effectiveness
|
|
118
|
+
- Refine processes based on feedback
|
|
119
|
+
- Scale successful practices across organization
|
|
120
|
+
- Establish continuous improvement cycles
|
|
121
|
+
|
|
122
|
+
## Success Metrics
|
|
123
|
+
|
|
124
|
+
### Technical Metrics
|
|
125
|
+
- Repository Readiness: Target ${Math.min(scores.repoReadiness + 20, 95)}/100
|
|
126
|
+
- Team Readiness: Target ${Math.min(scores.teamReadiness + 25, 95)}/100
|
|
127
|
+
- Organization Readiness: Target ${Math.min(scores.orgReadiness + 15, 95)}/100
|
|
128
|
+
- Overall Maturity: Target ${Math.min(scores.overallMaturity + 2, 8)}/8
|
|
129
|
+
|
|
130
|
+
### Process Metrics
|
|
131
|
+
- Code review time reduction: Target 30%
|
|
132
|
+
- Developer satisfaction: Target 4.5/5
|
|
133
|
+
- AI tool adoption rate: Target 80%
|
|
134
|
+
- Documentation coverage: Target 75%
|
|
135
|
+
|
|
136
|
+
### Business Metrics
|
|
137
|
+
- Development velocity: Target 25% improvement
|
|
138
|
+
- Code quality: Target 40% reduction in defects
|
|
139
|
+
- Onboarding time: Target 50% reduction
|
|
140
|
+
- Knowledge sharing: Target 60% improvement
|
|
141
|
+
|
|
142
|
+
## Monitoring & Review
|
|
143
|
+
|
|
144
|
+
### Key Performance Indicators
|
|
145
|
+
${this.generateKPIs(scores, techStack)}
|
|
146
|
+
|
|
147
|
+
### Review Cadence
|
|
148
|
+
- **Weekly**: Team readiness metrics and AI tool usage
|
|
149
|
+
- **Monthly**: Repository health and security posture
|
|
150
|
+
- **Quarterly**: Strategic alignment and business impact
|
|
151
|
+
- **Semi-annually**: Complete ADR review and strategy adjustment
|
|
152
|
+
|
|
153
|
+
### Success Triggers
|
|
154
|
+
- Repository readiness exceeds 80/100
|
|
155
|
+
- Team readiness exceeds 75/100
|
|
156
|
+
- AI tool adoption rate exceeds 70%
|
|
157
|
+
- Developer satisfaction exceeds 4.0/5
|
|
158
|
+
|
|
159
|
+
### Risk Indicators
|
|
160
|
+
- Repository readiness declines below 50/100
|
|
161
|
+
- Team readiness declines below 60/100
|
|
162
|
+
- AI tool resistance exceeds 30%
|
|
163
|
+
- Security incidents increase
|
|
164
|
+
|
|
165
|
+
## Consequences
|
|
166
|
+
|
|
167
|
+
### Positive Outcomes
|
|
168
|
+
- Improved development efficiency and quality
|
|
169
|
+
- Enhanced team collaboration and knowledge sharing
|
|
170
|
+
- Better alignment between technology and business objectives
|
|
171
|
+
- Increased competitive advantage through AI adoption
|
|
172
|
+
|
|
173
|
+
### Negative Consequences
|
|
174
|
+
- Initial learning curve and productivity dip
|
|
175
|
+
- Required investment in tools and training
|
|
176
|
+
- Potential resistance to change
|
|
177
|
+
- Ongoing maintenance and governance requirements
|
|
178
|
+
|
|
179
|
+
### Mitigation Strategies
|
|
180
|
+
${this.generateMitigationStrategies(recommendations)}
|
|
181
|
+
|
|
182
|
+
## References
|
|
183
|
+
|
|
184
|
+
### Analysis Data
|
|
185
|
+
- Repository Analysis: ${evidence.structure.fileCount} files analyzed
|
|
186
|
+
- Technology Stack: ${techStack.dependencies.total} dependencies identified
|
|
187
|
+
- Evidence Collection: ${evidence.metrics.linesOfCode} lines of code reviewed
|
|
188
|
+
|
|
189
|
+
### Best Practices
|
|
190
|
+
- [GitLab's AI Adoption Framework](https://docs.gitlab.com/ee/topics/ai/)
|
|
191
|
+
- [Microsoft's AI Development Guidelines](https://learn.microsoft.com/en-us/azure/architecture/ai-ml/guide/)
|
|
192
|
+
- [GitHub Copilot Best Practices](https://docs.github.com/en/copilot)
|
|
193
|
+
|
|
194
|
+
### Industry Standards
|
|
195
|
+
- [Software Engineering Institute - AI Readiness](https://www.sei.cmu.edu/)
|
|
196
|
+
- [IEEE AI Ethics Standards](https://standards.ieee.org/)
|
|
197
|
+
- [OWASP AI Security Guidelines](https://owasp.org/)
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
**Generated**: ${timestamp}
|
|
202
|
+
**Analysis Version**: 1.0.0
|
|
203
|
+
**Confidence Level**: ${scores.confidence}
|
|
204
|
+
**Next Review**: ${this.calculateNextReviewDate()}
|
|
205
|
+
|
|
206
|
+
*This ADR was generated automatically based on repository analysis and should be reviewed by the technical leadership team before implementation.*`;
|
|
207
|
+
return adr;
|
|
208
|
+
}
|
|
209
|
+
generateADRNumber() {
|
|
210
|
+
// Simple sequential numbering - in production this would track existing ADRs
|
|
211
|
+
return "001";
|
|
212
|
+
}
|
|
213
|
+
getScoreDescription(score) {
|
|
214
|
+
if (score >= 80)
|
|
215
|
+
return "Excellent";
|
|
216
|
+
if (score >= 60)
|
|
217
|
+
return "Good";
|
|
218
|
+
if (score >= 40)
|
|
219
|
+
return "Fair";
|
|
220
|
+
return "Needs Improvement";
|
|
221
|
+
}
|
|
222
|
+
getMaturityDescription(level) {
|
|
223
|
+
if (level >= 6)
|
|
224
|
+
return "Advanced";
|
|
225
|
+
if (level >= 4)
|
|
226
|
+
return "Developing";
|
|
227
|
+
if (level >= 2)
|
|
228
|
+
return "Basic";
|
|
229
|
+
return "Initial";
|
|
230
|
+
}
|
|
231
|
+
generateRiskRationale(scores, evidence) {
|
|
232
|
+
const risks = [];
|
|
233
|
+
if (scores.repoReadiness < 60) {
|
|
234
|
+
risks.push("- Repository foundation requires strengthening before AI adoption");
|
|
235
|
+
}
|
|
236
|
+
if (scores.breakdown.security < 70) {
|
|
237
|
+
risks.push("- Security posture needs enhancement to support AI tools safely");
|
|
238
|
+
}
|
|
239
|
+
if (evidence.patterns.codeComplexity === "high") {
|
|
240
|
+
risks.push("- High code complexity may slow AI tool adoption and effectiveness");
|
|
241
|
+
}
|
|
242
|
+
if (!evidence.configuration.hasTests) {
|
|
243
|
+
risks.push("- Lack of testing infrastructure increases risk of AI-generated code issues");
|
|
244
|
+
}
|
|
245
|
+
return risks.length > 0
|
|
246
|
+
? risks.join("\n")
|
|
247
|
+
: "- Current risk profile supports measured AI adoption";
|
|
248
|
+
}
|
|
249
|
+
generateValueRationale(techStack, copilotFeatures) {
|
|
250
|
+
const values = [];
|
|
251
|
+
if (techStack.aiReadiness.typescriptUsage) {
|
|
252
|
+
values.push("- TypeScript usage enhances AI code understanding and generation");
|
|
253
|
+
}
|
|
254
|
+
if (techStack.aiReadiness.modernFramework) {
|
|
255
|
+
values.push("- Modern framework adoption aligns well with AI coding assistants");
|
|
256
|
+
}
|
|
257
|
+
if (techStack.dependencies.aiRelated.length > 0) {
|
|
258
|
+
values.push(`- Existing AI dependencies (${techStack.dependencies.aiRelated.length}) demonstrate team openness to AI tools`);
|
|
259
|
+
}
|
|
260
|
+
if (copilotFeatures.githubFeatures.copilotInstructions.found) {
|
|
261
|
+
values.push("- Existing Copilot instructions show team experience with AI assistance");
|
|
262
|
+
}
|
|
263
|
+
return values.length > 0
|
|
264
|
+
? values.join("\n")
|
|
265
|
+
: "- Technology stack provides good foundation for AI enablement";
|
|
266
|
+
}
|
|
267
|
+
generatePhaseImplementation(recommendations) {
|
|
268
|
+
if (recommendations.length === 0) {
|
|
269
|
+
return "- No specific actions identified for this phase\n- Focus on monitoring and optimization";
|
|
270
|
+
}
|
|
271
|
+
return recommendations
|
|
272
|
+
.map((rec) => `- **${rec.title}** (${rec.effort} effort, ${rec.timeframe || "TBD"})\n - ${rec.description}`)
|
|
273
|
+
.join("\n");
|
|
274
|
+
}
|
|
275
|
+
generateKPIs(scores, techStack) {
|
|
276
|
+
const kpis = [];
|
|
277
|
+
if (scores.repoReadiness < 80) {
|
|
278
|
+
kpis.push(`- Repository readiness improvement: Current ${scores.repoReadiness}/100 → Target 80/100`);
|
|
279
|
+
}
|
|
280
|
+
if (scores.teamReadiness < 75) {
|
|
281
|
+
kpis.push(`- Team readiness enhancement: Current ${scores.teamReadiness}/100 → Target 75/100`);
|
|
282
|
+
}
|
|
283
|
+
if (techStack.aiReadiness.score < 70) {
|
|
284
|
+
kpis.push(`- AI readiness score improvement: Current ${Math.round(techStack.aiReadiness.score)}/100 → Target 70/100`);
|
|
285
|
+
}
|
|
286
|
+
kpis.push("- AI tool adoption and satisfaction metrics");
|
|
287
|
+
kpis.push("- Code quality and development velocity measurements");
|
|
288
|
+
return kpis.join("\n");
|
|
289
|
+
}
|
|
290
|
+
generateMitigationStrategies(recommendations) {
|
|
291
|
+
const strategies = [];
|
|
292
|
+
const highPriorityRecs = recommendations.filter((r) => r.priority === "high");
|
|
293
|
+
if (highPriorityRecs.length > 0) {
|
|
294
|
+
strategies.push(`- Address ${highPriorityRecs.length} high-priority foundation issues first`);
|
|
295
|
+
}
|
|
296
|
+
strategies.push("- Provide comprehensive training and support for AI tools");
|
|
297
|
+
strategies.push("- Implement gradual rollout with feedback collection");
|
|
298
|
+
strategies.push("- Establish clear success metrics and monitoring");
|
|
299
|
+
strategies.push("- Create channels for team feedback and concerns");
|
|
300
|
+
return strategies.join("\n");
|
|
301
|
+
}
|
|
302
|
+
calculateNextReviewDate() {
|
|
303
|
+
const nextReview = new Date();
|
|
304
|
+
nextReview.setMonth(nextReview.getMonth() + 3); // 3 months from now
|
|
305
|
+
return nextReview.toISOString().split("T")[0] || "";
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
exports.ADRGenerator = ADRGenerator;
|
|
309
|
+
//# sourceMappingURL=adr-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adr-generator.js","sourceRoot":"","sources":["../../src/generators-backup-phase-2/adr-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Coalescer - Adversarial Fuzzy Comprehension
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates LLM-based coalescing of deterministic analysis results
|
|
5
|
+
* with adversarial validation to challenge and enhance insights
|
|
6
|
+
*/
|
|
7
|
+
import { PersonaContext, PersonaInsight } from "../types/persona";
|
|
8
|
+
import { CopilotClient } from "./copilot-client";
|
|
9
|
+
export interface CoalescingConfig {
|
|
10
|
+
enableAdversarialValidation: boolean;
|
|
11
|
+
confidenceThreshold: number;
|
|
12
|
+
maxTokens: number;
|
|
13
|
+
temperature: number;
|
|
14
|
+
enableStructuredOutput?: boolean;
|
|
15
|
+
requireEvidenceGrounding?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface CoalescingResult {
|
|
18
|
+
enhancedInsights: PersonaInsight[];
|
|
19
|
+
adversarialChallenges: string[];
|
|
20
|
+
confidenceScore: number;
|
|
21
|
+
processingTime: number;
|
|
22
|
+
tokensUsed: number;
|
|
23
|
+
}
|
|
24
|
+
export declare class LLMCoalescer {
|
|
25
|
+
private copilotClient;
|
|
26
|
+
private config;
|
|
27
|
+
constructor(copilotClient: CopilotClient, config?: Partial<CoalescingConfig>);
|
|
28
|
+
coalescePersonaInsights(deterministicInsights: PersonaInsight[], context: PersonaContext, personaType: string): Promise<CoalescingResult>;
|
|
29
|
+
private buildCoalescingPrompt;
|
|
30
|
+
private processLLMResponse;
|
|
31
|
+
private performAdversarialValidation;
|
|
32
|
+
private calculateEvidenceOverlap;
|
|
33
|
+
private calculateConfidenceInflation;
|
|
34
|
+
private calculatePriorityShifts;
|
|
35
|
+
private calculateConfidenceScore;
|
|
36
|
+
private processStructuredResponse;
|
|
37
|
+
private mapCategoryToPersona;
|
|
38
|
+
private createEvidenceReferences;
|
|
39
|
+
healthCheck(): Promise<boolean>;
|
|
40
|
+
getMetrics(): {
|
|
41
|
+
config: CoalescingConfig;
|
|
42
|
+
copilotMetrics: any;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=coalescer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coalescer.d.ts","sourceRoot":"","sources":["../../src/llm/coalescer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAIjD,MAAM,WAAW,gBAAgB;IAC/B,2BAA2B,EAAE,OAAO,CAAC;IACrC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,EAAE,cAAc,EAAE,CAAC;IACnC,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,MAAM,CAAmB;gBAG/B,aAAa,EAAE,aAAa,EAC5B,MAAM,GAAE,OAAO,CAAC,gBAAgB,CAAM;IAclC,uBAAuB,CAC3B,qBAAqB,EAAE,cAAc,EAAE,EACvC,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,gBAAgB,CAAC;IAmE5B,OAAO,CAAC,qBAAqB;IAqD7B,OAAO,CAAC,kBAAkB;IAkC1B,OAAO,CAAC,4BAA4B;IAiCpC,OAAO,CAAC,wBAAwB;IAUhC,OAAO,CAAC,4BAA4B;IAOpC,OAAO,CAAC,uBAAuB;IAe/B,OAAO,CAAC,wBAAwB;IAyBhC,OAAO,CAAC,yBAAyB;IA+BjC,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,wBAAwB;IAM1B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IASrC,UAAU,IAAI;QACZ,MAAM,EAAE,gBAAgB,CAAC;QACzB,cAAc,EAAE,GAAG,CAAC;KACrB;CAMF"}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* LLM Coalescer - Adversarial Fuzzy Comprehension
|
|
4
|
+
*
|
|
5
|
+
* Orchestrates LLM-based coalescing of deterministic analysis results
|
|
6
|
+
* with adversarial validation to challenge and enhance insights
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.LLMCoalescer = void 0;
|
|
10
|
+
const response_processor_1 = require("./response-processor");
|
|
11
|
+
class LLMCoalescer {
|
|
12
|
+
constructor(copilotClient, config = {}) {
|
|
13
|
+
this.copilotClient = copilotClient;
|
|
14
|
+
this.config = {
|
|
15
|
+
enableAdversarialValidation: true,
|
|
16
|
+
confidenceThreshold: 0.7,
|
|
17
|
+
maxTokens: 500,
|
|
18
|
+
temperature: 0.3,
|
|
19
|
+
enableStructuredOutput: true,
|
|
20
|
+
requireEvidenceGrounding: true,
|
|
21
|
+
...config,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
async coalescePersonaInsights(deterministicInsights, context, personaType) {
|
|
25
|
+
const startTime = Date.now();
|
|
26
|
+
try {
|
|
27
|
+
console.log(`🧠 Coalescing ${personaType} insights with adversarial validation...`);
|
|
28
|
+
// Step 1: Generate coalescing prompt with adversarial elements
|
|
29
|
+
const prompt = this.buildCoalescingPrompt(deterministicInsights, context, personaType);
|
|
30
|
+
// Step 2: Get LLM response
|
|
31
|
+
const llmResponse = await this.copilotClient.analyze({
|
|
32
|
+
prompt,
|
|
33
|
+
context,
|
|
34
|
+
maxTokens: this.config.maxTokens,
|
|
35
|
+
temperature: this.config.temperature,
|
|
36
|
+
});
|
|
37
|
+
// Step 3: Process LLM response with structured parsing
|
|
38
|
+
const processedResponse = this.config.enableStructuredOutput
|
|
39
|
+
? response_processor_1.ResponseProcessor.parseStructuredResponse(llmResponse.content)
|
|
40
|
+
: response_processor_1.ResponseProcessor.parseCoalescingResponse(llmResponse.content);
|
|
41
|
+
// Step 4: Extract enhanced insights and validate evidence grounding
|
|
42
|
+
const enhancedInsights = this.processStructuredResponse(processedResponse, deterministicInsights);
|
|
43
|
+
// Step 5: Adversarial validation
|
|
44
|
+
const adversarialChallenges = this.config.enableAdversarialValidation
|
|
45
|
+
? this.performAdversarialValidation(enhancedInsights, deterministicInsights, context)
|
|
46
|
+
: [];
|
|
47
|
+
// Step 6: Calculate confidence score
|
|
48
|
+
const confidenceScore = this.calculateConfidenceScore(enhancedInsights, adversarialChallenges, llmResponse.confidence, processedResponse.structuredResponse);
|
|
49
|
+
const processingTime = Date.now() - startTime;
|
|
50
|
+
return {
|
|
51
|
+
enhancedInsights,
|
|
52
|
+
adversarialChallenges,
|
|
53
|
+
confidenceScore,
|
|
54
|
+
processingTime,
|
|
55
|
+
tokensUsed: llmResponse.tokensUsed,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
console.error("❌ LLM coalescing failed:", error);
|
|
60
|
+
// Fallback to deterministic insights
|
|
61
|
+
return {
|
|
62
|
+
enhancedInsights: deterministicInsights,
|
|
63
|
+
adversarialChallenges: [],
|
|
64
|
+
confidenceScore: 0.5,
|
|
65
|
+
processingTime: Date.now() - startTime,
|
|
66
|
+
tokensUsed: 0,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
buildCoalescingPrompt(insights, context, personaType) {
|
|
71
|
+
const insightsText = insights
|
|
72
|
+
.map((insight, index) => `${index + 1}. ${insight.title} (${insight.priority}): ${insight.description}`)
|
|
73
|
+
.join("\n");
|
|
74
|
+
const scoresText = `
|
|
75
|
+
Repository Readiness: ${context.scores.repoReadiness}/100
|
|
76
|
+
Team Readiness: ${context.scores.teamReadiness}/100
|
|
77
|
+
Organization Readiness: ${context.scores.orgReadiness}/100
|
|
78
|
+
Overall Maturity: ${context.scores.overallMaturity}/8
|
|
79
|
+
`.trim();
|
|
80
|
+
return `As a ${personaType} AI expert, perform adversarial analysis on these deterministic insights:
|
|
81
|
+
|
|
82
|
+
DETERMINISTIC INSIGHTS:
|
|
83
|
+
${insightsText}
|
|
84
|
+
|
|
85
|
+
ASSESSMENT SCORES:
|
|
86
|
+
${scoresText}
|
|
87
|
+
|
|
88
|
+
ADVERSARIAL ANALYSIS TASK:
|
|
89
|
+
1. Challenge these insights - what might be missing or incorrect?
|
|
90
|
+
2. Identify hidden patterns or connections between insights
|
|
91
|
+
3. Question the confidence levels and priorities
|
|
92
|
+
4. Suggest alternative interpretations of the evidence
|
|
93
|
+
5. Highlight potential risks not captured in the deterministic analysis
|
|
94
|
+
|
|
95
|
+
RESPONSE FORMAT:
|
|
96
|
+
Provide your analysis in this exact format:
|
|
97
|
+
|
|
98
|
+
ENHANCED_INSIGHTS:
|
|
99
|
+
- [Enhanced insight 1 with adversarial perspective]
|
|
100
|
+
- [Enhanced insight 2 with additional evidence]
|
|
101
|
+
- [Enhanced insight 3 with risk identification]
|
|
102
|
+
|
|
103
|
+
ADVERSARIAL_CHALLENGES:
|
|
104
|
+
- [Challenge to deterministic finding 1]
|
|
105
|
+
- [Challenge to deterministic finding 2]
|
|
106
|
+
- [Question about evidence or methodology]
|
|
107
|
+
|
|
108
|
+
CONFIDENCE_ASSESSMENT:
|
|
109
|
+
[Overall confidence in the enhanced analysis and key uncertainties]
|
|
110
|
+
|
|
111
|
+
Focus on being constructively critical while maintaining evidence-based reasoning. Do not hallucinate - base all challenges on the provided evidence.`;
|
|
112
|
+
}
|
|
113
|
+
processLLMResponse(llmContent, deterministicInsights) {
|
|
114
|
+
const enhancedInsights = [];
|
|
115
|
+
try {
|
|
116
|
+
// Parse enhanced insights section
|
|
117
|
+
const enhancedSection = llmContent.match(/ENHANCED_INSIGHTS:\s*\n([\s\S]*?)(?=\n\n|\n[A-Z_]+:|$)/);
|
|
118
|
+
if (enhancedSection && enhancedSection[1]) {
|
|
119
|
+
const insightLines = enhancedSection[1]
|
|
120
|
+
.split("\n")
|
|
121
|
+
.filter(line => line.trim().startsWith("-"))
|
|
122
|
+
.map(line => line.replace(/^-\s*/, "").trim());
|
|
123
|
+
insightLines.forEach((insightText, index) => {
|
|
124
|
+
if (index < deterministicInsights.length && deterministicInsights[index]) {
|
|
125
|
+
const original = deterministicInsights[index];
|
|
126
|
+
enhancedInsights.push({
|
|
127
|
+
...original,
|
|
128
|
+
description: insightText,
|
|
129
|
+
confidence: Math.min(original.confidence + 10, 100), // Boost confidence slightly
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
console.warn("⚠️ Failed to parse LLM response, using deterministic insights");
|
|
137
|
+
return deterministicInsights;
|
|
138
|
+
}
|
|
139
|
+
return enhancedInsights.length > 0 ? enhancedInsights : deterministicInsights;
|
|
140
|
+
}
|
|
141
|
+
performAdversarialValidation(enhancedInsights, deterministicInsights, context) {
|
|
142
|
+
const challenges = [];
|
|
143
|
+
// Challenge 1: Evidence consistency
|
|
144
|
+
const evidenceOverlap = this.calculateEvidenceOverlap(enhancedInsights, deterministicInsights);
|
|
145
|
+
if (evidenceOverlap < 0.8) {
|
|
146
|
+
challenges.push("Enhanced insights introduce evidence not present in deterministic analysis - potential hallucination risk");
|
|
147
|
+
}
|
|
148
|
+
// Challenge 2: Confidence inflation
|
|
149
|
+
const confidenceInflation = this.calculateConfidenceInflation(enhancedInsights, deterministicInsights);
|
|
150
|
+
if (confidenceInflation > 0.2) {
|
|
151
|
+
challenges.push("LLM may be overconfident - confidence scores appear inflated without additional evidence");
|
|
152
|
+
}
|
|
153
|
+
// Challenge 3: Priority consistency
|
|
154
|
+
const priorityShifts = this.calculatePriorityShifts(enhancedInsights, deterministicInsights);
|
|
155
|
+
if (priorityShifts > 0.3) {
|
|
156
|
+
challenges.push("Significant priority changes detected - verify if LLM interpretation is justified by evidence");
|
|
157
|
+
}
|
|
158
|
+
// Challenge 4: Contextual relevance
|
|
159
|
+
if (context.scores.orgReadiness < 30 && enhancedInsights.some(i => i.category === "strategy")) {
|
|
160
|
+
challenges.push("Strategic insights may be premature given low organizational readiness");
|
|
161
|
+
}
|
|
162
|
+
return challenges;
|
|
163
|
+
}
|
|
164
|
+
calculateEvidenceOverlap(enhanced, deterministic) {
|
|
165
|
+
const enhancedEvidence = new Set(enhanced.flatMap(i => i.evidence));
|
|
166
|
+
const deterministicEvidence = new Set(deterministic.flatMap(i => i.evidence));
|
|
167
|
+
if (deterministicEvidence.size === 0)
|
|
168
|
+
return 0;
|
|
169
|
+
const intersection = new Set([...enhancedEvidence].filter(x => deterministicEvidence.has(x)));
|
|
170
|
+
return intersection.size / deterministicEvidence.size;
|
|
171
|
+
}
|
|
172
|
+
calculateConfidenceInflation(enhanced, deterministic) {
|
|
173
|
+
const enhancedAvg = enhanced.reduce((sum, i) => sum + i.confidence, 0) / enhanced.length;
|
|
174
|
+
const deterministicAvg = deterministic.reduce((sum, i) => sum + i.confidence, 0) / deterministic.length;
|
|
175
|
+
return (enhancedAvg - deterministicAvg) / 100;
|
|
176
|
+
}
|
|
177
|
+
calculatePriorityShifts(enhanced, deterministic) {
|
|
178
|
+
const priorityOrder = { critical: 4, high: 3, medium: 2, low: 1 };
|
|
179
|
+
let shifts = 0;
|
|
180
|
+
for (let i = 0; i < Math.min(enhanced.length, deterministic.length); i++) {
|
|
181
|
+
const enhancedPriority = priorityOrder[enhanced[i]?.priority || 'medium'];
|
|
182
|
+
const deterministicPriority = priorityOrder[deterministic[i]?.priority || 'medium'];
|
|
183
|
+
if (enhancedPriority !== deterministicPriority) {
|
|
184
|
+
shifts++;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return deterministic.length > 0 ? shifts / deterministic.length : 0;
|
|
188
|
+
}
|
|
189
|
+
calculateConfidenceScore(enhancedInsights, adversarialChallenges, llmConfidence, structuredResponse) {
|
|
190
|
+
let score = llmConfidence;
|
|
191
|
+
// Reduce confidence based on adversarial challenges
|
|
192
|
+
score -= adversarialChallenges.length * 0.1;
|
|
193
|
+
// Boost confidence if enhanced insights are well-structured
|
|
194
|
+
if (enhancedInsights.every(i => i.confidence >= 70)) {
|
|
195
|
+
score += 0.1;
|
|
196
|
+
}
|
|
197
|
+
// Adjust based on evidence grounding if structured response available
|
|
198
|
+
if (structuredResponse && structuredResponse.evidenceValidation) {
|
|
199
|
+
const groundingScore = structuredResponse.evidenceValidation.groundingScore;
|
|
200
|
+
score = score * 0.7 + groundingScore * 0.3; // Weight evidence grounding
|
|
201
|
+
}
|
|
202
|
+
return Math.max(0, Math.min(1, score));
|
|
203
|
+
}
|
|
204
|
+
processStructuredResponse(processedResponse, deterministicInsights) {
|
|
205
|
+
if (!processedResponse.structuredResponse) {
|
|
206
|
+
// Fallback to original processing
|
|
207
|
+
return this.processLLMResponse(processedResponse.rawContent, deterministicInsights);
|
|
208
|
+
}
|
|
209
|
+
const structured = processedResponse.structuredResponse;
|
|
210
|
+
const enhancedInsights = [];
|
|
211
|
+
// Convert structured insights to PersonaInsight format
|
|
212
|
+
structured.insights.forEach((insight) => {
|
|
213
|
+
const personaInsight = {
|
|
214
|
+
id: `enhanced-${insight.id}`,
|
|
215
|
+
type: "analysis",
|
|
216
|
+
title: insight.title,
|
|
217
|
+
description: insight.description,
|
|
218
|
+
priority: insight.priority,
|
|
219
|
+
confidence: Math.round(insight.confidence * 100), // Convert to 0-100 scale
|
|
220
|
+
category: this.mapCategoryToPersona(insight.category),
|
|
221
|
+
evidence: insight.evidenceIds || [],
|
|
222
|
+
};
|
|
223
|
+
enhancedInsights.push(personaInsight);
|
|
224
|
+
});
|
|
225
|
+
return enhancedInsights;
|
|
226
|
+
}
|
|
227
|
+
mapCategoryToPersona(category) {
|
|
228
|
+
const categoryMap = {
|
|
229
|
+
strategy: "strategy",
|
|
230
|
+
risk: "risk",
|
|
231
|
+
opportunity: "strategy",
|
|
232
|
+
implementation: "technical",
|
|
233
|
+
};
|
|
234
|
+
return categoryMap[category] || "strategy";
|
|
235
|
+
}
|
|
236
|
+
createEvidenceReferences() {
|
|
237
|
+
// For now, return empty evidence references
|
|
238
|
+
// In a full implementation, this would extract evidence from the context
|
|
239
|
+
return [];
|
|
240
|
+
}
|
|
241
|
+
async healthCheck() {
|
|
242
|
+
try {
|
|
243
|
+
return await this.copilotClient.healthCheck();
|
|
244
|
+
}
|
|
245
|
+
catch (error) {
|
|
246
|
+
console.error("❌ LLM coalescer health check failed:", error);
|
|
247
|
+
return false;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
getMetrics() {
|
|
251
|
+
return {
|
|
252
|
+
config: this.config,
|
|
253
|
+
copilotMetrics: this.copilotClient.getMetrics(),
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
exports.LLMCoalescer = LLMCoalescer;
|
|
258
|
+
//# sourceMappingURL=coalescer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coalescer.js","sourceRoot":"","sources":["../../src/llm/coalescer.ts"],"names":[],"mappings":"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"}
|