dino-spec 13.6.1 → 14.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +118 -5
- package/dist/commands/hud.d.ts +1 -8
- package/dist/commands/hud.d.ts.map +1 -1
- package/dist/commands/hud.js +4 -18
- package/dist/commands/hud.js.map +1 -1
- package/dist/core/agents/ambiguity-resolver.d.ts +118 -0
- package/dist/core/agents/ambiguity-resolver.d.ts.map +1 -0
- package/dist/core/agents/ambiguity-resolver.js +327 -0
- package/dist/core/agents/ambiguity-resolver.js.map +1 -0
- package/dist/core/agents/confidence-gate.d.ts +99 -0
- package/dist/core/agents/confidence-gate.d.ts.map +1 -0
- package/dist/core/agents/confidence-gate.js +295 -0
- package/dist/core/agents/confidence-gate.js.map +1 -0
- package/dist/core/agents/feedback-collector.d.ts +108 -0
- package/dist/core/agents/feedback-collector.d.ts.map +1 -0
- package/dist/core/agents/feedback-collector.js +313 -0
- package/dist/core/agents/feedback-collector.js.map +1 -0
- package/dist/core/agents/parallel-reviewer.d.ts +88 -0
- package/dist/core/agents/parallel-reviewer.d.ts.map +1 -0
- package/dist/core/agents/parallel-reviewer.js +459 -0
- package/dist/core/agents/parallel-reviewer.js.map +1 -0
- package/dist/core/agents/reviewer-loop.d.ts +102 -0
- package/dist/core/agents/reviewer-loop.d.ts.map +1 -0
- package/dist/core/agents/reviewer-loop.js +373 -0
- package/dist/core/agents/reviewer-loop.js.map +1 -0
- package/dist/core/agents/skill-auditor.d.ts +82 -0
- package/dist/core/agents/skill-auditor.d.ts.map +1 -0
- package/dist/core/agents/skill-auditor.js +278 -0
- package/dist/core/agents/skill-auditor.js.map +1 -0
- package/dist/core/config/feature-flags.d.ts +25 -1
- package/dist/core/config/feature-flags.d.ts.map +1 -1
- package/dist/core/config/feature-flags.js +7 -1
- package/dist/core/config/feature-flags.js.map +1 -1
- package/dist/core/context/__tests__/budget-thresholds.test.d.ts +5 -0
- package/dist/core/context/__tests__/budget-thresholds.test.d.ts.map +1 -0
- package/dist/core/context/__tests__/budget-thresholds.test.js +223 -0
- package/dist/core/context/__tests__/budget-thresholds.test.js.map +1 -0
- package/dist/core/context/__tests__/compaction-engine.test.d.ts +5 -0
- package/dist/core/context/__tests__/compaction-engine.test.d.ts.map +1 -0
- package/dist/core/context/__tests__/compaction-engine.test.js +474 -0
- package/dist/core/context/__tests__/compaction-engine.test.js.map +1 -0
- package/dist/core/context/__tests__/output-persistence.test.d.ts +5 -0
- package/dist/core/context/__tests__/output-persistence.test.d.ts.map +1 -0
- package/dist/core/context/__tests__/output-persistence.test.js +246 -0
- package/dist/core/context/__tests__/output-persistence.test.js.map +1 -0
- package/dist/core/context/auto-injection-engine.d.ts +10 -1
- package/dist/core/context/auto-injection-engine.d.ts.map +1 -1
- package/dist/core/context/auto-injection-engine.js +45 -2
- package/dist/core/context/auto-injection-engine.js.map +1 -1
- package/dist/core/context/budget-thresholds.d.ts +167 -0
- package/dist/core/context/budget-thresholds.d.ts.map +1 -0
- package/dist/core/context/budget-thresholds.js +234 -0
- package/dist/core/context/budget-thresholds.js.map +1 -0
- package/dist/core/context/compaction-engine.d.ts +193 -0
- package/dist/core/context/compaction-engine.d.ts.map +1 -0
- package/dist/core/context/compaction-engine.js +376 -0
- package/dist/core/context/compaction-engine.js.map +1 -0
- package/dist/core/context/context-health.d.ts +27 -2
- package/dist/core/context/context-health.d.ts.map +1 -1
- package/dist/core/context/context-health.js +98 -12
- package/dist/core/context/context-health.js.map +1 -1
- package/dist/core/context/focus-resource-loader.d.ts +143 -0
- package/dist/core/context/focus-resource-loader.d.ts.map +1 -0
- package/dist/core/context/focus-resource-loader.js +305 -0
- package/dist/core/context/focus-resource-loader.js.map +1 -0
- package/dist/core/context/index.d.ts +10 -5
- package/dist/core/context/index.d.ts.map +1 -1
- package/dist/core/context/index.js +40 -5
- package/dist/core/context/index.js.map +1 -1
- package/dist/core/context/lazy-loader.d.ts +44 -1
- package/dist/core/context/lazy-loader.d.ts.map +1 -1
- package/dist/core/context/lazy-loader.js +59 -1
- package/dist/core/context/lazy-loader.js.map +1 -1
- package/dist/core/context/output-persistence.d.ts +142 -0
- package/dist/core/context/output-persistence.d.ts.map +1 -0
- package/dist/core/context/output-persistence.js +242 -0
- package/dist/core/context/output-persistence.js.map +1 -0
- package/dist/core/context-repl/__tests__/repl-environment.test.d.ts +7 -0
- package/dist/core/context-repl/__tests__/repl-environment.test.d.ts.map +1 -0
- package/dist/core/context-repl/__tests__/repl-environment.test.js +335 -0
- package/dist/core/context-repl/__tests__/repl-environment.test.js.map +1 -0
- package/dist/core/context-repl/context-window-monitor.d.ts +181 -0
- package/dist/core/context-repl/context-window-monitor.d.ts.map +1 -0
- package/dist/core/context-repl/context-window-monitor.js +309 -0
- package/dist/core/context-repl/context-window-monitor.js.map +1 -0
- package/dist/core/context-repl/index.d.ts +8 -3
- package/dist/core/context-repl/index.d.ts.map +1 -1
- package/dist/core/context-repl/index.js +11 -3
- package/dist/core/context-repl/index.js.map +1 -1
- package/dist/core/context-repl/repl-environment.d.ts +66 -0
- package/dist/core/context-repl/repl-environment.d.ts.map +1 -0
- package/dist/core/context-repl/repl-environment.js +795 -0
- package/dist/core/context-repl/repl-environment.js.map +1 -0
- package/dist/core/context-repl/types.d.ts +277 -1
- package/dist/core/context-repl/types.d.ts.map +1 -1
- package/dist/core/context-repl/types.js +52 -1
- package/dist/core/context-repl/types.js.map +1 -1
- package/dist/core/environment/__tests__/pre-verify.test.d.ts +5 -0
- package/dist/core/environment/__tests__/pre-verify.test.d.ts.map +1 -0
- package/dist/core/environment/__tests__/pre-verify.test.js +343 -0
- package/dist/core/environment/__tests__/pre-verify.test.js.map +1 -0
- package/dist/core/environment/index.d.ts +8 -0
- package/dist/core/environment/index.d.ts.map +1 -0
- package/dist/core/environment/index.js +7 -0
- package/dist/core/environment/index.js.map +1 -0
- package/dist/core/environment/pre-verify.d.ts +63 -0
- package/dist/core/environment/pre-verify.d.ts.map +1 -0
- package/dist/core/environment/pre-verify.js +221 -0
- package/dist/core/environment/pre-verify.js.map +1 -0
- package/dist/core/environment/types.d.ts +37 -0
- package/dist/core/environment/types.d.ts.map +1 -0
- package/dist/core/environment/types.js +5 -0
- package/dist/core/environment/types.js.map +1 -0
- package/dist/core/generator/claude-md.js +1 -1
- package/dist/core/intelligence/context-budget.d.ts +10 -5
- package/dist/core/intelligence/context-budget.d.ts.map +1 -1
- package/dist/core/intelligence/context-budget.js +12 -5
- package/dist/core/intelligence/context-budget.js.map +1 -1
- package/dist/core/provider/storage.d.ts.map +1 -1
- package/dist/core/provider/storage.js +1 -2
- package/dist/core/provider/storage.js.map +1 -1
- package/dist/hooks/post-edit.js +73 -0
- package/dist/hooks/post-edit.js.map +1 -1
- package/dist/hooks/session-start.js +115 -0
- package/dist/hooks/session-start.js.map +1 -1
- package/dist/hooks/types.js +1 -1
- package/dist/hooks/user-prompt-submit.js +100 -0
- package/dist/hooks/user-prompt-submit.js.map +1 -1
- package/dist/hud/config.d.ts +3 -28
- package/dist/hud/config.d.ts.map +1 -1
- package/dist/hud/config.js +8 -60
- package/dist/hud/config.js.map +1 -1
- package/dist/hud/index.d.ts.map +1 -1
- package/dist/hud/index.js +0 -1
- package/dist/hud/index.js.map +1 -1
- package/dist/hud/render/budget-bar.d.ts +0 -2
- package/dist/hud/render/budget-bar.d.ts.map +1 -1
- package/dist/hud/render/budget-bar.js +5 -8
- package/dist/hud/render/budget-bar.js.map +1 -1
- package/dist/hud/stdin.d.ts +0 -3
- package/dist/hud/stdin.d.ts.map +1 -1
- package/dist/hud/stdin.js +2 -29
- package/dist/hud/stdin.js.map +1 -1
- package/dist/hud/types.d.ts +0 -2
- package/dist/hud/types.d.ts.map +1 -1
- package/dist/mcp/__tests__/dynamic-updates.test.d.ts +5 -0
- package/dist/mcp/__tests__/dynamic-updates.test.d.ts.map +1 -0
- package/dist/mcp/__tests__/dynamic-updates.test.js +314 -0
- package/dist/mcp/__tests__/dynamic-updates.test.js.map +1 -0
- package/dist/mcp/dynamic-updates.d.ts +167 -0
- package/dist/mcp/dynamic-updates.d.ts.map +1 -0
- package/dist/mcp/dynamic-updates.js +313 -0
- package/dist/mcp/dynamic-updates.js.map +1 -0
- package/dist/mcp/focus-filter.d.ts +74 -0
- package/dist/mcp/focus-filter.d.ts.map +1 -0
- package/dist/mcp/focus-filter.js +229 -0
- package/dist/mcp/focus-filter.js.map +1 -0
- package/dist/mcp/index.d.ts +4 -2
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +5 -2
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/registry.d.ts +4 -4
- package/dist/mcp/registry.d.ts.map +1 -1
- package/dist/mcp/registry.js +17 -16
- package/dist/mcp/registry.js.map +1 -1
- package/dist/mcp/server.d.ts +2 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +12 -3
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tool-tiers.d.ts.map +1 -1
- package/dist/mcp/tool-tiers.js +5 -0
- package/dist/mcp/tool-tiers.js.map +1 -1
- package/dist/mcp/tools/__tests__/environment.test.d.ts +5 -0
- package/dist/mcp/tools/__tests__/environment.test.d.ts.map +1 -0
- package/dist/mcp/tools/__tests__/environment.test.js +219 -0
- package/dist/mcp/tools/__tests__/environment.test.js.map +1 -0
- package/dist/mcp/tools/auto-inject.d.ts +36 -0
- package/dist/mcp/tools/auto-inject.d.ts.map +1 -0
- package/dist/mcp/tools/auto-inject.js +143 -0
- package/dist/mcp/tools/auto-inject.js.map +1 -0
- package/dist/mcp/tools/auto-unload.d.ts +29 -0
- package/dist/mcp/tools/auto-unload.d.ts.map +1 -0
- package/dist/mcp/tools/auto-unload.js +151 -0
- package/dist/mcp/tools/auto-unload.js.map +1 -0
- package/dist/mcp/tools/context-repl.d.ts +48 -0
- package/dist/mcp/tools/context-repl.d.ts.map +1 -0
- package/dist/mcp/tools/context-repl.js +290 -0
- package/dist/mcp/tools/context-repl.js.map +1 -0
- package/dist/mcp/tools/environment.d.ts +27 -0
- package/dist/mcp/tools/environment.d.ts.map +1 -0
- package/dist/mcp/tools/environment.js +97 -0
- package/dist/mcp/tools/environment.js.map +1 -0
- package/dist/mcp/tools/feedback.d.ts +63 -0
- package/dist/mcp/tools/feedback.d.ts.map +1 -0
- package/dist/mcp/tools/feedback.js +255 -0
- package/dist/mcp/tools/feedback.js.map +1 -0
- package/dist/mcp/tools/health.d.ts +29 -0
- package/dist/mcp/tools/health.d.ts.map +1 -0
- package/dist/mcp/tools/health.js +171 -0
- package/dist/mcp/tools/health.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +9 -2
- package/dist/mcp/tools/index.d.ts.map +1 -1
- package/dist/mcp/tools/index.js +37 -2
- package/dist/mcp/tools/index.js.map +1 -1
- package/dist/mcp/tools/output-persistence.d.ts +44 -0
- package/dist/mcp/tools/output-persistence.d.ts.map +1 -0
- package/dist/mcp/tools/output-persistence.js +208 -0
- package/dist/mcp/tools/output-persistence.js.map +1 -0
- package/dist/mcp-server.d.ts +2 -1
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +36 -7
- package/dist/mcp-server.js.map +1 -1
- package/dist/rules/index.js +2 -2
- package/dist/utils/exec.js +2 -2
- package/dist/utils/exec.js.map +1 -1
- package/dist/utils/gitignore.d.ts.map +1 -1
- package/dist/utils/gitignore.js +5 -0
- package/dist/utils/gitignore.js.map +1 -1
- package/package.json +76 -77
- package/dist/hud/config-tui.d.ts +0 -25
- package/dist/hud/config-tui.d.ts.map +0 -1
- package/dist/hud/config-tui.js +0 -199
- package/dist/hud/config-tui.js.map +0 -1
- package/dist/hud/models.d.ts +0 -58
- package/dist/hud/models.d.ts.map +0 -1
- package/dist/hud/models.js +0 -124
- package/dist/hud/models.js.map +0 -1
- package/dist/hud/token-estimator.d.ts +0 -79
- package/dist/hud/token-estimator.d.ts.map +0 -1
- package/dist/hud/token-estimator.js +0 -126
- package/dist/hud/token-estimator.js.map +0 -1
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Confidence Gate - v14.1.0
|
|
3
|
+
*
|
|
4
|
+
* Gates tasks based on confidence level, requiring research or clarification
|
|
5
|
+
* before allowing implementation to proceed.
|
|
6
|
+
*
|
|
7
|
+
* @see .claude/rules/dino/confidence-handling.md
|
|
8
|
+
*/
|
|
9
|
+
import { analyzePrompt, isRalphEligible } from '../spec-analyzer/index.js';
|
|
10
|
+
import { resolveAmbiguity } from './ambiguity-resolver.js';
|
|
11
|
+
// =============================================================================
|
|
12
|
+
// Constants
|
|
13
|
+
// =============================================================================
|
|
14
|
+
const DEFAULT_CONFIG = {
|
|
15
|
+
threshold: Number(process.env.DINO_CONFIDENCE_THRESHOLD) || 0.8,
|
|
16
|
+
ralphThreshold: 0.9,
|
|
17
|
+
maxResearchRounds: 2,
|
|
18
|
+
maxClarificationRounds: 5,
|
|
19
|
+
enableAutoResearch: true,
|
|
20
|
+
};
|
|
21
|
+
// =============================================================================
|
|
22
|
+
// Core Functions
|
|
23
|
+
// =============================================================================
|
|
24
|
+
/**
|
|
25
|
+
* Check if task can proceed based on confidence level
|
|
26
|
+
*
|
|
27
|
+
* This is the main entry point for confidence gating.
|
|
28
|
+
* Returns decision on whether to proceed, research, or clarify.
|
|
29
|
+
*/
|
|
30
|
+
export async function checkConfidence(prompt, config = DEFAULT_CONFIG) {
|
|
31
|
+
// Analyze the prompt
|
|
32
|
+
const analysis = analyzePrompt(prompt);
|
|
33
|
+
const currentConfidence = analysis.confidenceEstimate / 100;
|
|
34
|
+
// Determine required confidence based on Ralph eligibility
|
|
35
|
+
const ralphEligibility = isRalphEligible(analysis);
|
|
36
|
+
const requiredConfidence = ralphEligibility.eligible
|
|
37
|
+
? config.ralphThreshold
|
|
38
|
+
: config.threshold;
|
|
39
|
+
// Check if we can proceed
|
|
40
|
+
if (currentConfidence >= requiredConfidence) {
|
|
41
|
+
return {
|
|
42
|
+
proceed: true,
|
|
43
|
+
confidence: currentConfidence,
|
|
44
|
+
requiredConfidence,
|
|
45
|
+
action: 'proceed',
|
|
46
|
+
reason: `Confidence ${Math.round(currentConfidence * 100)}% meets threshold ${Math.round(requiredConfidence * 100)}%`,
|
|
47
|
+
analysis,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
// Determine action based on gap and signals
|
|
51
|
+
const confidenceGap = requiredConfidence - currentConfidence;
|
|
52
|
+
const action = determineAction(analysis, confidenceGap, config);
|
|
53
|
+
// If research is needed and enabled, execute it
|
|
54
|
+
if (action === 'research' && config.enableAutoResearch) {
|
|
55
|
+
const research = await resolveAmbiguity(prompt, {
|
|
56
|
+
threshold: 20, // Lower threshold to trigger research
|
|
57
|
+
maxResearchTokens: 5000,
|
|
58
|
+
cacheDirectory: '.dino/research/',
|
|
59
|
+
enableWebSearch: true,
|
|
60
|
+
enableCodebaseSearch: true,
|
|
61
|
+
});
|
|
62
|
+
// Update confidence based on research
|
|
63
|
+
const newConfidence = Math.min(1, currentConfidence + (research.research?.confidence || 0) * 0.3);
|
|
64
|
+
if (newConfidence >= requiredConfidence) {
|
|
65
|
+
return {
|
|
66
|
+
proceed: true,
|
|
67
|
+
confidence: newConfidence,
|
|
68
|
+
requiredConfidence,
|
|
69
|
+
action: 'proceed',
|
|
70
|
+
reason: `Research improved confidence to ${Math.round(newConfidence * 100)}%`,
|
|
71
|
+
analysis,
|
|
72
|
+
research: research.research,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
// Still need clarification after research
|
|
76
|
+
return {
|
|
77
|
+
proceed: false,
|
|
78
|
+
confidence: newConfidence,
|
|
79
|
+
requiredConfidence,
|
|
80
|
+
action: 'clarify',
|
|
81
|
+
reason: `Research improved confidence to ${Math.round(newConfidence * 100)}%, but still below ${Math.round(requiredConfidence * 100)}% threshold`,
|
|
82
|
+
analysis,
|
|
83
|
+
research: research.research,
|
|
84
|
+
questions: generateClarificationQuestions(analysis),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
// Generate clarification questions
|
|
88
|
+
const questions = generateClarificationQuestions(analysis);
|
|
89
|
+
return {
|
|
90
|
+
proceed: false,
|
|
91
|
+
confidence: currentConfidence,
|
|
92
|
+
requiredConfidence,
|
|
93
|
+
action,
|
|
94
|
+
reason: `Confidence ${Math.round(currentConfidence * 100)}% below required ${Math.round(requiredConfidence * 100)}%`,
|
|
95
|
+
analysis,
|
|
96
|
+
questions,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Determine what action to take based on analysis
|
|
101
|
+
*/
|
|
102
|
+
function determineAction(analysis, confidenceGap, _config) {
|
|
103
|
+
// Prefer research for exploratory requests (vague verbs)
|
|
104
|
+
if (analysis.signals.vagueVerbs.length >= 2) {
|
|
105
|
+
return 'research';
|
|
106
|
+
}
|
|
107
|
+
// Prefer research when missing target but not unclear success
|
|
108
|
+
if (analysis.signals.missingTarget && !analysis.signals.unclearSuccess) {
|
|
109
|
+
return 'research';
|
|
110
|
+
}
|
|
111
|
+
// Large gap suggests research first
|
|
112
|
+
if (confidenceGap > 0.3) {
|
|
113
|
+
return 'research';
|
|
114
|
+
}
|
|
115
|
+
// Default to clarification for specific gaps
|
|
116
|
+
return 'clarify';
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Generate clarification questions based on analysis signals
|
|
120
|
+
*/
|
|
121
|
+
export function generateClarificationQuestions(analysis) {
|
|
122
|
+
const questions = [];
|
|
123
|
+
// Missing target
|
|
124
|
+
if (analysis.signals.missingTarget) {
|
|
125
|
+
questions.push({
|
|
126
|
+
id: 'q-target',
|
|
127
|
+
question: 'Which specific file, component, or feature should this change apply to?',
|
|
128
|
+
priority: 'blocking',
|
|
129
|
+
type: 'scope',
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
// Vague verbs
|
|
133
|
+
for (const verb of analysis.signals.vagueVerbs.slice(0, 2)) {
|
|
134
|
+
questions.push({
|
|
135
|
+
id: `q-verb-${verb}`,
|
|
136
|
+
question: `What specifically should be "${verb}ed"? Please provide concrete details.`,
|
|
137
|
+
priority: 'blocking',
|
|
138
|
+
type: 'scope',
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
// Unclear success
|
|
142
|
+
if (analysis.signals.unclearSuccess) {
|
|
143
|
+
questions.push({
|
|
144
|
+
id: 'q-success',
|
|
145
|
+
question: 'How will we know when this is working correctly? What should we test?',
|
|
146
|
+
priority: 'important',
|
|
147
|
+
type: 'success',
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
// Security related
|
|
151
|
+
if (analysis.signals.securityRelated) {
|
|
152
|
+
questions.push({
|
|
153
|
+
id: 'q-security',
|
|
154
|
+
question: 'What security requirements or constraints should this follow?',
|
|
155
|
+
priority: 'blocking',
|
|
156
|
+
type: 'risk',
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
// Data related
|
|
160
|
+
if (analysis.signals.dataRelated) {
|
|
161
|
+
questions.push({
|
|
162
|
+
id: 'q-data',
|
|
163
|
+
question: 'What data migration, backup, or rollback requirements exist?',
|
|
164
|
+
priority: 'important',
|
|
165
|
+
type: 'risk',
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
// Breaking change
|
|
169
|
+
if (analysis.signals.breakingChange) {
|
|
170
|
+
questions.push({
|
|
171
|
+
id: 'q-breaking',
|
|
172
|
+
question: 'What backwards compatibility requirements should be maintained?',
|
|
173
|
+
priority: 'blocking',
|
|
174
|
+
type: 'risk',
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
return questions;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Update confidence based on user answers
|
|
181
|
+
*/
|
|
182
|
+
export function updateConfidenceFromAnswers(currentConfidence, questions, answeredCount) {
|
|
183
|
+
if (questions.length === 0)
|
|
184
|
+
return currentConfidence;
|
|
185
|
+
// Each answered question improves confidence
|
|
186
|
+
const blockingAnswered = questions
|
|
187
|
+
.filter((q) => q.priority === 'blocking')
|
|
188
|
+
.slice(0, answeredCount).length;
|
|
189
|
+
const importantAnswered = questions
|
|
190
|
+
.filter((q) => q.priority === 'important')
|
|
191
|
+
.slice(0, Math.max(0, answeredCount - blockingAnswered)).length;
|
|
192
|
+
// Blocking questions worth more
|
|
193
|
+
const improvement = blockingAnswered * 0.15 + importantAnswered * 0.1;
|
|
194
|
+
return Math.min(1, currentConfidence + improvement);
|
|
195
|
+
}
|
|
196
|
+
// =============================================================================
|
|
197
|
+
// Session Tracking
|
|
198
|
+
// =============================================================================
|
|
199
|
+
/**
|
|
200
|
+
* Create new confidence tracking for a session
|
|
201
|
+
*/
|
|
202
|
+
export function createConfidenceTracking(prompt, config = DEFAULT_CONFIG) {
|
|
203
|
+
const analysis = analyzePrompt(prompt);
|
|
204
|
+
const ralphEligibility = isRalphEligible(analysis);
|
|
205
|
+
return {
|
|
206
|
+
currentConfidence: analysis.confidenceEstimate / 100,
|
|
207
|
+
targetConfidence: ralphEligibility.eligible
|
|
208
|
+
? config.ralphThreshold
|
|
209
|
+
: config.threshold,
|
|
210
|
+
rounds: [],
|
|
211
|
+
status: 'pending',
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Record a confidence improvement round
|
|
216
|
+
*/
|
|
217
|
+
export function recordConfidenceRound(tracking, action, confidenceAfter, details) {
|
|
218
|
+
const round = {
|
|
219
|
+
roundNumber: tracking.rounds.length + 1,
|
|
220
|
+
action,
|
|
221
|
+
confidenceBefore: tracking.currentConfidence,
|
|
222
|
+
confidenceAfter,
|
|
223
|
+
details,
|
|
224
|
+
timestamp: new Date(),
|
|
225
|
+
};
|
|
226
|
+
const newStatus = confidenceAfter >= tracking.targetConfidence
|
|
227
|
+
? 'ready'
|
|
228
|
+
: action === 'research'
|
|
229
|
+
? 'researching'
|
|
230
|
+
: 'clarifying';
|
|
231
|
+
return {
|
|
232
|
+
...tracking,
|
|
233
|
+
currentConfidence: confidenceAfter,
|
|
234
|
+
rounds: [...tracking.rounds, round],
|
|
235
|
+
status: newStatus,
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Check if tracking has exceeded max rounds
|
|
240
|
+
*/
|
|
241
|
+
export function hasExceededMaxRounds(tracking, config = DEFAULT_CONFIG) {
|
|
242
|
+
const researchRounds = tracking.rounds.filter((r) => r.action === 'research').length;
|
|
243
|
+
const clarificationRounds = tracking.rounds.filter((r) => r.action === 'clarification' || r.action === 'user-input').length;
|
|
244
|
+
return (researchRounds >= config.maxResearchRounds ||
|
|
245
|
+
clarificationRounds >= config.maxClarificationRounds);
|
|
246
|
+
}
|
|
247
|
+
// =============================================================================
|
|
248
|
+
// Session.md Formatting
|
|
249
|
+
// =============================================================================
|
|
250
|
+
/**
|
|
251
|
+
* Format confidence tracking for session.md
|
|
252
|
+
*/
|
|
253
|
+
export function formatConfidenceForSession(tracking) {
|
|
254
|
+
const lines = [];
|
|
255
|
+
lines.push('## Confidence');
|
|
256
|
+
lines.push('');
|
|
257
|
+
lines.push(`**Current:** ${Math.round(tracking.currentConfidence * 100)}% | **Target:** ${Math.round(tracking.targetConfidence * 100)}%`);
|
|
258
|
+
lines.push(`**Status:** ${tracking.status}`);
|
|
259
|
+
lines.push('');
|
|
260
|
+
if (tracking.rounds.length > 0) {
|
|
261
|
+
lines.push('### History');
|
|
262
|
+
for (const round of tracking.rounds) {
|
|
263
|
+
const change = round.confidenceAfter - round.confidenceBefore;
|
|
264
|
+
const sign = change >= 0 ? '+' : '';
|
|
265
|
+
lines.push(`- Round ${round.roundNumber} (${round.action}): ${Math.round(round.confidenceBefore * 100)}% → ${Math.round(round.confidenceAfter * 100)}% (${sign}${Math.round(change * 100)}%)`);
|
|
266
|
+
}
|
|
267
|
+
lines.push('');
|
|
268
|
+
}
|
|
269
|
+
return lines.join('\n');
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Format gate result for display
|
|
273
|
+
*/
|
|
274
|
+
export function formatGateResult(result) {
|
|
275
|
+
const lines = [];
|
|
276
|
+
lines.push('## Confidence Gate');
|
|
277
|
+
lines.push('');
|
|
278
|
+
const status = result.proceed ? 'PASSED' : 'BLOCKED';
|
|
279
|
+
const emoji = result.proceed ? '✅' : '🚫';
|
|
280
|
+
lines.push(`**Status:** ${emoji} ${status}`);
|
|
281
|
+
lines.push(`**Confidence:** ${Math.round(result.confidence * 100)}% / ${Math.round(result.requiredConfidence * 100)}% required`);
|
|
282
|
+
lines.push(`**Action:** ${result.action}`);
|
|
283
|
+
lines.push(`**Reason:** ${result.reason}`);
|
|
284
|
+
lines.push('');
|
|
285
|
+
if (result.questions && result.questions.length > 0) {
|
|
286
|
+
lines.push('### Clarification Questions');
|
|
287
|
+
for (const q of result.questions) {
|
|
288
|
+
const priorityEmoji = q.priority === 'blocking' ? '🔴' : q.priority === 'important' ? '🟡' : '🟢';
|
|
289
|
+
lines.push(`${priorityEmoji} **[${q.priority}]** ${q.question}`);
|
|
290
|
+
}
|
|
291
|
+
lines.push('');
|
|
292
|
+
}
|
|
293
|
+
return lines.join('\n');
|
|
294
|
+
}
|
|
295
|
+
//# sourceMappingURL=confidence-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confidence-gate.js","sourceRoot":"","sources":["../../../src/core/agents/confidence-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feedback Collector - v14.1.0
|
|
3
|
+
*
|
|
4
|
+
* Structured feedback collection from reviewer findings.
|
|
5
|
+
* Tracks quality trends across iterations and triggers early stopping.
|
|
6
|
+
*
|
|
7
|
+
* @see Continuous feedback loop for iterative improvement
|
|
8
|
+
*/
|
|
9
|
+
import type { ReviewResult } from './reviewer-loop.js';
|
|
10
|
+
/**
|
|
11
|
+
* Structured feedback entry
|
|
12
|
+
*/
|
|
13
|
+
export interface FeedbackEntry {
|
|
14
|
+
id: string;
|
|
15
|
+
type: 'issue' | 'suggestion' | 'positive';
|
|
16
|
+
severity: 'critical' | 'major' | 'minor' | 'info';
|
|
17
|
+
category: 'security' | 'quality' | 'style' | 'performance' | 'test' | 'other';
|
|
18
|
+
file: string;
|
|
19
|
+
line?: number;
|
|
20
|
+
message: string;
|
|
21
|
+
suggestion?: string;
|
|
22
|
+
iteration: number;
|
|
23
|
+
timestamp: Date;
|
|
24
|
+
resolved: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Quality history entry for tracking trends
|
|
28
|
+
*/
|
|
29
|
+
export interface QualityHistoryEntry {
|
|
30
|
+
iteration: number;
|
|
31
|
+
score: number;
|
|
32
|
+
issueCount: number;
|
|
33
|
+
criticalCount: number;
|
|
34
|
+
majorCount: number;
|
|
35
|
+
minorCount: number;
|
|
36
|
+
timestamp: Date;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Feedback collector state
|
|
40
|
+
*/
|
|
41
|
+
export interface FeedbackCollectorState {
|
|
42
|
+
entries: FeedbackEntry[];
|
|
43
|
+
history: QualityHistoryEntry[];
|
|
44
|
+
currentIteration: number;
|
|
45
|
+
qualityScore: number;
|
|
46
|
+
status: 'improving' | 'plateau' | 'degrading';
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Feedback collector configuration
|
|
50
|
+
*/
|
|
51
|
+
export interface FeedbackCollectorConfig {
|
|
52
|
+
plateauThreshold: number;
|
|
53
|
+
minIterationsForPlateau: number;
|
|
54
|
+
maxIterations: number;
|
|
55
|
+
qualityWeights: {
|
|
56
|
+
critical: number;
|
|
57
|
+
major: number;
|
|
58
|
+
minor: number;
|
|
59
|
+
info: number;
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Early stopping recommendation
|
|
64
|
+
*/
|
|
65
|
+
export interface EarlyStoppingResult {
|
|
66
|
+
shouldStop: boolean;
|
|
67
|
+
reason: string;
|
|
68
|
+
qualityScore: number;
|
|
69
|
+
trend: 'improving' | 'plateau' | 'degrading';
|
|
70
|
+
recommendation: string;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Create a new feedback collector state
|
|
74
|
+
*/
|
|
75
|
+
export declare function createFeedbackCollector(): FeedbackCollectorState;
|
|
76
|
+
/**
|
|
77
|
+
* Collect feedback from review result
|
|
78
|
+
*/
|
|
79
|
+
export declare function collectFeedback(state: FeedbackCollectorState, review: ReviewResult, iteration: number): FeedbackCollectorState;
|
|
80
|
+
/**
|
|
81
|
+
* Calculate quality score (0-100)
|
|
82
|
+
*/
|
|
83
|
+
export declare function calculateQualityScore(entries: FeedbackEntry[], iteration: number, config?: FeedbackCollectorConfig): number;
|
|
84
|
+
/**
|
|
85
|
+
* Check if early stopping should be triggered
|
|
86
|
+
*/
|
|
87
|
+
export declare function checkEarlyStopping(state: FeedbackCollectorState, config?: FeedbackCollectorConfig): EarlyStoppingResult;
|
|
88
|
+
/**
|
|
89
|
+
* Extract learnings from feedback for next iteration
|
|
90
|
+
*/
|
|
91
|
+
export declare function extractLearnings(state: FeedbackCollectorState): string[];
|
|
92
|
+
/**
|
|
93
|
+
* Mark feedback as resolved
|
|
94
|
+
*/
|
|
95
|
+
export declare function resolveFeedback(state: FeedbackCollectorState, feedbackId: string): FeedbackCollectorState;
|
|
96
|
+
/**
|
|
97
|
+
* Mark all feedback in iteration as resolved
|
|
98
|
+
*/
|
|
99
|
+
export declare function resolveIteration(state: FeedbackCollectorState, iteration: number): FeedbackCollectorState;
|
|
100
|
+
/**
|
|
101
|
+
* Format feedback collector state for display
|
|
102
|
+
*/
|
|
103
|
+
export declare function formatFeedbackState(state: FeedbackCollectorState): string;
|
|
104
|
+
/**
|
|
105
|
+
* Format early stopping result
|
|
106
|
+
*/
|
|
107
|
+
export declare function formatEarlyStoppingResult(result: EarlyStoppingResult): string;
|
|
108
|
+
//# sourceMappingURL=feedback-collector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-collector.d.ts","sourceRoot":"","sources":["../../../src/core/agents/feedback-collector.ts"],"names":[],"mappings":"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"}
|