@maestro-ai/mcp-server 2.4.1 → 2.5.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/dist/gates/adaptive-scoring.d.ts +133 -0
- package/dist/gates/adaptive-scoring.d.ts.map +1 -0
- package/dist/gates/adaptive-scoring.js +404 -0
- package/dist/gates/adaptive-scoring.js.map +1 -0
- package/dist/gates/compatibility-wrapper.d.ts +139 -0
- package/dist/gates/compatibility-wrapper.d.ts.map +1 -0
- package/dist/gates/compatibility-wrapper.js +362 -0
- package/dist/gates/compatibility-wrapper.js.map +1 -0
- package/dist/gates/contextual-recommender.d.ts +128 -0
- package/dist/gates/contextual-recommender.d.ts.map +1 -0
- package/dist/gates/contextual-recommender.js +446 -0
- package/dist/gates/contextual-recommender.js.map +1 -0
- package/dist/gates/intelligent-gate-engine.d.ts +158 -0
- package/dist/gates/intelligent-gate-engine.d.ts.map +1 -0
- package/dist/gates/intelligent-gate-engine.js +429 -0
- package/dist/gates/intelligent-gate-engine.js.map +1 -0
- package/dist/gates/intelligent-validator.d.ts +164 -0
- package/dist/gates/intelligent-validator.d.ts.map +1 -0
- package/dist/gates/intelligent-validator.js +347 -0
- package/dist/gates/intelligent-validator.js.map +1 -0
- package/dist/gates/maturity-levels.d.ts +119 -0
- package/dist/gates/maturity-levels.d.ts.map +1 -0
- package/dist/gates/maturity-levels.js +455 -0
- package/dist/gates/maturity-levels.js.map +1 -0
- package/dist/state/storage.d.ts.map +1 -1
- package/dist/state/storage.js +1 -0
- package/dist/state/storage.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +14 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/iniciar-projeto.d.ts +2 -2
- package/dist/tools/iniciar-projeto.d.ts.map +1 -1
- package/dist/tools/iniciar-projeto.js +53 -96
- package/dist/tools/iniciar-projeto.js.map +1 -1
- package/dist/tools/proximo.d.ts.map +1 -1
- package/dist/tools/proximo.js +116 -9
- package/dist/tools/proximo.js.map +1 -1
- package/dist/tools/setup-inicial.d.ts +48 -0
- package/dist/tools/setup-inicial.d.ts.map +1 -0
- package/dist/tools/setup-inicial.js +84 -0
- package/dist/tools/setup-inicial.js.map +1 -0
- package/dist/tools/validar-gate.d.ts.map +1 -1
- package/dist/tools/validar-gate.js +28 -28
- package/dist/tools/validar-gate.js.map +1 -1
- package/dist/types/index.d.ts +22 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils/config.d.ts +16 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +26 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/content-injector.d.ts +1 -0
- package/dist/utils/content-injector.d.ts.map +1 -1
- package/dist/utils/content-injector.js +5 -0
- package/dist/utils/content-injector.js.map +1 -1
- package/dist/utils/files.d.ts +2 -0
- package/dist/utils/files.d.ts.map +1 -1
- package/dist/utils/files.js +41 -10
- package/dist/utils/files.js.map +1 -1
- package/dist/utils/ide-paths.d.ts.map +1 -1
- package/dist/utils/ide-paths.js +7 -8
- package/dist/utils/ide-paths.js.map +1 -1
- package/dist/utils/inferencia-contextual.d.ts +3 -0
- package/dist/utils/inferencia-contextual.d.ts.map +1 -0
- package/dist/utils/inferencia-contextual.js +93 -0
- package/dist/utils/inferencia-contextual.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sistema de Scoring Adaptativo - Substitui scores fixos por dinâmicos
|
|
3
|
+
*
|
|
4
|
+
* Features principais:
|
|
5
|
+
* - Pesos dinâmicos baseados em contexto
|
|
6
|
+
* - Thresholds adaptativos por projeto
|
|
7
|
+
* - Score multi-dimensional
|
|
8
|
+
* - Aprendizado com histórico de projetos
|
|
9
|
+
*
|
|
10
|
+
* @version 3.0.0
|
|
11
|
+
*/
|
|
12
|
+
import type { ValidationContext, CompletenessAnalysis, QualityAssessment, SemanticMatch } from "./intelligent-validator.js";
|
|
13
|
+
import type { NivelComplexidade, TipoArtefato } from "../types/index.js";
|
|
14
|
+
export interface ScoringWeights {
|
|
15
|
+
semantic: number;
|
|
16
|
+
completeness: number;
|
|
17
|
+
quality: number;
|
|
18
|
+
structure: number;
|
|
19
|
+
consistency: number;
|
|
20
|
+
}
|
|
21
|
+
export interface ThresholdConfig {
|
|
22
|
+
exemplar: number;
|
|
23
|
+
highQuality: number;
|
|
24
|
+
professional: number;
|
|
25
|
+
basic: number;
|
|
26
|
+
minimal: number;
|
|
27
|
+
canAdvance: number;
|
|
28
|
+
}
|
|
29
|
+
export interface AdaptiveScore {
|
|
30
|
+
final: number;
|
|
31
|
+
components: {
|
|
32
|
+
semantic: number;
|
|
33
|
+
completeness: number;
|
|
34
|
+
quality: number;
|
|
35
|
+
structure: number;
|
|
36
|
+
consistency: number;
|
|
37
|
+
};
|
|
38
|
+
weights: ScoringWeights;
|
|
39
|
+
thresholds: ThresholdConfig;
|
|
40
|
+
adjustments: ScoreAdjustment[];
|
|
41
|
+
confidence: number;
|
|
42
|
+
}
|
|
43
|
+
export interface ScoreAdjustment {
|
|
44
|
+
type: 'context' | 'historical' | 'tier' | 'phase' | 'team';
|
|
45
|
+
factor: number;
|
|
46
|
+
reason: string;
|
|
47
|
+
impact: number;
|
|
48
|
+
}
|
|
49
|
+
export interface ProjectHistory {
|
|
50
|
+
projectId: string;
|
|
51
|
+
successfulAdvances: number;
|
|
52
|
+
totalAttempts: number;
|
|
53
|
+
averageQuality: number;
|
|
54
|
+
commonIssues: string[];
|
|
55
|
+
teamExperience: 'junior' | 'mid' | 'senior';
|
|
56
|
+
projectType: TipoArtefato;
|
|
57
|
+
complexity: NivelComplexidade;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Engine para cálculo de scores adaptativos baseados em contexto
|
|
61
|
+
*/
|
|
62
|
+
export declare class AdaptiveScoring {
|
|
63
|
+
private contextualWeights;
|
|
64
|
+
private baseThresholds;
|
|
65
|
+
private historicalData;
|
|
66
|
+
private learningRate;
|
|
67
|
+
constructor();
|
|
68
|
+
/**
|
|
69
|
+
* Calcula pesos dinâmicos baseados no contexto do projeto
|
|
70
|
+
*/
|
|
71
|
+
calculateDynamicWeights(context: ValidationContext): ScoringWeights;
|
|
72
|
+
/**
|
|
73
|
+
* Obtém thresholds adaptativos para o contexto
|
|
74
|
+
*/
|
|
75
|
+
getAdaptiveThresholds(context: ValidationContext, projectHistory?: ProjectHistory): ThresholdConfig;
|
|
76
|
+
/**
|
|
77
|
+
* Calcula score multi-dimensional adaptativo
|
|
78
|
+
*/
|
|
79
|
+
calculateMultiDimensionalScore(semanticMatches: SemanticMatch[], completeness: CompletenessAnalysis, quality: QualityAssessment, context: ValidationContext, projectHistory?: ProjectHistory): AdaptiveScore;
|
|
80
|
+
/**
|
|
81
|
+
* Atualiza pesos baseado em feedback do usuário
|
|
82
|
+
*/
|
|
83
|
+
updateWeightsFromFeedback(context: ValidationContext, originalScore: AdaptiveScore, userAccepted: boolean, userFeedback?: string): void;
|
|
84
|
+
/**
|
|
85
|
+
* Registra histórico de projeto para aprendizado
|
|
86
|
+
*/
|
|
87
|
+
recordProjectHistory(projectId: string, context: ValidationContext, wasSuccessful: boolean, finalQuality: number): void;
|
|
88
|
+
/**
|
|
89
|
+
* Inicializa pesos contextuais para diferentes tipos de projeto
|
|
90
|
+
*/
|
|
91
|
+
private initializeContextualWeights;
|
|
92
|
+
/**
|
|
93
|
+
* Inicializa thresholds base por tier
|
|
94
|
+
*/
|
|
95
|
+
private initializeBaseThresholds;
|
|
96
|
+
/**
|
|
97
|
+
* Gera chave de contexto para lookup
|
|
98
|
+
*/
|
|
99
|
+
private getContextKey;
|
|
100
|
+
/**
|
|
101
|
+
* Aplica ajustes contextuais aos pesos
|
|
102
|
+
*/
|
|
103
|
+
private applyContextualAdjustments;
|
|
104
|
+
/**
|
|
105
|
+
* Aplica aprendizado histórico aos pesos
|
|
106
|
+
*/
|
|
107
|
+
private applyHistoricalLearning;
|
|
108
|
+
/**
|
|
109
|
+
* Normaliza pesos para somar 1.0
|
|
110
|
+
*/
|
|
111
|
+
private normalizeWeights;
|
|
112
|
+
/**
|
|
113
|
+
* Ajusta thresholds baseado no contexto
|
|
114
|
+
*/
|
|
115
|
+
private adjustThresholdsForContext;
|
|
116
|
+
/**
|
|
117
|
+
* Ajusta thresholds baseado no histórico
|
|
118
|
+
*/
|
|
119
|
+
private adjustThresholdsForHistory;
|
|
120
|
+
/**
|
|
121
|
+
* Aplica ajustes finais ao score
|
|
122
|
+
*/
|
|
123
|
+
private applyScoreAdjustments;
|
|
124
|
+
private getDefaultWeights;
|
|
125
|
+
private getDefaultThresholds;
|
|
126
|
+
private calculateSemanticScore;
|
|
127
|
+
private calculateConsistencyScore;
|
|
128
|
+
private calculateVariance;
|
|
129
|
+
private calculateConfidence;
|
|
130
|
+
private getTierMultiplier;
|
|
131
|
+
private getPhaseMultiplier;
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=adaptive-scoring.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adaptive-scoring.d.ts","sourceRoot":"","sources":["../../src/gates/adaptive-scoring.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sistema de Scoring Adaptativo - Substitui scores fixos por dinâmicos
|
|
3
|
+
*
|
|
4
|
+
* Features principais:
|
|
5
|
+
* - Pesos dinâmicos baseados em contexto
|
|
6
|
+
* - Thresholds adaptativos por projeto
|
|
7
|
+
* - Score multi-dimensional
|
|
8
|
+
* - Aprendizado com histórico de projetos
|
|
9
|
+
*
|
|
10
|
+
* @version 3.0.0
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Engine para cálculo de scores adaptativos baseados em contexto
|
|
14
|
+
*/
|
|
15
|
+
export class AdaptiveScoring {
|
|
16
|
+
contextualWeights;
|
|
17
|
+
baseThresholds;
|
|
18
|
+
historicalData;
|
|
19
|
+
learningRate = 0.1;
|
|
20
|
+
constructor() {
|
|
21
|
+
this.contextualWeights = new Map();
|
|
22
|
+
this.baseThresholds = new Map();
|
|
23
|
+
this.historicalData = new Map();
|
|
24
|
+
this.initializeContextualWeights();
|
|
25
|
+
this.initializeBaseThresholds();
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Calcula pesos dinâmicos baseados no contexto do projeto
|
|
29
|
+
*/
|
|
30
|
+
calculateDynamicWeights(context) {
|
|
31
|
+
const baseKey = this.getContextKey(context);
|
|
32
|
+
let weights = this.contextualWeights.get(baseKey) || this.getDefaultWeights();
|
|
33
|
+
// Aplica ajustes baseados em fatores contextuais
|
|
34
|
+
weights = this.applyContextualAdjustments(weights, context);
|
|
35
|
+
// Aplica aprendizado histórico se disponível
|
|
36
|
+
weights = this.applyHistoricalLearning(weights, context);
|
|
37
|
+
return this.normalizeWeights(weights);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Obtém thresholds adaptativos para o contexto
|
|
41
|
+
*/
|
|
42
|
+
getAdaptiveThresholds(context, projectHistory) {
|
|
43
|
+
const baseThresholds = this.baseThresholds.get(context.tier);
|
|
44
|
+
let thresholds = baseThresholds ? { ...baseThresholds } : this.getDefaultThresholds();
|
|
45
|
+
// Ajusta baseado no contexto do projeto
|
|
46
|
+
thresholds = this.adjustThresholdsForContext(thresholds, context);
|
|
47
|
+
// Ajusta baseado no histórico se disponível
|
|
48
|
+
if (projectHistory) {
|
|
49
|
+
thresholds = this.adjustThresholdsForHistory(thresholds, projectHistory);
|
|
50
|
+
}
|
|
51
|
+
return thresholds;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Calcula score multi-dimensional adaptativo
|
|
55
|
+
*/
|
|
56
|
+
calculateMultiDimensionalScore(semanticMatches, completeness, quality, context, projectHistory) {
|
|
57
|
+
// 1. Calcula pesos dinâmicos
|
|
58
|
+
const weights = this.calculateDynamicWeights(context);
|
|
59
|
+
// 2. Obtém thresholds adaptativos
|
|
60
|
+
const thresholds = this.getAdaptiveThresholds(context, projectHistory);
|
|
61
|
+
// 3. Calcula scores dos componentes
|
|
62
|
+
const semanticScore = this.calculateSemanticScore(semanticMatches);
|
|
63
|
+
const completenessScore = completeness.completenessScore;
|
|
64
|
+
const qualityScore = quality.overall;
|
|
65
|
+
const structureScore = completeness.structuralIntegrity;
|
|
66
|
+
const consistencyScore = this.calculateConsistencyScore(semanticMatches, completeness, quality);
|
|
67
|
+
// 4. Aplica pesos para score final
|
|
68
|
+
const rawScore = Math.round((semanticScore * weights.semantic) +
|
|
69
|
+
(completenessScore * weights.completeness) +
|
|
70
|
+
(qualityScore * weights.quality) +
|
|
71
|
+
(structureScore * weights.structure) +
|
|
72
|
+
(consistencyScore * weights.consistency));
|
|
73
|
+
// 5. Aplica ajustes contextuais
|
|
74
|
+
const { adjustedScore, adjustments } = this.applyScoreAdjustments(rawScore, context, projectHistory);
|
|
75
|
+
// 6. Calcula confiança na avaliação
|
|
76
|
+
const confidence = this.calculateConfidence(semanticMatches, completeness, quality, context);
|
|
77
|
+
return {
|
|
78
|
+
final: Math.max(0, Math.min(100, adjustedScore)),
|
|
79
|
+
components: {
|
|
80
|
+
semantic: semanticScore,
|
|
81
|
+
completeness: completenessScore,
|
|
82
|
+
quality: qualityScore,
|
|
83
|
+
structure: structureScore,
|
|
84
|
+
consistency: consistencyScore
|
|
85
|
+
},
|
|
86
|
+
weights,
|
|
87
|
+
thresholds,
|
|
88
|
+
adjustments,
|
|
89
|
+
confidence
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Atualiza pesos baseado em feedback do usuário
|
|
94
|
+
*/
|
|
95
|
+
updateWeightsFromFeedback(context, originalScore, userAccepted, userFeedback) {
|
|
96
|
+
const contextKey = this.getContextKey(context);
|
|
97
|
+
const currentWeights = this.contextualWeights.get(contextKey);
|
|
98
|
+
if (!currentWeights)
|
|
99
|
+
return;
|
|
100
|
+
// Aprendizado simples: ajusta pesos baseado na aceitação
|
|
101
|
+
const adjustmentFactor = userAccepted ? 1 + this.learningRate : 1 - this.learningRate;
|
|
102
|
+
const updatedWeights = {
|
|
103
|
+
semantic: currentWeights.semantic * adjustmentFactor,
|
|
104
|
+
completeness: currentWeights.completeness * adjustmentFactor,
|
|
105
|
+
quality: currentWeights.quality * adjustmentFactor,
|
|
106
|
+
structure: currentWeights.structure * adjustmentFactor,
|
|
107
|
+
consistency: currentWeights.consistency * adjustmentFactor
|
|
108
|
+
};
|
|
109
|
+
this.contextualWeights.set(contextKey, this.normalizeWeights(updatedWeights));
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Registra histórico de projeto para aprendizado
|
|
113
|
+
*/
|
|
114
|
+
recordProjectHistory(projectId, context, wasSuccessful, finalQuality) {
|
|
115
|
+
const existing = this.historicalData.get(projectId) || {
|
|
116
|
+
projectId,
|
|
117
|
+
successfulAdvances: 0,
|
|
118
|
+
totalAttempts: 0,
|
|
119
|
+
averageQuality: 0,
|
|
120
|
+
commonIssues: [],
|
|
121
|
+
teamExperience: context.teamExperience,
|
|
122
|
+
projectType: context.projectType,
|
|
123
|
+
complexity: 'medio'
|
|
124
|
+
};
|
|
125
|
+
existing.totalAttempts += 1;
|
|
126
|
+
if (wasSuccessful) {
|
|
127
|
+
existing.successfulAdvances += 1;
|
|
128
|
+
}
|
|
129
|
+
// Atualiza média de qualidade
|
|
130
|
+
existing.averageQuality = ((existing.averageQuality * (existing.totalAttempts - 1)) + finalQuality) / existing.totalAttempts;
|
|
131
|
+
this.historicalData.set(projectId, existing);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Inicializa pesos contextuais para diferentes tipos de projeto
|
|
135
|
+
*/
|
|
136
|
+
initializeContextualWeights() {
|
|
137
|
+
this.contextualWeights = new Map([
|
|
138
|
+
// POC - Foca mais em semantic e menos em completude formal
|
|
139
|
+
['poc.junior', { semantic: 0.5, completeness: 0.2, quality: 0.15, structure: 0.1, consistency: 0.05 }],
|
|
140
|
+
['poc.mid', { semantic: 0.45, completeness: 0.25, quality: 0.2, structure: 0.05, consistency: 0.05 }],
|
|
141
|
+
['poc.senior', { semantic: 0.4, completeness: 0.3, quality: 0.2, structure: 0.05, consistency: 0.05 }],
|
|
142
|
+
// Internal - Balanceado, mais estrutura
|
|
143
|
+
['internal.junior', { semantic: 0.3, completeness: 0.35, quality: 0.2, structure: 0.1, consistency: 0.05 }],
|
|
144
|
+
['internal.mid', { semantic: 0.25, completeness: 0.4, quality: 0.25, structure: 0.05, consistency: 0.05 }],
|
|
145
|
+
['internal.senior', { semantic: 0.2, completeness: 0.45, quality: 0.25, structure: 0.05, consistency: 0.05 }],
|
|
146
|
+
// Product - Maior foco em qualidade e completude
|
|
147
|
+
['product.junior', { semantic: 0.2, completeness: 0.35, quality: 0.3, structure: 0.1, consistency: 0.05 }],
|
|
148
|
+
['product.mid', { semantic: 0.15, completeness: 0.4, quality: 0.35, structure: 0.05, consistency: 0.05 }],
|
|
149
|
+
['product.senior', { semantic: 0.1, completeness: 0.4, quality: 0.4, structure: 0.05, consistency: 0.05 }],
|
|
150
|
+
// Critical - Máximo rigor em qualidade e consistência
|
|
151
|
+
['critical.junior', { semantic: 0.15, completeness: 0.3, quality: 0.35, structure: 0.15, consistency: 0.05 }],
|
|
152
|
+
['critical.mid', { semantic: 0.1, completeness: 0.35, quality: 0.4, structure: 0.1, consistency: 0.05 }],
|
|
153
|
+
['critical.senior', { semantic: 0.05, completeness: 0.35, quality: 0.45, structure: 0.1, consistency: 0.05 }]
|
|
154
|
+
]);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Inicializa thresholds base por tier
|
|
158
|
+
*/
|
|
159
|
+
initializeBaseThresholds() {
|
|
160
|
+
this.baseThresholds = new Map([
|
|
161
|
+
['essencial', {
|
|
162
|
+
exemplar: 85, highQuality: 75, professional: 60, basic: 40, minimal: 25, canAdvance: 40
|
|
163
|
+
}],
|
|
164
|
+
['base', {
|
|
165
|
+
exemplar: 90, highQuality: 80, professional: 70, basic: 50, minimal: 30, canAdvance: 50
|
|
166
|
+
}],
|
|
167
|
+
['avancado', {
|
|
168
|
+
exemplar: 95, highQuality: 85, professional: 75, basic: 60, minimal: 40, canAdvance: 60
|
|
169
|
+
}]
|
|
170
|
+
]);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Gera chave de contexto para lookup
|
|
174
|
+
*/
|
|
175
|
+
getContextKey(context) {
|
|
176
|
+
return `${context.projectType}.${context.teamExperience}`;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Aplica ajustes contextuais aos pesos
|
|
180
|
+
*/
|
|
181
|
+
applyContextualAdjustments(weights, context) {
|
|
182
|
+
const adjusted = { ...weights };
|
|
183
|
+
// Ajuste por restrição de tempo
|
|
184
|
+
if (context.timeConstraints === 'tight') {
|
|
185
|
+
adjusted.semantic *= 1.2; // Prioriza conteúdo sobre forma
|
|
186
|
+
adjusted.structure *= 0.8; // Reduz exigência de estrutura
|
|
187
|
+
}
|
|
188
|
+
else if (context.timeConstraints === 'flexible') {
|
|
189
|
+
adjusted.quality *= 1.2; // Aumenta exigência de qualidade
|
|
190
|
+
adjusted.consistency *= 1.5; // Prioriza consistência
|
|
191
|
+
}
|
|
192
|
+
// Ajuste por criticidade do negócio
|
|
193
|
+
if (context.businessCriticality === 'critical') {
|
|
194
|
+
adjusted.quality *= 1.3;
|
|
195
|
+
adjusted.consistency *= 1.5;
|
|
196
|
+
}
|
|
197
|
+
else if (context.businessCriticality === 'low') {
|
|
198
|
+
adjusted.semantic *= 1.2;
|
|
199
|
+
adjusted.quality *= 0.9;
|
|
200
|
+
}
|
|
201
|
+
// Ajuste por estágio de iteração
|
|
202
|
+
if (context.iterationStage === 'initial') {
|
|
203
|
+
adjusted.semantic *= 1.3; // Prioriza conceitos
|
|
204
|
+
adjusted.completeness *= 0.8; // Menos rigor na completude
|
|
205
|
+
}
|
|
206
|
+
else if (context.iterationStage === 'final') {
|
|
207
|
+
adjusted.quality *= 1.3; // Máxima qualidade
|
|
208
|
+
adjusted.consistency *= 1.4; // Máxima consistência
|
|
209
|
+
}
|
|
210
|
+
return adjusted;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Aplica aprendizado histórico aos pesos
|
|
214
|
+
*/
|
|
215
|
+
applyHistoricalLearning(weights, context) {
|
|
216
|
+
// Implementação simplificada - pode ser expandida
|
|
217
|
+
const contextKey = this.getContextKey(context);
|
|
218
|
+
const learnedWeights = this.contextualWeights.get(contextKey);
|
|
219
|
+
if (learnedWeights) {
|
|
220
|
+
// Interpola entre pesos base e aprendidos
|
|
221
|
+
const alpha = 0.7; // Peso para dados aprendidos
|
|
222
|
+
return {
|
|
223
|
+
semantic: weights.semantic * (1 - alpha) + learnedWeights.semantic * alpha,
|
|
224
|
+
completeness: weights.completeness * (1 - alpha) + learnedWeights.completeness * alpha,
|
|
225
|
+
quality: weights.quality * (1 - alpha) + learnedWeights.quality * alpha,
|
|
226
|
+
structure: weights.structure * (1 - alpha) + learnedWeights.structure * alpha,
|
|
227
|
+
consistency: weights.consistency * (1 - alpha) + learnedWeights.consistency * alpha
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
return weights;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Normaliza pesos para somar 1.0
|
|
234
|
+
*/
|
|
235
|
+
normalizeWeights(weights) {
|
|
236
|
+
const sum = weights.semantic + weights.completeness + weights.quality +
|
|
237
|
+
weights.structure + weights.consistency;
|
|
238
|
+
if (sum === 0)
|
|
239
|
+
return this.getDefaultWeights();
|
|
240
|
+
return {
|
|
241
|
+
semantic: weights.semantic / sum,
|
|
242
|
+
completeness: weights.completeness / sum,
|
|
243
|
+
quality: weights.quality / sum,
|
|
244
|
+
structure: weights.structure / sum,
|
|
245
|
+
consistency: weights.consistency / sum
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Ajusta thresholds baseado no contexto
|
|
250
|
+
*/
|
|
251
|
+
adjustThresholdsForContext(thresholds, context) {
|
|
252
|
+
const adjusted = { ...thresholds };
|
|
253
|
+
// Ajuste por experiência da equipe
|
|
254
|
+
if (context.teamExperience === 'junior') {
|
|
255
|
+
// Thresholds mais baixos para times junior
|
|
256
|
+
Object.keys(adjusted).forEach(key => {
|
|
257
|
+
adjusted[key] *= 0.9;
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
else if (context.teamExperience === 'senior') {
|
|
261
|
+
// Thresholds mais altos para times senior
|
|
262
|
+
Object.keys(adjusted).forEach(key => {
|
|
263
|
+
adjusted[key] *= 1.1;
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
// Ajuste por restrições de tempo
|
|
267
|
+
if (context.timeConstraints === 'tight') {
|
|
268
|
+
adjusted.canAdvance *= 0.8; // Permite avanço mais rápido
|
|
269
|
+
}
|
|
270
|
+
return adjusted;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Ajusta thresholds baseado no histórico
|
|
274
|
+
*/
|
|
275
|
+
adjustThresholdsForHistory(thresholds, history) {
|
|
276
|
+
const successRate = history.totalAttempts > 0
|
|
277
|
+
? history.successfulAdvances / history.totalAttempts
|
|
278
|
+
: 0.5;
|
|
279
|
+
const adjusted = { ...thresholds };
|
|
280
|
+
// Se taxa de sucesso é alta, pode ser mais exigente
|
|
281
|
+
if (successRate > 0.8) {
|
|
282
|
+
Object.keys(adjusted).forEach(key => {
|
|
283
|
+
adjusted[key] *= 1.1;
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
else if (successRate < 0.4) {
|
|
287
|
+
// Se taxa de sucesso é baixa, seja mais leniente
|
|
288
|
+
Object.keys(adjusted).forEach(key => {
|
|
289
|
+
adjusted[key] *= 0.9;
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
return adjusted;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Aplica ajustes finais ao score
|
|
296
|
+
*/
|
|
297
|
+
applyScoreAdjustments(rawScore, context, projectHistory) {
|
|
298
|
+
let adjustedScore = rawScore;
|
|
299
|
+
const adjustments = [];
|
|
300
|
+
// Ajuste por tier
|
|
301
|
+
const tierMultiplier = this.getTierMultiplier(context.tier);
|
|
302
|
+
if (tierMultiplier !== 1.0) {
|
|
303
|
+
const impact = adjustedScore * (tierMultiplier - 1);
|
|
304
|
+
adjustedScore *= tierMultiplier;
|
|
305
|
+
adjustments.push({
|
|
306
|
+
type: 'tier',
|
|
307
|
+
factor: tierMultiplier,
|
|
308
|
+
reason: `Ajuste para tier ${context.tier}`,
|
|
309
|
+
impact: Math.round(impact)
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
// Ajuste por fase (algumas fases são naturalmente mais difíceis)
|
|
313
|
+
const phaseMultiplier = this.getPhaseMultiplier(context.phase.nome);
|
|
314
|
+
if (phaseMultiplier !== 1.0) {
|
|
315
|
+
const impact = adjustedScore * (phaseMultiplier - 1);
|
|
316
|
+
adjustedScore *= phaseMultiplier;
|
|
317
|
+
adjustments.push({
|
|
318
|
+
type: 'phase',
|
|
319
|
+
factor: phaseMultiplier,
|
|
320
|
+
reason: `Ajuste para fase ${context.phase.nome}`,
|
|
321
|
+
impact: Math.round(impact)
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
return { adjustedScore: Math.round(adjustedScore), adjustments };
|
|
325
|
+
}
|
|
326
|
+
// Métodos auxiliares
|
|
327
|
+
getDefaultWeights() {
|
|
328
|
+
return { semantic: 0.25, completeness: 0.35, quality: 0.25, structure: 0.1, consistency: 0.05 };
|
|
329
|
+
}
|
|
330
|
+
getDefaultThresholds() {
|
|
331
|
+
return { exemplar: 90, highQuality: 80, professional: 70, basic: 50, minimal: 30, canAdvance: 50 };
|
|
332
|
+
}
|
|
333
|
+
calculateSemanticScore(matches) {
|
|
334
|
+
if (matches.length === 0)
|
|
335
|
+
return 0;
|
|
336
|
+
const foundMatches = matches.filter(m => m.found);
|
|
337
|
+
if (foundMatches.length === 0)
|
|
338
|
+
return 0;
|
|
339
|
+
const totalConfidence = foundMatches.reduce((sum, m) => sum + m.confidence, 0);
|
|
340
|
+
const avgConfidence = totalConfidence / foundMatches.length;
|
|
341
|
+
const coverageScore = (foundMatches.length / matches.length) * 100;
|
|
342
|
+
return Math.round((avgConfidence * 100 * 0.7) + (coverageScore * 0.3));
|
|
343
|
+
}
|
|
344
|
+
calculateConsistencyScore(semanticMatches, completeness, quality) {
|
|
345
|
+
// Score de consistência baseado em coerência entre diferentes métricas
|
|
346
|
+
const semanticScore = this.calculateSemanticScore(semanticMatches);
|
|
347
|
+
const variance = this.calculateVariance([
|
|
348
|
+
semanticScore,
|
|
349
|
+
completeness.completenessScore,
|
|
350
|
+
quality.overall
|
|
351
|
+
]);
|
|
352
|
+
// Menor variância = maior consistência
|
|
353
|
+
return Math.max(0, 100 - variance);
|
|
354
|
+
}
|
|
355
|
+
calculateVariance(scores) {
|
|
356
|
+
if (scores.length < 2)
|
|
357
|
+
return 0;
|
|
358
|
+
const mean = scores.reduce((sum, score) => sum + score, 0) / scores.length;
|
|
359
|
+
const variance = scores.reduce((sum, score) => sum + Math.pow(score - mean, 2), 0) / scores.length;
|
|
360
|
+
return Math.sqrt(variance);
|
|
361
|
+
}
|
|
362
|
+
calculateConfidence(semanticMatches, completeness, quality, context) {
|
|
363
|
+
// Confiança baseada na quantidade e qualidade dos dados disponíveis
|
|
364
|
+
let confidence = 50; // Base
|
|
365
|
+
// Aumenta confiança com mais dados semânticos
|
|
366
|
+
if (semanticMatches.length > 0) {
|
|
367
|
+
const avgConfidence = semanticMatches
|
|
368
|
+
.filter(m => m.found)
|
|
369
|
+
.reduce((sum, m) => sum + m.confidence, 0) / semanticMatches.length;
|
|
370
|
+
confidence += avgConfidence * 30;
|
|
371
|
+
}
|
|
372
|
+
// Aumenta confiança com alta completude
|
|
373
|
+
if (completeness.completenessScore > 70) {
|
|
374
|
+
confidence += 15;
|
|
375
|
+
}
|
|
376
|
+
// Reduz confiança se há muitos elementos críticos faltando
|
|
377
|
+
if (completeness.missingCritical.length > 2) {
|
|
378
|
+
confidence -= 20;
|
|
379
|
+
}
|
|
380
|
+
return Math.max(0, Math.min(100, Math.round(confidence)));
|
|
381
|
+
}
|
|
382
|
+
getTierMultiplier(tier) {
|
|
383
|
+
const multipliers = {
|
|
384
|
+
'essencial': 0.95, // Mais leniente
|
|
385
|
+
'base': 1.0, // Padrão
|
|
386
|
+
'avancado': 1.1 // Mais rigoroso
|
|
387
|
+
};
|
|
388
|
+
return multipliers[tier] || 1.0;
|
|
389
|
+
}
|
|
390
|
+
getPhaseMultiplier(phaseName) {
|
|
391
|
+
// Algumas fases são naturalmente mais difíceis
|
|
392
|
+
const multipliers = {
|
|
393
|
+
'Produto': 1.0,
|
|
394
|
+
'Requisitos': 1.05,
|
|
395
|
+
'UX Design': 0.95,
|
|
396
|
+
'Arquitetura': 1.1,
|
|
397
|
+
'Backlog': 0.95,
|
|
398
|
+
'Frontend': 1.0,
|
|
399
|
+
'Backend': 1.0
|
|
400
|
+
};
|
|
401
|
+
return multipliers[phaseName] || 1.0;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
//# sourceMappingURL=adaptive-scoring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adaptive-scoring.js","sourceRoot":"","sources":["../../src/gates/adaptive-scoring.ts"],"names":[],"mappings":"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"}
|