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.
Files changed (231) hide show
  1. package/README.md +118 -5
  2. package/dist/commands/hud.d.ts +1 -8
  3. package/dist/commands/hud.d.ts.map +1 -1
  4. package/dist/commands/hud.js +4 -18
  5. package/dist/commands/hud.js.map +1 -1
  6. package/dist/core/agents/ambiguity-resolver.d.ts +118 -0
  7. package/dist/core/agents/ambiguity-resolver.d.ts.map +1 -0
  8. package/dist/core/agents/ambiguity-resolver.js +327 -0
  9. package/dist/core/agents/ambiguity-resolver.js.map +1 -0
  10. package/dist/core/agents/confidence-gate.d.ts +99 -0
  11. package/dist/core/agents/confidence-gate.d.ts.map +1 -0
  12. package/dist/core/agents/confidence-gate.js +295 -0
  13. package/dist/core/agents/confidence-gate.js.map +1 -0
  14. package/dist/core/agents/feedback-collector.d.ts +108 -0
  15. package/dist/core/agents/feedback-collector.d.ts.map +1 -0
  16. package/dist/core/agents/feedback-collector.js +313 -0
  17. package/dist/core/agents/feedback-collector.js.map +1 -0
  18. package/dist/core/agents/parallel-reviewer.d.ts +88 -0
  19. package/dist/core/agents/parallel-reviewer.d.ts.map +1 -0
  20. package/dist/core/agents/parallel-reviewer.js +459 -0
  21. package/dist/core/agents/parallel-reviewer.js.map +1 -0
  22. package/dist/core/agents/reviewer-loop.d.ts +102 -0
  23. package/dist/core/agents/reviewer-loop.d.ts.map +1 -0
  24. package/dist/core/agents/reviewer-loop.js +373 -0
  25. package/dist/core/agents/reviewer-loop.js.map +1 -0
  26. package/dist/core/agents/skill-auditor.d.ts +82 -0
  27. package/dist/core/agents/skill-auditor.d.ts.map +1 -0
  28. package/dist/core/agents/skill-auditor.js +278 -0
  29. package/dist/core/agents/skill-auditor.js.map +1 -0
  30. package/dist/core/config/feature-flags.d.ts +25 -1
  31. package/dist/core/config/feature-flags.d.ts.map +1 -1
  32. package/dist/core/config/feature-flags.js +7 -1
  33. package/dist/core/config/feature-flags.js.map +1 -1
  34. package/dist/core/context/__tests__/budget-thresholds.test.d.ts +5 -0
  35. package/dist/core/context/__tests__/budget-thresholds.test.d.ts.map +1 -0
  36. package/dist/core/context/__tests__/budget-thresholds.test.js +223 -0
  37. package/dist/core/context/__tests__/budget-thresholds.test.js.map +1 -0
  38. package/dist/core/context/__tests__/compaction-engine.test.d.ts +5 -0
  39. package/dist/core/context/__tests__/compaction-engine.test.d.ts.map +1 -0
  40. package/dist/core/context/__tests__/compaction-engine.test.js +474 -0
  41. package/dist/core/context/__tests__/compaction-engine.test.js.map +1 -0
  42. package/dist/core/context/__tests__/output-persistence.test.d.ts +5 -0
  43. package/dist/core/context/__tests__/output-persistence.test.d.ts.map +1 -0
  44. package/dist/core/context/__tests__/output-persistence.test.js +246 -0
  45. package/dist/core/context/__tests__/output-persistence.test.js.map +1 -0
  46. package/dist/core/context/auto-injection-engine.d.ts +10 -1
  47. package/dist/core/context/auto-injection-engine.d.ts.map +1 -1
  48. package/dist/core/context/auto-injection-engine.js +45 -2
  49. package/dist/core/context/auto-injection-engine.js.map +1 -1
  50. package/dist/core/context/budget-thresholds.d.ts +167 -0
  51. package/dist/core/context/budget-thresholds.d.ts.map +1 -0
  52. package/dist/core/context/budget-thresholds.js +234 -0
  53. package/dist/core/context/budget-thresholds.js.map +1 -0
  54. package/dist/core/context/compaction-engine.d.ts +193 -0
  55. package/dist/core/context/compaction-engine.d.ts.map +1 -0
  56. package/dist/core/context/compaction-engine.js +376 -0
  57. package/dist/core/context/compaction-engine.js.map +1 -0
  58. package/dist/core/context/context-health.d.ts +27 -2
  59. package/dist/core/context/context-health.d.ts.map +1 -1
  60. package/dist/core/context/context-health.js +98 -12
  61. package/dist/core/context/context-health.js.map +1 -1
  62. package/dist/core/context/focus-resource-loader.d.ts +143 -0
  63. package/dist/core/context/focus-resource-loader.d.ts.map +1 -0
  64. package/dist/core/context/focus-resource-loader.js +305 -0
  65. package/dist/core/context/focus-resource-loader.js.map +1 -0
  66. package/dist/core/context/index.d.ts +10 -5
  67. package/dist/core/context/index.d.ts.map +1 -1
  68. package/dist/core/context/index.js +40 -5
  69. package/dist/core/context/index.js.map +1 -1
  70. package/dist/core/context/lazy-loader.d.ts +44 -1
  71. package/dist/core/context/lazy-loader.d.ts.map +1 -1
  72. package/dist/core/context/lazy-loader.js +59 -1
  73. package/dist/core/context/lazy-loader.js.map +1 -1
  74. package/dist/core/context/output-persistence.d.ts +142 -0
  75. package/dist/core/context/output-persistence.d.ts.map +1 -0
  76. package/dist/core/context/output-persistence.js +242 -0
  77. package/dist/core/context/output-persistence.js.map +1 -0
  78. package/dist/core/context-repl/__tests__/repl-environment.test.d.ts +7 -0
  79. package/dist/core/context-repl/__tests__/repl-environment.test.d.ts.map +1 -0
  80. package/dist/core/context-repl/__tests__/repl-environment.test.js +335 -0
  81. package/dist/core/context-repl/__tests__/repl-environment.test.js.map +1 -0
  82. package/dist/core/context-repl/context-window-monitor.d.ts +181 -0
  83. package/dist/core/context-repl/context-window-monitor.d.ts.map +1 -0
  84. package/dist/core/context-repl/context-window-monitor.js +309 -0
  85. package/dist/core/context-repl/context-window-monitor.js.map +1 -0
  86. package/dist/core/context-repl/index.d.ts +8 -3
  87. package/dist/core/context-repl/index.d.ts.map +1 -1
  88. package/dist/core/context-repl/index.js +11 -3
  89. package/dist/core/context-repl/index.js.map +1 -1
  90. package/dist/core/context-repl/repl-environment.d.ts +66 -0
  91. package/dist/core/context-repl/repl-environment.d.ts.map +1 -0
  92. package/dist/core/context-repl/repl-environment.js +795 -0
  93. package/dist/core/context-repl/repl-environment.js.map +1 -0
  94. package/dist/core/context-repl/types.d.ts +277 -1
  95. package/dist/core/context-repl/types.d.ts.map +1 -1
  96. package/dist/core/context-repl/types.js +52 -1
  97. package/dist/core/context-repl/types.js.map +1 -1
  98. package/dist/core/environment/__tests__/pre-verify.test.d.ts +5 -0
  99. package/dist/core/environment/__tests__/pre-verify.test.d.ts.map +1 -0
  100. package/dist/core/environment/__tests__/pre-verify.test.js +343 -0
  101. package/dist/core/environment/__tests__/pre-verify.test.js.map +1 -0
  102. package/dist/core/environment/index.d.ts +8 -0
  103. package/dist/core/environment/index.d.ts.map +1 -0
  104. package/dist/core/environment/index.js +7 -0
  105. package/dist/core/environment/index.js.map +1 -0
  106. package/dist/core/environment/pre-verify.d.ts +63 -0
  107. package/dist/core/environment/pre-verify.d.ts.map +1 -0
  108. package/dist/core/environment/pre-verify.js +221 -0
  109. package/dist/core/environment/pre-verify.js.map +1 -0
  110. package/dist/core/environment/types.d.ts +37 -0
  111. package/dist/core/environment/types.d.ts.map +1 -0
  112. package/dist/core/environment/types.js +5 -0
  113. package/dist/core/environment/types.js.map +1 -0
  114. package/dist/core/generator/claude-md.js +1 -1
  115. package/dist/core/intelligence/context-budget.d.ts +10 -5
  116. package/dist/core/intelligence/context-budget.d.ts.map +1 -1
  117. package/dist/core/intelligence/context-budget.js +12 -5
  118. package/dist/core/intelligence/context-budget.js.map +1 -1
  119. package/dist/core/provider/storage.d.ts.map +1 -1
  120. package/dist/core/provider/storage.js +1 -2
  121. package/dist/core/provider/storage.js.map +1 -1
  122. package/dist/hooks/post-edit.js +73 -0
  123. package/dist/hooks/post-edit.js.map +1 -1
  124. package/dist/hooks/session-start.js +115 -0
  125. package/dist/hooks/session-start.js.map +1 -1
  126. package/dist/hooks/types.js +1 -1
  127. package/dist/hooks/user-prompt-submit.js +100 -0
  128. package/dist/hooks/user-prompt-submit.js.map +1 -1
  129. package/dist/hud/config.d.ts +3 -28
  130. package/dist/hud/config.d.ts.map +1 -1
  131. package/dist/hud/config.js +8 -60
  132. package/dist/hud/config.js.map +1 -1
  133. package/dist/hud/index.d.ts.map +1 -1
  134. package/dist/hud/index.js +0 -1
  135. package/dist/hud/index.js.map +1 -1
  136. package/dist/hud/render/budget-bar.d.ts +0 -2
  137. package/dist/hud/render/budget-bar.d.ts.map +1 -1
  138. package/dist/hud/render/budget-bar.js +5 -8
  139. package/dist/hud/render/budget-bar.js.map +1 -1
  140. package/dist/hud/stdin.d.ts +0 -3
  141. package/dist/hud/stdin.d.ts.map +1 -1
  142. package/dist/hud/stdin.js +2 -29
  143. package/dist/hud/stdin.js.map +1 -1
  144. package/dist/hud/types.d.ts +0 -2
  145. package/dist/hud/types.d.ts.map +1 -1
  146. package/dist/mcp/__tests__/dynamic-updates.test.d.ts +5 -0
  147. package/dist/mcp/__tests__/dynamic-updates.test.d.ts.map +1 -0
  148. package/dist/mcp/__tests__/dynamic-updates.test.js +314 -0
  149. package/dist/mcp/__tests__/dynamic-updates.test.js.map +1 -0
  150. package/dist/mcp/dynamic-updates.d.ts +167 -0
  151. package/dist/mcp/dynamic-updates.d.ts.map +1 -0
  152. package/dist/mcp/dynamic-updates.js +313 -0
  153. package/dist/mcp/dynamic-updates.js.map +1 -0
  154. package/dist/mcp/focus-filter.d.ts +74 -0
  155. package/dist/mcp/focus-filter.d.ts.map +1 -0
  156. package/dist/mcp/focus-filter.js +229 -0
  157. package/dist/mcp/focus-filter.js.map +1 -0
  158. package/dist/mcp/index.d.ts +4 -2
  159. package/dist/mcp/index.d.ts.map +1 -1
  160. package/dist/mcp/index.js +5 -2
  161. package/dist/mcp/index.js.map +1 -1
  162. package/dist/mcp/registry.d.ts +4 -4
  163. package/dist/mcp/registry.d.ts.map +1 -1
  164. package/dist/mcp/registry.js +17 -16
  165. package/dist/mcp/registry.js.map +1 -1
  166. package/dist/mcp/server.d.ts +2 -1
  167. package/dist/mcp/server.d.ts.map +1 -1
  168. package/dist/mcp/server.js +12 -3
  169. package/dist/mcp/server.js.map +1 -1
  170. package/dist/mcp/tool-tiers.d.ts.map +1 -1
  171. package/dist/mcp/tool-tiers.js +5 -0
  172. package/dist/mcp/tool-tiers.js.map +1 -1
  173. package/dist/mcp/tools/__tests__/environment.test.d.ts +5 -0
  174. package/dist/mcp/tools/__tests__/environment.test.d.ts.map +1 -0
  175. package/dist/mcp/tools/__tests__/environment.test.js +219 -0
  176. package/dist/mcp/tools/__tests__/environment.test.js.map +1 -0
  177. package/dist/mcp/tools/auto-inject.d.ts +36 -0
  178. package/dist/mcp/tools/auto-inject.d.ts.map +1 -0
  179. package/dist/mcp/tools/auto-inject.js +143 -0
  180. package/dist/mcp/tools/auto-inject.js.map +1 -0
  181. package/dist/mcp/tools/auto-unload.d.ts +29 -0
  182. package/dist/mcp/tools/auto-unload.d.ts.map +1 -0
  183. package/dist/mcp/tools/auto-unload.js +151 -0
  184. package/dist/mcp/tools/auto-unload.js.map +1 -0
  185. package/dist/mcp/tools/context-repl.d.ts +48 -0
  186. package/dist/mcp/tools/context-repl.d.ts.map +1 -0
  187. package/dist/mcp/tools/context-repl.js +290 -0
  188. package/dist/mcp/tools/context-repl.js.map +1 -0
  189. package/dist/mcp/tools/environment.d.ts +27 -0
  190. package/dist/mcp/tools/environment.d.ts.map +1 -0
  191. package/dist/mcp/tools/environment.js +97 -0
  192. package/dist/mcp/tools/environment.js.map +1 -0
  193. package/dist/mcp/tools/feedback.d.ts +63 -0
  194. package/dist/mcp/tools/feedback.d.ts.map +1 -0
  195. package/dist/mcp/tools/feedback.js +255 -0
  196. package/dist/mcp/tools/feedback.js.map +1 -0
  197. package/dist/mcp/tools/health.d.ts +29 -0
  198. package/dist/mcp/tools/health.d.ts.map +1 -0
  199. package/dist/mcp/tools/health.js +171 -0
  200. package/dist/mcp/tools/health.js.map +1 -0
  201. package/dist/mcp/tools/index.d.ts +9 -2
  202. package/dist/mcp/tools/index.d.ts.map +1 -1
  203. package/dist/mcp/tools/index.js +37 -2
  204. package/dist/mcp/tools/index.js.map +1 -1
  205. package/dist/mcp/tools/output-persistence.d.ts +44 -0
  206. package/dist/mcp/tools/output-persistence.d.ts.map +1 -0
  207. package/dist/mcp/tools/output-persistence.js +208 -0
  208. package/dist/mcp/tools/output-persistence.js.map +1 -0
  209. package/dist/mcp-server.d.ts +2 -1
  210. package/dist/mcp-server.d.ts.map +1 -1
  211. package/dist/mcp-server.js +36 -7
  212. package/dist/mcp-server.js.map +1 -1
  213. package/dist/rules/index.js +2 -2
  214. package/dist/utils/exec.js +2 -2
  215. package/dist/utils/exec.js.map +1 -1
  216. package/dist/utils/gitignore.d.ts.map +1 -1
  217. package/dist/utils/gitignore.js +5 -0
  218. package/dist/utils/gitignore.js.map +1 -1
  219. package/package.json +76 -77
  220. package/dist/hud/config-tui.d.ts +0 -25
  221. package/dist/hud/config-tui.d.ts.map +0 -1
  222. package/dist/hud/config-tui.js +0 -199
  223. package/dist/hud/config-tui.js.map +0 -1
  224. package/dist/hud/models.d.ts +0 -58
  225. package/dist/hud/models.d.ts.map +0 -1
  226. package/dist/hud/models.js +0 -124
  227. package/dist/hud/models.js.map +0 -1
  228. package/dist/hud/token-estimator.d.ts +0 -79
  229. package/dist/hud/token-estimator.d.ts.map +0 -1
  230. package/dist/hud/token-estimator.js +0 -126
  231. 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":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,aAAa,EAAqB,MAAM,2BAA2B,CAAC;AAyE7E,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,MAAM,cAAc,GAA4B;IAC9C,SAAS,EAAE,EAAE;IACb,iBAAiB,EAAE,IAAI;IACvB,cAAc,EAAE,iBAAiB;IACjC,eAAe,EAAE,IAAI;IACrB,oBAAoB,EAAE,IAAI;CAC3B,CAAC;AAEF,MAAM,mBAAmB,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,IAAI,EAAE,CAAC;AAE/E,gFAAgF;AAChF,iBAAiB;AACjB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,MAAM,GAAG,cAAc;IACnE,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACvC,OAAO,QAAQ,CAAC,cAAc,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,mBAAmB,CAAC,CAAC;AAC7E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAAc,EACd,MAAM,GAAG,cAAc;IAEvB,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAEvC,MAAM,OAAO,GAAoB;QAC/B,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,UAAU;QACvC,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,aAAa;QAC7C,cAAc,EAAE,QAAQ,CAAC,OAAO,CAAC,cAAc;QAC/C,eAAe,EAAE,QAAQ,CAAC,OAAO,CAAC,eAAe;QACjD,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,WAAW;KAC1C,CAAC;IAEF,OAAO;QACL,aAAa,EAAE,QAAQ,CAAC,cAAc,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,mBAAmB,CAAC;QAClF,KAAK,EAAE,QAAQ,CAAC,cAAc;QAC9B,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAc,EACd,MAAM,GAAG,cAAc;IAEvB,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC;IAE7C,kCAAkC;IAClC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,mBAAmB,CAAC;IAE1D,IAAI,cAAc,IAAI,SAAS,EAAE,CAAC;QAChC,OAAO;YACL,aAAa,EAAE,KAAK;YACpB,cAAc;YACd,QAAQ;YACR,MAAM,EAAE,SAAS;SAClB,CAAC;IACJ,CAAC;IAED,4BAA4B;IAC5B,MAAM,cAAc,GAAwB;QAC1C,MAAM;QACN,cAAc;QACd,OAAO,EAAE;YACP,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC;QACD,SAAS,EAAE,MAAM,CAAC,iBAAiB;KACpC,CAAC;IAEF,mBAAmB;IACnB,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAE/D,6CAA6C;IAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAElE,uCAAuC;IACvC,MAAM,OAAO,GAAG,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAExD,OAAO;QACL,aAAa,EAAE,IAAI;QACnB,cAAc;QACd,QAAQ;QACR,QAAQ;QACR,MAAM;QACN,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAA2B,EAC3B,MAAM,GAAG,cAAc;IAEvB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,wBAAwB;IACxB,MAAM,cAAc,GAAG,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE3D,8CAA8C;IAC9C,wEAAwE;IACxE,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEtD,yCAAyC;IACzC,MAAM,UAAU,GAAG,2BAA2B,CAAC,QAAQ,CAAC,CAAC;IAEzD,OAAO;QACL,UAAU;QACV,QAAQ;QACR,QAAQ;QACR,SAAS,EAAE,IAAI,IAAI,EAAE;QACrB,UAAU,EAAE,cAAc,CAAC,cAAc,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAA2B,EAC3B,MAAM,GAAG,cAAc;IAEvB,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,gDAAgD,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAChF,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAElB,+BAA+B;IAC/B,QAAQ,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC3C,QAAQ,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,cAAc,KAAK,CAAC,CAAC;IAC9D,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAElB,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1E,QAAQ,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAC7D,QAAQ,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACxD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QACjC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACpC,QAAQ,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAChE,QAAQ,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC/C,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAClC,QAAQ,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC9C,QAAQ,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC/C,QAAQ,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QACtE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;QACnC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACvC,QAAQ,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QACnD,QAAQ,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QAClE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAC/B,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACnC,QAAQ,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC/C,QAAQ,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACtD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;IAED,wBAAwB;IACxB,QAAQ,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAC1C,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAElB,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;QAChC,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACrC,QAAQ,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACvD,QAAQ,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QACnD,QAAQ,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QAC1D,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACvC,QAAQ,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACrD,QAAQ,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QACnD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;IAED,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAClC,QAAQ,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IACjD,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnB,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACjC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;IAC/E,QAAQ,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAChD,QAAQ,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IACvD,QAAQ,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC7C,QAAQ,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAC9D,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAC1C,QAAQ,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAC9D,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAErB,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAA2B,EAC3B,MAAM,GAAG,cAAc;IAOvB,OAAO;QACL,WAAW,EAAE,6BAA6B;QAC1C,MAAM,EAAE,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC;QAC3C,aAAa,EAAE,SAAS;QACxB,KAAK,EAAE,QAAQ;KAChB,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF;;GAEG;AACH,SAAS,gBAAgB,CAAC,MAAc;IACtC,4BAA4B;IAC5B,MAAM,IAAI,GAAG,MAAM;SAChB,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,OAAO,YAAY,IAAI,IAAI,SAAS,EAAE,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,cAAc,CAC3B,MAA2B,EAC3B,OAAgC;IAEhC,uDAAuD;IACvD,+CAA+C;IAC/C,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,SAAS,2BAA2B,CAAC,QAA2B;IAC9D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEpC,sBAAsB;IACtB,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACzE,MAAM,YAAY,GAAG,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC;IAEtD,8CAA8C;IAC9C,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAEnD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,QAA2B;IACvD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAElB,gBAAgB;IAChB,MAAM,MAAM,GAAG,IAAI,GAAG,EAA6B,CAAC;IACpD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAChD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED,mBAAmB;IACnB,KAAK,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,MAAM,EAAE,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,OAAO,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACvD,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;YACnC,QAAQ,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,MAAM,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7D,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,QAAQ,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,GAAW;IAClC,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,gFAAgF;AAChF,kBAAkB;AAClB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAsB;IAC3D,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC1D,KAAK,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACtE,KAAK,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACpD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACtE,KAAK,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACrE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAAgB,EAChB,cAAc,GAAG,iBAAiB;IAElC,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IACtD,OAAO,GAAG,cAAc,GAAG,QAAQ,KAAK,CAAC;AAC3C,CAAC"}
@@ -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"}