dino-spec 14.0.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.
Files changed (34) hide show
  1. package/README.md +37 -1
  2. package/dist/core/agents/ambiguity-resolver.d.ts +118 -0
  3. package/dist/core/agents/ambiguity-resolver.d.ts.map +1 -0
  4. package/dist/core/agents/ambiguity-resolver.js +327 -0
  5. package/dist/core/agents/ambiguity-resolver.js.map +1 -0
  6. package/dist/core/agents/confidence-gate.d.ts +99 -0
  7. package/dist/core/agents/confidence-gate.d.ts.map +1 -0
  8. package/dist/core/agents/confidence-gate.js +295 -0
  9. package/dist/core/agents/confidence-gate.js.map +1 -0
  10. package/dist/core/agents/feedback-collector.d.ts +108 -0
  11. package/dist/core/agents/feedback-collector.d.ts.map +1 -0
  12. package/dist/core/agents/feedback-collector.js +313 -0
  13. package/dist/core/agents/feedback-collector.js.map +1 -0
  14. package/dist/core/agents/parallel-reviewer.d.ts +88 -0
  15. package/dist/core/agents/parallel-reviewer.d.ts.map +1 -0
  16. package/dist/core/agents/parallel-reviewer.js +459 -0
  17. package/dist/core/agents/parallel-reviewer.js.map +1 -0
  18. package/dist/core/agents/reviewer-loop.d.ts +102 -0
  19. package/dist/core/agents/reviewer-loop.d.ts.map +1 -0
  20. package/dist/core/agents/reviewer-loop.js +373 -0
  21. package/dist/core/agents/reviewer-loop.js.map +1 -0
  22. package/dist/core/agents/skill-auditor.d.ts +82 -0
  23. package/dist/core/agents/skill-auditor.d.ts.map +1 -0
  24. package/dist/core/agents/skill-auditor.js +278 -0
  25. package/dist/core/agents/skill-auditor.js.map +1 -0
  26. package/dist/mcp/registry.d.ts +1 -1
  27. package/dist/mcp/registry.d.ts.map +1 -1
  28. package/dist/mcp/registry.js +1 -0
  29. package/dist/mcp/registry.js.map +1 -1
  30. package/dist/mcp/tools/feedback.d.ts +63 -0
  31. package/dist/mcp/tools/feedback.d.ts.map +1 -0
  32. package/dist/mcp/tools/feedback.js +255 -0
  33. package/dist/mcp/tools/feedback.js.map +1 -0
  34. package/package.json +1 -1
package/README.md CHANGED
@@ -12,10 +12,46 @@
12
12
 
