dino-spec 17.4.3 → 17.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +10 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/core/agents/__tests__/confidence-gate.test.d.ts +5 -0
- package/dist/core/agents/__tests__/confidence-gate.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/confidence-gate.test.js +329 -0
- package/dist/core/agents/__tests__/confidence-gate.test.js.map +1 -0
- package/dist/core/agents/__tests__/gap-detector.test.d.ts +5 -0
- package/dist/core/agents/__tests__/gap-detector.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/gap-detector.test.js +609 -0
- package/dist/core/agents/__tests__/gap-detector.test.js.map +1 -0
- package/dist/core/agents/__tests__/learning-loop.test.d.ts +5 -0
- package/dist/core/agents/__tests__/learning-loop.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/learning-loop.test.js +663 -0
- package/dist/core/agents/__tests__/learning-loop.test.js.map +1 -0
- package/dist/core/agents/__tests__/parallel-executor.test.d.ts +5 -0
- package/dist/core/agents/__tests__/parallel-executor.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/parallel-executor.test.js +610 -0
- package/dist/core/agents/__tests__/parallel-executor.test.js.map +1 -0
- package/dist/core/agents/__tests__/research-validator.test.js +5 -5
- package/dist/core/agents/__tests__/research-validator.test.js.map +1 -1
- package/dist/core/agents/__tests__/skill-creator.test.d.ts +5 -0
- package/dist/core/agents/__tests__/skill-creator.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/skill-creator.test.js +443 -0
- package/dist/core/agents/__tests__/skill-creator.test.js.map +1 -0
- package/dist/core/agents/__tests__/state-persistence.test.d.ts +2 -0
- package/dist/core/agents/__tests__/state-persistence.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/state-persistence.test.js +270 -0
- package/dist/core/agents/__tests__/state-persistence.test.js.map +1 -0
- package/dist/core/agents/__tests__/validation-cache.test.d.ts +2 -0
- package/dist/core/agents/__tests__/validation-cache.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/validation-cache.test.js +181 -0
- package/dist/core/agents/__tests__/validation-cache.test.js.map +1 -0
- package/dist/core/agents/ambiguity-resolver.d.ts +14 -1
- package/dist/core/agents/ambiguity-resolver.d.ts.map +1 -1
- package/dist/core/agents/ambiguity-resolver.js +24 -2
- package/dist/core/agents/ambiguity-resolver.js.map +1 -1
- package/dist/core/agents/blackboard.d.ts +22 -3
- package/dist/core/agents/blackboard.d.ts.map +1 -1
- package/dist/core/agents/blackboard.js +52 -2
- package/dist/core/agents/blackboard.js.map +1 -1
- package/dist/core/agents/circuit-breaker.d.ts +79 -1
- package/dist/core/agents/circuit-breaker.d.ts.map +1 -1
- package/dist/core/agents/circuit-breaker.js +175 -1
- package/dist/core/agents/circuit-breaker.js.map +1 -1
- package/dist/core/agents/clarification-phase.d.ts +128 -0
- package/dist/core/agents/clarification-phase.d.ts.map +1 -0
- package/dist/core/agents/clarification-phase.js +375 -0
- package/dist/core/agents/clarification-phase.js.map +1 -0
- package/dist/core/agents/confidence-gate.d.ts +133 -4
- package/dist/core/agents/confidence-gate.d.ts.map +1 -1
- package/dist/core/agents/confidence-gate.js +376 -9
- package/dist/core/agents/confidence-gate.js.map +1 -1
- package/dist/core/agents/correction-tracker.d.ts +197 -0
- package/dist/core/agents/correction-tracker.d.ts.map +1 -0
- package/dist/core/agents/correction-tracker.js +366 -0
- package/dist/core/agents/correction-tracker.js.map +1 -0
- package/dist/core/agents/dependency-graph.d.ts +193 -0
- package/dist/core/agents/dependency-graph.d.ts.map +1 -0
- package/dist/core/agents/dependency-graph.js +462 -0
- package/dist/core/agents/dependency-graph.js.map +1 -0
- package/dist/core/agents/gap-detector.d.ts +277 -0
- package/dist/core/agents/gap-detector.d.ts.map +1 -0
- package/dist/core/agents/gap-detector.js +540 -0
- package/dist/core/agents/gap-detector.js.map +1 -0
- package/dist/core/agents/index.d.ts +14 -1
- package/dist/core/agents/index.d.ts.map +1 -1
- package/dist/core/agents/index.js +26 -1
- package/dist/core/agents/index.js.map +1 -1
- package/dist/core/agents/message-protocol.d.ts +13 -2
- package/dist/core/agents/message-protocol.d.ts.map +1 -1
- package/dist/core/agents/message-protocol.js +20 -1
- package/dist/core/agents/message-protocol.js.map +1 -1
- package/dist/core/agents/parallel-executor.d.ts +182 -0
- package/dist/core/agents/parallel-executor.d.ts.map +1 -0
- package/dist/core/agents/parallel-executor.js +474 -0
- package/dist/core/agents/parallel-executor.js.map +1 -0
- package/dist/core/agents/pattern-detector.d.ts +157 -0
- package/dist/core/agents/pattern-detector.d.ts.map +1 -0
- package/dist/core/agents/pattern-detector.js +370 -0
- package/dist/core/agents/pattern-detector.js.map +1 -0
- package/dist/core/agents/registry-client.d.ts +6 -0
- package/dist/core/agents/registry-client.d.ts.map +1 -1
- package/dist/core/agents/registry-client.js +3 -0
- package/dist/core/agents/registry-client.js.map +1 -1
- package/dist/core/agents/research-phase.d.ts +114 -0
- package/dist/core/agents/research-phase.d.ts.map +1 -0
- package/dist/core/agents/research-phase.js +355 -0
- package/dist/core/agents/research-phase.js.map +1 -0
- package/dist/core/agents/research-validator.d.ts +13 -2
- package/dist/core/agents/research-validator.d.ts.map +1 -1
- package/dist/core/agents/research-validator.js +63 -31
- package/dist/core/agents/research-validator.js.map +1 -1
- package/dist/core/agents/skill-creator.d.ts +174 -0
- package/dist/core/agents/skill-creator.d.ts.map +1 -0
- package/dist/core/agents/skill-creator.js +570 -0
- package/dist/core/agents/skill-creator.js.map +1 -0
- package/dist/core/agents/state-persistence.d.ts +184 -0
- package/dist/core/agents/state-persistence.d.ts.map +1 -0
- package/dist/core/agents/state-persistence.js +394 -0
- package/dist/core/agents/state-persistence.js.map +1 -0
- package/dist/core/agents/validation-cache.d.ts +122 -0
- package/dist/core/agents/validation-cache.d.ts.map +1 -0
- package/dist/core/agents/validation-cache.js +280 -0
- package/dist/core/agents/validation-cache.js.map +1 -0
- package/dist/core/agents/validators/__tests__/validators.test.d.ts +5 -0
- package/dist/core/agents/validators/__tests__/validators.test.d.ts.map +1 -0
- package/dist/core/agents/validators/__tests__/validators.test.js +321 -0
- package/dist/core/agents/validators/__tests__/validators.test.js.map +1 -0
- package/dist/core/agents/validators/base-validator.d.ts +191 -0
- package/dist/core/agents/validators/base-validator.d.ts.map +1 -0
- package/dist/core/agents/validators/base-validator.js +192 -0
- package/dist/core/agents/validators/base-validator.js.map +1 -0
- package/dist/core/agents/validators/index.d.ts +7 -0
- package/dist/core/agents/validators/index.d.ts.map +1 -0
- package/dist/core/agents/validators/index.js +7 -0
- package/dist/core/agents/validators/index.js.map +1 -0
- package/dist/core/agents/validators/npm-validator.d.ts +50 -0
- package/dist/core/agents/validators/npm-validator.d.ts.map +1 -0
- package/dist/core/agents/validators/npm-validator.js +211 -0
- package/dist/core/agents/validators/npm-validator.js.map +1 -0
- package/dist/core/agents/validators/pip-validator.d.ts +49 -0
- package/dist/core/agents/validators/pip-validator.d.ts.map +1 -0
- package/dist/core/agents/validators/pip-validator.js +191 -0
- package/dist/core/agents/validators/pip-validator.js.map +1 -0
- package/dist/core/agents/validators/validator-registry.d.ts +122 -0
- package/dist/core/agents/validators/validator-registry.d.ts.map +1 -0
- package/dist/core/agents/validators/validator-registry.js +321 -0
- package/dist/core/agents/validators/validator-registry.js.map +1 -0
- package/dist/core/context/auto-injection-engine.d.ts +7 -1
- package/dist/core/context/auto-injection-engine.d.ts.map +1 -1
- package/dist/core/context/auto-injection-engine.js +46 -1
- package/dist/core/context/auto-injection-engine.js.map +1 -1
- package/dist/core/context-repl/types.d.ts +4 -4
- package/dist/core/memory/index.d.ts +1 -0
- package/dist/core/memory/index.d.ts.map +1 -1
- package/dist/core/memory/index.js +2 -0
- package/dist/core/memory/index.js.map +1 -1
- package/dist/core/memory/learning-store.d.ts +222 -0
- package/dist/core/memory/learning-store.d.ts.map +1 -0
- package/dist/core/memory/learning-store.js +477 -0
- package/dist/core/memory/learning-store.js.map +1 -0
- package/dist/core/ralph/__tests__/prd-generator-session-context.test.d.ts +7 -0
- package/dist/core/ralph/__tests__/prd-generator-session-context.test.d.ts.map +1 -0
- package/dist/core/ralph/__tests__/prd-generator-session-context.test.js +143 -0
- package/dist/core/ralph/__tests__/prd-generator-session-context.test.js.map +1 -0
- package/dist/core/ralph/index.d.ts +3 -3
- package/dist/core/ralph/index.d.ts.map +1 -1
- package/dist/core/ralph/index.js +2 -2
- package/dist/core/ralph/index.js.map +1 -1
- package/dist/core/ralph/prd-generator.d.ts +18 -3
- package/dist/core/ralph/prd-generator.d.ts.map +1 -1
- package/dist/core/ralph/prd-generator.js +33 -11
- package/dist/core/ralph/prd-generator.js.map +1 -1
- package/dist/core/ralph/progress-tracker.d.ts.map +1 -1
- package/dist/core/ralph/progress-tracker.js +2 -1
- package/dist/core/ralph/progress-tracker.js.map +1 -1
- package/dist/core/ralph/sub-agent-spawner.d.ts +4 -2
- package/dist/core/ralph/sub-agent-spawner.d.ts.map +1 -1
- package/dist/core/ralph/sub-agent-spawner.js +48 -3
- package/dist/core/ralph/sub-agent-spawner.js.map +1 -1
- package/dist/core/ralph/task-integration.d.ts.map +1 -1
- package/dist/core/ralph/task-integration.js +6 -3
- package/dist/core/ralph/task-integration.js.map +1 -1
- package/dist/core/ralph/types.d.ts +62 -3
- package/dist/core/ralph/types.d.ts.map +1 -1
- package/dist/core/ralph/types.js.map +1 -1
- package/dist/core/recommendations/recommendation-engine.d.ts +6 -0
- package/dist/core/recommendations/recommendation-engine.d.ts.map +1 -1
- package/dist/core/recommendations/recommendation-engine.js.map +1 -1
- package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.d.ts +5 -0
- package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.d.ts.map +1 -0
- package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.js +401 -0
- package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.js.map +1 -0
- package/dist/core/spec-analyzer/ambiguity-detector.d.ts +99 -0
- package/dist/core/spec-analyzer/ambiguity-detector.d.ts.map +1 -0
- package/dist/core/spec-analyzer/ambiguity-detector.js +250 -0
- package/dist/core/spec-analyzer/ambiguity-detector.js.map +1 -0
- package/dist/core/spec-analyzer/clarification-generator.d.ts +76 -0
- package/dist/core/spec-analyzer/clarification-generator.d.ts.map +1 -0
- package/dist/core/spec-analyzer/clarification-generator.js +257 -0
- package/dist/core/spec-analyzer/clarification-generator.js.map +1 -0
- package/dist/core/spec-analyzer/index.d.ts +22 -2
- package/dist/core/spec-analyzer/index.d.ts.map +1 -1
- package/dist/core/spec-analyzer/index.js +21 -3
- package/dist/core/spec-analyzer/index.js.map +1 -1
- package/dist/core/spec-analyzer/patterns.d.ts +73 -0
- package/dist/core/spec-analyzer/patterns.d.ts.map +1 -0
- package/dist/core/spec-analyzer/patterns.js +412 -0
- package/dist/core/spec-analyzer/patterns.js.map +1 -0
- package/dist/hooks/__tests__/dynamic-generator.test.d.ts +5 -0
- package/dist/hooks/__tests__/dynamic-generator.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/dynamic-generator.test.js +425 -0
- package/dist/hooks/__tests__/dynamic-generator.test.js.map +1 -0
- package/dist/hooks/__tests__/hook-agent-bridge.test.d.ts +5 -0
- package/dist/hooks/__tests__/hook-agent-bridge.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/hook-agent-bridge.test.js +315 -0
- package/dist/hooks/__tests__/hook-agent-bridge.test.js.map +1 -0
- package/dist/hooks/dynamic-generator.d.ts +158 -0
- package/dist/hooks/dynamic-generator.d.ts.map +1 -0
- package/dist/hooks/dynamic-generator.js +448 -0
- package/dist/hooks/dynamic-generator.js.map +1 -0
- package/dist/hooks/hook-agent-bridge.d.ts +252 -0
- package/dist/hooks/hook-agent-bridge.d.ts.map +1 -0
- package/dist/hooks/hook-agent-bridge.js +489 -0
- package/dist/hooks/hook-agent-bridge.js.map +1 -0
- package/dist/hooks/index.d.ts +3 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +5 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/mcp/tool-catalog.d.ts.map +1 -1
- package/dist/mcp/tool-catalog.js +47 -0
- package/dist/mcp/tool-catalog.js.map +1 -1
- package/dist/mcp/tool-tiers.d.ts.map +1 -1
- package/dist/mcp/tool-tiers.js +4 -0
- package/dist/mcp/tool-tiers.js.map +1 -1
- package/dist/mcp/tools/auto-inject.d.ts +4 -0
- package/dist/mcp/tools/auto-inject.d.ts.map +1 -1
- package/dist/mcp/tools/auto-inject.js +13 -4
- package/dist/mcp/tools/auto-inject.js.map +1 -1
- package/dist/mcp/tools/chunking.d.ts +3 -0
- package/dist/mcp/tools/chunking.d.ts.map +1 -1
- package/dist/mcp/tools/chunking.js +10 -4
- package/dist/mcp/tools/chunking.js.map +1 -1
- package/dist/mcp/tools/embeddings.d.ts +4 -0
- package/dist/mcp/tools/embeddings.d.ts.map +1 -1
- package/dist/mcp/tools/embeddings.js +16 -6
- package/dist/mcp/tools/embeddings.js.map +1 -1
- package/dist/mcp/tools/index.d.ts +2 -1
- package/dist/mcp/tools/index.d.ts.map +1 -1
- package/dist/mcp/tools/index.js +15 -1
- package/dist/mcp/tools/index.js.map +1 -1
- package/dist/mcp/tools/knowledge-graph.d.ts +3 -0
- package/dist/mcp/tools/knowledge-graph.d.ts.map +1 -1
- package/dist/mcp/tools/knowledge-graph.js +19 -8
- package/dist/mcp/tools/knowledge-graph.js.map +1 -1
- package/dist/mcp/tools/lazy-context.d.ts +2 -0
- package/dist/mcp/tools/lazy-context.d.ts.map +1 -1
- package/dist/mcp/tools/lazy-context.js +10 -4
- package/dist/mcp/tools/lazy-context.js.map +1 -1
- package/dist/mcp/tools/learning-store.d.ts +30 -0
- package/dist/mcp/tools/learning-store.d.ts.map +1 -0
- package/dist/mcp/tools/learning-store.js +286 -0
- package/dist/mcp/tools/learning-store.js.map +1 -0
- package/dist/mcp/tools/memory-decay.d.ts.map +1 -1
- package/dist/mcp/tools/memory-decay.js +4 -2
- package/dist/mcp/tools/memory-decay.js.map +1 -1
- package/dist/mcp/tools/prefetch.d.ts +4 -1
- package/dist/mcp/tools/prefetch.d.ts.map +1 -1
- package/dist/mcp/tools/prefetch.js +18 -7
- package/dist/mcp/tools/prefetch.js.map +1 -1
- package/dist/mcp/tools/ralph.d.ts +2 -0
- package/dist/mcp/tools/ralph.d.ts.map +1 -1
- package/dist/mcp/tools/ralph.js +96 -6
- package/dist/mcp/tools/ralph.js.map +1 -1
- package/dist/mcp/tools/recommendations.d.ts +2 -0
- package/dist/mcp/tools/recommendations.d.ts.map +1 -1
- package/dist/mcp/tools/recommendations.js +13 -4
- package/dist/mcp/tools/recommendations.js.map +1 -1
- package/dist/mcp/tools/retrieval.d.ts +4 -0
- package/dist/mcp/tools/retrieval.d.ts.map +1 -1
- package/dist/mcp/tools/retrieval.js +25 -10
- package/dist/mcp/tools/retrieval.js.map +1 -1
- package/dist/mcp/tools/spec-feedback.d.ts +2 -0
- package/dist/mcp/tools/spec-feedback.d.ts.map +1 -1
- package/dist/mcp/tools/spec-feedback.js +33 -16
- package/dist/mcp/tools/spec-feedback.js.map +1 -1
- package/dist/mcp/utils/index.d.ts +1 -0
- package/dist/mcp/utils/index.d.ts.map +1 -1
- package/dist/mcp/utils/index.js +2 -0
- package/dist/mcp/utils/index.js.map +1 -1
- package/dist/mcp/utils/session-context.d.ts +108 -0
- package/dist/mcp/utils/session-context.d.ts.map +1 -0
- package/dist/mcp/utils/session-context.js +157 -0
- package/dist/mcp/utils/session-context.js.map +1 -0
- 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 -
|
|
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';
|
|
@@ -87,10 +96,21 @@ export interface RalphEligibility {
|
|
|
87
96
|
* to ensure thorough understanding before large-scale implementation.
|
|
88
97
|
*/
|
|
89
98
|
export declare function isRalphEligible(analysis: SpecAnalysis): RalphEligibility;
|
|
99
|
+
/**
|
|
100
|
+
* Options for prompt analysis
|
|
101
|
+
* v17.6.0: Added session context support
|
|
102
|
+
*/
|
|
103
|
+
export interface AnalyzePromptOptions {
|
|
104
|
+
/** Focus area from session.md (e.g., "src/core/ralph/") */
|
|
105
|
+
focusArea?: string;
|
|
106
|
+
/** Current phase from session.md (e.g., "implementation") */
|
|
107
|
+
phase?: string;
|
|
108
|
+
}
|
|
90
109
|
/**
|
|
91
110
|
* Analyze a prompt for complexity and ambiguity
|
|
111
|
+
* v17.6.0: Enhanced with optional session context for better analysis
|
|
92
112
|
*/
|
|
93
|
-
export declare function analyzePrompt(prompt: string): SpecAnalysis;
|
|
113
|
+
export declare function analyzePrompt(prompt: string, options?: AnalyzePromptOptions): SpecAnalysis;
|
|
94
114
|
/**
|
|
95
115
|
* Format analysis as markdown
|
|
96
116
|
*/
|