dino-spec 17.4.3 → 17.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/dist/commands/init.d.ts.map +1 -1
  2. package/dist/commands/init.js +10 -0
  3. package/dist/commands/init.js.map +1 -1
  4. package/dist/core/agents/__tests__/confidence-gate.test.d.ts +5 -0
  5. package/dist/core/agents/__tests__/confidence-gate.test.d.ts.map +1 -0
  6. package/dist/core/agents/__tests__/confidence-gate.test.js +329 -0
  7. package/dist/core/agents/__tests__/confidence-gate.test.js.map +1 -0
  8. package/dist/core/agents/__tests__/gap-detector.test.d.ts +5 -0
  9. package/dist/core/agents/__tests__/gap-detector.test.d.ts.map +1 -0
  10. package/dist/core/agents/__tests__/gap-detector.test.js +609 -0
  11. package/dist/core/agents/__tests__/gap-detector.test.js.map +1 -0
  12. package/dist/core/agents/__tests__/learning-loop.test.d.ts +5 -0
  13. package/dist/core/agents/__tests__/learning-loop.test.d.ts.map +1 -0
  14. package/dist/core/agents/__tests__/learning-loop.test.js +663 -0
  15. package/dist/core/agents/__tests__/learning-loop.test.js.map +1 -0
  16. package/dist/core/agents/__tests__/parallel-executor.test.d.ts +5 -0
  17. package/dist/core/agents/__tests__/parallel-executor.test.d.ts.map +1 -0
  18. package/dist/core/agents/__tests__/parallel-executor.test.js +610 -0
  19. package/dist/core/agents/__tests__/parallel-executor.test.js.map +1 -0
  20. package/dist/core/agents/__tests__/research-validator.test.js +5 -5
  21. package/dist/core/agents/__tests__/research-validator.test.js.map +1 -1
  22. package/dist/core/agents/__tests__/skill-creator.test.d.ts +5 -0
  23. package/dist/core/agents/__tests__/skill-creator.test.d.ts.map +1 -0
  24. package/dist/core/agents/__tests__/skill-creator.test.js +443 -0
  25. package/dist/core/agents/__tests__/skill-creator.test.js.map +1 -0
  26. package/dist/core/agents/__tests__/state-persistence.test.d.ts +2 -0
  27. package/dist/core/agents/__tests__/state-persistence.test.d.ts.map +1 -0
  28. package/dist/core/agents/__tests__/state-persistence.test.js +270 -0
  29. package/dist/core/agents/__tests__/state-persistence.test.js.map +1 -0
  30. package/dist/core/agents/__tests__/validation-cache.test.d.ts +2 -0
  31. package/dist/core/agents/__tests__/validation-cache.test.d.ts.map +1 -0
  32. package/dist/core/agents/__tests__/validation-cache.test.js +181 -0
  33. package/dist/core/agents/__tests__/validation-cache.test.js.map +1 -0
  34. package/dist/core/agents/blackboard.d.ts +22 -3
  35. package/dist/core/agents/blackboard.d.ts.map +1 -1
  36. package/dist/core/agents/blackboard.js +52 -2
  37. package/dist/core/agents/blackboard.js.map +1 -1
  38. package/dist/core/agents/circuit-breaker.d.ts +79 -1
  39. package/dist/core/agents/circuit-breaker.d.ts.map +1 -1
  40. package/dist/core/agents/circuit-breaker.js +175 -1
  41. package/dist/core/agents/circuit-breaker.js.map +1 -1
  42. package/dist/core/agents/clarification-phase.d.ts +128 -0
  43. package/dist/core/agents/clarification-phase.d.ts.map +1 -0
  44. package/dist/core/agents/clarification-phase.js +375 -0
  45. package/dist/core/agents/clarification-phase.js.map +1 -0
  46. package/dist/core/agents/confidence-gate.d.ts +116 -3
  47. package/dist/core/agents/confidence-gate.d.ts.map +1 -1
  48. package/dist/core/agents/confidence-gate.js +363 -3
  49. package/dist/core/agents/confidence-gate.js.map +1 -1
  50. package/dist/core/agents/correction-tracker.d.ts +197 -0
  51. package/dist/core/agents/correction-tracker.d.ts.map +1 -0
  52. package/dist/core/agents/correction-tracker.js +366 -0
  53. package/dist/core/agents/correction-tracker.js.map +1 -0
  54. package/dist/core/agents/dependency-graph.d.ts +193 -0
  55. package/dist/core/agents/dependency-graph.d.ts.map +1 -0
  56. package/dist/core/agents/dependency-graph.js +462 -0
  57. package/dist/core/agents/dependency-graph.js.map +1 -0
  58. package/dist/core/agents/gap-detector.d.ts +277 -0
  59. package/dist/core/agents/gap-detector.d.ts.map +1 -0
  60. package/dist/core/agents/gap-detector.js +540 -0
  61. package/dist/core/agents/gap-detector.js.map +1 -0
  62. package/dist/core/agents/index.d.ts +14 -1
  63. package/dist/core/agents/index.d.ts.map +1 -1
  64. package/dist/core/agents/index.js +26 -1
  65. package/dist/core/agents/index.js.map +1 -1
  66. package/dist/core/agents/message-protocol.d.ts +13 -2
  67. package/dist/core/agents/message-protocol.d.ts.map +1 -1
  68. package/dist/core/agents/message-protocol.js +20 -1
  69. package/dist/core/agents/message-protocol.js.map +1 -1
  70. package/dist/core/agents/parallel-executor.d.ts +182 -0
  71. package/dist/core/agents/parallel-executor.d.ts.map +1 -0
  72. package/dist/core/agents/parallel-executor.js +474 -0
  73. package/dist/core/agents/parallel-executor.js.map +1 -0
  74. package/dist/core/agents/pattern-detector.d.ts +157 -0
  75. package/dist/core/agents/pattern-detector.d.ts.map +1 -0
  76. package/dist/core/agents/pattern-detector.js +370 -0
  77. package/dist/core/agents/pattern-detector.js.map +1 -0
  78. package/dist/core/agents/registry-client.d.ts +6 -0
  79. package/dist/core/agents/registry-client.d.ts.map +1 -1
  80. package/dist/core/agents/registry-client.js +3 -0
  81. package/dist/core/agents/registry-client.js.map +1 -1
  82. package/dist/core/agents/research-phase.d.ts +114 -0
  83. package/dist/core/agents/research-phase.d.ts.map +1 -0
  84. package/dist/core/agents/research-phase.js +355 -0
  85. package/dist/core/agents/research-phase.js.map +1 -0
  86. package/dist/core/agents/research-validator.d.ts +13 -2
  87. package/dist/core/agents/research-validator.d.ts.map +1 -1
  88. package/dist/core/agents/research-validator.js +63 -31
  89. package/dist/core/agents/research-validator.js.map +1 -1
  90. package/dist/core/agents/skill-creator.d.ts +174 -0
  91. package/dist/core/agents/skill-creator.d.ts.map +1 -0
  92. package/dist/core/agents/skill-creator.js +570 -0
  93. package/dist/core/agents/skill-creator.js.map +1 -0
  94. package/dist/core/agents/state-persistence.d.ts +184 -0
  95. package/dist/core/agents/state-persistence.d.ts.map +1 -0
  96. package/dist/core/agents/state-persistence.js +394 -0
  97. package/dist/core/agents/state-persistence.js.map +1 -0
  98. package/dist/core/agents/validation-cache.d.ts +122 -0
  99. package/dist/core/agents/validation-cache.d.ts.map +1 -0
  100. package/dist/core/agents/validation-cache.js +280 -0
  101. package/dist/core/agents/validation-cache.js.map +1 -0
  102. package/dist/core/agents/validators/__tests__/validators.test.d.ts +5 -0
  103. package/dist/core/agents/validators/__tests__/validators.test.d.ts.map +1 -0
  104. package/dist/core/agents/validators/__tests__/validators.test.js +321 -0
  105. package/dist/core/agents/validators/__tests__/validators.test.js.map +1 -0
  106. package/dist/core/agents/validators/base-validator.d.ts +191 -0
  107. package/dist/core/agents/validators/base-validator.d.ts.map +1 -0
  108. package/dist/core/agents/validators/base-validator.js +192 -0
  109. package/dist/core/agents/validators/base-validator.js.map +1 -0
  110. package/dist/core/agents/validators/index.d.ts +7 -0
  111. package/dist/core/agents/validators/index.d.ts.map +1 -0
  112. package/dist/core/agents/validators/index.js +7 -0
  113. package/dist/core/agents/validators/index.js.map +1 -0
  114. package/dist/core/agents/validators/npm-validator.d.ts +50 -0
  115. package/dist/core/agents/validators/npm-validator.d.ts.map +1 -0
  116. package/dist/core/agents/validators/npm-validator.js +211 -0
  117. package/dist/core/agents/validators/npm-validator.js.map +1 -0
  118. package/dist/core/agents/validators/pip-validator.d.ts +49 -0
  119. package/dist/core/agents/validators/pip-validator.d.ts.map +1 -0
  120. package/dist/core/agents/validators/pip-validator.js +191 -0
  121. package/dist/core/agents/validators/pip-validator.js.map +1 -0
  122. package/dist/core/agents/validators/validator-registry.d.ts +122 -0
  123. package/dist/core/agents/validators/validator-registry.d.ts.map +1 -0
  124. package/dist/core/agents/validators/validator-registry.js +321 -0
  125. package/dist/core/agents/validators/validator-registry.js.map +1 -0
  126. package/dist/core/context-repl/types.d.ts +4 -4
  127. package/dist/core/memory/index.d.ts +1 -0
  128. package/dist/core/memory/index.d.ts.map +1 -1
  129. package/dist/core/memory/index.js +2 -0
  130. package/dist/core/memory/index.js.map +1 -1
  131. package/dist/core/memory/learning-store.d.ts +222 -0
  132. package/dist/core/memory/learning-store.d.ts.map +1 -0
  133. package/dist/core/memory/learning-store.js +477 -0
  134. package/dist/core/memory/learning-store.js.map +1 -0
  135. package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.d.ts +5 -0
  136. package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.d.ts.map +1 -0
  137. package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.js +401 -0
  138. package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.js.map +1 -0
  139. package/dist/core/spec-analyzer/ambiguity-detector.d.ts +99 -0
  140. package/dist/core/spec-analyzer/ambiguity-detector.d.ts.map +1 -0
  141. package/dist/core/spec-analyzer/ambiguity-detector.js +250 -0
  142. package/dist/core/spec-analyzer/ambiguity-detector.js.map +1 -0
  143. package/dist/core/spec-analyzer/clarification-generator.d.ts +76 -0
  144. package/dist/core/spec-analyzer/clarification-generator.d.ts.map +1 -0
  145. package/dist/core/spec-analyzer/clarification-generator.js +257 -0
  146. package/dist/core/spec-analyzer/clarification-generator.js.map +1 -0
  147. package/dist/core/spec-analyzer/index.d.ts +10 -1
  148. package/dist/core/spec-analyzer/index.d.ts.map +1 -1
  149. package/dist/core/spec-analyzer/index.js +13 -1
  150. package/dist/core/spec-analyzer/index.js.map +1 -1
  151. package/dist/core/spec-analyzer/patterns.d.ts +73 -0
  152. package/dist/core/spec-analyzer/patterns.d.ts.map +1 -0
  153. package/dist/core/spec-analyzer/patterns.js +412 -0
  154. package/dist/core/spec-analyzer/patterns.js.map +1 -0
  155. package/dist/hooks/__tests__/dynamic-generator.test.d.ts +5 -0
  156. package/dist/hooks/__tests__/dynamic-generator.test.d.ts.map +1 -0
  157. package/dist/hooks/__tests__/dynamic-generator.test.js +425 -0
  158. package/dist/hooks/__tests__/dynamic-generator.test.js.map +1 -0
  159. package/dist/hooks/__tests__/hook-agent-bridge.test.d.ts +5 -0
  160. package/dist/hooks/__tests__/hook-agent-bridge.test.d.ts.map +1 -0
  161. package/dist/hooks/__tests__/hook-agent-bridge.test.js +315 -0
  162. package/dist/hooks/__tests__/hook-agent-bridge.test.js.map +1 -0
  163. package/dist/hooks/dynamic-generator.d.ts +158 -0
  164. package/dist/hooks/dynamic-generator.d.ts.map +1 -0
  165. package/dist/hooks/dynamic-generator.js +448 -0
  166. package/dist/hooks/dynamic-generator.js.map +1 -0
  167. package/dist/hooks/hook-agent-bridge.d.ts +252 -0
  168. package/dist/hooks/hook-agent-bridge.d.ts.map +1 -0
  169. package/dist/hooks/hook-agent-bridge.js +489 -0
  170. package/dist/hooks/hook-agent-bridge.js.map +1 -0
  171. package/dist/hooks/index.d.ts +3 -1
  172. package/dist/hooks/index.d.ts.map +1 -1
  173. package/dist/hooks/index.js +5 -1
  174. package/dist/hooks/index.js.map +1 -1
  175. package/dist/mcp/tool-catalog.d.ts.map +1 -1
  176. package/dist/mcp/tool-catalog.js +47 -0
  177. package/dist/mcp/tool-catalog.js.map +1 -1
  178. package/dist/mcp/tool-tiers.d.ts.map +1 -1
  179. package/dist/mcp/tool-tiers.js +4 -0
  180. package/dist/mcp/tool-tiers.js.map +1 -1
  181. package/dist/mcp/tools/index.d.ts +2 -1
  182. package/dist/mcp/tools/index.d.ts.map +1 -1
  183. package/dist/mcp/tools/index.js +15 -1
  184. package/dist/mcp/tools/index.js.map +1 -1
  185. package/dist/mcp/tools/learning-store.d.ts +30 -0
  186. package/dist/mcp/tools/learning-store.d.ts.map +1 -0
  187. package/dist/mcp/tools/learning-store.js +286 -0
  188. package/dist/mcp/tools/learning-store.js.map +1 -0
  189. package/package.json +1 -1
