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,401 @@
1
+ /**
2
+ * Tests for ambiguity-detector module
3
+ */
4
+ import { describe, expect, it } from 'vitest';
5
+ import { calculateAdjustedConfidence, detectAmbiguity, formatAmbiguityJSON, formatAmbiguityMarkdown, getBlockingClarifications, getPatternCategories, getPatternCounts, getTotalPatternCount, hasSignificantAmbiguity, } from '../ambiguity-detector.js';
6
+ import { calculateConfidencePenalty, formatClarificationMarkdown, generateClarificationQuestions, getBlockingQuestions, hasBlockingQuestions, } from '../clarification-generator.js';
7
+ import { ALL_PATTERNS, calculateTotalWeight, findPatternMatches, getPatternsByCategory, groupMatchesByCategory, INCOMPLETE_MARKER_PATTERNS, MISSING_SPECIFIC_PATTERNS, VAGUE_TERM_PATTERNS, VAGUE_VERB_PATTERNS, } from '../patterns.js';
8
+ describe('patterns', () => {
9
+ describe('Pattern Definitions', () => {
10
+ it('should have vague term patterns', () => {
11
+ expect(VAGUE_TERM_PATTERNS.length).toBeGreaterThan(0);
12
+ expect(VAGUE_TERM_PATTERNS[0]).toHaveProperty('id');
13
+ expect(VAGUE_TERM_PATTERNS[0]).toHaveProperty('category', 'vague_term');
14
+ expect(VAGUE_TERM_PATTERNS[0]).toHaveProperty('terms');
15
+ expect(VAGUE_TERM_PATTERNS[0]).toHaveProperty('weight');
16
+ });
17
+ it('should have missing specific patterns', () => {
18
+ expect(MISSING_SPECIFIC_PATTERNS.length).toBeGreaterThan(0);
19
+ expect(MISSING_SPECIFIC_PATTERNS[0]).toHaveProperty('category', 'missing_specific');
20
+ });
21
+ it('should have incomplete marker patterns', () => {
22
+ expect(INCOMPLETE_MARKER_PATTERNS.length).toBeGreaterThan(0);
23
+ expect(INCOMPLETE_MARKER_PATTERNS[0]).toHaveProperty('category', 'incomplete_marker');
24
+ });
25
+ it('should have vague verb patterns', () => {
26
+ expect(VAGUE_VERB_PATTERNS.length).toBeGreaterThan(0);
27
+ expect(VAGUE_VERB_PATTERNS[0]).toHaveProperty('category', 'vague_verb');
28
+ });
29
+ it('should combine all patterns in ALL_PATTERNS', () => {
30
+ const totalExpected = VAGUE_TERM_PATTERNS.length +
31
+ MISSING_SPECIFIC_PATTERNS.length +
32
+ INCOMPLETE_MARKER_PATTERNS.length +
33
+ VAGUE_VERB_PATTERNS.length;
34
+ expect(ALL_PATTERNS.length).toBe(totalExpected);
35
+ });
36
+ });
37
+ describe('findPatternMatches', () => {
38
+ it('should detect vague terms like maybe and might', () => {
39
+ const text = 'Maybe we should add some validation, it might help.';
40
+ const matches = findPatternMatches(text);
41
+ expect(matches.length).toBeGreaterThan(0);
42
+ const terms = matches.map((m) => m.matched.toLowerCase());
43
+ expect(terms).toContain('maybe');
44
+ expect(terms).toContain('some');
45
+ expect(terms).toContain('might');
46
+ });
47
+ it('should detect missing specifics like handle it', () => {
48
+ const text = 'Just handle it somehow and make it work.';
49
+ const matches = findPatternMatches(text);
50
+ expect(matches.length).toBeGreaterThan(0);
51
+ const hasHandleIt = matches.some((m) => m.pattern.category === 'missing_specific' && m.matched.toLowerCase().includes('handle'));
52
+ expect(hasHandleIt).toBe(true);
53
+ });
54
+ it('should detect incomplete markers like TBD and TODO', () => {
55
+ const text = 'Add authentication (TBD) and implement the TODO feature.';
56
+ const matches = findPatternMatches(text);
57
+ const incompleteMatches = matches.filter((m) => m.pattern.category === 'incomplete_marker');
58
+ expect(incompleteMatches.length).toBeGreaterThan(0);
59
+ const matchedTexts = incompleteMatches.map((m) => m.matched);
60
+ expect(matchedTexts).toContain('TBD');
61
+ expect(matchedTexts).toContain('TODO');
62
+ });
63
+ it('should detect trailing ellipsis', () => {
64
+ const text = 'Add support for users, admins, and more...';
65
+ const matches = findPatternMatches(text);
66
+ const ellipsisMatch = matches.find((m) => m.pattern.id === 'im-ellipsis');
67
+ expect(ellipsisMatch).toBeDefined();
68
+ });
69
+ it('should detect vague verbs like improve and optimize', () => {
70
+ const text = 'Improve the performance and optimize the queries.';
71
+ const matches = findPatternMatches(text);
72
+ const verbMatches = matches.filter((m) => m.pattern.category === 'vague_verb');
73
+ expect(verbMatches.length).toBeGreaterThan(0);
74
+ const verbs = verbMatches.map((m) => m.matched.toLowerCase());
75
+ expect(verbs).toContain('improve');
76
+ expect(verbs).toContain('optimize');
77
+ });
78
+ it('should return empty array for clear text', () => {
79
+ const text = 'Add a login button to the header component that redirects to /auth/login.';
80
+ const matches = findPatternMatches(text);
81
+ // Should have minimal matches for clear requirements
82
+ expect(matches.length).toBeLessThan(3);
83
+ });
84
+ it('should include context around matches', () => {
85
+ const text = 'The system should maybe handle errors gracefully.';
86
+ const matches = findPatternMatches(text);
87
+ const maybeMatch = matches.find((m) => m.matched.toLowerCase() === 'maybe');
88
+ expect(maybeMatch).toBeDefined();
89
+ expect(maybeMatch?.context).toContain('maybe');
90
+ expect(maybeMatch?.context.length).toBeGreaterThan(maybeMatch?.matched.length ?? 0);
91
+ });
92
+ });
93
+ describe('groupMatchesByCategory', () => {
94
+ it('should group matches by category', () => {
95
+ const text = 'Maybe improve some things and add a TODO marker.';
96
+ const matches = findPatternMatches(text);
97
+ const grouped = groupMatchesByCategory(matches);
98
+ expect(grouped).toHaveProperty('vague_term');
99
+ expect(grouped).toHaveProperty('missing_specific');
100
+ expect(grouped).toHaveProperty('incomplete_marker');
101
+ expect(grouped).toHaveProperty('vague_verb');
102
+ expect(Array.isArray(grouped.vague_term)).toBe(true);
103
+ expect(Array.isArray(grouped.incomplete_marker)).toBe(true);
104
+ });
105
+ });
106
+ describe('calculateTotalWeight', () => {
107
+ it('should sum weights of all matches', () => {
108
+ const text = 'Maybe add some features TBD.';
109
+ const matches = findPatternMatches(text);
110
+ const weight = calculateTotalWeight(matches);
111
+ expect(weight).toBeGreaterThan(0);
112
+ // TBD has weight 4, maybe has weight 2, some has weight 2
113
+ expect(weight).toBeGreaterThanOrEqual(6);
114
+ });
115
+ });
116
+ describe('getPatternsByCategory', () => {
117
+ it('should return only patterns of specified category', () => {
118
+ const vagueTerms = getPatternsByCategory('vague_term');
119
+ expect(vagueTerms.length).toBe(VAGUE_TERM_PATTERNS.length);
120
+ expect(vagueTerms.every((p) => p.category === 'vague_term')).toBe(true);
121
+ });
122
+ });
123
+ });
124
+ describe('clarification-generator', () => {
125
+ describe('generateClarificationQuestions', () => {
126
+ it('should generate questions from pattern matches', () => {
127
+ const text = 'Maybe handle it somehow and add TODO features.';
128
+ const matches = findPatternMatches(text);
129
+ const result = generateClarificationQuestions(matches);
130
+ expect(result.questions.length).toBeGreaterThan(0);
131
+ expect(result.questions[0]).toHaveProperty('id');
132
+ expect(result.questions[0]).toHaveProperty('question');
133
+ expect(result.questions[0]).toHaveProperty('priority');
134
+ expect(result.questions[0]).toHaveProperty('confidenceImpact');
135
+ });
136
+ it('should assign blocking priority to high-weight patterns', () => {
137
+ const text = 'Add TBD feature with ___ configuration.';
138
+ const matches = findPatternMatches(text);
139
+ const result = generateClarificationQuestions(matches);
140
+ const blockingQuestions = result.questions.filter((q) => q.priority === 'blocking');
141
+ expect(blockingQuestions.length).toBeGreaterThan(0);
142
+ });
143
+ it('should sort questions by priority', () => {
144
+ const text = 'Maybe improve some things TBD and handle it.';
145
+ const matches = findPatternMatches(text);
146
+ const result = generateClarificationQuestions(matches);
147
+ // First questions should be blocking or important
148
+ if (result.questions.length > 1) {
149
+ const priorities = result.questions.map((q) => q.priority);
150
+ const blockingIndex = priorities.indexOf('blocking');
151
+ const niceToKnowIndex = priorities.indexOf('nice-to-know');
152
+ if (blockingIndex !== -1 && niceToKnowIndex !== -1) {
153
+ expect(blockingIndex).toBeLessThan(niceToKnowIndex);
154
+ }
155
+ }
156
+ });
157
+ it('should calculate total confidence impact', () => {
158
+ const text = 'Maybe add TODO feature and fix something.';
159
+ const matches = findPatternMatches(text);
160
+ const result = generateClarificationQuestions(matches);
161
+ expect(result.totalConfidenceImpact).toBeGreaterThan(0);
162
+ const sumOfImpacts = result.questions.reduce((sum, q) => sum + q.confidenceImpact, 0);
163
+ expect(result.totalConfidenceImpact).toBe(sumOfImpacts);
164
+ });
165
+ it('should provide summary counts', () => {
166
+ const text = 'Maybe handle it TBD.';
167
+ const matches = findPatternMatches(text);
168
+ const result = generateClarificationQuestions(matches);
169
+ expect(result.summary).toHaveProperty('blocking');
170
+ expect(result.summary).toHaveProperty('important');
171
+ expect(result.summary).toHaveProperty('niceToKnow');
172
+ expect(typeof result.summary.blocking).toBe('number');
173
+ });
174
+ });
175
+ describe('hasBlockingQuestions', () => {
176
+ it('should return true when blocking questions exist', () => {
177
+ const text = 'Add TBD feature.';
178
+ const matches = findPatternMatches(text);
179
+ const result = generateClarificationQuestions(matches);
180
+ expect(hasBlockingQuestions(result)).toBe(true);
181
+ });
182
+ it('should return false when no blocking questions', () => {
183
+ const text = 'Add a simple feature.';
184
+ const matches = findPatternMatches(text);
185
+ const result = generateClarificationQuestions(matches);
186
+ expect(hasBlockingQuestions(result)).toBe(false);
187
+ });
188
+ });
189
+ describe('getBlockingQuestions', () => {
190
+ it('should return only blocking questions', () => {
191
+ const text = 'Maybe add TBD feature and improve something.';
192
+ const matches = findPatternMatches(text);
193
+ const result = generateClarificationQuestions(matches);
194
+ const blocking = getBlockingQuestions(result);
195
+ expect(blocking.every((q) => q.priority === 'blocking')).toBe(true);
196
+ });
197
+ });
198
+ describe('calculateConfidencePenalty', () => {
199
+ it('should calculate penalty based on question counts', () => {
200
+ const text = 'TBD TBD TODO maybe somehow.';
201
+ const matches = findPatternMatches(text);
202
+ const result = generateClarificationQuestions(matches);
203
+ const penalty = calculateConfidencePenalty(result);
204
+ expect(penalty).toBeGreaterThan(0);
205
+ expect(penalty).toBeLessThanOrEqual(50); // Max penalty
206
+ });
207
+ it('should return 0 for clear requirements', () => {
208
+ const text = 'Add login button to header.';
209
+ const matches = findPatternMatches(text);
210
+ const result = generateClarificationQuestions(matches);
211
+ const penalty = calculateConfidencePenalty(result);
212
+ expect(penalty).toBe(0);
213
+ });
214
+ });
215
+ describe('formatClarificationMarkdown', () => {
216
+ it('should format questions as markdown', () => {
217
+ const text = 'Maybe add TBD feature.';
218
+ const matches = findPatternMatches(text);
219
+ const result = generateClarificationQuestions(matches);
220
+ const markdown = formatClarificationMarkdown(result);
221
+ expect(markdown).toContain('## Clarification Questions');
222
+ expect(markdown).toContain('Blocking');
223
+ });
224
+ it('should handle empty questions', () => {
225
+ const text = 'Add login button.';
226
+ const matches = findPatternMatches(text);
227
+ const result = generateClarificationQuestions(matches);
228
+ const markdown = formatClarificationMarkdown(result);
229
+ expect(markdown).toContain('No clarification questions');
230
+ });
231
+ });
232
+ });
233
+ describe('ambiguity-detector', () => {
234
+ describe('detectAmbiguity', () => {
235
+ it('should return analysis with score 0-25', () => {
236
+ const text = 'Maybe improve some things TBD.';
237
+ const analysis = detectAmbiguity(text);
238
+ expect(analysis.score).toBeGreaterThanOrEqual(0);
239
+ expect(analysis.score).toBeLessThanOrEqual(25);
240
+ });
241
+ it('should detect high ambiguity', () => {
242
+ const text = 'Maybe we could somehow improve various things and make it work better eventually. TBD and TODO items need handling...';
243
+ const analysis = detectAmbiguity(text);
244
+ expect(analysis.score).toBeGreaterThanOrEqual(15);
245
+ expect(analysis.hasBlockingIssues).toBe(true);
246
+ });
247
+ it('should detect low ambiguity for clear requirements', () => {
248
+ const text = 'Add a validateEmail function to src/utils/validators.ts that returns true if the email matches RFC 5322 format.';
249
+ const analysis = detectAmbiguity(text);
250
+ expect(analysis.score).toBeLessThan(10);
251
+ expect(analysis.hasBlockingIssues).toBe(false);
252
+ });
253
+ it('should include breakdown by category', () => {
254
+ const text = 'Maybe TBD improve something.';
255
+ const analysis = detectAmbiguity(text);
256
+ expect(analysis.breakdown).toHaveProperty('vagueTerms');
257
+ expect(analysis.breakdown).toHaveProperty('missingSpecifics');
258
+ expect(analysis.breakdown).toHaveProperty('incompleteMarkers');
259
+ expect(analysis.breakdown).toHaveProperty('vagueVerbs');
260
+ });
261
+ it('should calculate confidence penalty', () => {
262
+ const text = 'TBD feature with maybe some improvements.';
263
+ const analysis = detectAmbiguity(text);
264
+ expect(analysis.confidencePenalty).toBeGreaterThan(0);
265
+ });
266
+ it('should generate clarification questions', () => {
267
+ const text = 'Handle it somehow TBD.';
268
+ const analysis = detectAmbiguity(text);
269
+ expect(analysis.clarification).toBeDefined();
270
+ expect(analysis.clarification.questions.length).toBeGreaterThan(0);
271
+ });
272
+ it('should provide summary text', () => {
273
+ const text = 'Maybe add TBD features.';
274
+ const analysis = detectAmbiguity(text);
275
+ expect(analysis.summary).toBeDefined();
276
+ expect(analysis.summary.length).toBeGreaterThan(0);
277
+ });
278
+ });
279
+ describe('hasSignificantAmbiguity', () => {
280
+ it('should return true for high ambiguity', () => {
281
+ const text = 'Maybe somehow improve various things TBD TODO...';
282
+ expect(hasSignificantAmbiguity(text)).toBe(true);
283
+ });
284
+ it('should return false for clear requirements', () => {
285
+ const text = 'Add login function to auth.ts that accepts username and password.';
286
+ expect(hasSignificantAmbiguity(text)).toBe(false);
287
+ });
288
+ it('should respect custom threshold', () => {
289
+ const text = 'Maybe add some features.';
290
+ // Low threshold should trigger
291
+ expect(hasSignificantAmbiguity(text, 3)).toBe(true);
292
+ // High threshold should not trigger
293
+ expect(hasSignificantAmbiguity(text, 20)).toBe(false);
294
+ });
295
+ });
296
+ describe('getBlockingClarifications', () => {
297
+ it('should return blocking questions from text', () => {
298
+ const text = 'Add TBD feature with ___ configuration.';
299
+ const blocking = getBlockingClarifications(text);
300
+ expect(blocking.length).toBeGreaterThan(0);
301
+ expect(blocking.every((q) => q.priority === 'blocking')).toBe(true);
302
+ });
303
+ });
304
+ describe('calculateAdjustedConfidence', () => {
305
+ it('should reduce confidence based on ambiguity', () => {
306
+ const text = 'Maybe add TBD features and improve something.';
307
+ const baseConfidence = 80;
308
+ const adjusted = calculateAdjustedConfidence(baseConfidence, text);
309
+ expect(adjusted).toBeLessThan(baseConfidence);
310
+ expect(adjusted).toBeGreaterThanOrEqual(0);
311
+ });
312
+ it('should not reduce confidence for clear requirements', () => {
313
+ const text = 'Add validateEmail to validators.ts.';
314
+ const baseConfidence = 80;
315
+ const adjusted = calculateAdjustedConfidence(baseConfidence, text);
316
+ expect(adjusted).toBe(baseConfidence);
317
+ });
318
+ it('should not go below 0', () => {
319
+ const text = 'Maybe somehow TBD TODO handle it make it work fix things improve...';
320
+ const adjusted = calculateAdjustedConfidence(10, text);
321
+ expect(adjusted).toBeGreaterThanOrEqual(0);
322
+ });
323
+ });
324
+ describe('formatAmbiguityMarkdown', () => {
325
+ it('should format analysis as markdown', () => {
326
+ const analysis = detectAmbiguity('Maybe add TBD features.');
327
+ const markdown = formatAmbiguityMarkdown(analysis);
328
+ expect(markdown).toContain('## Ambiguity Analysis');
329
+ expect(markdown).toContain('Score:');
330
+ expect(markdown).toContain('Confidence Penalty:');
331
+ });
332
+ it('should include breakdown table', () => {
333
+ const analysis = detectAmbiguity('Maybe TBD improve.');
334
+ const markdown = formatAmbiguityMarkdown(analysis);
335
+ expect(markdown).toContain('### Breakdown');
336
+ expect(markdown).toContain('Incomplete Markers');
337
+ expect(markdown).toContain('Vague Terms');
338
+ });
339
+ });
340
+ describe('formatAmbiguityJSON', () => {
341
+ it('should format analysis as valid JSON', () => {
342
+ const analysis = detectAmbiguity('Maybe add TBD features.');
343
+ const jsonStr = formatAmbiguityJSON(analysis);
344
+ const parsed = JSON.parse(jsonStr);
345
+ expect(parsed).toHaveProperty('score');
346
+ expect(parsed).toHaveProperty('maxScore', 25);
347
+ expect(parsed).toHaveProperty('level');
348
+ expect(parsed).toHaveProperty('breakdown');
349
+ expect(parsed).toHaveProperty('clarification');
350
+ });
351
+ });
352
+ describe('Pattern Info Functions', () => {
353
+ it('getPatternCategories should return all categories', () => {
354
+ const categories = getPatternCategories();
355
+ expect(categories).toContain('vague_term');
356
+ expect(categories).toContain('missing_specific');
357
+ expect(categories).toContain('incomplete_marker');
358
+ expect(categories).toContain('vague_verb');
359
+ });
360
+ it('getPatternCounts should return counts by category', () => {
361
+ const counts = getPatternCounts();
362
+ expect(counts.vague_term).toBe(VAGUE_TERM_PATTERNS.length);
363
+ expect(counts.incomplete_marker).toBe(INCOMPLETE_MARKER_PATTERNS.length);
364
+ });
365
+ it('getTotalPatternCount should return total patterns', () => {
366
+ const total = getTotalPatternCount();
367
+ expect(total).toBe(ALL_PATTERNS.length);
368
+ });
369
+ });
370
+ });
371
+ describe('Integration with Confidence Gate', () => {
372
+ it('should provide penalty that can be used by confidence gate', () => {
373
+ // Simulate confidence gate integration
374
+ const prompt = 'Maybe improve the authentication system somehow and add TBD features.';
375
+ const analysis = detectAmbiguity(prompt);
376
+ // Confidence gate would use this
377
+ const baseConfidence = 70;
378
+ const adjustedConfidence = baseConfidence - analysis.confidencePenalty;
379
+ expect(adjustedConfidence).toBeLessThan(baseConfidence);
380
+ // Gate check
381
+ const gateThreshold = 80;
382
+ const passesGate = adjustedConfidence >= gateThreshold;
383
+ expect(passesGate).toBe(false); // Should fail gate due to ambiguity
384
+ });
385
+ it('should identify blocking issues that prevent proceeding', () => {
386
+ const prompt = 'Add the TBD feature and ___ configuration.';
387
+ const analysis = detectAmbiguity(prompt);
388
+ // Should have blocking issues
389
+ expect(analysis.hasBlockingIssues).toBe(true);
390
+ // Blocking questions should be provided
391
+ const blockingQuestions = analysis.clarification.questions.filter((q) => q.priority === 'blocking');
392
+ expect(blockingQuestions.length).toBeGreaterThan(0);
393
+ });
394
+ it('should allow proceeding when no blocking issues', () => {
395
+ const prompt = 'Add a login button to the header that redirects to /auth/login on click.';
396
+ const analysis = detectAmbiguity(prompt);
397
+ expect(analysis.hasBlockingIssues).toBe(false);
398
+ expect(analysis.score).toBeLessThan(10);
399
+ });
400
+ });
401
+ //# sourceMappingURL=ambiguity-detector.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ambiguity-detector.test.js","sourceRoot":"","sources":["../../../../src/core/spec-analyzer/__tests__/ambiguity-detector.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EACL,2BAA2B,EAC3B,eAAe,EACf,mBAAmB,EACnB,uBAAuB,EACvB,yBAAyB,EACzB,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,8BAA8B,EAC9B,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,yBAAyB,EACzB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,gBAAgB,CAAA;AAEvB,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YACrD,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;YACnD,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;YACvE,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;YACtD,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;QACzD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YAC3D,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAA;QACrF,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YAC5D,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAA;QACvF,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YACrD,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;QACzE,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,aAAa,GACjB,mBAAmB,CAAC,MAAM;gBAC1B,yBAAyB,CAAC,MAAM;gBAChC,0BAA0B,CAAC,MAAM;gBACjC,mBAAmB,CAAC,MAAM,CAAA;YAC5B,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QACjD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,IAAI,GAAG,qDAAqD,CAAA;YAClE,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;YAExC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YACzC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;YACzD,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;YAChC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;YAC/B,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QAClC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,IAAI,GAAG,0CAA0C,CAAA;YACvD,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;YAExC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YACzC,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAC9B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,kBAAkB,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAC1F,CAAA;YACD,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAChC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC5D,MAAM,IAAI,GAAG,0DAA0D,CAAA;YACvE,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;YAExC,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,mBAAmB,CAAC,CAAA;YAC3F,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YAEnD,MAAM,YAAY,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;YAC5D,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;YACrC,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QACxC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,IAAI,GAAG,4CAA4C,CAAA;YACzD,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;YAExC,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,aAAa,CAAC,CAAA;YACzE,MAAM,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAA;QACrC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC7D,MAAM,IAAI,GAAG,mDAAmD,CAAA;YAChE,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;YAExC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAA;YAC9E,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YAE7C,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;YAC7D,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;YAClC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QACrC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,IAAI,GAAG,2EAA2E,CAAA;YACxF,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;YAExC,qDAAqD;YACrD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QACxC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,IAAI,GAAG,mDAAmD,CAAA;YAChE,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;YAExC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,CAAA;YAC3E,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAA;YAChC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;YAC9C,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAA;QACrF,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,IAAI,GAAG,kDAAkD,CAAA;YAC/D,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;YACxC,MAAM,OAAO,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAA;YAE/C,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;YAC5C,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAA;YAClD,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAA;YACnD,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;YAE5C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACpD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC7D,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,IAAI,GAAG,8BAA8B,CAAA;YAC3C,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;YACxC,MAAM,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAA;YAE5C,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YACjC,0DAA0D;YAC1D,MAAM,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAA;QAC1C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,UAAU,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAA;YACtD,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;YAC1D,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzE,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC9C,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,IAAI,GAAG,gDAAgD,CAAA;YAC7D,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;YACxC,MAAM,MAAM,GAAG,8BAA8B,CAAC,OAAO,CAAC,CAAA;YAEtD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YAClD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;YAChD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAA;YACtD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAA;YACtD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAA;QAChE,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,MAAM,IAAI,GAAG,yCAAyC,CAAA;YACtD,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;YACxC,MAAM,MAAM,GAAG,8BAA8B,CAAC,OAAO,CAAC,CAAA;YAEtD,MAAM,iBAAiB,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAA;YACnF,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QACrD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,IAAI,GAAG,8CAA8C,CAAA;YAC3D,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;YACxC,MAAM,MAAM,GAAG,8BAA8B,CAAC,OAAO,CAAC,CAAA;YAEtD,kDAAkD;YAClD,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;gBAC1D,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;gBACpD,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;gBAE1D,IAAI,aAAa,KAAK,CAAC,CAAC,IAAI,eAAe,KAAK,CAAC,CAAC,EAAE,CAAC;oBACnD,MAAM,CAAC,aAAa,CAAC,CAAC,YAAY,CAAC,eAAe,CAAC,CAAA;gBACrD,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,IAAI,GAAG,2CAA2C,CAAA;YACxD,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;YACxC,MAAM,MAAM,GAAG,8BAA8B,CAAC,OAAO,CAAC,CAAA;YAEtD,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YACvD,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAA;YACrF,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QACzD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACvC,MAAM,IAAI,GAAG,sBAAsB,CAAA;YACnC,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;YACxC,MAAM,MAAM,GAAG,8BAA8B,CAAC,OAAO,CAAC,CAAA;YAEtD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAA;YACjD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;YAClD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;YACnD,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACvD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,IAAI,GAAG,kBAAkB,CAAA;YAC/B,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;YACxC,MAAM,MAAM,GAAG,8BAA8B,CAAC,OAAO,CAAC,CAAA;YAEtD,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACjD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,IAAI,GAAG,uBAAuB,CAAA;YACpC,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;YACxC,MAAM,MAAM,GAAG,8BAA8B,CAAC,OAAO,CAAC,CAAA;YAEtD,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAClD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,IAAI,GAAG,8CAA8C,CAAA;YAC3D,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;YACxC,MAAM,MAAM,GAAG,8BAA8B,CAAC,OAAO,CAAC,CAAA;YACtD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAA;YAE7C,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACrE,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;QAC1C,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,IAAI,GAAG,6BAA6B,CAAA;YAC1C,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;YACxC,MAAM,MAAM,GAAG,8BAA8B,CAAC,OAAO,CAAC,CAAA;YACtD,MAAM,OAAO,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAA;YAElD,MAAM,CAAC,OAAO,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YAClC,MAAM,CAAC,OAAO,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAA,CAAC,cAAc;QACxD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,IAAI,GAAG,6BAA6B,CAAA;YAC1C,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;YACxC,MAAM,MAAM,GAAG,8BAA8B,CAAC,OAAO,CAAC,CAAA;YACtD,MAAM,OAAO,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAA;YAElD,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACzB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;QAC3C,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,IAAI,GAAG,wBAAwB,CAAA;YACrC,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;YACxC,MAAM,MAAM,GAAG,8BAA8B,CAAC,OAAO,CAAC,CAAA;YACtD,MAAM,QAAQ,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAA;YAEpD,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAA;YACxD,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QACxC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACvC,MAAM,IAAI,GAAG,mBAAmB,CAAA;YAChC,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;YACxC,MAAM,MAAM,GAAG,8BAA8B,CAAC,OAAO,CAAC,CAAA;YACtD,MAAM,QAAQ,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAA;YAEpD,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAA;QAC1D,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,IAAI,GAAG,gCAAgC,CAAA;YAC7C,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;YAEtC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAA;YAChD,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAA;QAChD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACtC,MAAM,IAAI,GACR,uHAAuH,CAAA;YACzH,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;YAEtC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAA;YACjD,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC/C,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC5D,MAAM,IAAI,GACR,iHAAiH,CAAA;YACnH,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;YAEtC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;YACvC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAChD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,IAAI,GAAG,8BAA8B,CAAA;YAC3C,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;YAEtC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;YACvD,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAA;YAC7D,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAA;YAC9D,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;QACzD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,IAAI,GAAG,2CAA2C,CAAA;YACxD,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;YAEtC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QACvD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,IAAI,GAAG,wBAAwB,CAAA;YACrC,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;YAEtC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAA;YAC5C,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QACpE,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,IAAI,GAAG,yBAAyB,CAAA;YACtC,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;YAEtC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;YACtC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QACpD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACvC,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,IAAI,GAAG,kDAAkD,CAAA;YAC/D,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,IAAI,GAAG,mEAAmE,CAAA;YAChF,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACnD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,IAAI,GAAG,0BAA0B,CAAA;YACvC,+BAA+B;YAC/B,MAAM,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACnD,oCAAoC;YACpC,MAAM,CAAC,uBAAuB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACvD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACzC,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,IAAI,GAAG,yCAAyC,CAAA;YACtD,MAAM,QAAQ,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAA;YAEhD,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YAC1C,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACrE,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;QAC3C,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,IAAI,GAAG,+CAA+C,CAAA;YAC5D,MAAM,cAAc,GAAG,EAAE,CAAA;YACzB,MAAM,QAAQ,GAAG,2BAA2B,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;YAElE,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC,CAAA;YAC7C,MAAM,CAAC,QAAQ,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAA;QAC5C,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC7D,MAAM,IAAI,GAAG,qCAAqC,CAAA;YAClD,MAAM,cAAc,GAAG,EAAE,CAAA;YACzB,MAAM,QAAQ,GAAG,2BAA2B,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;YAElE,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QACvC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;YAC/B,MAAM,IAAI,GAAG,qEAAqE,CAAA;YAClF,MAAM,QAAQ,GAAG,2BAA2B,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;YAEtD,MAAM,CAAC,QAAQ,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAA;QAC5C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACvC,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,QAAQ,GAAG,eAAe,CAAC,yBAAyB,CAAC,CAAA;YAC3D,MAAM,QAAQ,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAA;YAElD,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAA;YACnD,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;YACpC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAA;QACnD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,QAAQ,GAAG,eAAe,CAAC,oBAAoB,CAAC,CAAA;YACtD,MAAM,QAAQ,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAA;YAElD,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAA;YAC3C,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAA;YAChD,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;QAC3C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,QAAQ,GAAG,eAAe,CAAC,yBAAyB,CAAC,CAAA;YAC3D,MAAM,OAAO,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAA;YAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YAElC,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;YACtC,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;YAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;YACtC,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;YAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,eAAe,CAAC,CAAA;QAChD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,UAAU,GAAG,oBAAoB,EAAE,CAAA;YACzC,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;YAC1C,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAA;YAChD,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAA;YACjD,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;QAC5C,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAA;YACjC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;YAC1D,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAA;QAC1E,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,KAAK,GAAG,oBAAoB,EAAE,CAAA;YACpC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;QACzC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,uCAAuC;QACvC,MAAM,MAAM,GAAG,uEAAuE,CAAA;QAEtF,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAA;QAExC,iCAAiC;QACjC,MAAM,cAAc,GAAG,EAAE,CAAA;QACzB,MAAM,kBAAkB,GAAG,cAAc,GAAG,QAAQ,CAAC,iBAAiB,CAAA;QAEtE,MAAM,CAAC,kBAAkB,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC,CAAA;QAEvD,aAAa;QACb,MAAM,aAAa,GAAG,EAAE,CAAA;QACxB,MAAM,UAAU,GAAG,kBAAkB,IAAI,aAAa,CAAA;QACtD,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA,CAAC,oCAAoC;IACrE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,MAAM,GAAG,4CAA4C,CAAA;QAE3D,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAA;QAExC,8BAA8B;QAC9B,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAE7C,wCAAwC;QACxC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAC/D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CACjC,CAAA;QACD,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;IACrD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,MAAM,GAAG,0EAA0E,CAAA;QAEzF,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAA;QAExC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC9C,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;IACzC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,99 @@
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 { type ClarificationQuestion, type ClarificationResult } from './clarification-generator.js';
16
+ import { type PatternMatch } from './patterns.js';
17
+ export interface AmbiguityAnalysis {
18
+ /** Overall ambiguity score (0-25) */
19
+ score: number;
20
+ /** Detected pattern matches */
21
+ matches: PatternMatch[];
22
+ /** Generated clarification questions */
23
+ clarification: ClarificationResult;
24
+ /** Breakdown by category */
25
+ breakdown: {
26
+ vagueTerms: number;
27
+ missingSpecifics: number;
28
+ incompleteMarkers: number;
29
+ vagueVerbs: number;
30
+ };
31
+ /** Confidence penalty from ambiguity */
32
+ confidencePenalty: number;
33
+ /** Whether there are blocking issues */
34
+ hasBlockingIssues: boolean;
35
+ /** Summary text */
36
+ summary: string;
37
+ }
38
+ export interface AmbiguityDetectorOptions {
39
+ /** Maximum score (default: 25) */
40
+ maxScore?: number;
41
+ /** Weight multiplier for incomplete markers (default: 1.5) */
42
+ incompleteMarkerMultiplier?: number;
43
+ /** Weight multiplier for missing specifics (default: 1.2) */
44
+ missingSpecificMultiplier?: number;
45
+ /** Minimum matches to trigger analysis (default: 1) */
46
+ minMatchesForAnalysis?: number;
47
+ }
48
+ /**
49
+ * Analyze text for ambiguity
50
+ *
51
+ * @param text - Text to analyze (prompt or requirement)
52
+ * @param options - Detection options
53
+ * @returns Ambiguity analysis result
54
+ */
55
+ export declare function detectAmbiguity(text: string, options?: AmbiguityDetectorOptions): AmbiguityAnalysis;
56
+ /**
57
+ * Quick check if text has significant ambiguity
58
+ *
59
+ * @param text - Text to check
60
+ * @param threshold - Score threshold (default: 10)
61
+ * @returns True if ambiguity score exceeds threshold
62
+ */
63
+ export declare function hasSignificantAmbiguity(text: string, threshold?: number): boolean;
64
+ /**
65
+ * Get only blocking clarification questions
66
+ *
67
+ * @param text - Text to analyze
68
+ * @returns Array of blocking questions
69
+ */
70
+ export declare function getBlockingClarifications(text: string): ClarificationQuestion[];
71
+ /**
72
+ * Calculate ambiguity-adjusted confidence
73
+ *
74
+ * @param baseConfidence - Base confidence score (0-100)
75
+ * @param text - Text to analyze for ambiguity
76
+ * @returns Adjusted confidence score
77
+ */
78
+ export declare function calculateAdjustedConfidence(baseConfidence: number, text: string): number;
79
+ /**
80
+ * Format ambiguity analysis as markdown
81
+ */
82
+ export declare function formatAmbiguityMarkdown(analysis: AmbiguityAnalysis): string;
83
+ /**
84
+ * Format ambiguity analysis as JSON
85
+ */
86
+ export declare function formatAmbiguityJSON(analysis: AmbiguityAnalysis): string;
87
+ /**
88
+ * Get all available pattern categories
89
+ */
90
+ export declare function getPatternCategories(): string[];
91
+ /**
92
+ * Get pattern count by category
93
+ */
94
+ export declare function getPatternCounts(): Record<string, number>;
95
+ /**
96
+ * Get total pattern count
97
+ */
98
+ export declare function getTotalPatternCount(): number;
99
+ //# sourceMappingURL=ambiguity-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ambiguity-detector.d.ts","sourceRoot":"","sources":["../../../src/core/spec-analyzer/ambiguity-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EAKzB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAKL,KAAK,YAAY,EAClB,MAAM,eAAe,CAAA;AAMtB,MAAM,WAAW,iBAAiB;IAChC,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,+BAA+B;IAC/B,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,wCAAwC;IACxC,aAAa,EAAE,mBAAmB,CAAA;IAClC,4BAA4B;IAC5B,SAAS,EAAE;QACT,UAAU,EAAE,MAAM,CAAA;QAClB,gBAAgB,EAAE,MAAM,CAAA;QACxB,iBAAiB,EAAE,MAAM,CAAA;QACzB,UAAU,EAAE,MAAM,CAAA;KACnB,CAAA;IACD,wCAAwC;IACxC,iBAAiB,EAAE,MAAM,CAAA;IACzB,wCAAwC;IACxC,iBAAiB,EAAE,OAAO,CAAA;IAC1B,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,8DAA8D;IAC9D,0BAA0B,CAAC,EAAE,MAAM,CAAA;IACnC,6DAA6D;IAC7D,yBAAyB,CAAC,EAAE,MAAM,CAAA;IAClC,uDAAuD;IACvD,qBAAqB,CAAC,EAAE,MAAM,CAAA;CAC/B;AAaD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,wBAA6B,GACrC,iBAAiB,CAiDnB;AAgED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAK,GAAG,OAAO,CAG7E;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,EAAE,CAG/E;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAGxF;AAMD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CA2C3E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CA4BvE;AAMD;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAE/C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMzD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C"}