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,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"}
|