@@ -0,0 +1,250 @@
1
+ /**
2
+ * Ambiguity Detector - v17.5.0
3
+ *
4
+ * Enhanced ambiguity detection for spec analysis.
5
+ * Detects vague terms, missing specifics, and incomplete requirement markers.
6
+ *
7
+ * Features:
8
+ * - Pattern-based ambiguity detection
9
+ * - 0-25 scale ambiguity scoring
10
+ * - Automatic clarification question generation
11
+ * - Integration with confidence gate
12
+ *
13
+ * @module ambiguity-detector
14
+ */
15
+ import { calculateConfidencePenalty, generateClarificationQuestions, getBlockingQuestions, hasBlockingQuestions, } from './clarification-generator.js';
16
+ import { ALL_PATTERNS, calculateTotalWeight, findPatternMatches, groupMatchesByCategory, } from './patterns.js';
17
+ const DEFAULT_OPTIONS = {
18
+ maxScore: 25,
19
+ incompleteMarkerMultiplier: 1.5,
20
+ missingSpecificMultiplier: 1.2,
21
+ minMatchesForAnalysis: 1,
22
+ };
23
+ // =============================================================================
24
+ // Main Detection Function
25
+ // =============================================================================
26
+ /**
27
+ * Analyze text for ambiguity
28
+ *
29
+ * @param text - Text to analyze (prompt or requirement)
30
+ * @param options - Detection options
31
+ * @returns Ambiguity analysis result
32
+ */
33
+ export function detectAmbiguity(text, options = {}) {
34
+ const opts = { ...DEFAULT_OPTIONS, ...options };
35
+ // Find all pattern matches
36
+ const matches = findPatternMatches(text);
37
+ // Group matches by category
38
+ const grouped = groupMatchesByCategory(matches);
39
+ // Calculate category scores with multipliers
40
+ const vagueTermScore = calculateCategoryScore(grouped.vague_term);
41
+ const missingSpecificScore = calculateCategoryScore(grouped.missing_specific) * opts.missingSpecificMultiplier;
42
+ const incompleteMarkerScore = calculateCategoryScore(grouped.incomplete_marker) * opts.incompleteMarkerMultiplier;
43
+ const vagueVerbScore = calculateCategoryScore(grouped.vague_verb);
44
+ // Calculate total raw score
45
+ const rawScore = vagueTermScore + missingSpecificScore + incompleteMarkerScore + vagueVerbScore;
46
+ // Normalize to 0-25 scale
47
+ const score = Math.min(opts.maxScore, Math.round(rawScore));
48
+ // Generate clarification questions
49
+ const clarification = generateClarificationQuestions(matches);
50
+ // Calculate confidence penalty
51
+ const confidencePenalty = calculateConfidencePenalty(clarification);
52
+ // Check for blocking issues
53
+ const hasBlockingIssues = hasBlockingQuestions(clarification);
54
+ // Generate summary
55
+ const summary = generateSummary(score, matches, grouped, hasBlockingIssues);
56
+ return {
57
+ score,
58
+ matches,
59
+ clarification,
60
+ breakdown: {
61
+ vagueTerms: grouped.vague_term.length,
62
+ missingSpecifics: grouped.missing_specific.length,
63
+ incompleteMarkers: grouped.incomplete_marker.length,
64
+ vagueVerbs: grouped.vague_verb.length,
65
+ },
66
+ confidencePenalty,
67
+ hasBlockingIssues,
68
+ summary,
69
+ };
70
+ }
71
+ /**
72
+ * Calculate score for a category of matches
73
+ */
74
+ function calculateCategoryScore(matches) {
75
+ return calculateTotalWeight(matches);
76
+ }
77
+ /**
78
+ * Generate summary text
79
+ */
80
+ function generateSummary(score, matches, grouped, hasBlockingIssues) {
81
+ if (matches.length === 0) {
82
+ return 'No ambiguity detected. Requirements appear clear.';
83
+ }
84
+ const parts = [];
85
+ // Score level
86
+ if (score >= 20) {
87
+ parts.push('High ambiguity detected');
88
+ }
89
+ else if (score >= 10) {
90
+ parts.push('Moderate ambiguity detected');
91
+ }
92
+ else {
93
+ parts.push('Low ambiguity detected');
94
+ }
95
+ // Blocking status
96
+ if (hasBlockingIssues) {
97
+ parts.push('with blocking issues that must be resolved');
98
+ }
99
+ // Category breakdown
100
+ const categories = [];
101
+ if (grouped.incomplete_marker.length > 0) {
102
+ categories.push(`${grouped.incomplete_marker.length} incomplete marker(s)`);
103
+ }
104
+ if (grouped.missing_specific.length > 0) {
105
+ categories.push(`${grouped.missing_specific.length} missing specific(s)`);
106
+ }
107
+ if (grouped.vague_verb.length > 0) {
108
+ categories.push(`${grouped.vague_verb.length} vague verb(s)`);
109
+ }
110
+ if (grouped.vague_term.length > 0) {
111
+ categories.push(`${grouped.vague_term.length} vague term(s)`);
112
+ }
113
+ if (categories.length > 0) {
114
+ parts.push(`Found: ${categories.join(', ')}`);
115
+ }
116
+ return `${parts.join('. ')}.`;
117
+ }
118
+ // =============================================================================
119
+ // Convenience Functions
120
+ // =============================================================================
121
+ /**
122
+ * Quick check if text has significant ambiguity
123
+ *
124
+ * @param text - Text to check
125
+ * @param threshold - Score threshold (default: 10)
126
+ * @returns True if ambiguity score exceeds threshold
127
+ */
128
+ export function hasSignificantAmbiguity(text, threshold = 10) {
129
+ const analysis = detectAmbiguity(text);
130
+ return analysis.score >= threshold;
131
+ }
132
+ /**
133
+ * Get only blocking clarification questions
134
+ *
135
+ * @param text - Text to analyze
136
+ * @returns Array of blocking questions
137
+ */
138
+ export function getBlockingClarifications(text) {
139
+ const analysis = detectAmbiguity(text);
140
+ return getBlockingQuestions(analysis.clarification);
141
+ }
142
+ /**
143
+ * Calculate ambiguity-adjusted confidence
144
+ *
145
+ * @param baseConfidence - Base confidence score (0-100)
146
+ * @param text - Text to analyze for ambiguity
147
+ * @returns Adjusted confidence score
148
+ */
149
+ export function calculateAdjustedConfidence(baseConfidence, text) {
150
+ const analysis = detectAmbiguity(text);
151
+ return Math.max(0, baseConfidence - analysis.confidencePenalty);
152
+ }
153
+ // =============================================================================
154
+ // Formatting Functions
155
+ // =============================================================================
156
+ /**
157
+ * Format ambiguity analysis as markdown
158
+ */
159
+ export function formatAmbiguityMarkdown(analysis) {
160
+ const lines = ['## Ambiguity Analysis', ''];
161
+ // Score meter
162
+ const level = analysis.score >= 20 ? 'High' : analysis.score >= 10 ? 'Moderate' : 'Low';
163
+ const indicator = analysis.score >= 20 ? '🔴' : analysis.score >= 10 ? '🟡' : '🟢';
164
+ lines.push(`**Score:** ${analysis.score}/25 ${indicator} ${level}`);
165
+ lines.push(`**Confidence Penalty:** -${analysis.confidencePenalty}%`);
166
+ if (analysis.hasBlockingIssues) {
167
+ lines.push('**Status:** ⛔ Has blocking issues');
168
+ }
169
+ lines.push('');
170
+ // Breakdown
171
+ lines.push('### Breakdown');
172
+ lines.push(`| Category | Count |`);
173
+ lines.push(`|----------|-------|`);
174
+ lines.push(`| Incomplete Markers | ${analysis.breakdown.incompleteMarkers} |`);
175
+ lines.push(`| Missing Specifics | ${analysis.breakdown.missingSpecifics} |`);
176
+ lines.push(`| Vague Verbs | ${analysis.breakdown.vagueVerbs} |`);
177
+ lines.push(`| Vague Terms | ${analysis.breakdown.vagueTerms} |`);
178
+ lines.push('');
179
+ // Matches
180
+ if (analysis.matches.length > 0) {
181
+ lines.push('### Detected Issues');
182
+ for (const match of analysis.matches.slice(0, 10)) {
183
+ lines.push(`- **"${match.matched}"** (${match.pattern.category})`);
184
+ lines.push(` - ${match.pattern.description}`);
185
+ lines.push(` - Context: *${match.context}*`);
186
+ }
187
+ if (analysis.matches.length > 10) {
188
+ lines.push(`- *...and ${analysis.matches.length - 10} more*`);
189
+ }
190
+ lines.push('');
191
+ }
192
+ // Summary
193
+ lines.push(`### Summary`);
194
+ lines.push(analysis.summary);
195
+ return lines.join('\n');
196
+ }
197
+ /**
198
+ * Format ambiguity analysis as JSON
199
+ */
200
+ export function formatAmbiguityJSON(analysis) {
201
+ return JSON.stringify({
202
+ score: analysis.score,
203
+ maxScore: 25,
204
+ level: analysis.score >= 20 ? 'high' : analysis.score >= 10 ? 'moderate' : 'low',
205
+ confidencePenalty: analysis.confidencePenalty,
206
+ hasBlockingIssues: analysis.hasBlockingIssues,
207
+ breakdown: analysis.breakdown,
208
+ matchCount: analysis.matches.length,
209
+ matches: analysis.matches.slice(0, 20).map((m) => ({
210
+ matched: m.matched,
211
+ category: m.pattern.category,
212
+ weight: m.pattern.weight,
213
+ context: m.context,
214
+ })),
215
+ clarification: {
216
+ questionCount: analysis.clarification.questions.length,
217
+ blocking: analysis.clarification.summary.blocking,
218
+ important: analysis.clarification.summary.important,
219
+ niceToKnow: analysis.clarification.summary.niceToKnow,
220
+ totalConfidenceImpact: analysis.clarification.totalConfidenceImpact,
221
+ },
222
+ summary: analysis.summary,
223
+ }, null, 2);
224
+ }
225
+ // =============================================================================
226
+ // Pattern Information Exports
227
+ // =============================================================================
228
+ /**
229
+ * Get all available pattern categories
230
+ */
231
+ export function getPatternCategories() {
232
+ return ['vague_term', 'missing_specific', 'incomplete_marker', 'vague_verb'];
233
+ }
234
+ /**
235
+ * Get pattern count by category
236
+ */
237
+ export function getPatternCounts() {
238
+ const counts = {};
239
+ for (const pattern of ALL_PATTERNS) {
240
+ counts[pattern.category] = (counts[pattern.category] || 0) + 1;
241
+ }
242
+ return counts;
243
+ }
244
+ /**
245
+ * Get total pattern count
246
+ */
247
+ export function getTotalPatternCount() {
248
+ return ALL_PATTERNS.length;
249
+ }
250
+ //# sourceMappingURL=ambiguity-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ambiguity-detector.js","sourceRoot":"","sources":["../../../src/core/spec-analyzer/ambiguity-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Clarification Generator - v17.5.0
3
+ *
4
+ * Generates targeted clarification questions based on ambiguity signals.
5
+ * Integrates with the ambiguity detector and confidence gate.
6
+ *
7
+ * Features:
8
+ * - Automatic question generation from pattern matches
9
+ * - Priority levels: blocking, important, nice-to-know
10
+ * - Deduplication and grouping
11
+ * - Integration with confidence scoring
12
+ *
13
+ * @module clarification-generator
14
+ */
15
+ import type { AmbiguityPattern, PatternMatch } from './patterns.js';
16
+ import type { QuestionPriority, TriggerSignal } from './question-types.js';
17
+ export interface ClarificationQuestion {
18
+ /** Unique question ID */
19
+ id: string;
20
+ /** The question text */
21
+ question: string;
22
+ /** Priority level */
23
+ priority: QuestionPriority;
24
+ /** Category of ambiguity this addresses */
25
+ category: AmbiguityPattern['category'];
26
+ /** Trigger signal for integration with existing question system */
27
+ triggerSignal: TriggerSignal;
28
+ /** The matched text that triggered this question */
29
+ matchedText: string;
30
+ /** Context around the match */
31
+ context: string;
32
+ /** Pattern that generated this question */
33
+ patternId: string;
34
+ /** Impact on confidence if resolved (percentage points) */
35
+ confidenceImpact: number;
36
+ }
37
+ export interface ClarificationResult {
38
+ /** Generated questions sorted by priority */
39
+ questions: ClarificationQuestion[];
40
+ /** Total confidence impact if all questions resolved */
41
+ totalConfidenceImpact: number;
42
+ /** Summary by priority */
43
+ summary: {
44
+ blocking: number;
45
+ important: number;
46
+ niceToKnow: number;
47
+ };
48
+ /** Summary by category */
49
+ byCategory: Record<AmbiguityPattern['category'], number>;
50
+ }
51
+ /**
52
+ * Generate clarification questions from pattern matches
53
+ */
54
+ export declare function generateClarificationQuestions(matches: PatternMatch[]): ClarificationResult;
55
+ /**
56
+ * Format clarification questions as markdown
57
+ */
58
+ export declare function formatClarificationMarkdown(result: ClarificationResult): string;
59
+ /**
60
+ * Format clarification questions as JSON
61
+ */
62
+ export declare function formatClarificationJSON(result: ClarificationResult): string;
63
+ /**
64
+ * Get blocking questions only
65
+ */
66
+ export declare function getBlockingQuestions(result: ClarificationResult): ClarificationQuestion[];
67
+ /**
68
+ * Check if there are any blocking questions
69
+ */
70
+ export declare function hasBlockingQuestions(result: ClarificationResult): boolean;
71
+ /**
72
+ * Calculate confidence penalty from ambiguity
73
+ * Used to integrate with confidence gate
74
+ */
75
+ export declare function calculateConfidencePenalty(result: ClarificationResult): number;
76
+ //# sourceMappingURL=clarification-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clarification-generator.d.ts","sourceRoot":"","sources":["../../../src/core/spec-analyzer/clarification-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAM1E,MAAM,WAAW,qBAAqB;IACpC,yBAAyB;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,wBAAwB;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,qBAAqB;IACrB,QAAQ,EAAE,gBAAgB,CAAA;IAC1B,2CAA2C;IAC3C,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAA;IACtC,mEAAmE;IACnE,aAAa,EAAE,aAAa,CAAA;IAC5B,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAA;IACnB,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAA;IACjB,2DAA2D;IAC3D,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,6CAA6C;IAC7C,SAAS,EAAE,qBAAqB,EAAE,CAAA;IAClC,wDAAwD;IACxD,qBAAqB,EAAE,MAAM,CAAA;IAC7B,0BAA0B;IAC1B,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAA;QAChB,SAAS,EAAE,MAAM,CAAA;QACjB,UAAU,EAAE,MAAM,CAAA;KACnB,CAAA;IACD,0BAA0B;IAC1B,UAAU,EAAE,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAAA;CACzD;AAyGD;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,mBAAmB,CAiC3F;AAwCD;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAiD/E;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAkB3E;AAMD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,GAAG,qBAAqB,EAAE,CAEzF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAEzE;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAO9E"}
@@ -0,0 +1,257 @@
1
+ /**
2
+ * Clarification Generator - v17.5.0
3
+ *
4
+ * Generates targeted clarification questions based on ambiguity signals.
5
+ * Integrates with the ambiguity detector and confidence gate.
6
+ *
7
+ * Features:
8
+ * - Automatic question generation from pattern matches
9
+ * - Priority levels: blocking, important, nice-to-know
10
+ * - Deduplication and grouping
11
+ * - Integration with confidence scoring
12
+ *
13
+ * @module clarification-generator
14
+ */
15
+ import { groupMatchesByCategory } from './patterns.js';
16
+ // =============================================================================
17
+ // Priority Mapping
18
+ // =============================================================================
19
+ /**
20
+ * Map pattern categories and weights to question priority
21
+ */
22
+ function determinePriority(pattern) {
23
+ // High weight patterns are blocking
24
+ if (pattern.weight >= 4) {
25
+ return 'blocking';
26
+ }
27
+ // Incomplete markers are always at least important
28
+ if (pattern.category === 'incomplete_marker') {
29
+ return pattern.weight >= 3 ? 'blocking' : 'important';
30
+ }
31
+ // Missing specifics that affect outcomes are blocking
32
+ if (pattern.category === 'missing_specific' && pattern.weight >= 3) {
33
+ return 'blocking';
34
+ }
35
+ // Medium weight is important
36
+ if (pattern.weight >= 2) {
37
+ return 'important';
38
+ }
39
+ // Low weight is nice-to-know
40
+ return 'nice-to-know';
41
+ }
42
+ /**
43
+ * Map pattern category to trigger signal
44
+ */
45
+ function categoryToTriggerSignal(category) {
46
+ switch (category) {
47
+ case 'vague_term':
48
+ return 'vague_verb';
49
+ case 'missing_specific':
50
+ return 'missing_target';
51
+ case 'incomplete_marker':
52
+ return 'unclear_success';
53
+ case 'vague_verb':
54
+ return 'vague_verb';
55
+ default:
56
+ return 'unclear_success';
57
+ }
58
+ }
59
+ /**
60
+ * Calculate confidence impact based on pattern weight and priority
61
+ */
62
+ function calculateConfidenceImpact(pattern, priority) {
63
+ const baseImpact = pattern.weight * 2;
64
+ // Priority multiplier
65
+ switch (priority) {
66
+ case 'blocking':
67
+ return Math.min(15, baseImpact * 1.5);
68
+ case 'important':
69
+ return Math.min(10, baseImpact * 1.0);
70
+ case 'nice-to-know':
71
+ return Math.min(5, baseImpact * 0.5);
72
+ }
73
+ }
74
+ // =============================================================================
75
+ // Question Generation
76
+ // =============================================================================
77
+ /**
78
+ * Generate a clarification question from a pattern match
79
+ */
80
+ function generateQuestion(match, index) {
81
+ const priority = determinePriority(match.pattern);
82
+ const confidenceImpact = calculateConfidenceImpact(match.pattern, priority);
83
+ // Create contextual question
84
+ let question = match.pattern.clarificationPrompt;
85
+ // Enhance question with specific match context
86
+ if (match.matched && match.matched.length > 0) {
87
+ const matchedLower = match.matched.toLowerCase();
88
+ // Add specific reference if it makes sense
89
+ if (!question.toLowerCase().includes(matchedLower)) {
90
+ question = `Regarding "${match.matched}": ${question}`;
91
+ }
92
+ }
93
+ return {
94
+ id: `cq-${match.pattern.id}-${index}`,
95
+ question,
96
+ priority,
97
+ category: match.pattern.category,
98
+ triggerSignal: categoryToTriggerSignal(match.pattern.category),
99
+ matchedText: match.matched,
100
+ context: match.context,
101
+ patternId: match.pattern.id,
102
+ confidenceImpact,
103
+ };
104
+ }
105
+ /**
106
+ * Generate clarification questions from pattern matches
107
+ */
108
+ export function generateClarificationQuestions(matches) {
109
+ // Generate questions from matches
110
+ const questions = matches.map((match, index) => generateQuestion(match, index));
111
+ // Deduplicate questions with same pattern ID (keep highest impact)
112
+ const deduped = deduplicateQuestions(questions);
113
+ // Sort by priority (blocking first, then important, then nice-to-know)
114
+ const sorted = sortByPriority(deduped);
115
+ // Calculate totals
116
+ const totalConfidenceImpact = sorted.reduce((sum, q) => sum + q.confidenceImpact, 0);
117
+ const summary = {
118
+ blocking: sorted.filter((q) => q.priority === 'blocking').length,
119
+ important: sorted.filter((q) => q.priority === 'important').length,
120
+ niceToKnow: sorted.filter((q) => q.priority === 'nice-to-know').length,
121
+ };
122
+ const grouped = groupMatchesByCategory(matches);
123
+ const byCategory = {
124
+ vague_term: grouped.vague_term.length,
125
+ missing_specific: grouped.missing_specific.length,
126
+ incomplete_marker: grouped.incomplete_marker.length,
127
+ vague_verb: grouped.vague_verb.length,
128
+ };
129
+ return {
130
+ questions: sorted,
131
+ totalConfidenceImpact,
132
+ summary,
133
+ byCategory,
134
+ };
135
+ }
136
+ /**
137
+ * Deduplicate questions with same pattern ID
138
+ */
139
+ function deduplicateQuestions(questions) {
140
+ const byPatternId = new Map();
141
+ for (const question of questions) {
142
+ const existing = byPatternId.get(question.patternId);
143
+ if (!existing || question.confidenceImpact > existing.confidenceImpact) {
144
+ byPatternId.set(question.patternId, question);
145
+ }
146
+ }
147
+ return Array.from(byPatternId.values());
148
+ }
149
+ /**
150
+ * Sort questions by priority
151
+ */
152
+ function sortByPriority(questions) {
153
+ const priorityOrder = {
154
+ blocking: 0,
155
+ important: 1,
156
+ 'nice-to-know': 2,
157
+ };
158
+ return [...questions].sort((a, b) => {
159
+ const priorityDiff = priorityOrder[a.priority] - priorityOrder[b.priority];
160
+ if (priorityDiff !== 0)
161
+ return priorityDiff;
162
+ // Within same priority, sort by confidence impact (higher first)
163
+ return b.confidenceImpact - a.confidenceImpact;
164
+ });
165
+ }
166
+ // =============================================================================
167
+ // Formatting Functions
168
+ // =============================================================================
169
+ /**
170
+ * Format clarification questions as markdown
171
+ */
172
+ export function formatClarificationMarkdown(result) {
173
+ const lines = ['## Clarification Questions', ''];
174
+ if (result.questions.length === 0) {
175
+ lines.push('No clarification questions - requirements appear clear.');
176
+ return lines.join('\n');
177
+ }
178
+ // Stats
179
+ lines.push(`**Total:** ${result.questions.length} questions | **Potential Confidence Gain:** +${result.totalConfidenceImpact}%`);
180
+ lines.push('');
181
+ // Group by priority
182
+ const blocking = result.questions.filter((q) => q.priority === 'blocking');
183
+ const important = result.questions.filter((q) => q.priority === 'important');
184
+ const niceToKnow = result.questions.filter((q) => q.priority === 'nice-to-know');
185
+ if (blocking.length > 0) {
186
+ lines.push('### Blocking (must answer)');
187
+ for (const q of blocking) {
188
+ lines.push(`- **${q.question}**`);
189
+ lines.push(` - *Matched:* "${q.matchedText}"`);
190
+ lines.push(` - *Impact:* +${q.confidenceImpact}% confidence`);
191
+ }
192
+ lines.push('');
193
+ }
194
+ if (important.length > 0) {
195
+ lines.push('### Important (should answer)');
196
+ for (const q of important) {
197
+ lines.push(`- **${q.question}**`);
198
+ lines.push(` - *Matched:* "${q.matchedText}"`);
199
+ lines.push(` - *Impact:* +${q.confidenceImpact}% confidence`);
200
+ }
201
+ lines.push('');
202
+ }
203
+ if (niceToKnow.length > 0) {
204
+ lines.push('### Nice-to-Know (optional)');
205
+ for (const q of niceToKnow) {
206
+ lines.push(`- ${q.question}`);
207
+ lines.push(` - *Matched:* "${q.matchedText}"`);
208
+ }
209
+ lines.push('');
210
+ }
211
+ return lines.join('\n');
212
+ }
213
+ /**
214
+ * Format clarification questions as JSON
215
+ */
216
+ export function formatClarificationJSON(result) {
217
+ return JSON.stringify({
218
+ questions: result.questions.map((q) => ({
219
+ id: q.id,
220
+ question: q.question,
221
+ priority: q.priority,
222
+ category: q.category,
223
+ matchedText: q.matchedText,
224
+ confidenceImpact: q.confidenceImpact,
225
+ })),
226
+ totalConfidenceImpact: result.totalConfidenceImpact,
227
+ summary: result.summary,
228
+ byCategory: result.byCategory,
229
+ }, null, 2);
230
+ }
231
+ // =============================================================================
232
+ // Integration Helpers
233
+ // =============================================================================
234
+ /**
235
+ * Get blocking questions only
236
+ */
237
+ export function getBlockingQuestions(result) {
238
+ return result.questions.filter((q) => q.priority === 'blocking');
239
+ }
240
+ /**
241
+ * Check if there are any blocking questions
242
+ */
243
+ export function hasBlockingQuestions(result) {
244
+ return result.summary.blocking > 0;
245
+ }
246
+ /**
247
+ * Calculate confidence penalty from ambiguity
248
+ * Used to integrate with confidence gate
249
+ */
250
+ export function calculateConfidencePenalty(result) {
251
+ // Blocking questions have higher penalty
252
+ const blockingPenalty = result.summary.blocking * 10;
253
+ const importantPenalty = result.summary.important * 5;
254
+ const niceToKnowPenalty = result.summary.niceToKnow * 2;
255
+ return Math.min(50, blockingPenalty + importantPenalty + niceToKnowPenalty);
256
+ }
257
+ //# sourceMappingURL=clarification-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clarification-generator.js","sourceRoot":"","sources":["../../../src/core/spec-analyzer/clarification-generator.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Spec Analyzer - v11.0.0
2
+ * Spec Analyzer - v17.5.0
3
3
  *
