dino-spec 17.4.3 → 17.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/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +10 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/core/agents/__tests__/confidence-gate.test.d.ts +5 -0
- package/dist/core/agents/__tests__/confidence-gate.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/confidence-gate.test.js +329 -0
- package/dist/core/agents/__tests__/confidence-gate.test.js.map +1 -0
- package/dist/core/agents/__tests__/gap-detector.test.d.ts +5 -0
- package/dist/core/agents/__tests__/gap-detector.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/gap-detector.test.js +609 -0
- package/dist/core/agents/__tests__/gap-detector.test.js.map +1 -0
- package/dist/core/agents/__tests__/learning-loop.test.d.ts +5 -0
- package/dist/core/agents/__tests__/learning-loop.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/learning-loop.test.js +663 -0
- package/dist/core/agents/__tests__/learning-loop.test.js.map +1 -0
- package/dist/core/agents/__tests__/parallel-executor.test.d.ts +5 -0
- package/dist/core/agents/__tests__/parallel-executor.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/parallel-executor.test.js +610 -0
- package/dist/core/agents/__tests__/parallel-executor.test.js.map +1 -0
- package/dist/core/agents/__tests__/research-validator.test.js +5 -5
- package/dist/core/agents/__tests__/research-validator.test.js.map +1 -1
- package/dist/core/agents/__tests__/skill-creator.test.d.ts +5 -0
- package/dist/core/agents/__tests__/skill-creator.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/skill-creator.test.js +443 -0
- package/dist/core/agents/__tests__/skill-creator.test.js.map +1 -0
- package/dist/core/agents/__tests__/state-persistence.test.d.ts +2 -0
- package/dist/core/agents/__tests__/state-persistence.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/state-persistence.test.js +270 -0
- package/dist/core/agents/__tests__/state-persistence.test.js.map +1 -0
- package/dist/core/agents/__tests__/validation-cache.test.d.ts +2 -0
- package/dist/core/agents/__tests__/validation-cache.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/validation-cache.test.js +181 -0
- package/dist/core/agents/__tests__/validation-cache.test.js.map +1 -0
- package/dist/core/agents/blackboard.d.ts +22 -3
- package/dist/core/agents/blackboard.d.ts.map +1 -1
- package/dist/core/agents/blackboard.js +52 -2
- package/dist/core/agents/blackboard.js.map +1 -1
- package/dist/core/agents/circuit-breaker.d.ts +79 -1
- package/dist/core/agents/circuit-breaker.d.ts.map +1 -1
- package/dist/core/agents/circuit-breaker.js +175 -1
- package/dist/core/agents/circuit-breaker.js.map +1 -1
- package/dist/core/agents/clarification-phase.d.ts +128 -0
- package/dist/core/agents/clarification-phase.d.ts.map +1 -0
- package/dist/core/agents/clarification-phase.js +375 -0
- package/dist/core/agents/clarification-phase.js.map +1 -0
- package/dist/core/agents/confidence-gate.d.ts +116 -3
- package/dist/core/agents/confidence-gate.d.ts.map +1 -1
- package/dist/core/agents/confidence-gate.js +363 -3
- package/dist/core/agents/confidence-gate.js.map +1 -1
- package/dist/core/agents/correction-tracker.d.ts +197 -0
- package/dist/core/agents/correction-tracker.d.ts.map +1 -0
- package/dist/core/agents/correction-tracker.js +366 -0
- package/dist/core/agents/correction-tracker.js.map +1 -0
- package/dist/core/agents/dependency-graph.d.ts +193 -0
- package/dist/core/agents/dependency-graph.d.ts.map +1 -0
- package/dist/core/agents/dependency-graph.js +462 -0
- package/dist/core/agents/dependency-graph.js.map +1 -0
- package/dist/core/agents/gap-detector.d.ts +277 -0
- package/dist/core/agents/gap-detector.d.ts.map +1 -0
- package/dist/core/agents/gap-detector.js +540 -0
- package/dist/core/agents/gap-detector.js.map +1 -0
- package/dist/core/agents/index.d.ts +14 -1
- package/dist/core/agents/index.d.ts.map +1 -1
- package/dist/core/agents/index.js +26 -1
- package/dist/core/agents/index.js.map +1 -1
- package/dist/core/agents/message-protocol.d.ts +13 -2
- package/dist/core/agents/message-protocol.d.ts.map +1 -1
- package/dist/core/agents/message-protocol.js +20 -1
- package/dist/core/agents/message-protocol.js.map +1 -1
- package/dist/core/agents/parallel-executor.d.ts +182 -0
- package/dist/core/agents/parallel-executor.d.ts.map +1 -0
- package/dist/core/agents/parallel-executor.js +474 -0
- package/dist/core/agents/parallel-executor.js.map +1 -0
- package/dist/core/agents/pattern-detector.d.ts +157 -0
- package/dist/core/agents/pattern-detector.d.ts.map +1 -0
- package/dist/core/agents/pattern-detector.js +370 -0
- package/dist/core/agents/pattern-detector.js.map +1 -0
- package/dist/core/agents/registry-client.d.ts +6 -0
- package/dist/core/agents/registry-client.d.ts.map +1 -1
- package/dist/core/agents/registry-client.js +3 -0
- package/dist/core/agents/registry-client.js.map +1 -1
- package/dist/core/agents/research-phase.d.ts +114 -0
- package/dist/core/agents/research-phase.d.ts.map +1 -0
- package/dist/core/agents/research-phase.js +355 -0
- package/dist/core/agents/research-phase.js.map +1 -0
- package/dist/core/agents/research-validator.d.ts +13 -2
- package/dist/core/agents/research-validator.d.ts.map +1 -1
- package/dist/core/agents/research-validator.js +63 -31
- package/dist/core/agents/research-validator.js.map +1 -1
- package/dist/core/agents/skill-creator.d.ts +174 -0
- package/dist/core/agents/skill-creator.d.ts.map +1 -0
- package/dist/core/agents/skill-creator.js +570 -0
- package/dist/core/agents/skill-creator.js.map +1 -0
- package/dist/core/agents/state-persistence.d.ts +184 -0
- package/dist/core/agents/state-persistence.d.ts.map +1 -0
- package/dist/core/agents/state-persistence.js +394 -0
- package/dist/core/agents/state-persistence.js.map +1 -0
- package/dist/core/agents/validation-cache.d.ts +122 -0
- package/dist/core/agents/validation-cache.d.ts.map +1 -0
- package/dist/core/agents/validation-cache.js +280 -0
- package/dist/core/agents/validation-cache.js.map +1 -0
- package/dist/core/agents/validators/__tests__/validators.test.d.ts +5 -0
- package/dist/core/agents/validators/__tests__/validators.test.d.ts.map +1 -0
- package/dist/core/agents/validators/__tests__/validators.test.js +321 -0
- package/dist/core/agents/validators/__tests__/validators.test.js.map +1 -0
- package/dist/core/agents/validators/base-validator.d.ts +191 -0
- package/dist/core/agents/validators/base-validator.d.ts.map +1 -0
- package/dist/core/agents/validators/base-validator.js +192 -0
- package/dist/core/agents/validators/base-validator.js.map +1 -0
- package/dist/core/agents/validators/index.d.ts +7 -0
- package/dist/core/agents/validators/index.d.ts.map +1 -0
- package/dist/core/agents/validators/index.js +7 -0
- package/dist/core/agents/validators/index.js.map +1 -0
- package/dist/core/agents/validators/npm-validator.d.ts +50 -0
- package/dist/core/agents/validators/npm-validator.d.ts.map +1 -0
- package/dist/core/agents/validators/npm-validator.js +211 -0
- package/dist/core/agents/validators/npm-validator.js.map +1 -0
- package/dist/core/agents/validators/pip-validator.d.ts +49 -0
- package/dist/core/agents/validators/pip-validator.d.ts.map +1 -0
- package/dist/core/agents/validators/pip-validator.js +191 -0
- package/dist/core/agents/validators/pip-validator.js.map +1 -0
- package/dist/core/agents/validators/validator-registry.d.ts +122 -0
- package/dist/core/agents/validators/validator-registry.d.ts.map +1 -0
- package/dist/core/agents/validators/validator-registry.js +321 -0
- package/dist/core/agents/validators/validator-registry.js.map +1 -0
- package/dist/core/context-repl/types.d.ts +4 -4
- package/dist/core/memory/index.d.ts +1 -0
- package/dist/core/memory/index.d.ts.map +1 -1
- package/dist/core/memory/index.js +2 -0
- package/dist/core/memory/index.js.map +1 -1
- package/dist/core/memory/learning-store.d.ts +222 -0
- package/dist/core/memory/learning-store.d.ts.map +1 -0
- package/dist/core/memory/learning-store.js +477 -0
- package/dist/core/memory/learning-store.js.map +1 -0
- package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.d.ts +5 -0
- package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.d.ts.map +1 -0
- package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.js +401 -0
- package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.js.map +1 -0
- package/dist/core/spec-analyzer/ambiguity-detector.d.ts +99 -0
- package/dist/core/spec-analyzer/ambiguity-detector.d.ts.map +1 -0
- package/dist/core/spec-analyzer/ambiguity-detector.js +250 -0
- package/dist/core/spec-analyzer/ambiguity-detector.js.map +1 -0
- package/dist/core/spec-analyzer/clarification-generator.d.ts +76 -0
- package/dist/core/spec-analyzer/clarification-generator.d.ts.map +1 -0
- package/dist/core/spec-analyzer/clarification-generator.js +257 -0
- package/dist/core/spec-analyzer/clarification-generator.js.map +1 -0
- package/dist/core/spec-analyzer/index.d.ts +10 -1
- package/dist/core/spec-analyzer/index.d.ts.map +1 -1
- package/dist/core/spec-analyzer/index.js +13 -1
- package/dist/core/spec-analyzer/index.js.map +1 -1
- package/dist/core/spec-analyzer/patterns.d.ts +73 -0
- package/dist/core/spec-analyzer/patterns.d.ts.map +1 -0
- package/dist/core/spec-analyzer/patterns.js +412 -0
- package/dist/core/spec-analyzer/patterns.js.map +1 -0
- package/dist/hooks/__tests__/dynamic-generator.test.d.ts +5 -0
- package/dist/hooks/__tests__/dynamic-generator.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/dynamic-generator.test.js +425 -0
- package/dist/hooks/__tests__/dynamic-generator.test.js.map +1 -0
- package/dist/hooks/__tests__/hook-agent-bridge.test.d.ts +5 -0
- package/dist/hooks/__tests__/hook-agent-bridge.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/hook-agent-bridge.test.js +315 -0
- package/dist/hooks/__tests__/hook-agent-bridge.test.js.map +1 -0
- package/dist/hooks/dynamic-generator.d.ts +158 -0
- package/dist/hooks/dynamic-generator.d.ts.map +1 -0
- package/dist/hooks/dynamic-generator.js +448 -0
- package/dist/hooks/dynamic-generator.js.map +1 -0
- package/dist/hooks/hook-agent-bridge.d.ts +252 -0
- package/dist/hooks/hook-agent-bridge.d.ts.map +1 -0
- package/dist/hooks/hook-agent-bridge.js +489 -0
- package/dist/hooks/hook-agent-bridge.js.map +1 -0
- package/dist/hooks/index.d.ts +3 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +5 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/mcp/tool-catalog.d.ts.map +1 -1
- package/dist/mcp/tool-catalog.js +47 -0
- package/dist/mcp/tool-catalog.js.map +1 -1
- package/dist/mcp/tool-tiers.d.ts.map +1 -1
- package/dist/mcp/tool-tiers.js +4 -0
- package/dist/mcp/tool-tiers.js.map +1 -1
- package/dist/mcp/tools/index.d.ts +2 -1
- package/dist/mcp/tools/index.d.ts.map +1 -1
- package/dist/mcp/tools/index.js +15 -1
- package/dist/mcp/tools/index.js.map +1 -1
- package/dist/mcp/tools/learning-store.d.ts +30 -0
- package/dist/mcp/tools/learning-store.d.ts.map +1 -0
- package/dist/mcp/tools/learning-store.js +286 -0
- package/dist/mcp/tools/learning-store.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clarification Phase - v17.5.0
|
|
3
|
+
*
|
|
4
|
+
* Handles the clarification phase of the progressive confidence gate.
|
|
5
|
+
* Generates targeted questions and processes user responses.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Targeted question generation from signals
|
|
9
|
+
* - Priority-based question ordering
|
|
10
|
+
* - User response processing
|
|
11
|
+
* - Confidence improvement from answers
|
|
12
|
+
* - Max rounds tracking with user validation
|
|
13
|
+
*
|
|
14
|
+
* @module clarification-phase
|
|
15
|
+
*/
|
|
16
|
+
import { detectAmbiguity } from '../spec-analyzer/ambiguity-detector.js';
|
|
17
|
+
// =============================================================================
|
|
18
|
+
// Constants
|
|
19
|
+
// =============================================================================
|
|
20
|
+
export const DEFAULT_CLARIFICATION_CONFIG = {
|
|
21
|
+
maxRounds: 5,
|
|
22
|
+
requireValidationAfterMax: true,
|
|
23
|
+
maxQuestionsPerRound: 4,
|
|
24
|
+
blockingAnswerBoost: 0.15,
|
|
25
|
+
importantAnswerBoost: 0.1,
|
|
26
|
+
niceToKnowAnswerBoost: 0.05,
|
|
27
|
+
};
|
|
28
|
+
// =============================================================================
|
|
29
|
+
// Main Functions
|
|
30
|
+
// =============================================================================
|
|
31
|
+
/**
|
|
32
|
+
* Initialize clarification phase
|
|
33
|
+
*/
|
|
34
|
+
export function initializeClarificationPhase(prompt, _analysis, _currentConfidence) {
|
|
35
|
+
// Get ambiguity analysis and generate questions
|
|
36
|
+
const ambiguity = detectAmbiguity(prompt);
|
|
37
|
+
const clarification = ambiguity.clarification;
|
|
38
|
+
return {
|
|
39
|
+
rounds: [],
|
|
40
|
+
pendingQuestions: [...clarification.questions],
|
|
41
|
+
currentRound: 0,
|
|
42
|
+
maxRoundsReached: false,
|
|
43
|
+
userValidated: false,
|
|
44
|
+
status: clarification.questions.length > 0 ? 'pending' : 'validated',
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get next batch of questions
|
|
49
|
+
*/
|
|
50
|
+
export function getNextQuestions(state, config = DEFAULT_CLARIFICATION_CONFIG) {
|
|
51
|
+
if (state.pendingQuestions.length === 0) {
|
|
52
|
+
return [];
|
|
53
|
+
}
|
|
54
|
+
// Prioritize blocking questions
|
|
55
|
+
const blocking = state.pendingQuestions.filter((q) => q.priority === 'blocking');
|
|
56
|
+
const important = state.pendingQuestions.filter((q) => q.priority === 'important');
|
|
57
|
+
const niceToKnow = state.pendingQuestions.filter((q) => q.priority === 'nice-to-know');
|
|
58
|
+
// Build batch prioritizing blocking first
|
|
59
|
+
const batch = [];
|
|
60
|
+
const maxQuestions = config.maxQuestionsPerRound;
|
|
61
|
+
// Add blocking first
|
|
62
|
+
for (const q of blocking) {
|
|
63
|
+
if (batch.length >= maxQuestions)
|
|
64
|
+
break;
|
|
65
|
+
batch.push(q);
|
|
66
|
+
}
|
|
67
|
+
// Add important if room
|
|
68
|
+
for (const q of important) {
|
|
69
|
+
if (batch.length >= maxQuestions)
|
|
70
|
+
break;
|
|
71
|
+
batch.push(q);
|
|
72
|
+
}
|
|
73
|
+
// Add nice-to-know if room
|
|
74
|
+
for (const q of niceToKnow) {
|
|
75
|
+
if (batch.length >= maxQuestions)
|
|
76
|
+
break;
|
|
77
|
+
batch.push(q);
|
|
78
|
+
}
|
|
79
|
+
return batch;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Process user answers and update state
|
|
83
|
+
*/
|
|
84
|
+
export function processAnswers(state, answers, confidenceBefore, config = DEFAULT_CLARIFICATION_CONFIG) {
|
|
85
|
+
const answeredIds = new Set(answers.map((a) => a.questionId));
|
|
86
|
+
const answerMap = new Map(answers.map((a) => [a.questionId, a.answer]));
|
|
87
|
+
// Calculate confidence boost
|
|
88
|
+
let boost = 0;
|
|
89
|
+
for (const answer of answers) {
|
|
90
|
+
const question = state.pendingQuestions.find((q) => q.id === answer.questionId);
|
|
91
|
+
if (question) {
|
|
92
|
+
switch (question.priority) {
|
|
93
|
+
case 'blocking':
|
|
94
|
+
boost += config.blockingAnswerBoost;
|
|
95
|
+
break;
|
|
96
|
+
case 'important':
|
|
97
|
+
boost += config.importantAnswerBoost;
|
|
98
|
+
break;
|
|
99
|
+
case 'nice-to-know':
|
|
100
|
+
boost += config.niceToKnowAnswerBoost;
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const confidenceAfter = Math.min(1, confidenceBefore + boost);
|
|
106
|
+
// Create round record
|
|
107
|
+
const questionsThisRound = state.pendingQuestions.filter((q) => answeredIds.has(q.id));
|
|
108
|
+
const round = {
|
|
109
|
+
roundNumber: state.currentRound + 1,
|
|
110
|
+
questions: questionsThisRound,
|
|
111
|
+
answers: answerMap,
|
|
112
|
+
confidenceBefore,
|
|
113
|
+
confidenceAfter,
|
|
114
|
+
timestamp: new Date(),
|
|
115
|
+
};
|
|
116
|
+
// Update pending questions
|
|
117
|
+
const remainingQuestions = state.pendingQuestions.filter((q) => !answeredIds.has(q.id));
|
|
118
|
+
// Check if max rounds reached
|
|
119
|
+
const newRoundNumber = state.currentRound + 1;
|
|
120
|
+
const maxRoundsReached = newRoundNumber >= config.maxRounds;
|
|
121
|
+
// Determine new status
|
|
122
|
+
let status = 'asking';
|
|
123
|
+
if (remainingQuestions.length === 0) {
|
|
124
|
+
status = 'validated';
|
|
125
|
+
}
|
|
126
|
+
else if (maxRoundsReached && config.requireValidationAfterMax) {
|
|
127
|
+
status = 'blocked';
|
|
128
|
+
}
|
|
129
|
+
return {
|
|
130
|
+
state: {
|
|
131
|
+
rounds: [...state.rounds, round],
|
|
132
|
+
pendingQuestions: remainingQuestions,
|
|
133
|
+
currentRound: newRoundNumber,
|
|
134
|
+
maxRoundsReached,
|
|
135
|
+
userValidated: status === 'validated',
|
|
136
|
+
status,
|
|
137
|
+
},
|
|
138
|
+
confidenceAfter,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Mark user as having validated assumptions
|
|
143
|
+
*/
|
|
144
|
+
export function markUserValidated(state) {
|
|
145
|
+
return {
|
|
146
|
+
...state,
|
|
147
|
+
userValidated: true,
|
|
148
|
+
status: 'validated',
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Execute clarification phase
|
|
153
|
+
*/
|
|
154
|
+
export function executeClarificationPhase(prompt, currentConfidence, analysis, config = DEFAULT_CLARIFICATION_CONFIG) {
|
|
155
|
+
// Initialize state
|
|
156
|
+
const state = initializeClarificationPhase(prompt, analysis, currentConfidence);
|
|
157
|
+
// Check if clarification needed
|
|
158
|
+
if (state.pendingQuestions.length === 0) {
|
|
159
|
+
return {
|
|
160
|
+
needed: false,
|
|
161
|
+
state,
|
|
162
|
+
confidenceImprovement: 0,
|
|
163
|
+
newConfidence: currentConfidence,
|
|
164
|
+
canImproveMore: false,
|
|
165
|
+
requiresUserValidation: false,
|
|
166
|
+
summary: 'No clarification needed - requirements are clear',
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
// Get first batch of questions
|
|
170
|
+
const questions = getNextQuestions(state, config);
|
|
171
|
+
const hasBlocking = questions.some((q) => q.priority === 'blocking');
|
|
172
|
+
return {
|
|
173
|
+
needed: true,
|
|
174
|
+
state: {
|
|
175
|
+
...state,
|
|
176
|
+
status: 'asking',
|
|
177
|
+
},
|
|
178
|
+
confidenceImprovement: 0, // Not yet improved
|
|
179
|
+
newConfidence: currentConfidence,
|
|
180
|
+
canImproveMore: true,
|
|
181
|
+
requiresUserValidation: hasBlocking,
|
|
182
|
+
summary: generateClarificationSummary(state, questions),
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Generate summary of clarification phase
|
|
187
|
+
*/
|
|
188
|
+
function generateClarificationSummary(state, currentQuestions) {
|
|
189
|
+
const parts = [];
|
|
190
|
+
const blocking = currentQuestions.filter((q) => q.priority === 'blocking').length;
|
|
191
|
+
const important = currentQuestions.filter((q) => q.priority === 'important').length;
|
|
192
|
+
const niceToKnow = currentQuestions.filter((q) => q.priority === 'nice-to-know').length;
|
|
193
|
+
if (blocking > 0) {
|
|
194
|
+
parts.push(`${blocking} blocking question(s)`);
|
|
195
|
+
}
|
|
196
|
+
if (important > 0) {
|
|
197
|
+
parts.push(`${important} important question(s)`);
|
|
198
|
+
}
|
|
199
|
+
if (niceToKnow > 0) {
|
|
200
|
+
parts.push(`${niceToKnow} optional question(s)`);
|
|
201
|
+
}
|
|
202
|
+
const total = state.pendingQuestions.length;
|
|
203
|
+
if (total > currentQuestions.length) {
|
|
204
|
+
parts.push(`${total - currentQuestions.length} more pending`);
|
|
205
|
+
}
|
|
206
|
+
return `Clarification needed: ${parts.join(', ')}.`;
|
|
207
|
+
}
|
|
208
|
+
// =============================================================================
|
|
209
|
+
// Question Generation Helpers
|
|
210
|
+
// =============================================================================
|
|
211
|
+
/**
|
|
212
|
+
* Generate additional questions from analysis signals
|
|
213
|
+
*/
|
|
214
|
+
export function generateAdditionalQuestions(analysis) {
|
|
215
|
+
const questions = [];
|
|
216
|
+
// Missing target
|
|
217
|
+
if (analysis.signals.missingTarget) {
|
|
218
|
+
questions.push({
|
|
219
|
+
id: 'cq-target',
|
|
220
|
+
question: 'Which specific file, component, or feature should this change apply to?',
|
|
221
|
+
priority: 'blocking',
|
|
222
|
+
category: 'missing_specific',
|
|
223
|
+
triggerSignal: 'missing_target',
|
|
224
|
+
matchedText: 'missing target',
|
|
225
|
+
context: '',
|
|
226
|
+
patternId: 'manual-target',
|
|
227
|
+
confidenceImpact: 15,
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
// Vague verbs
|
|
231
|
+
for (const verb of analysis.signals.vagueVerbs.slice(0, 2)) {
|
|
232
|
+
questions.push({
|
|
233
|
+
id: `cq-verb-${verb}`,
|
|
234
|
+
question: `What specifically should be "${verb}ed"? Please provide concrete details.`,
|
|
235
|
+
priority: 'blocking',
|
|
236
|
+
category: 'vague_verb',
|
|
237
|
+
triggerSignal: 'vague_verb',
|
|
238
|
+
matchedText: verb,
|
|
239
|
+
context: '',
|
|
240
|
+
patternId: `manual-verb-${verb}`,
|
|
241
|
+
confidenceImpact: 10,
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
// Unclear success
|
|
245
|
+
if (analysis.signals.unclearSuccess) {
|
|
246
|
+
questions.push({
|
|
247
|
+
id: 'cq-success',
|
|
248
|
+
question: 'How will we know when this is working correctly? What should we test?',
|
|
249
|
+
priority: 'important',
|
|
250
|
+
category: 'missing_specific',
|
|
251
|
+
triggerSignal: 'unclear_success',
|
|
252
|
+
matchedText: 'unclear success criteria',
|
|
253
|
+
context: '',
|
|
254
|
+
patternId: 'manual-success',
|
|
255
|
+
confidenceImpact: 10,
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
// Security related
|
|
259
|
+
if (analysis.signals.securityRelated) {
|
|
260
|
+
questions.push({
|
|
261
|
+
id: 'cq-security',
|
|
262
|
+
question: 'What security requirements or constraints should this follow?',
|
|
263
|
+
priority: 'blocking',
|
|
264
|
+
category: 'missing_specific',
|
|
265
|
+
triggerSignal: 'missing_target',
|
|
266
|
+
matchedText: 'security requirement',
|
|
267
|
+
context: '',
|
|
268
|
+
patternId: 'manual-security',
|
|
269
|
+
confidenceImpact: 15,
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
// Data related
|
|
273
|
+
if (analysis.signals.dataRelated) {
|
|
274
|
+
questions.push({
|
|
275
|
+
id: 'cq-data',
|
|
276
|
+
question: 'What data migration, backup, or rollback requirements exist?',
|
|
277
|
+
priority: 'important',
|
|
278
|
+
category: 'missing_specific',
|
|
279
|
+
triggerSignal: 'missing_target',
|
|
280
|
+
matchedText: 'data handling',
|
|
281
|
+
context: '',
|
|
282
|
+
patternId: 'manual-data',
|
|
283
|
+
confidenceImpact: 10,
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
// Breaking change
|
|
287
|
+
if (analysis.signals.breakingChange) {
|
|
288
|
+
questions.push({
|
|
289
|
+
id: 'cq-breaking',
|
|
290
|
+
question: 'What backwards compatibility requirements should be maintained?',
|
|
291
|
+
priority: 'blocking',
|
|
292
|
+
category: 'missing_specific',
|
|
293
|
+
triggerSignal: 'breaking_change',
|
|
294
|
+
matchedText: 'breaking change',
|
|
295
|
+
context: '',
|
|
296
|
+
patternId: 'manual-breaking',
|
|
297
|
+
confidenceImpact: 15,
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
return questions;
|
|
301
|
+
}
|
|
302
|
+
// =============================================================================
|
|
303
|
+
// Formatting
|
|
304
|
+
// =============================================================================
|
|
305
|
+
/**
|
|
306
|
+
* Format clarification state for session.md
|
|
307
|
+
*/
|
|
308
|
+
export function formatClarificationForSession(result) {
|
|
309
|
+
const lines = [];
|
|
310
|
+
lines.push('### Clarification Phase');
|
|
311
|
+
lines.push('');
|
|
312
|
+
if (!result.needed) {
|
|
313
|
+
lines.push('No clarification needed - requirements are clear.');
|
|
314
|
+
return lines.join('\n');
|
|
315
|
+
}
|
|
316
|
+
const { state } = result;
|
|
317
|
+
lines.push(`**Status:** ${state.status}`);
|
|
318
|
+
lines.push(`**Round:** ${state.currentRound}/${DEFAULT_CLARIFICATION_CONFIG.maxRounds}`);
|
|
319
|
+
lines.push(`**Pending Questions:** ${state.pendingQuestions.length}`);
|
|
320
|
+
lines.push('');
|
|
321
|
+
if (state.pendingQuestions.length > 0) {
|
|
322
|
+
const blocking = state.pendingQuestions.filter((q) => q.priority === 'blocking');
|
|
323
|
+
const important = state.pendingQuestions.filter((q) => q.priority === 'important');
|
|
324
|
+
if (blocking.length > 0) {
|
|
325
|
+
lines.push('**Blocking Questions:**');
|
|
326
|
+
for (const q of blocking.slice(0, 3)) {
|
|
327
|
+
lines.push(`- ${q.question}`);
|
|
328
|
+
}
|
|
329
|
+
lines.push('');
|
|
330
|
+
}
|
|
331
|
+
if (important.length > 0) {
|
|
332
|
+
lines.push('**Important Questions:**');
|
|
333
|
+
for (const q of important.slice(0, 3)) {
|
|
334
|
+
lines.push(`- ${q.question}`);
|
|
335
|
+
}
|
|
336
|
+
lines.push('');
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
if (state.rounds.length > 0) {
|
|
340
|
+
lines.push('**History:**');
|
|
341
|
+
for (const round of state.rounds) {
|
|
342
|
+
const change = round.confidenceAfter - round.confidenceBefore;
|
|
343
|
+
lines.push(`- Round ${round.roundNumber}: ${round.answers.size} answered, +${Math.round(change * 100)}% confidence`);
|
|
344
|
+
}
|
|
345
|
+
lines.push('');
|
|
346
|
+
}
|
|
347
|
+
if (state.maxRoundsReached && !state.userValidated) {
|
|
348
|
+
lines.push('**Action Required:** User validation needed to proceed.');
|
|
349
|
+
lines.push('');
|
|
350
|
+
}
|
|
351
|
+
lines.push(`**Summary:** ${result.summary}`);
|
|
352
|
+
return lines.join('\n');
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Format questions for AskUserQuestion tool
|
|
356
|
+
*/
|
|
357
|
+
export function formatQuestionsForAskUser(questions) {
|
|
358
|
+
return {
|
|
359
|
+
questions: questions.slice(0, 4).map((q) => ({
|
|
360
|
+
question: q.question,
|
|
361
|
+
header: q.priority === 'blocking'
|
|
362
|
+
? 'Required'
|
|
363
|
+
: q.priority === 'important'
|
|
364
|
+
? 'Important'
|
|
365
|
+
: 'Optional',
|
|
366
|
+
options: [
|
|
367
|
+
{ label: 'Provide details', description: 'I will provide specific details' },
|
|
368
|
+
{ label: 'Skip for now', description: 'Proceed without this information' },
|
|
369
|
+
{ label: 'Use default', description: 'Use reasonable defaults' },
|
|
370
|
+
],
|
|
371
|
+
multiSelect: false,
|
|
372
|
+
})),
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
//# sourceMappingURL=clarification-phase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clarification-phase.js","sourceRoot":"","sources":["../../../src/core/agents/clarification-phase.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Confidence Gate -
|
|
2
|
+
* Confidence Gate - v17.5.0
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Progressive confidence gate with tiered thresholds:
|
|
5
|
+
* - 0-30%: Block (too risky to proceed)
|
|
6
|
+
* - 30-50%: Research phase first
|
|
7
|
+
* - 50-70%: Clarification phase first
|
|
8
|
+
* - 70%+: Proceed with implementation
|
|
9
|
+
*
|
|
10
|
+
* Features:
|
|
11
|
+
* - Tiered confidence thresholds
|
|
12
|
+
* - Auto-research phase integration
|
|
13
|
+
* - Clarification phase integration
|
|
14
|
+
* - Max rounds tracking (2 research, 5 clarification)
|
|
15
|
+
* - User validation after max rounds
|
|
16
|
+
* - Session history tracking
|
|
6
17
|
*
|
|
7
18
|
* @see .claude/rules/dino/confidence-handling.md
|
|
8
19
|
*/
|
|
@@ -61,6 +72,44 @@ export interface ConfidenceRound {
|
|
|
61
72
|
details: string;
|
|
62
73
|
timestamp: Date;
|
|
63
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* v17.5.0: Tiered confidence thresholds
|
|
77
|
+
*
|
|
78
|
+
* These thresholds determine the action at each confidence level:
|
|
79
|
+
* - Below BLOCK: Too risky, cannot proceed without explicit validation
|
|
80
|
+
* - BLOCK to RESEARCH: Research phase needed first
|
|
81
|
+
* - RESEARCH to CLARIFY: Clarification questions needed
|
|
82
|
+
* - Above CLARIFY: Can proceed with implementation
|
|
83
|
+
*/
|
|
84
|
+
export declare const CONFIDENCE_TIERS: {
|
|
85
|
+
/** Below this: block until user validates */
|
|
86
|
+
readonly BLOCK: 0.3;
|
|
87
|
+
/** Below this: trigger research phase */
|
|
88
|
+
readonly RESEARCH: 0.5;
|
|
89
|
+
/** Below this: trigger clarification phase */
|
|
90
|
+
readonly CLARIFY: 0.7;
|
|
91
|
+
/** Standard threshold for proceeding */
|
|
92
|
+
readonly PROCEED: 0.8;
|
|
93
|
+
/** Ralph-eligible tasks require higher threshold */
|
|
94
|
+
readonly RALPH: 0.9;
|
|
95
|
+
};
|
|
96
|
+
export type ConfidenceTier = 'blocked' | 'research' | 'clarify' | 'proceed';
|
|
97
|
+
/**
|
|
98
|
+
* Determine which tier a confidence level falls into
|
|
99
|
+
*
|
|
100
|
+
* Tiers (per PRD):
|
|
101
|
+
* - 0-30%: blocked (need user validation)
|
|
102
|
+
* - 30-50%: research (need to gather context)
|
|
103
|
+
* - 50-70%: clarify (need targeted questions)
|
|
104
|
+
* - 70%+: proceed (can implement)
|
|
105
|
+
*
|
|
106
|
+
* For Ralph-eligible tasks, use higher thresholds.
|
|
107
|
+
*/
|
|
108
|
+
export declare function getConfidenceTier(confidence: number, isRalphEligible?: boolean): ConfidenceTier;
|
|
109
|
+
/**
|
|
110
|
+
* Get recommended action based on tiered thresholds
|
|
111
|
+
*/
|
|
112
|
+
export declare function getTieredAction(confidence: number, isRalphEligible?: boolean): 'proceed' | 'research' | 'clarify' | 'block';
|
|
64
113
|
/**
|
|
65
114
|
* Check if task can proceed based on confidence level
|
|
66
115
|
*
|
|
@@ -96,4 +145,68 @@ export declare function formatConfidenceForSession(tracking: ConfidenceTracking)
|
|
|
96
145
|
* Format gate result for display
|
|
97
146
|
*/
|
|
98
147
|
export declare function formatGateResult(result: GateResult): string;
|
|
148
|
+
/**
|
|
149
|
+
* Extended gate result for progressive gating
|
|
150
|
+
*/
|
|
151
|
+
export interface ProgressiveGateResult extends GateResult {
|
|
152
|
+
/** Which tier the confidence falls into */
|
|
153
|
+
tier: ConfidenceTier;
|
|
154
|
+
/** Whether user validation is required */
|
|
155
|
+
requiresUserValidation: boolean;
|
|
156
|
+
/** Research rounds used */
|
|
157
|
+
researchRoundsUsed: number;
|
|
158
|
+
/** Clarification rounds used */
|
|
159
|
+
clarificationRoundsUsed: number;
|
|
160
|
+
/** Whether max rounds have been reached */
|
|
161
|
+
maxRoundsReached: boolean;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Progressive confidence gate state
|
|
165
|
+
*/
|
|
166
|
+
export interface ProgressiveGateState {
|
|
167
|
+
/** Current confidence */
|
|
168
|
+
confidence: number;
|
|
169
|
+
/** Required confidence to proceed */
|
|
170
|
+
requiredConfidence: number;
|
|
171
|
+
/** Current tier */
|
|
172
|
+
tier: ConfidenceTier;
|
|
173
|
+
/** Research rounds completed */
|
|
174
|
+
researchRounds: number;
|
|
175
|
+
/** Clarification rounds completed */
|
|
176
|
+
clarificationRounds: number;
|
|
177
|
+
/** Whether user has validated assumptions */
|
|
178
|
+
userValidated: boolean;
|
|
179
|
+
/** History of confidence changes */
|
|
180
|
+
history: ConfidenceRound[];
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Check confidence with progressive tiered thresholds
|
|
184
|
+
*
|
|
185
|
+
* v17.5.0: Implements tiered confidence gating:
|
|
186
|
+
* - 0-30%: Block until user validates
|
|
187
|
+
* - 30-50%: Research phase first
|
|
188
|
+
* - 50-70%: Clarification phase first
|
|
189
|
+
* - 70%+: Proceed (80% standard, 90% for Ralph)
|
|
190
|
+
*/
|
|
191
|
+
export declare function checkProgressiveConfidence(prompt: string, state?: ProgressiveGateState, config?: ConfidenceGateConfig): Promise<ProgressiveGateResult>;
|
|
192
|
+
/**
|
|
193
|
+
* Create initial progressive gate state
|
|
194
|
+
*/
|
|
195
|
+
export declare function createProgressiveGateState(prompt: string, config?: ConfidenceGateConfig): ProgressiveGateState;
|
|
196
|
+
/**
|
|
197
|
+
* Update state after research round
|
|
198
|
+
*/
|
|
199
|
+
export declare function updateStateAfterResearch(state: ProgressiveGateState, newConfidence: number, details: string): ProgressiveGateState;
|
|
200
|
+
/**
|
|
201
|
+
* Update state after clarification round
|
|
202
|
+
*/
|
|
203
|
+
export declare function updateStateAfterClarification(state: ProgressiveGateState, newConfidence: number, details: string): ProgressiveGateState;
|
|
204
|
+
/**
|
|
205
|
+
* Mark state as user validated
|
|
206
|
+
*/
|
|
207
|
+
export declare function markStateUserValidated(state: ProgressiveGateState): ProgressiveGateState;
|
|
208
|
+
/**
|
|
209
|
+
* Format progressive gate state for session.md
|
|
210
|
+
*/
|
|
211
|
+
export declare function formatProgressiveGateForSession(state: ProgressiveGateState): string;
|
|
99
212
|
//# sourceMappingURL=confidence-gate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confidence-gate.d.ts","sourceRoot":"","sources":["../../../src/core/agents/confidence-gate.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"confidence-gate.d.ts","sourceRoot":"","sources":["../../../src/core/agents/confidence-gate.ts"],"names":[],"mappings":"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"}
|