13
13
  **dino-spec** brings structured, context-aware development to [Claude Code](https://claude.ai/code). It automatically maintains session state, provides 71 MCP tools, and enables intelligent context retrieval with real-time statusline display.
14
14
 
15
- > **v13.6.0**: RLM-Style Context REPL Environment - See [CHANGELOG.md](CHANGELOG.md) for details
15
+ > **v14.1.0**: Subagent-First Operations - See [CHANGELOG.md](CHANGELOG.md) for details
16
16
 
17
17
  ## Features
18
18
 
19
+ ### v14.1.0 - Subagent-First Operations
20
+
21
+ - **Comprehensive Subagent Architecture** - Autonomous code review, research, and quality assurance
22
+ - **Ambiguity Resolver** - Auto-research when ambiguity > 40
23
+ - Spawns research subagents with specialized context
24
+ - Caches findings in `.dino/research/`
25
+ - Environment variable: `DINO_AMBIGUITY_THRESHOLD` (default: 40)
26
+ - **Confidence Gate** - Quality threshold enforcement
27
+ - Gates at 80% (standard) or 90% (Ralph-eligible)
28
+ - Triggers research or clarification automatically
29
+ - Max 2 research rounds, 5 clarification rounds
30
+ - Environment variables: `DINO_CONFIDENCE_THRESHOLD`, `DINO_RALPH_CONFIDENCE_THRESHOLD`
31
+ - **Reviewer Loop** - Mandatory code review for Edit/Write
32
+ - Security: hardcoded secrets, eval, innerHTML, SQL injection
33
+ - Quality: style, performance, test coverage
34
+ - Blocks on critical findings with `DINO_MANDATORY_REVIEW=true`
35
+ - **Feedback Collector** - Structured quality tracking
36
+ - Quality scoring (0-100) with trend analysis
37
+ - Plateau detection (<2% improvement over 3 iterations)
38
+ - Early stopping on max iterations (default: 10)
39
+ - 5 MCP tools: `dino_feedback_collect`, `_status`, `_learnings`, `_resolve`, `_reset`
40
+ - **Skill Auditor** - Pre-validation for planning/implementation
41
+ - Audits `/dino.nest`, `/dino.hunt`, `/dino.ralph` before execution
42
+ - PRD quality: stories, acceptance criteria, test commands, files
43
+ - Ralph requires 90 score vs 80 for standard
44
+ - **Parallel Reviewer** - Concurrent aspect reviews
45
+ - Runs style/security/tests in parallel
46
+ - Budget: 40% style, 30% security, 30% tests
47
+ - Merges into unified review summary
48
+ - Environment variable: `DINO_PARALLEL_REVIEW` (default: false)
49
+ - **Research Agent** - Read-only exploration agent
50
+ - Structured JSON output with findings/confidence
51
+ - Disallows Edit/Write/Bash for safety
52
+ - **128 New Tests** - Comprehensive coverage across 6 agent modules
53
+ - **Auditor Pre-Checks** - `/dino.nest` and `/dino.hunt` now validate before execution
54
+
19
55
  ### v13.6.0 - RLM-Style Context REPL Environment
20
56
 
21
57
  - **Context REPL** - Programmatic context access inspired by [Recursive Language Models](https://arxiv.org/abs/2512.24601v1)
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Ambiguity Resolver - v14.1.0
3
+ *
4
+ * Auto-triggers research subagent when ambiguity score exceeds threshold.
5
+ * Research findings are cached and injected into context before planning.
6
+ *
7
+ * @see .claude/rules/dino/confidence-handling.md
8
+ */
9
+ import { type SpecAnalysis } from '../spec-analyzer/index.js';
10
+ /**
11
+ * Research result from subagent exploration
12
+ */
13
+ export interface ResearchResult {
14
+ confidence: number;
15
+ findings: ResearchFinding[];
16
+ cacheKey: string;
17
+ timestamp: Date;
18
+ tokensUsed: number;
19
+ }
20
+ /**
21
+ * Individual research finding
22
+ */
23
+ export interface ResearchFinding {
24
+ type: 'pattern' | 'file' | 'documentation' | 'external' | 'decision';
25
+ source: string;
26
+ summary: string;
27
+ relevance: number;
28
+ content?: string;
29
+ }
30
+ /**
31
+ * Research subagent spawn parameters
32
+ */
33
+ export interface ResearchAgentParams {
34
+ prompt: string;
35
+ focusArea?: string;
36
+ ambiguityScore: number;
37
+ signals: ResearchSignals;
38
+ maxTokens?: number;
39
+ }
40
+ /**
41
+ * Signals that triggered research
42
+ */
43
+ export interface ResearchSignals {
44
+ vagueVerbs: string[];
45
+ missingTarget: boolean;
46
+ unclearSuccess: boolean;
47
+ securityRelated: boolean;
48
+ dataRelated: boolean;
49
+ }
50
+ /**
51
+ * Ambiguity resolution configuration
52
+ */
53
+ export interface AmbiguityResolverConfig {
54
+ threshold: number;
55
+ maxResearchTokens: number;
56
+ cacheDirectory: string;
57
+ enableWebSearch: boolean;
58
+ enableCodebaseSearch: boolean;
59
+ }
60
+ /**
61
+ * Resolution result with action recommendation
62
+ */
63
+ export interface AmbiguityResolution {
64
+ needsResearch: boolean;
65
+ ambiguityScore: number;
66
+ analysis: SpecAnalysis;
67
+ research?: ResearchResult;
68
+ action: 'proceed' | 'research' | 'clarify';
69
+ context?: string;
70
+ }
71
+ /**
72
+ * Check if a prompt needs research based on ambiguity score
73
+ */
74
+ export declare function needsResearch(prompt: string, config?: AmbiguityResolverConfig): boolean;
75
+ /**
76
+ * Analyze ambiguity and determine if research is needed
77
+ */
78
+ export declare function analyzeAmbiguity(prompt: string, config?: AmbiguityResolverConfig): {
79
+ needsResearch: boolean;
80
+ score: number;
81
+ signals: ResearchSignals;
82
+ };
83
+ /**
84
+ * Resolve ambiguity by triggering research if needed
85
+ *
86
+ * This is the main entry point for ambiguity resolution.
87
+ * Returns enhanced context with research findings if research was needed.
88
+ */
89
+ export declare function resolveAmbiguity(prompt: string, config?: AmbiguityResolverConfig): Promise<AmbiguityResolution>;
90
+ /**
91
+ * Execute research by spawning research subagent
92
+ *
93
+ * This function builds the research prompt and spawns a subagent.
94
+ * In practice, this returns spawn parameters for the Task tool.
95
+ */
96
+ export declare function executeResearch(params: ResearchAgentParams, config?: AmbiguityResolverConfig): Promise<ResearchResult>;
97
+ /**
98
+ * Build research prompt for subagent
99
+ */
100
+ export declare function buildResearchPrompt(params: ResearchAgentParams, config?: AmbiguityResolverConfig): string;
101
+ /**
102
+ * Build Task tool spawn parameters for research subagent
103
+ */
104
+ export declare function buildTaskSpawnParams(params: ResearchAgentParams, config?: AmbiguityResolverConfig): {
105
+ description: string;
106
+ prompt: string;
107
+ subagent_type: string;
108
+ model: string;
109
+ };
110
+ /**
111
+ * Format for caching to .dino/research/
112
+ */
113
+ export declare function formatResearchForCache(result: ResearchResult): string;
114
+ /**
115
+ * Get cache path for research result
116
+ */
117
+ export declare function getResearchCachePath(cacheKey: string, cacheDirectory?: string): string;
118
+ //# sourceMappingURL=ambiguity-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ambiguity-resolver.d.ts","sourceRoot":"","sources":["../../../src/core/agents/ambiguity-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,327 @@
1
+ /**
2
+ * Ambiguity Resolver - v14.1.0
3
+ *
4
+ * Auto-triggers research subagent when ambiguity score exceeds threshold.
5
+ * Research findings are cached and injected into context before planning.
6
+ *
7
+ * @see .claude/rules/dino/confidence-handling.md
8
+ */
9
+ import { analyzePrompt } from '../spec-analyzer/index.js';
10
+ // =============================================================================
11
+ // Constants
12
+ // =============================================================================
13
+ const DEFAULT_CONFIG = {
14
+ threshold: 40,
15
+ maxResearchTokens: 5000,
16
+ cacheDirectory: '.dino/research/',
17
+ enableWebSearch: true,
18
+ enableCodebaseSearch: true,
19
+ };
20
+ const AMBIGUITY_THRESHOLD = Number(process.env.DINO_AMBIGUITY_THRESHOLD) || 40;
21
+ // =============================================================================
22
+ // Core Functions
23
+ // =============================================================================
24
+ /**
25
+ * Check if a prompt needs research based on ambiguity score
26
+ */
27
+ export function needsResearch(prompt, config = DEFAULT_CONFIG) {
28
+ const analysis = analyzePrompt(prompt);
29
+ return analysis.ambiguityScore > (config.threshold || AMBIGUITY_THRESHOLD);
30
+ }
31
+ /**
32
+ * Analyze ambiguity and determine if research is needed
33
+ */
34
+ export function analyzeAmbiguity(prompt, config = DEFAULT_CONFIG) {
35
+ const analysis = analyzePrompt(prompt);
36
+ const signals = {
37
+ vagueVerbs: analysis.signals.vagueVerbs,
38
+ missingTarget: analysis.signals.missingTarget,
39
+ unclearSuccess: analysis.signals.unclearSuccess,
40
+ securityRelated: analysis.signals.securityRelated,
41
+ dataRelated: analysis.signals.dataRelated,
42
+ };
43
+ return {
44
+ needsResearch: analysis.ambiguityScore > (config.threshold || AMBIGUITY_THRESHOLD),
45
+ score: analysis.ambiguityScore,
46
+ signals,
47
+ };
48
+ }
49
+ /**
50
+ * Resolve ambiguity by triggering research if needed
51
+ *
52
+ * This is the main entry point for ambiguity resolution.
53
+ * Returns enhanced context with research findings if research was needed.
54
+ */
55
+ export async function resolveAmbiguity(prompt, config = DEFAULT_CONFIG) {
56
+ const analysis = analyzePrompt(prompt);
57
+ const { ambiguityScore, signals } = analysis;
58
+ // Determine if research is needed
59
+ const threshold = config.threshold || AMBIGUITY_THRESHOLD;
60
+ if (ambiguityScore <= threshold) {
61
+ return {
62
+ needsResearch: false,
63
+ ambiguityScore,
64
+ analysis,
65
+ action: 'proceed',
66
+ };
67
+ }
68
+ // Build research parameters
69
+ const researchParams = {
70
+ prompt,
71
+ ambiguityScore,
72
+ signals: {
73
+ vagueVerbs: signals.vagueVerbs,
74
+ missingTarget: signals.missingTarget,
75
+ unclearSuccess: signals.unclearSuccess,
76
+ securityRelated: signals.securityRelated,
77
+ dataRelated: signals.dataRelated,
78
+ },
79
+ maxTokens: config.maxResearchTokens,
80
+ };
81
+ // Execute research
82
+ const research = await executeResearch(researchParams, config);
83
+ // Determine action based on research results
84
+ const action = research.confidence >= 0.8 ? 'proceed' : 'clarify';
85
+ // Build enhanced context from findings
86
+ const context = buildEnhancedContext(research.findings);
87
+ return {
88
+ needsResearch: true,
89
+ ambiguityScore,
90
+ analysis,
91
+ research,
92
+ action,
93
+ context,
94
+ };
95
+ }
96
+ /**
97
+ * Execute research by spawning research subagent
98
+ *
99
+ * This function builds the research prompt and spawns a subagent.
100
+ * In practice, this returns spawn parameters for the Task tool.
101
+ */
102
+ export async function executeResearch(params, config = DEFAULT_CONFIG) {
103
+ const cacheKey = generateCacheKey(params.prompt);
104
+ const startTime = Date.now();
105
+ // Build research prompt
106
+ const researchPrompt = buildResearchPrompt(params, config);
107
+ // This would spawn the subagent via Task tool
108
+ // For now, return stub that will be filled by actual subagent execution
109
+ const findings = await gatherFindings(params, config);
110
+ // Calculate confidence based on findings
111
+ const confidence = calculateResearchConfidence(findings);
112
+ return {
113
+ confidence,
114
+ findings,
115
+ cacheKey,
116
+ timestamp: new Date(),
117
+ tokensUsed: estimateTokens(researchPrompt),
118
+ };
119
+ }
120
+ /**
121
+ * Build research prompt for subagent
122
+ */
123
+ export function buildResearchPrompt(params, config = DEFAULT_CONFIG) {
124
+ const sections = [];
125
+ sections.push('# Research Task');
126
+ sections.push('');
127
+ sections.push('## Objective');
128
+ sections.push(`Gather context and resolve ambiguities for: "${params.prompt}"`);
129
+ sections.push('');
130
+ // Ambiguity signals to address
131
+ sections.push('## Ambiguities to Resolve');
132
+ sections.push(`Ambiguity Score: ${params.ambiguityScore}/25`);
133
+ sections.push('');
134
+ if (params.signals.vagueVerbs.length > 0) {
135
+ sections.push(`### Vague Verbs: ${params.signals.vagueVerbs.join(', ')}`);
136
+ sections.push('- Find examples of similar work in codebase');
137
+ sections.push('- Identify specific patterns to follow');
138
+ sections.push('');
139
+ }
140
+ if (params.signals.missingTarget) {
141
+ sections.push('### Missing Target');
142
+ sections.push('- Identify which files/components are affected');
143
+ sections.push('- Find related code locations');
144
+ sections.push('');
145
+ }
146
+ if (params.signals.unclearSuccess) {
147
+ sections.push('### Unclear Success Criteria');
148
+ sections.push('- Find existing test patterns');
149
+ sections.push('- Identify acceptance criteria from similar features');
150
+ sections.push('');
151
+ }
152
+ if (params.signals.securityRelated) {
153
+ sections.push('### Security Concerns');
154
+ sections.push('- Find existing security patterns');
155
+ sections.push('- Review authentication/authorization approaches');
156
+ sections.push('');
157
+ }
158
+ if (params.signals.dataRelated) {
159
+ sections.push('### Data Handling');
160
+ sections.push('- Find existing data patterns');
161
+ sections.push('- Review migration/backup approaches');
162
+ sections.push('');
163
+ }
164
+ // Research instructions
165
+ sections.push('## Research Instructions');
166
+ sections.push('');
167
+ if (config.enableCodebaseSearch) {
168
+ sections.push('### Codebase Search');
169
+ sections.push('1. Use Grep to find relevant patterns');
170
+ sections.push('2. Use Glob to find related files');
171
+ sections.push('3. Read key files to understand patterns');
172
+ sections.push('');
173
+ }
174
+ if (config.enableWebSearch) {
175
+ sections.push('### External Research');
176
+ sections.push('1. Use WebSearch for best practices');
177
+ sections.push('2. Use WebFetch for documentation');
178
+ sections.push('');
179
+ }
180
+ sections.push('## Output Format');
181
+ sections.push('Return findings in JSON format:');
182
+ sections.push('```json');
183
+ sections.push('{');
184
+ sections.push(' "findings": [');
185
+ sections.push(' {');
186
+ sections.push(' "type": "pattern|file|documentation|external|decision",');
187
+ sections.push(' "source": "path or URL",');
188
+ sections.push(' "summary": "brief description",');
189
+ sections.push(' "relevance": 0.0-1.0,');
190
+ sections.push(' "content": "optional detailed content"');
191
+ sections.push(' }');
192
+ sections.push(' ],');
193
+ sections.push(' "confidence": 0.0-1.0,');
194
+ sections.push(' "recommendations": ["list of suggestions"]');
195
+ sections.push('}');
196
+ sections.push('```');
197
+ return sections.join('\n');
198
+ }
199
+ /**
200
+ * Build Task tool spawn parameters for research subagent
201
+ */
202
+ export function buildTaskSpawnParams(params, config = DEFAULT_CONFIG) {
203
+ return {
204
+ description: 'Research: resolve ambiguity',
205
+ prompt: buildResearchPrompt(params, config),
206
+ subagent_type: 'Explore',
207
+ model: 'sonnet',
208
+ };
209
+ }
210
+ // =============================================================================
211
+ // Helper Functions
212
+ // =============================================================================
213
+ /**
214
+ * Generate cache key from prompt
215
+ */
216
+ function generateCacheKey(prompt) {
217
+ // Simple hash for cache key
218
+ const slug = prompt
219
+ .toLowerCase()
220
+ .replace(/[^a-z0-9]+/g, '-')
221
+ .slice(0, 50);
222
+ const timestamp = Date.now();
223
+ return `research-${slug}-${timestamp}`;
224
+ }
225
+ /**
226
+ * Gather findings from codebase and external sources
227
+ * This is a stub - actual implementation uses Task tool subagent
228
+ */
229
+ async function gatherFindings(params, _config) {
230
+ // This would be populated by actual subagent execution
231
+ // Return empty array - subagent will fill this
232
+ return [];
233
+ }
234
+ /**
235
+ * Calculate confidence from research findings
236
+ */
237
+ function calculateResearchConfidence(findings) {
238
+ if (findings.length === 0)
239
+ return 0;
240
+ // Weight by relevance
241
+ const totalRelevance = findings.reduce((sum, f) => sum + f.relevance, 0);
242
+ const avgRelevance = totalRelevance / findings.length;
243
+ // Bonus for having multiple types of findings
244
+ const types = new Set(findings.map((f) => f.type));
245
+ const typeBonus = Math.min(0.2, types.size * 0.05);
246
+ return Math.min(1, avgRelevance + typeBonus);
247
+ }
248
+ /**
249
+ * Build enhanced context from research findings
250
+ */
251
+ function buildEnhancedContext(findings) {
252
+ if (findings.length === 0)
253
+ return '';
254
+ const sections = [];
255
+ sections.push('## Research Findings');
256
+ sections.push('');
257
+ // Group by type
258
+ const byType = new Map();
259
+ for (const finding of findings) {
260
+ const existing = byType.get(finding.type) || [];
261
+ existing.push(finding);
262
+ byType.set(finding.type, existing);
263
+ }
264
+ // Format each type
265
+ for (const [type, typeFindings] of byType) {
266
+ sections.push(`### ${capitalizeFirst(type)} Findings`);
267
+ for (const finding of typeFindings) {
268
+ sections.push(`- **${finding.source}**: ${finding.summary}`);
269
+ if (finding.content) {
270
+ sections.push(` ${finding.content.slice(0, 200)}...`);
271
+ }
272
+ }
273
+ sections.push('');
274
+ }
275
+ return sections.join('\n');
276
+ }
277
+ /**
278
+ * Estimate tokens from text
279
+ */
280
+ function estimateTokens(text) {
281
+ return Math.ceil(text.length / 4);
282
+ }
283
+ /**
284
+ * Capitalize first letter
285
+ */
286
+ function capitalizeFirst(str) {
287
+ return str.charAt(0).toUpperCase() + str.slice(1);
288
+ }
289
+ // =============================================================================
290
+ // Cache Functions
291
+ // =============================================================================
292
+ /**
293
+ * Format for caching to .dino/research/
294
+ */
295
+ export function formatResearchForCache(result) {
296
+ const lines = [];
297
+ lines.push(`# Research: ${result.cacheKey}`);
298
+ lines.push('');
299
+ lines.push(`**Date:** ${result.timestamp.toISOString()}`);
300
+ lines.push(`**Confidence:** ${Math.round(result.confidence * 100)}%`);
301
+ lines.push(`**Tokens Used:** ${result.tokensUsed}`);
302
+ lines.push('');
303
+ lines.push('## Findings');
304
+ lines.push('');
305
+ for (const finding of result.findings) {
306
+ lines.push(`### ${capitalizeFirst(finding.type)}: ${finding.source}`);
307
+ lines.push(`**Relevance:** ${Math.round(finding.relevance * 100)}%`);
308
+ lines.push('');
309
+ lines.push(finding.summary);
310
+ if (finding.content) {
311
+ lines.push('');
312
+ lines.push('```');
313
+ lines.push(finding.content);
314
+ lines.push('```');
315
+ }
316
+ lines.push('');
317
+ }
318
+ return lines.join('\n');
319
+ }
320
+ /**
321
+ * Get cache path for research result
322
+ */
323
+ export function getResearchCachePath(cacheKey, cacheDirectory = '.dino/research/') {
324
+ const safeName = cacheKey.replace(/[^a-z0-9-]/g, '-');
325
+ return `${cacheDirectory}${safeName}.md`;
326
+ }
327
+ //# sourceMappingURL=ambiguity-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ambiguity-resolver.js","sourceRoot":"","sources":["../../../src/core/agents/ambiguity-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
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 { type SpecAnalysis } from '../spec-analyzer/index.js';
10
+ import { type ResearchResult } from './ambiguity-resolver.js';
11
+ /**
12
+ * Gate decision result
13
+ */
14
+ export interface GateResult {
15
+ proceed: boolean;
16
+ confidence: number;
17
+ requiredConfidence: number;
18
+ action: 'proceed' | 'research' | 'clarify';
19
+ reason: string;
20
+ analysis?: SpecAnalysis;
21
+ research?: ResearchResult;
22
+ questions?: ClarificationQuestion[];
23
+ }
24
+ /**
25
+ * Clarification question for user
26
+ */
27
+ export interface ClarificationQuestion {
28
+ id: string;
29
+ question: string;
30
+ priority: 'blocking' | 'important' | 'nice-to-know';
31
+ type: 'scope' | 'success' | 'pattern' | 'risk';
32
+ options?: string[];
33
+ }
34
+ /**
35
+ * Confidence gate configuration
36
+ */
37
+ export interface ConfidenceGateConfig {
38
+ threshold: number;
39
+ ralphThreshold: number;
40
+ maxResearchRounds: number;
41
+ maxClarificationRounds: number;
42
+ enableAutoResearch: boolean;
43
+ }
44
+ /**
45
+ * Session confidence tracking
46
+ */
47
+ export interface ConfidenceTracking {
48
+ currentConfidence: number;
49
+ targetConfidence: number;
50
+ rounds: ConfidenceRound[];
51
+ status: 'pending' | 'researching' | 'clarifying' | 'ready' | 'blocked';
52
+ }
53
+ /**
54
+ * A round of confidence improvement
55
+ */
56
+ export interface ConfidenceRound {
57
+ roundNumber: number;
58
+ action: 'research' | 'clarification' | 'user-input';
59
+ confidenceBefore: number;
60
+ confidenceAfter: number;
61
+ details: string;
62
+ timestamp: Date;
63
+ }
64
+ /**
65
+ * Check if task can proceed based on confidence level
66
+ *
67
+ * This is the main entry point for confidence gating.
68
+ * Returns decision on whether to proceed, research, or clarify.
69
+ */
70
+ export declare function checkConfidence(prompt: string, config?: ConfidenceGateConfig): Promise<GateResult>;
71
+ /**
72
+ * Generate clarification questions based on analysis signals
73
+ */
74
+ export declare function generateClarificationQuestions(analysis: SpecAnalysis): ClarificationQuestion[];
75
+ /**
76
+ * Update confidence based on user answers
77
+ */
78
+ export declare function updateConfidenceFromAnswers(currentConfidence: number, questions: ClarificationQuestion[], answeredCount: number): number;
79
+ /**
80
+ * Create new confidence tracking for a session
81
+ */
82
+ export declare function createConfidenceTracking(prompt: string, config?: ConfidenceGateConfig): ConfidenceTracking;
83
+ /**
84
+ * Record a confidence improvement round
85
+ */
86
+ export declare function recordConfidenceRound(tracking: ConfidenceTracking, action: 'research' | 'clarification' | 'user-input', confidenceAfter: number, details: string): ConfidenceTracking;
87
+ /**
88
+ * Check if tracking has exceeded max rounds
89
+ */
90
+ export declare function hasExceededMaxRounds(tracking: ConfidenceTracking, config?: ConfidenceGateConfig): boolean;
91
+ /**
92
+ * Format confidence tracking for session.md
93
+ */
94
+ export declare function formatConfidenceForSession(tracking: ConfidenceTracking): string;
95
+ /**
96
+ * Format gate result for display
97
+ */
98
+ export declare function formatGateResult(result: GateResult): string;
99
+ //# sourceMappingURL=confidence-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confidence-gate.d.ts","sourceRoot":"","sources":["../../../src/core/agents/confidence-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAkC,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9F,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAMhF;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,SAAS,CAAC,EAAE,qBAAqB,EAAE,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,UAAU,GAAG,WAAW,GAAG,cAAc,CAAC;IACpD,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IAC/C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,CAAC;CACxE;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,UAAU,GAAG,eAAe,GAAG,YAAY,CAAC;IACpD,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAkBD;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,MAAM,uBAAiB,GACtB,OAAO,CAAC,UAAU,CAAC,CAgFrB;AA6BD;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,YAAY,GACrB,qBAAqB,EAAE,CAgEzB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,iBAAiB,EAAE,MAAM,EACzB,SAAS,EAAE,qBAAqB,EAAE,EAClC,aAAa,EAAE,MAAM,GACpB,MAAM,CAeR;AAMD;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,MAAM,uBAAiB,GACtB,kBAAkB,CAYpB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,kBAAkB,EAC5B,MAAM,EAAE,UAAU,GAAG,eAAe,GAAG,YAAY,EACnD,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM,GACd,kBAAkB,CAuBpB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,kBAAkB,EAC5B,MAAM,uBAAiB,GACtB,OAAO,CAUT;AAMD;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,CAwB/E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CA4B3D"}