4
4
  * Analyzes prompts for complexity, ambiguity, and requirements clarity.
5
5
  * Used by /dino.spec skill and dino_spec_analyze MCP tool.
@@ -17,7 +17,16 @@
17
17
  * Includes Ralph Loop eligibility (v11.0.0):
18
18
  * - Detects tasks qualifying for iterative fresh-context loop
19
19
  * - 90% confidence gate for Ralph-eligible tasks
20
+ *
21
+ * Enhanced ambiguity detection (v17.5.0):
22
+ * - Pattern-based vague term detection
23
+ * - Missing specifics detection
24
+ * - Incomplete requirement markers
25
+ * - Automatic clarification question generation
20
26
  */
27
+ export { type AmbiguityAnalysis, type AmbiguityDetectorOptions, calculateAdjustedConfidence, detectAmbiguity, formatAmbiguityJSON, formatAmbiguityMarkdown, getBlockingClarifications, getPatternCategories, getPatternCounts, getTotalPatternCount, hasSignificantAmbiguity, } from './ambiguity-detector.js';
28
+ export { type ClarificationQuestion, type ClarificationResult, calculateConfidencePenalty, formatClarificationJSON, formatClarificationMarkdown, generateClarificationQuestions, getBlockingQuestions, hasBlockingQuestions, } from './clarification-generator.js';
29
+ export { ALL_PATTERNS, type AmbiguityPattern, calculateTotalWeight, findPatternMatches, getPatternsByCategory, groupMatchesByCategory, INCOMPLETE_MARKER_PATTERNS, MISSING_SPECIFIC_PATTERNS, type PatternMatch, VAGUE_TERM_PATTERNS, VAGUE_VERB_PATTERNS, } from './patterns.js';
21
30
  export { createMinimalContext, enhanceContextForQuery, gatherCodebaseContext, hasContext, } from './question-context.js';
