dino-spec 15.0.0 → 16.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +58 -1
- package/dist/cli/index.js +46 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/dashboard.d.ts +27 -0
- package/dist/commands/dashboard.d.ts.map +1 -0
- package/dist/commands/dashboard.js +80 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/debug.d.ts +53 -0
- package/dist/commands/debug.d.ts.map +1 -0
- package/dist/commands/debug.js +199 -0
- package/dist/commands/debug.js.map +1 -0
- package/dist/commands/profile.d.ts +37 -0
- package/dist/commands/profile.d.ts.map +1 -0
- package/dist/commands/profile.js +145 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/commands/recommendations.d.ts +27 -0
- package/dist/commands/recommendations.d.ts.map +1 -0
- package/dist/commands/recommendations.js +123 -0
- package/dist/commands/recommendations.js.map +1 -0
- package/dist/core/checkpoints/checkpoint.d.ts +1 -0
- package/dist/core/checkpoints/checkpoint.d.ts.map +1 -1
- package/dist/core/checkpoints/checkpoint.js.map +1 -1
- package/dist/core/checkpoints/handoff.d.ts +2 -1
- package/dist/core/checkpoints/handoff.d.ts.map +1 -1
- package/dist/core/checkpoints/handoff.js +2 -1
- package/dist/core/checkpoints/handoff.js.map +1 -1
- package/dist/core/checkpoints/session-recovery.d.ts +71 -0
- package/dist/core/checkpoints/session-recovery.d.ts.map +1 -0
- package/dist/core/checkpoints/session-recovery.js +172 -0
- package/dist/core/checkpoints/session-recovery.js.map +1 -0
- package/dist/core/config/feature-flags.d.ts +84 -0
- package/dist/core/config/feature-flags.d.ts.map +1 -1
- package/dist/core/config/feature-flags.js +18 -0
- package/dist/core/config/feature-flags.js.map +1 -1
- package/dist/core/context/__tests__/feedback-loop-engine.test.d.ts +5 -0
- package/dist/core/context/__tests__/feedback-loop-engine.test.d.ts.map +1 -0
- package/dist/core/context/__tests__/feedback-loop-engine.test.js +377 -0
- package/dist/core/context/__tests__/feedback-loop-engine.test.js.map +1 -0
- package/dist/core/context/adaptation-strategy.d.ts +125 -0
- package/dist/core/context/adaptation-strategy.d.ts.map +1 -0
- package/dist/core/context/adaptation-strategy.js +233 -0
- package/dist/core/context/adaptation-strategy.js.map +1 -0
- package/dist/core/context/auto-injection-engine.d.ts.map +1 -1
- package/dist/core/context/auto-injection-engine.js +21 -0
- package/dist/core/context/auto-injection-engine.js.map +1 -1
- package/dist/core/context/auto-unload-engine.d.ts +20 -2
- package/dist/core/context/auto-unload-engine.d.ts.map +1 -1
- package/dist/core/context/auto-unload-engine.js +78 -5
- package/dist/core/context/auto-unload-engine.js.map +1 -1
- package/dist/core/context/budget-thresholds.d.ts +75 -1
- package/dist/core/context/budget-thresholds.d.ts.map +1 -1
- package/dist/core/context/budget-thresholds.js +163 -2
- package/dist/core/context/budget-thresholds.js.map +1 -1
- package/dist/core/context/context-health.d.ts.map +1 -1
- package/dist/core/context/context-health.js +24 -0
- package/dist/core/context/context-health.js.map +1 -1
- package/dist/core/context/demand-detector.d.ts +34 -1
- package/dist/core/context/demand-detector.d.ts.map +1 -1
- package/dist/core/context/demand-detector.js +162 -1
- package/dist/core/context/demand-detector.js.map +1 -1
- package/dist/core/context/demand-signal-patterns.d.ts +120 -0
- package/dist/core/context/demand-signal-patterns.d.ts.map +1 -0
- package/dist/core/context/demand-signal-patterns.js +418 -0
- package/dist/core/context/demand-signal-patterns.js.map +1 -0
- package/dist/core/context/feedback-loop-engine.d.ts +128 -0
- package/dist/core/context/feedback-loop-engine.d.ts.map +1 -0
- package/dist/core/context/feedback-loop-engine.js +352 -0
- package/dist/core/context/feedback-loop-engine.js.map +1 -0
- package/dist/core/context/index.d.ts +5 -3
- package/dist/core/context/index.d.ts.map +1 -1
- package/dist/core/context/index.js +26 -6
- package/dist/core/context/index.js.map +1 -1
- package/dist/core/context/prefetch-learner.d.ts +195 -0
- package/dist/core/context/prefetch-learner.d.ts.map +1 -0
- package/dist/core/context/prefetch-learner.js +363 -0
- package/dist/core/context/prefetch-learner.js.map +1 -0
- package/dist/core/context/semantic-signal-detector.d.ts +96 -0
- package/dist/core/context/semantic-signal-detector.d.ts.map +1 -0
- package/dist/core/context/semantic-signal-detector.js +320 -0
- package/dist/core/context/semantic-signal-detector.js.map +1 -0
- package/dist/core/context/smart-prefetch-engine.d.ts +66 -0
- package/dist/core/context/smart-prefetch-engine.d.ts.map +1 -0
- package/dist/core/context/smart-prefetch-engine.js +226 -0
- package/dist/core/context/smart-prefetch-engine.js.map +1 -0
- package/dist/core/context/token-tracker.d.ts +9 -0
- package/dist/core/context/token-tracker.d.ts.map +1 -1
- package/dist/core/context/token-tracker.js +14 -0
- package/dist/core/context/token-tracker.js.map +1 -1
- package/dist/core/context/window-boundary.d.ts +132 -0
- package/dist/core/context/window-boundary.d.ts.map +1 -0
- package/dist/core/context/window-boundary.js +268 -0
- package/dist/core/context/window-boundary.js.map +1 -0
- package/dist/core/context-repl/confidence-scorer.d.ts +92 -0
- package/dist/core/context-repl/confidence-scorer.d.ts.map +1 -0
- package/dist/core/context-repl/confidence-scorer.js +159 -0
- package/dist/core/context-repl/confidence-scorer.js.map +1 -0
- package/dist/core/context-repl/reconnaissance-engine.d.ts +160 -0
- package/dist/core/context-repl/reconnaissance-engine.d.ts.map +1 -0
- package/dist/core/context-repl/reconnaissance-engine.js +275 -0
- package/dist/core/context-repl/reconnaissance-engine.js.map +1 -0
- package/dist/core/dashboard/dashboard-formatter.d.ts +68 -0
- package/dist/core/dashboard/dashboard-formatter.d.ts.map +1 -0
- package/dist/core/dashboard/dashboard-formatter.js +250 -0
- package/dist/core/dashboard/dashboard-formatter.js.map +1 -0
- package/dist/core/dashboard/health-metrics-aggregator.d.ts +117 -0
- package/dist/core/dashboard/health-metrics-aggregator.d.ts.map +1 -0
- package/dist/core/dashboard/health-metrics-aggregator.js +255 -0
- package/dist/core/dashboard/health-metrics-aggregator.js.map +1 -0
- package/dist/core/debug/context-decision-logger.d.ts +189 -0
- package/dist/core/debug/context-decision-logger.d.ts.map +1 -0
- package/dist/core/debug/context-decision-logger.js +397 -0
- package/dist/core/debug/context-decision-logger.js.map +1 -0
- package/dist/core/debug/debug-config.d.ts +100 -0
- package/dist/core/debug/debug-config.d.ts.map +1 -0
- package/dist/core/debug/debug-config.js +193 -0
- package/dist/core/debug/debug-config.js.map +1 -0
- package/dist/core/debug/debug-logger.d.ts +85 -0
- package/dist/core/debug/debug-logger.d.ts.map +1 -0
- package/dist/core/debug/debug-logger.js +287 -0
- package/dist/core/debug/debug-logger.js.map +1 -0
- package/dist/core/debug/index.d.ts +10 -0
- package/dist/core/debug/index.d.ts.map +1 -0
- package/dist/core/debug/index.js +13 -0
- package/dist/core/debug/index.js.map +1 -0
- package/dist/core/embeddings/content-indexer.d.ts +169 -0
- package/dist/core/embeddings/content-indexer.d.ts.map +1 -0
- package/dist/core/embeddings/content-indexer.js +317 -0
- package/dist/core/embeddings/content-indexer.js.map +1 -0
- package/dist/core/embeddings/index.d.ts +2 -0
- package/dist/core/embeddings/index.d.ts.map +1 -1
- package/dist/core/embeddings/index.js +4 -0
- package/dist/core/embeddings/index.js.map +1 -1
- package/dist/core/embeddings/semantic-cache.d.ts +162 -0
- package/dist/core/embeddings/semantic-cache.d.ts.map +1 -0
- package/dist/core/embeddings/semantic-cache.js +317 -0
- package/dist/core/embeddings/semantic-cache.js.map +1 -0
- package/dist/core/generator/session-md.d.ts +31 -1
- package/dist/core/generator/session-md.d.ts.map +1 -1
- package/dist/core/generator/session-md.js +63 -1
- package/dist/core/generator/session-md.js.map +1 -1
- package/dist/core/memory/retrieval.d.ts +7 -1
- package/dist/core/memory/retrieval.d.ts.map +1 -1
- package/dist/core/memory/retrieval.js +7 -1
- package/dist/core/memory/retrieval.js.map +1 -1
- package/dist/core/metrics/__tests__/metrics-collector.test.d.ts +5 -0
- package/dist/core/metrics/__tests__/metrics-collector.test.d.ts.map +1 -0
- package/dist/core/metrics/__tests__/metrics-collector.test.js +354 -0
- package/dist/core/metrics/__tests__/metrics-collector.test.js.map +1 -0
- package/dist/core/metrics/index.d.ts +9 -0
- package/dist/core/metrics/index.d.ts.map +1 -0
- package/dist/core/metrics/index.js +29 -0
- package/dist/core/metrics/index.js.map +1 -0
- package/dist/core/metrics/metrics-collector.d.ts +153 -0
- package/dist/core/metrics/metrics-collector.d.ts.map +1 -0
- package/dist/core/metrics/metrics-collector.js +446 -0
- package/dist/core/metrics/metrics-collector.js.map +1 -0
- package/dist/core/metrics/metrics-schema.d.ts +189 -0
- package/dist/core/metrics/metrics-schema.d.ts.map +1 -0
- package/dist/core/metrics/metrics-schema.js +180 -0
- package/dist/core/metrics/metrics-schema.js.map +1 -0
- package/dist/core/profiling/index.d.ts +8 -0
- package/dist/core/profiling/index.d.ts.map +1 -0
- package/dist/core/profiling/index.js +8 -0
- package/dist/core/profiling/index.js.map +1 -0
- package/dist/core/profiling/operation-profiler.d.ts +118 -0
- package/dist/core/profiling/operation-profiler.d.ts.map +1 -0
- package/dist/core/profiling/operation-profiler.js +266 -0
- package/dist/core/profiling/operation-profiler.js.map +1 -0
- package/dist/core/profiling/perf-report-generator.d.ts +46 -0
- package/dist/core/profiling/perf-report-generator.d.ts.map +1 -0
- package/dist/core/profiling/perf-report-generator.js +235 -0
- package/dist/core/profiling/perf-report-generator.js.map +1 -0
- package/dist/core/recommendations/heuristics.d.ts +120 -0
- package/dist/core/recommendations/heuristics.d.ts.map +1 -0
- package/dist/core/recommendations/heuristics.js +771 -0
- package/dist/core/recommendations/heuristics.js.map +1 -0
- package/dist/core/recommendations/priority-scorer.d.ts +75 -0
- package/dist/core/recommendations/priority-scorer.d.ts.map +1 -0
- package/dist/core/recommendations/priority-scorer.js +148 -0
- package/dist/core/recommendations/priority-scorer.js.map +1 -0
- package/dist/core/recommendations/recommendation-engine.d.ts +60 -0
- package/dist/core/recommendations/recommendation-engine.d.ts.map +1 -0
- package/dist/core/recommendations/recommendation-engine.js +271 -0
- package/dist/core/recommendations/recommendation-engine.js.map +1 -0
- package/dist/hooks/pre-compact.d.ts +9 -1
- package/dist/hooks/pre-compact.d.ts.map +1 -1
- package/dist/hooks/pre-compact.js +93 -1
- package/dist/hooks/pre-compact.js.map +1 -1
- package/dist/hooks/session-start.d.ts +5 -1
- package/dist/hooks/session-start.d.ts.map +1 -1
- package/dist/hooks/session-start.js +190 -1
- package/dist/hooks/session-start.js.map +1 -1
- package/dist/mcp/focus-tag-learner.d.ts +132 -0
- package/dist/mcp/focus-tag-learner.d.ts.map +1 -0
- package/dist/mcp/focus-tag-learner.js +269 -0
- package/dist/mcp/focus-tag-learner.js.map +1 -0
- package/dist/mcp/proximity-tags.d.ts +93 -0
- package/dist/mcp/proximity-tags.d.ts.map +1 -0
- package/dist/mcp/proximity-tags.js +248 -0
- package/dist/mcp/proximity-tags.js.map +1 -0
- package/dist/mcp/tool-tiers.d.ts.map +1 -1
- package/dist/mcp/tool-tiers.js +2 -0
- package/dist/mcp/tool-tiers.js.map +1 -1
- package/dist/mcp/tools/index.d.ts +5 -2
- package/dist/mcp/tools/index.d.ts.map +1 -1
- package/dist/mcp/tools/index.js +19 -2
- package/dist/mcp/tools/index.js.map +1 -1
- package/dist/mcp/tools/memory.d.ts +7 -2
- package/dist/mcp/tools/memory.d.ts.map +1 -1
- package/dist/mcp/tools/memory.js +40 -9
- package/dist/mcp/tools/memory.js.map +1 -1
- package/dist/mcp/tools/prefetch.d.ts.map +1 -1
- package/dist/mcp/tools/prefetch.js +21 -0
- package/dist/mcp/tools/prefetch.js.map +1 -1
- package/dist/mcp/tools/recommendations.d.ts +30 -0
- package/dist/mcp/tools/recommendations.d.ts.map +1 -0
- package/dist/mcp/tools/recommendations.js +134 -0
- package/dist/mcp/tools/recommendations.js.map +1 -0
- package/dist/mcp/tools/tool-clearing.d.ts +35 -0
- package/dist/mcp/tools/tool-clearing.d.ts.map +1 -0
- package/dist/mcp/tools/tool-clearing.js +253 -0
- package/dist/mcp/tools/tool-clearing.js.map +1 -0
- package/dist/statusline/budget-tracker.d.ts +94 -0
- package/dist/statusline/budget-tracker.d.ts.map +1 -0
- package/dist/statusline/budget-tracker.js +240 -0
- package/dist/statusline/budget-tracker.js.map +1 -0
- package/dist/statusline/index.d.ts +1 -0
- package/dist/statusline/index.d.ts.map +1 -1
- package/dist/statusline/index.js +2 -0
- package/dist/statusline/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Demand Signal Patterns - v16.1.0
|
|
3
|
+
*
|
|
4
|
+
* Sophisticated pattern library for demand signal detection.
|
|
5
|
+
* Provides semantic keyword clustering and multi-line pattern matching.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - SYNONYM_MAP for semantic keyword clustering (8 roots, 48+ synonyms)
|
|
9
|
+
* - Multi-line context patterns (3-line window)
|
|
10
|
+
* - Conditional logic patterns
|
|
11
|
+
* - Temporal reference patterns
|
|
12
|
+
* - Scope patterns for module targeting
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Maps root keywords to their synonyms for semantic matching.
|
|
16
|
+
* 8 root categories with 48+ total synonyms.
|
|
17
|
+
*/
|
|
18
|
+
export declare const SYNONYM_MAP: Record<string, string[]>;
|
|
19
|
+
/**
|
|
20
|
+
* Reverse map: synonym -> root keyword
|
|
21
|
+
*/
|
|
22
|
+
export declare const REVERSE_SYNONYM_MAP: Map<string, string>;
|
|
23
|
+
/**
|
|
24
|
+
* Get the root keyword for a given word (or itself if not a synonym)
|
|
25
|
+
*/
|
|
26
|
+
export declare function getRootKeyword(word: string): string;
|
|
27
|
+
/**
|
|
28
|
+
* Check if two words are semantically related
|
|
29
|
+
*/
|
|
30
|
+
export declare function areSemanticallySimilar(word1: string, word2: string): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Get all synonyms for a word (including the root)
|
|
33
|
+
*/
|
|
34
|
+
export declare function getAllSynonyms(word: string): string[];
|
|
35
|
+
/**
|
|
36
|
+
* Types of advanced patterns detected
|
|
37
|
+
*/
|
|
38
|
+
export type AdvancedPatternType = 'multi-line' | 'conditional' | 'temporal' | 'scope' | 'causal' | 'comparison';
|
|
39
|
+
/**
|
|
40
|
+
* Result of pattern detection
|
|
41
|
+
*/
|
|
42
|
+
export interface PatternMatch {
|
|
43
|
+
type: AdvancedPatternType;
|
|
44
|
+
matched: string;
|
|
45
|
+
lines: number[];
|
|
46
|
+
confidence: number;
|
|
47
|
+
keywords: string[];
|
|
48
|
+
context?: {
|
|
49
|
+
subject?: string;
|
|
50
|
+
action?: string;
|
|
51
|
+
target?: string;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Maximum span for multi-line patterns
|
|
56
|
+
*/
|
|
57
|
+
export declare const MAX_LINE_SPAN = 3;
|
|
58
|
+
/**
|
|
59
|
+
* Split text into lines for multi-line analysis
|
|
60
|
+
*/
|
|
61
|
+
export declare function splitIntoLines(text: string): string[];
|
|
62
|
+
/**
|
|
63
|
+
* Create sliding windows of lines
|
|
64
|
+
*/
|
|
65
|
+
export declare function slidingLineWindows(lines: string[], windowSize?: number): Generator<{
|
|
66
|
+
window: string[];
|
|
67
|
+
startLine: number;
|
|
68
|
+
}>;
|
|
69
|
+
/**
|
|
70
|
+
* Detect multi-line patterns in text
|
|
71
|
+
*/
|
|
72
|
+
export declare function detectMultiLinePatterns(text: string): PatternMatch[];
|
|
73
|
+
/**
|
|
74
|
+
* Detect conditional logic patterns
|
|
75
|
+
*/
|
|
76
|
+
export declare function detectConditionalPatterns(text: string): PatternMatch[];
|
|
77
|
+
/**
|
|
78
|
+
* Detect temporal reference patterns
|
|
79
|
+
*/
|
|
80
|
+
export declare function detectTemporalPatterns(text: string): PatternMatch[];
|
|
81
|
+
/**
|
|
82
|
+
* Detect scope/module targeting patterns
|
|
83
|
+
*/
|
|
84
|
+
export declare function detectScopePatterns(text: string): PatternMatch[];
|
|
85
|
+
/**
|
|
86
|
+
* Options for pattern detection
|
|
87
|
+
*/
|
|
88
|
+
export interface PatternDetectionOptions {
|
|
89
|
+
/** Enable multi-line detection */
|
|
90
|
+
multiLine?: boolean;
|
|
91
|
+
/** Enable conditional patterns */
|
|
92
|
+
conditional?: boolean;
|
|
93
|
+
/** Enable temporal patterns */
|
|
94
|
+
temporal?: boolean;
|
|
95
|
+
/** Enable scope patterns */
|
|
96
|
+
scope?: boolean;
|
|
97
|
+
/** Minimum confidence threshold */
|
|
98
|
+
minConfidence?: number;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Detect all pattern types in text
|
|
102
|
+
*/
|
|
103
|
+
export declare function detectAllPatterns(text: string, options?: PatternDetectionOptions): PatternMatch[];
|
|
104
|
+
/**
|
|
105
|
+
* Keyword type for weighted scoring
|
|
106
|
+
*/
|
|
107
|
+
export type KeywordType = 'action' | 'entity' | 'context';
|
|
108
|
+
/**
|
|
109
|
+
* Keyword type weights for confidence scoring
|
|
110
|
+
*/
|
|
111
|
+
export declare const KEYWORD_TYPE_WEIGHTS: Record<KeywordType, number>;
|
|
112
|
+
/**
|
|
113
|
+
* Classify a keyword by type
|
|
114
|
+
*/
|
|
115
|
+
export declare function classifyKeyword(keyword: string): KeywordType;
|
|
116
|
+
/**
|
|
117
|
+
* Calculate weighted confidence score based on keyword types
|
|
118
|
+
*/
|
|
119
|
+
export declare function calculateWeightedConfidence(keywords: string[]): number;
|
|
120
|
+
//# sourceMappingURL=demand-signal-patterns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demand-signal-patterns.d.ts","sourceRoot":"","sources":["../../../src/core/context/demand-signal-patterns.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAShD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAa,CAAC;AAUlE;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAI5E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAOrD;AAMD;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAC3B,YAAY,GACZ,aAAa,GACb,UAAU,GACV,OAAO,GACP,QAAQ,GACR,YAAY,CAAC;AAEjB;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAMD;;GAEG;AACH,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAErD;AAED;;GAEG;AACH,wBAAiB,kBAAkB,CACjC,KAAK,EAAE,MAAM,EAAE,EACf,UAAU,GAAE,MAAsB,GACjC,SAAS,CAAC;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAmBpD;AAyDD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CA4BpE;AAiBD;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAqBtE;AAkBD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAqBnE;AAiBD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAoBhE;AAoDD;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,kCAAkC;IAClC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kCAAkC;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,mCAAmC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,uBAA4B,GACpC,YAAY,EAAE,CAqChB;AAMD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAI5D,CAAC;AAoBF;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAM5D;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CA6BtE"}
|
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Demand Signal Patterns - v16.1.0
|
|
3
|
+
*
|
|
4
|
+
* Sophisticated pattern library for demand signal detection.
|
|
5
|
+
* Provides semantic keyword clustering and multi-line pattern matching.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - SYNONYM_MAP for semantic keyword clustering (8 roots, 48+ synonyms)
|
|
9
|
+
* - Multi-line context patterns (3-line window)
|
|
10
|
+
* - Conditional logic patterns
|
|
11
|
+
* - Temporal reference patterns
|
|
12
|
+
* - Scope patterns for module targeting
|
|
13
|
+
*/
|
|
14
|
+
// =============================================================================
|
|
15
|
+
// Synonym Map for Semantic Clustering
|
|
16
|
+
// =============================================================================
|
|
17
|
+
/**
|
|
18
|
+
* Maps root keywords to their synonyms for semantic matching.
|
|
19
|
+
* 8 root categories with 48+ total synonyms.
|
|
20
|
+
*/
|
|
21
|
+
export const SYNONYM_MAP = {
|
|
22
|
+
fix: ['repair', 'address', 'resolve', 'correct', 'patch', 'remedy'],
|
|
23
|
+
add: ['create', 'implement', 'introduce', 'include', 'insert'],
|
|
24
|
+
remove: ['delete', 'eliminate', 'drop', 'exclude', 'strip'],
|
|
25
|
+
change: ['modify', 'update', 'alter', 'adjust', 'revise'],
|
|
26
|
+
find: ['search', 'locate', 'discover', 'identify', 'detect'],
|
|
27
|
+
show: ['display', 'render', 'present', 'reveal', 'expose'],
|
|
28
|
+
check: ['verify', 'validate', 'confirm', 'test', 'examine'],
|
|
29
|
+
error: ['failure', 'exception', 'bug', 'issue', 'problem'],
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Reverse map: synonym -> root keyword
|
|
33
|
+
*/
|
|
34
|
+
export const REVERSE_SYNONYM_MAP = new Map();
|
|
35
|
+
// Build reverse map at module load
|
|
36
|
+
for (const [root, synonyms] of Object.entries(SYNONYM_MAP)) {
|
|
37
|
+
REVERSE_SYNONYM_MAP.set(root, root);
|
|
38
|
+
for (const synonym of synonyms) {
|
|
39
|
+
REVERSE_SYNONYM_MAP.set(synonym, root);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Get the root keyword for a given word (or itself if not a synonym)
|
|
44
|
+
*/
|
|
45
|
+
export function getRootKeyword(word) {
|
|
46
|
+
const lower = word.toLowerCase();
|
|
47
|
+
return REVERSE_SYNONYM_MAP.get(lower) || lower;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Check if two words are semantically related
|
|
51
|
+
*/
|
|
52
|
+
export function areSemanticallySimilar(word1, word2) {
|
|
53
|
+
const root1 = getRootKeyword(word1);
|
|
54
|
+
const root2 = getRootKeyword(word2);
|
|
55
|
+
return root1 === root2;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get all synonyms for a word (including the root)
|
|
59
|
+
*/
|
|
60
|
+
export function getAllSynonyms(word) {
|
|
61
|
+
const root = getRootKeyword(word);
|
|
62
|
+
const synonyms = SYNONYM_MAP[root];
|
|
63
|
+
if (synonyms) {
|
|
64
|
+
return [root, ...synonyms];
|
|
65
|
+
}
|
|
66
|
+
return [word.toLowerCase()];
|
|
67
|
+
}
|
|
68
|
+
// =============================================================================
|
|
69
|
+
// Multi-Line Pattern Detection
|
|
70
|
+
// =============================================================================
|
|
71
|
+
/**
|
|
72
|
+
* Maximum span for multi-line patterns
|
|
73
|
+
*/
|
|
74
|
+
export const MAX_LINE_SPAN = 3;
|
|
75
|
+
/**
|
|
76
|
+
* Split text into lines for multi-line analysis
|
|
77
|
+
*/
|
|
78
|
+
export function splitIntoLines(text) {
|
|
79
|
+
return text.split(/\r?\n/);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Create sliding windows of lines
|
|
83
|
+
*/
|
|
84
|
+
export function* slidingLineWindows(lines, windowSize = MAX_LINE_SPAN) {
|
|
85
|
+
for (let i = 0; i <= lines.length - windowSize; i++) {
|
|
86
|
+
// Check for blank line reset (paragraph boundary)
|
|
87
|
+
const window = [];
|
|
88
|
+
let hitBlank = false;
|
|
89
|
+
for (let j = 0; j < windowSize && i + j < lines.length; j++) {
|
|
90
|
+
const line = lines[i + j];
|
|
91
|
+
if (line.trim() === '') {
|
|
92
|
+
hitBlank = true;
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
window.push(line);
|
|
96
|
+
}
|
|
97
|
+
if (!hitBlank && window.length > 0) {
|
|
98
|
+
yield { window, startLine: i };
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Multi-line patterns for context spanning multiple lines
|
|
104
|
+
*/
|
|
105
|
+
const MULTI_LINE_PATTERNS = [
|
|
106
|
+
// "I tried X but got Y error"
|
|
107
|
+
{
|
|
108
|
+
pattern: /i\s+(?:tried|attempted)\s+(.+?)\s+but\s+(?:got|received|saw)\s+(.+?)(?:\s+error)?/i,
|
|
109
|
+
type: 'causal',
|
|
110
|
+
extractContext: (match) => ({
|
|
111
|
+
action: match[1]?.trim(),
|
|
112
|
+
subject: match[2]?.trim(),
|
|
113
|
+
}),
|
|
114
|
+
},
|
|
115
|
+
// "When X, then Y happens"
|
|
116
|
+
{
|
|
117
|
+
pattern: /when\s+(.+?),?\s+(?:then\s+)?(.+?)(?:happens|occurs|appears)/i,
|
|
118
|
+
type: 'conditional',
|
|
119
|
+
extractContext: (match) => ({
|
|
120
|
+
subject: match[1]?.trim(),
|
|
121
|
+
action: match[2]?.trim(),
|
|
122
|
+
}),
|
|
123
|
+
},
|
|
124
|
+
// "X works but Y doesn't"
|
|
125
|
+
{
|
|
126
|
+
pattern: /(.+?)\s+works?\s+(?:but|however)\s+(.+?)\s+(?:doesn't|does not|won't)/i,
|
|
127
|
+
type: 'comparison',
|
|
128
|
+
extractContext: (match) => ({
|
|
129
|
+
subject: match[1]?.trim(),
|
|
130
|
+
target: match[2]?.trim(),
|
|
131
|
+
}),
|
|
132
|
+
},
|
|
133
|
+
// "After X, need to Y"
|
|
134
|
+
{
|
|
135
|
+
pattern: /after\s+(.+?),?\s+(?:i\s+)?(?:need|want|have)\s+to\s+(.+)/i,
|
|
136
|
+
type: 'temporal',
|
|
137
|
+
extractContext: (match) => ({
|
|
138
|
+
subject: match[1]?.trim(),
|
|
139
|
+
action: match[2]?.trim(),
|
|
140
|
+
}),
|
|
141
|
+
},
|
|
142
|
+
// "Before we decided to X"
|
|
143
|
+
{
|
|
144
|
+
pattern: /before\s+(?:we\s+)?(?:decided|chose|went with)\s+(?:to\s+)?(.+)/i,
|
|
145
|
+
type: 'temporal',
|
|
146
|
+
extractContext: (match) => ({
|
|
147
|
+
action: 'decide',
|
|
148
|
+
subject: match[1]?.trim(),
|
|
149
|
+
}),
|
|
150
|
+
},
|
|
151
|
+
];
|
|
152
|
+
/**
|
|
153
|
+
* Detect multi-line patterns in text
|
|
154
|
+
*/
|
|
155
|
+
export function detectMultiLinePatterns(text) {
|
|
156
|
+
const lines = splitIntoLines(text);
|
|
157
|
+
const matches = [];
|
|
158
|
+
for (const { window, startLine } of slidingLineWindows(lines)) {
|
|
159
|
+
const windowText = window.join(' ');
|
|
160
|
+
for (const { pattern, type, extractContext } of MULTI_LINE_PATTERNS) {
|
|
161
|
+
const match = windowText.match(pattern);
|
|
162
|
+
if (match) {
|
|
163
|
+
const lineNumbers = Array.from({ length: window.length }, (_, i) => startLine + i);
|
|
164
|
+
matches.push({
|
|
165
|
+
type,
|
|
166
|
+
matched: match[0],
|
|
167
|
+
lines: lineNumbers,
|
|
168
|
+
confidence: calculatePatternConfidence(match[0], window.length),
|
|
169
|
+
keywords: extractKeywordsFromMatch(match),
|
|
170
|
+
context: extractContext(match),
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return matches;
|
|
176
|
+
}
|
|
177
|
+
// =============================================================================
|
|
178
|
+
// Conditional Logic Patterns
|
|
179
|
+
// =============================================================================
|
|
180
|
+
/**
|
|
181
|
+
* Conditional patterns: if/then, when/then
|
|
182
|
+
*/
|
|
183
|
+
const CONDITIONAL_PATTERNS = [
|
|
184
|
+
/if\s+(.+?)\s+then\s+(.+)/i,
|
|
185
|
+
/when\s+(.+?)\s*,\s*(.+)/i,
|
|
186
|
+
/(?:unless|except\s+when)\s+(.+?)\s*,?\s*(.+)/i,
|
|
187
|
+
/(.+?)\s+only\s+(?:if|when)\s+(.+)/i,
|
|
188
|
+
/(?:in\s+case|in\s+the\s+event)\s+(?:of\s+)?(.+?)\s*,?\s*(.+)/i,
|
|
189
|
+
];
|
|
190
|
+
/**
|
|
191
|
+
* Detect conditional logic patterns
|
|
192
|
+
*/
|
|
193
|
+
export function detectConditionalPatterns(text) {
|
|
194
|
+
const matches = [];
|
|
195
|
+
for (const pattern of CONDITIONAL_PATTERNS) {
|
|
196
|
+
const match = text.match(pattern);
|
|
197
|
+
if (match) {
|
|
198
|
+
matches.push({
|
|
199
|
+
type: 'conditional',
|
|
200
|
+
matched: match[0],
|
|
201
|
+
lines: [0], // Single-line match
|
|
202
|
+
confidence: 0.7,
|
|
203
|
+
keywords: extractKeywordsFromMatch(match),
|
|
204
|
+
context: {
|
|
205
|
+
subject: match[1]?.trim(),
|
|
206
|
+
action: match[2]?.trim(),
|
|
207
|
+
},
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return matches;
|
|
212
|
+
}
|
|
213
|
+
// =============================================================================
|
|
214
|
+
// Temporal Reference Patterns
|
|
215
|
+
// =============================================================================
|
|
216
|
+
/**
|
|
217
|
+
* Temporal patterns: before/after, previously, earlier
|
|
218
|
+
*/
|
|
219
|
+
const TEMPORAL_PATTERNS = [
|
|
220
|
+
/(?:before|prior\s+to)\s+(.+?)\s*,?\s*(?:we|i)?\s*(.+)/i,
|
|
221
|
+
/(?:after|following)\s+(.+?)\s*,?\s*(?:we|i)?\s*(.+)/i,
|
|
222
|
+
/(?:previously|earlier|before)\s*,?\s*(?:we|i)?\s+(.+)/i,
|
|
223
|
+
/(?:used\s+to|was\s+previously)\s+(.+)/i,
|
|
224
|
+
/(?:since|ever\s+since)\s+(.+?)\s*,?\s*(.+)/i,
|
|
225
|
+
/(?:originally|initially)\s*,?\s*(?:we|i)?\s+(.+)/i,
|
|
226
|
+
];
|
|
227
|
+
/**
|
|
228
|
+
* Detect temporal reference patterns
|
|
229
|
+
*/
|
|
230
|
+
export function detectTemporalPatterns(text) {
|
|
231
|
+
const matches = [];
|
|
232
|
+
for (const pattern of TEMPORAL_PATTERNS) {
|
|
233
|
+
const match = text.match(pattern);
|
|
234
|
+
if (match) {
|
|
235
|
+
matches.push({
|
|
236
|
+
type: 'temporal',
|
|
237
|
+
matched: match[0],
|
|
238
|
+
lines: [0],
|
|
239
|
+
confidence: 0.65,
|
|
240
|
+
keywords: extractKeywordsFromMatch(match),
|
|
241
|
+
context: {
|
|
242
|
+
subject: match[1]?.trim(),
|
|
243
|
+
action: match[2]?.trim(),
|
|
244
|
+
},
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return matches;
|
|
249
|
+
}
|
|
250
|
+
// =============================================================================
|
|
251
|
+
// Scope Patterns
|
|
252
|
+
// =============================================================================
|
|
253
|
+
/**
|
|
254
|
+
* Scope patterns: in the X module, for the Y component
|
|
255
|
+
*/
|
|
256
|
+
const SCOPE_PATTERNS = [
|
|
257
|
+
/in\s+(?:the\s+)?(\w+)\s+(?:module|component|service|class|file)/i,
|
|
258
|
+
/(?:for|within)\s+(?:the\s+)?(\w+)\s+(?:module|component|service|class|file)/i,
|
|
259
|
+
/(?:the\s+)?(\w+)\s+(?:module|component|service)\s+(?:needs|requires|should)/i,
|
|
260
|
+
/(?:related\s+to|concerning)\s+(?:the\s+)?(\w+)\s+(?:module|component|service|functionality)/i,
|
|
261
|
+
/(?:in|under)\s+(?:the\s+)?(?:src\/)?(\w+(?:\/\w+)*)\s+(?:directory|folder|path)/i,
|
|
262
|
+
];
|
|
263
|
+
/**
|
|
264
|
+
* Detect scope/module targeting patterns
|
|
265
|
+
*/
|
|
266
|
+
export function detectScopePatterns(text) {
|
|
267
|
+
const matches = [];
|
|
268
|
+
for (const pattern of SCOPE_PATTERNS) {
|
|
269
|
+
const match = text.match(pattern);
|
|
270
|
+
if (match) {
|
|
271
|
+
matches.push({
|
|
272
|
+
type: 'scope',
|
|
273
|
+
matched: match[0],
|
|
274
|
+
lines: [0],
|
|
275
|
+
confidence: 0.75,
|
|
276
|
+
keywords: [match[1]?.toLowerCase()].filter(Boolean),
|
|
277
|
+
context: {
|
|
278
|
+
target: match[1]?.trim(),
|
|
279
|
+
},
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
return matches;
|
|
284
|
+
}
|
|
285
|
+
// =============================================================================
|
|
286
|
+
// Helper Functions
|
|
287
|
+
// =============================================================================
|
|
288
|
+
/**
|
|
289
|
+
* Calculate confidence score based on match quality
|
|
290
|
+
*/
|
|
291
|
+
function calculatePatternConfidence(matched, lineSpan) {
|
|
292
|
+
// Base confidence
|
|
293
|
+
let confidence = 0.5;
|
|
294
|
+
// Longer matches are more specific
|
|
295
|
+
if (matched.length > 30)
|
|
296
|
+
confidence += 0.15;
|
|
297
|
+
else if (matched.length > 15)
|
|
298
|
+
confidence += 0.1;
|
|
299
|
+
// Multi-line patterns are more contextual
|
|
300
|
+
if (lineSpan > 1)
|
|
301
|
+
confidence += 0.1;
|
|
302
|
+
if (lineSpan > 2)
|
|
303
|
+
confidence += 0.05;
|
|
304
|
+
return Math.min(0.95, confidence);
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Extract keywords from regex match groups
|
|
308
|
+
*/
|
|
309
|
+
function extractKeywordsFromMatch(match) {
|
|
310
|
+
const keywords = [];
|
|
311
|
+
for (let i = 1; i < match.length; i++) {
|
|
312
|
+
if (match[i]) {
|
|
313
|
+
// Split on non-word characters and filter
|
|
314
|
+
const words = match[i]
|
|
315
|
+
.toLowerCase()
|
|
316
|
+
.split(/\W+/)
|
|
317
|
+
.filter((w) => w.length > 2);
|
|
318
|
+
keywords.push(...words);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
// Map to root keywords where possible
|
|
322
|
+
return [...new Set(keywords.map(getRootKeyword))];
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Detect all pattern types in text
|
|
326
|
+
*/
|
|
327
|
+
export function detectAllPatterns(text, options = {}) {
|
|
328
|
+
const { multiLine = true, conditional = true, temporal = true, scope = true, minConfidence = 0.5, } = options;
|
|
329
|
+
const allMatches = [];
|
|
330
|
+
if (multiLine) {
|
|
331
|
+
allMatches.push(...detectMultiLinePatterns(text));
|
|
332
|
+
}
|
|
333
|
+
if (conditional) {
|
|
334
|
+
allMatches.push(...detectConditionalPatterns(text));
|
|
335
|
+
}
|
|
336
|
+
if (temporal) {
|
|
337
|
+
allMatches.push(...detectTemporalPatterns(text));
|
|
338
|
+
}
|
|
339
|
+
if (scope) {
|
|
340
|
+
allMatches.push(...detectScopePatterns(text));
|
|
341
|
+
}
|
|
342
|
+
// Filter by confidence and dedupe by matched text
|
|
343
|
+
const seen = new Set();
|
|
344
|
+
return allMatches
|
|
345
|
+
.filter((m) => m.confidence >= minConfidence)
|
|
346
|
+
.filter((m) => {
|
|
347
|
+
if (seen.has(m.matched))
|
|
348
|
+
return false;
|
|
349
|
+
seen.add(m.matched);
|
|
350
|
+
return true;
|
|
351
|
+
})
|
|
352
|
+
.sort((a, b) => b.confidence - a.confidence);
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Keyword type weights for confidence scoring
|
|
356
|
+
*/
|
|
357
|
+
export const KEYWORD_TYPE_WEIGHTS = {
|
|
358
|
+
action: 0.3,
|
|
359
|
+
entity: 0.4,
|
|
360
|
+
context: 0.3,
|
|
361
|
+
};
|
|
362
|
+
/**
|
|
363
|
+
* Action verbs (map to 'action' type)
|
|
364
|
+
*/
|
|
365
|
+
const ACTION_KEYWORDS = new Set([
|
|
366
|
+
...Object.keys(SYNONYM_MAP),
|
|
367
|
+
...Object.values(SYNONYM_MAP).flat(),
|
|
368
|
+
'build', 'run', 'deploy', 'configure', 'setup',
|
|
369
|
+
]);
|
|
370
|
+
/**
|
|
371
|
+
* Entity keywords (map to 'entity' type)
|
|
372
|
+
*/
|
|
373
|
+
const ENTITY_KEYWORDS = new Set([
|
|
374
|
+
'module', 'component', 'service', 'class', 'function',
|
|
375
|
+
'file', 'directory', 'folder', 'api', 'database',
|
|
376
|
+
'cache', 'config', 'test', 'auth', 'user',
|
|
377
|
+
]);
|
|
378
|
+
/**
|
|
379
|
+
* Classify a keyword by type
|
|
380
|
+
*/
|
|
381
|
+
export function classifyKeyword(keyword) {
|
|
382
|
+
const lower = keyword.toLowerCase();
|
|
383
|
+
if (ACTION_KEYWORDS.has(lower))
|
|
384
|
+
return 'action';
|
|
385
|
+
if (ENTITY_KEYWORDS.has(lower))
|
|
386
|
+
return 'entity';
|
|
387
|
+
return 'context';
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Calculate weighted confidence score based on keyword types
|
|
391
|
+
*/
|
|
392
|
+
export function calculateWeightedConfidence(keywords) {
|
|
393
|
+
if (keywords.length === 0)
|
|
394
|
+
return 0;
|
|
395
|
+
let totalWeight = 0;
|
|
396
|
+
const typeCounts = {
|
|
397
|
+
action: 0,
|
|
398
|
+
entity: 0,
|
|
399
|
+
context: 0,
|
|
400
|
+
};
|
|
401
|
+
for (const keyword of keywords) {
|
|
402
|
+
const type = classifyKeyword(keyword);
|
|
403
|
+
typeCounts[type]++;
|
|
404
|
+
}
|
|
405
|
+
// Calculate weighted score
|
|
406
|
+
for (const [type, count] of Object.entries(typeCounts)) {
|
|
407
|
+
const weight = KEYWORD_TYPE_WEIGHTS[type];
|
|
408
|
+
const normalizedCount = Math.min(count / keywords.length, 1);
|
|
409
|
+
totalWeight += weight * normalizedCount;
|
|
410
|
+
}
|
|
411
|
+
// Bonus for having all three types
|
|
412
|
+
const hasAll = typeCounts.action > 0 && typeCounts.entity > 0 && typeCounts.context > 0;
|
|
413
|
+
if (hasAll) {
|
|
414
|
+
totalWeight += 0.1;
|
|
415
|
+
}
|
|
416
|
+
return Math.min(1, totalWeight);
|
|
417
|
+
}
|
|
418
|
+
//# sourceMappingURL=demand-signal-patterns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demand-signal-patterns.js","sourceRoot":"","sources":["../../../src/core/context/demand-signal-patterns.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feedback Loop Engine - v16.0.0
|
|
3
|
+
*
|
|
4
|
+
* Analyzes metrics and suggests dynamic threshold adjustments.
|
|
5
|
+
* Part of the Auto Context Engineering system.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - 7-day rolling metrics window analysis
|
|
9
|
+
* - Trend detection (improving, plateau, degrading)
|
|
10
|
+
* - Suggested threshold deltas with bounds
|
|
11
|
+
* - Hysteresis to prevent oscillation
|
|
12
|
+
* - Feature-flag gated adjustments
|
|
13
|
+
* - Persistent adjustment history
|
|
14
|
+
*/
|
|
15
|
+
import { type MetricsSummary } from '../metrics/index.js';
|
|
16
|
+
import { type AdaptationStrategyType, type TrendPattern, type TrendData, type ThresholdAdjustment } from './adaptation-strategy.js';
|
|
17
|
+
import { type ThresholdConfig } from './budget-thresholds.js';
|
|
18
|
+
/**
|
|
19
|
+
* Feedback loop analysis result
|
|
20
|
+
*/
|
|
21
|
+
export interface FeedbackLoopResult {
|
|
22
|
+
/** Whether analysis was executed */
|
|
23
|
+
executed: boolean;
|
|
24
|
+
/** Reason if not executed */
|
|
25
|
+
reason?: string;
|
|
26
|
+
/** Detected trend pattern */
|
|
27
|
+
pattern?: TrendPattern;
|
|
28
|
+
/** Trend data used for analysis */
|
|
29
|
+
trendData?: TrendData;
|
|
30
|
+
/** Suggested adjustments */
|
|
31
|
+
adjustments: ThresholdAdjustment[];
|
|
32
|
+
/** Strategy used */
|
|
33
|
+
strategy: AdaptationStrategyType;
|
|
34
|
+
/** Analysis timestamp */
|
|
35
|
+
timestamp: string;
|
|
36
|
+
/** Number of data points analyzed */
|
|
37
|
+
dataPointsAnalyzed: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Feedback loop state (persisted)
|
|
41
|
+
*/
|
|
42
|
+
export interface FeedbackLoopState {
|
|
43
|
+
/** Schema version */
|
|
44
|
+
version: string;
|
|
45
|
+
/** Last analysis timestamp */
|
|
46
|
+
lastAnalysis: string;
|
|
47
|
+
/** Applied adjustments history */
|
|
48
|
+
adjustmentHistory: AppliedAdjustment[];
|
|
49
|
+
/** Current strategy */
|
|
50
|
+
strategy: AdaptationStrategyType;
|
|
51
|
+
/** Current dynamic thresholds (if enabled) */
|
|
52
|
+
dynamicThresholds?: {
|
|
53
|
+
warning: number;
|
|
54
|
+
high: number;
|
|
55
|
+
critical: number;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Record of an applied adjustment
|
|
60
|
+
*/
|
|
61
|
+
export interface AppliedAdjustment {
|
|
62
|
+
/** When adjustment was applied */
|
|
63
|
+
timestamp: string;
|
|
64
|
+
/** The adjustment that was applied */
|
|
65
|
+
adjustment: ThresholdAdjustment;
|
|
66
|
+
/** Pattern at time of adjustment */
|
|
67
|
+
pattern: TrendPattern;
|
|
68
|
+
/** Success rate after adjustment (measured later) */
|
|
69
|
+
resultSuccessRate?: number;
|
|
70
|
+
}
|
|
71
|
+
/** Feedback loop state file */
|
|
72
|
+
export declare const FEEDBACK_LOOP_FILE = "feedback-loop.json";
|
|
73
|
+
/** Current schema version */
|
|
74
|
+
export declare const FEEDBACK_LOOP_VERSION = "1.0.0";
|
|
75
|
+
/** Rolling window in days for analysis */
|
|
76
|
+
export declare const ROLLING_WINDOW_DAYS = 7;
|
|
77
|
+
/** Feature flag for dynamic thresholds */
|
|
78
|
+
export declare const DYNAMIC_THRESHOLDS_FLAG = "dynamicThresholds";
|
|
79
|
+
/** Maximum adjustment history to keep */
|
|
80
|
+
export declare const MAX_ADJUSTMENT_HISTORY = 50;
|
|
81
|
+
/**
|
|
82
|
+
* Get feedback loop state file path
|
|
83
|
+
*/
|
|
84
|
+
export declare function getFeedbackLoopPath(projectDir: string): string;
|
|
85
|
+
/**
|
|
86
|
+
* Load feedback loop state
|
|
87
|
+
*/
|
|
88
|
+
export declare function loadFeedbackLoopState(projectDir: string): Promise<FeedbackLoopState>;
|
|
89
|
+
/**
|
|
90
|
+
* Save feedback loop state
|
|
91
|
+
*/
|
|
92
|
+
export declare function saveFeedbackLoopState(projectDir: string, state: FeedbackLoopState): Promise<void>;
|
|
93
|
+
/**
|
|
94
|
+
* Create initial feedback loop state
|
|
95
|
+
*/
|
|
96
|
+
export declare function createInitialState(): FeedbackLoopState;
|
|
97
|
+
/**
|
|
98
|
+
* Calculate trend data from metrics summary
|
|
99
|
+
*/
|
|
100
|
+
export declare function calculateTrendData(recentSummary: MetricsSummary, olderSummary?: MetricsSummary): TrendData;
|
|
101
|
+
/**
|
|
102
|
+
* Execute feedback loop analysis
|
|
103
|
+
*/
|
|
104
|
+
export declare function executeFeedbackLoop(projectDir: string, options?: {
|
|
105
|
+
strategy?: AdaptationStrategyType;
|
|
106
|
+
forceAnalysis?: boolean;
|
|
107
|
+
}): Promise<FeedbackLoopResult>;
|
|
108
|
+
/**
|
|
109
|
+
* Apply suggested adjustments
|
|
110
|
+
*/
|
|
111
|
+
export declare function applyAdjustments(projectDir: string, result: FeedbackLoopResult): Promise<boolean>;
|
|
112
|
+
/**
|
|
113
|
+
* Get current dynamic thresholds (if enabled)
|
|
114
|
+
*/
|
|
115
|
+
export declare function getDynamicThresholds(projectDir: string): Promise<ThresholdConfig | null>;
|
|
116
|
+
/**
|
|
117
|
+
* Check if dynamic thresholds feature is enabled
|
|
118
|
+
*/
|
|
119
|
+
export declare function isDynamicThresholdsEnabled(projectDir: string): Promise<boolean>;
|
|
120
|
+
/**
|
|
121
|
+
* Format feedback loop result for display
|
|
122
|
+
*/
|
|
123
|
+
export declare function formatFeedbackLoopResult(result: FeedbackLoopResult): string;
|
|
124
|
+
/**
|
|
125
|
+
* Format adjustment history
|
|
126
|
+
*/
|
|
127
|
+
export declare function formatAdjustmentHistory(history: AppliedAdjustment[]): string;
|
|
128
|
+
//# sourceMappingURL=feedback-loop-engine.d.ts.map
|