22
31
  export { formatQuestionsJSON, formatQuestionsMarkdown, generateQuestions, } from './question-generator.js';
23
32
  export type { CodebaseContext, GeneratedQuestion, QuestionGenerationResult, QuestionPriority, QuestionType, TriggerSignal, } from './question-types.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/spec-analyzer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,UAAU,GACX,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,yBAAyB,CAAA;AAEhC,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,gBAAgB,EAChB,YAAY,EACZ,aAAa,GACd,MAAM,qBAAqB,CAAA;AAwG5B,4BAA4B;AAC5B,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAA;AAEvD,2BAA2B;AAC3B,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAA;AAEvE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,cAAc,CAAA;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;CACnB;AA4CD;;GAEG;AACH,MAAM,WAAW,YAAY;IAE3B,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IAGpB,eAAe,EAAE,MAAM,CAAA;IAGvB,kBAAkB,EAAE,MAAM,CAAA;IAG1B,eAAe,EAAE,MAAM,GAAG,aAAa,GAAG,gBAAgB,GAAG,eAAe,CAAA;IAG5E,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,EAAE,CAAA;QACpB,SAAS,EAAE,OAAO,CAAA;QAClB,SAAS,EAAE,MAAM,CAAA;QACjB,eAAe,EAAE,OAAO,CAAA;QACxB,WAAW,EAAE,OAAO,CAAA;QACpB,cAAc,EAAE,OAAO,CAAA;QACvB,aAAa,EAAE,OAAO,CAAA;QACtB,cAAc,EAAE,OAAO,CAAA;KACxB,CAAA;IAGD,KAAK,EAAE,MAAM,EAAE,CAAA;IAGf,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE;QACR,cAAc,EAAE,OAAO,CAAA;QACvB,SAAS,EAAE,OAAO,CAAA;QAClB,cAAc,EAAE,OAAO,CAAA;QACvB,YAAY,EAAE,OAAO,CAAA;KACtB,CAAA;CACF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,YAAY,GAAG,gBAAgB,CA2BxE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAoE1D;AA6KD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CA2FrE;AAeD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,MAAM,CAK1E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAIjE;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,YAAY,GAAG,gBAAgB,EAAE,CAgEnF;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,gBAAgB,EAAE,EAC3B,cAAc,SAAI,GACjB,MAAM,EAAE,CAgBV"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/spec-analyzer/index.ts"],"names":[],"mappings":"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"}