dino-spec 6.5.0 → 6.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/dist/core/context/demand-detector.d.ts +71 -0
- package/dist/core/context/demand-detector.d.ts.map +1 -0
- package/dist/core/context/demand-detector.js +333 -0
- package/dist/core/context/demand-detector.js.map +1 -0
- package/dist/core/context/index.d.ts +4 -2
- package/dist/core/context/index.d.ts.map +1 -1
- package/dist/core/context/index.js +13 -2
- package/dist/core/context/index.js.map +1 -1
- package/dist/core/generator/claude-md.d.ts +84 -1
- package/dist/core/generator/claude-md.d.ts.map +1 -1
- package/dist/core/generator/claude-md.js +172 -1
- package/dist/core/generator/claude-md.js.map +1 -1
- package/dist/core/memory/consolidation.d.ts +140 -0
- package/dist/core/memory/consolidation.d.ts.map +1 -0
- package/dist/core/memory/consolidation.js +426 -0
- package/dist/core/memory/consolidation.js.map +1 -0
- package/dist/core/memory/distillation.d.ts +93 -0
- package/dist/core/memory/distillation.d.ts.map +1 -0
- package/dist/core/memory/distillation.js +292 -0
- package/dist/core/memory/distillation.js.map +1 -0
- package/dist/core/memory/failure-registry.d.ts +125 -0
- package/dist/core/memory/failure-registry.d.ts.map +1 -0
- package/dist/core/memory/failure-registry.js +340 -0
- package/dist/core/memory/failure-registry.js.map +1 -0
- package/dist/core/memory/formatters.d.ts +77 -0
- package/dist/core/memory/formatters.d.ts.map +1 -0
- package/dist/core/memory/formatters.js +319 -0
- package/dist/core/memory/formatters.js.map +1 -0
- package/dist/core/memory/graph.d.ts +151 -0
- package/dist/core/memory/graph.d.ts.map +1 -0
- package/dist/core/memory/graph.js +323 -0
- package/dist/core/memory/graph.js.map +1 -0
- package/dist/core/memory/index.d.ts +9 -1
- package/dist/core/memory/index.d.ts.map +1 -1
- package/dist/core/memory/index.js +86 -1
- package/dist/core/memory/index.js.map +1 -1
- package/dist/core/memory/memory-decay.d.ts +148 -0
- package/dist/core/memory/memory-decay.d.ts.map +1 -0
- package/dist/core/memory/memory-decay.js +344 -0
- package/dist/core/memory/memory-decay.js.map +1 -0
- package/dist/core/memory/proactive-extractor.d.ts +99 -0
- package/dist/core/memory/proactive-extractor.d.ts.map +1 -0
- package/dist/core/memory/proactive-extractor.js +389 -0
- package/dist/core/memory/proactive-extractor.js.map +1 -0
- package/dist/core/tasks/index.d.ts +3 -1
- package/dist/core/tasks/index.d.ts.map +1 -1
- package/dist/core/tasks/index.js +12 -1
- package/dist/core/tasks/index.js.map +1 -1
- package/dist/core/tasks/todo-sync.d.ts +92 -0
- package/dist/core/tasks/todo-sync.d.ts.map +1 -0
- package/dist/core/tasks/todo-sync.js +217 -0
- package/dist/core/tasks/todo-sync.js.map +1 -0
- package/dist/hooks/session-end.d.ts +2 -1
- package/dist/hooks/session-end.d.ts.map +1 -1
- package/dist/hooks/session-end.js +12 -11
- package/dist/hooks/session-end.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Demand Detector - v6.6.0
|
|
3
|
+
*
|
|
4
|
+
* Just-in-time context retrieval based on current prompt needs.
|
|
5
|
+
* Instead of loading all context at session-start, load only what's
|
|
6
|
+
* relevant to the current task.
|
|
7
|
+
*
|
|
8
|
+
* Research insight: "Context loaded at session-start may not be relevant"
|
|
9
|
+
*
|
|
10
|
+
* Features:
|
|
11
|
+
* - Detect context demand signals from prompts
|
|
12
|
+
* - Lazy memory loading with semantic recall
|
|
13
|
+
* - Condensed injection format for minimal tokens
|
|
14
|
+
* - Relevance threshold filtering
|
|
15
|
+
*/
|
|
16
|
+
import { type ScoredMemoryEntry, type DecisionEntry, type PatternEntry, type LearningEntry } from '../memory/index.js';
|
|
17
|
+
/**
|
|
18
|
+
* Types of context that can be demanded
|
|
19
|
+
*/
|
|
20
|
+
export type ContextDemandType = 'decisions' | 'patterns' | 'learnings' | 'failures' | 'structure' | 'commands' | 'session' | 'all';
|
|
21
|
+
/**
|
|
22
|
+
* Demand signal detected from prompt
|
|
23
|
+
*/
|
|
24
|
+
export interface DemandSignal {
|
|
25
|
+
type: ContextDemandType;
|
|
26
|
+
confidence: 'high' | 'medium' | 'low';
|
|
27
|
+
trigger: string;
|
|
28
|
+
keywords: string[];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Detect context demand signals from a prompt
|
|
32
|
+
*/
|
|
33
|
+
export declare function detectDemandSignals(prompt: string): DemandSignal[];
|
|
34
|
+
/**
|
|
35
|
+
* Extract keywords from prompt for semantic matching
|
|
36
|
+
*/
|
|
37
|
+
export declare function extractKeywords(prompt: string): string[];
|
|
38
|
+
/**
|
|
39
|
+
* JIT loading result
|
|
40
|
+
*/
|
|
41
|
+
export interface JITLoadResult {
|
|
42
|
+
signals: DemandSignal[];
|
|
43
|
+
loadedContext: {
|
|
44
|
+
decisions: ScoredMemoryEntry<DecisionEntry>[];
|
|
45
|
+
patterns: ScoredMemoryEntry<PatternEntry>[];
|
|
46
|
+
learnings: ScoredMemoryEntry<LearningEntry>[];
|
|
47
|
+
};
|
|
48
|
+
injectionText: string;
|
|
49
|
+
tokensEstimate: number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Load context just-in-time based on demand signals
|
|
53
|
+
*/
|
|
54
|
+
export declare function loadContextJIT(prompt: string, projectDir?: string, options?: {
|
|
55
|
+
minRelevance?: number;
|
|
56
|
+
maxEntries?: number;
|
|
57
|
+
includeFailures?: boolean;
|
|
58
|
+
}): Promise<JITLoadResult>;
|
|
59
|
+
/**
|
|
60
|
+
* Format JIT context as a reminder block
|
|
61
|
+
*/
|
|
62
|
+
export declare function formatAsReminder(jitResult: JITLoadResult): string;
|
|
63
|
+
/**
|
|
64
|
+
* Calculate overall relevance score for a prompt-context pair
|
|
65
|
+
*/
|
|
66
|
+
export declare function calculateRelevanceScore(prompt: string, jitResult: JITLoadResult): number;
|
|
67
|
+
/**
|
|
68
|
+
* Decide whether to inject context based on relevance
|
|
69
|
+
*/
|
|
70
|
+
export declare function shouldInjectContext(jitResult: JITLoadResult, threshold?: number): boolean;
|
|
71
|
+
//# sourceMappingURL=demand-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demand-detector.d.ts","sourceRoot":"","sources":["../../../src/core/context/demand-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAML,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAa5B;;GAEG;AACH,MAAM,MAAM,iBAAiB,GACzB,WAAW,GACX,UAAU,GACV,WAAW,GACX,UAAU,GACV,WAAW,GACX,UAAU,GACV,SAAS,GACT,KAAK,CAAC;AAEV;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,iBAAiB,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AA2ED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE,CAwBlE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAqBxD;AAgBD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,aAAa,EAAE;QACb,SAAS,EAAE,iBAAiB,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9C,QAAQ,EAAE,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC;QAC5C,SAAS,EAAE,iBAAiB,CAAC,aAAa,CAAC,EAAE,CAAC;KAC/C,CAAC;IACF,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,UAAU,GAAE,MAAsB,EAClC,OAAO,GAAE;IACP,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;CACtB,GACL,OAAO,CAAC,aAAa,CAAC,CAsFxB;AA+DD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,aAAa,GAAG,MAAM,CAQjE;AAMD;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,aAAa,GACvB,MAAM,CAiCR;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,aAAa,EACxB,SAAS,GAAE,MAAY,GACtB,OAAO,CAmBT"}
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Demand Detector - v6.6.0
|
|
3
|
+
*
|
|
4
|
+
* Just-in-time context retrieval based on current prompt needs.
|
|
5
|
+
* Instead of loading all context at session-start, load only what's
|
|
6
|
+
* relevant to the current task.
|
|
7
|
+
*
|
|
8
|
+
* Research insight: "Context loaded at session-start may not be relevant"
|
|
9
|
+
*
|
|
10
|
+
* Features:
|
|
11
|
+
* - Detect context demand signals from prompts
|
|
12
|
+
* - Lazy memory loading with semantic recall
|
|
13
|
+
* - Condensed injection format for minimal tokens
|
|
14
|
+
* - Relevance threshold filtering
|
|
15
|
+
*/
|
|
16
|
+
import { semanticRecall, } from '../memory/index.js';
|
|
17
|
+
import { distillDecision, distillPattern, distillLearning, } from '../memory/distillation.js';
|
|
18
|
+
/**
|
|
19
|
+
* Patterns that indicate demand for specific context types
|
|
20
|
+
*/
|
|
21
|
+
const DEMAND_PATTERNS = {
|
|
22
|
+
decisions: [
|
|
23
|
+
/(?:why|what).+(?:decided|chose|chose)/i,
|
|
24
|
+
/(?:decision|choice|approach).+(?:for|about)/i,
|
|
25
|
+
/(?:rationale|reason).+(?:for|behind)/i,
|
|
26
|
+
/(?:architecture|design).+(?:decision|choice)/i,
|
|
27
|
+
/what.+(?:trade-?off|alternative)/i,
|
|
28
|
+
],
|
|
29
|
+
patterns: [
|
|
30
|
+
/(?:pattern|convention|style).+(?:for|in|when)/i,
|
|
31
|
+
/how.+(?:usually|normally|typically)/i,
|
|
32
|
+
/(?:best practice|standard).+(?:for|in)/i,
|
|
33
|
+
/(?:prefer|preference).+(?:for|when)/i,
|
|
34
|
+
/what.+(?:convention|pattern)/i,
|
|
35
|
+
],
|
|
36
|
+
learnings: [
|
|
37
|
+
/(?:learned|discovered|found out)/i,
|
|
38
|
+
/(?:remember|recall).+(?:about|from)/i,
|
|
39
|
+
/(?:previous|earlier|before)/i,
|
|
40
|
+
/what.+(?:know|knew).+(?:about)/i,
|
|
41
|
+
/(?:insight|discovery)/i,
|
|
42
|
+
],
|
|
43
|
+
failures: [
|
|
44
|
+
/(?:didn't|did not|doesn't|won't).+work/i,
|
|
45
|
+
/(?:tried|attempted).+(?:before|already)/i,
|
|
46
|
+
/(?:failed|failure|error)/i,
|
|
47
|
+
/(?:avoid|don't use|problem with)/i,
|
|
48
|
+
/what.+(?:didn't|failed)/i,
|
|
49
|
+
],
|
|
50
|
+
structure: [
|
|
51
|
+
/(?:where|which).+(?:file|folder|directory)/i,
|
|
52
|
+
/(?:structure|layout|organization)/i,
|
|
53
|
+
/(?:find|locate|look for)/i,
|
|
54
|
+
/(?:architecture|codebase)/i,
|
|
55
|
+
],
|
|
56
|
+
commands: [
|
|
57
|
+
/(?:how|what).+(?:build|test|run|start|lint)/i,
|
|
58
|
+
/(?:command|script).+(?:for|to)/i,
|
|
59
|
+
/(?:npm|yarn|pnpm|cargo|go).+(?:command|run)/i,
|
|
60
|
+
],
|
|
61
|
+
session: [
|
|
62
|
+
/(?:current|now|today).+(?:doing|working|focus)/i,
|
|
63
|
+
/(?:status|progress|state)/i,
|
|
64
|
+
/(?:continue|resume|pick up)/i,
|
|
65
|
+
/(?:where|what).+(?:left off|stopped)/i,
|
|
66
|
+
],
|
|
67
|
+
all: [
|
|
68
|
+
/(?:context|background|history)/i,
|
|
69
|
+
/(?:everything|all).+(?:know|remember)/i,
|
|
70
|
+
],
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Keyword extraction for semantic matching
|
|
74
|
+
*/
|
|
75
|
+
const KEYWORD_PATTERNS = [
|
|
76
|
+
// Technical terms
|
|
77
|
+
/(?:api|database|auth|cache|config|test|build|deploy|docker)/gi,
|
|
78
|
+
// Action words
|
|
79
|
+
/(?:implement|fix|add|remove|update|refactor|debug)/gi,
|
|
80
|
+
// Component names (CamelCase)
|
|
81
|
+
/[A-Z][a-z]+(?:[A-Z][a-z]+)+/g,
|
|
82
|
+
// File paths
|
|
83
|
+
/(?:src|lib|test|spec)\/[\w\/.-]+/gi,
|
|
84
|
+
];
|
|
85
|
+
// =============================================================================
|
|
86
|
+
// Demand Detection
|
|
87
|
+
// =============================================================================
|
|
88
|
+
/**
|
|
89
|
+
* Detect context demand signals from a prompt
|
|
90
|
+
*/
|
|
91
|
+
export function detectDemandSignals(prompt) {
|
|
92
|
+
const signals = [];
|
|
93
|
+
const promptLower = prompt.toLowerCase();
|
|
94
|
+
// Check each demand type
|
|
95
|
+
for (const [type, patterns] of Object.entries(DEMAND_PATTERNS)) {
|
|
96
|
+
for (const pattern of patterns) {
|
|
97
|
+
const match = prompt.match(pattern);
|
|
98
|
+
if (match) {
|
|
99
|
+
// Extract keywords from the match context
|
|
100
|
+
const keywords = extractKeywords(prompt);
|
|
101
|
+
signals.push({
|
|
102
|
+
type: type,
|
|
103
|
+
confidence: determineConfidence(pattern, match[0]),
|
|
104
|
+
trigger: match[0],
|
|
105
|
+
keywords,
|
|
106
|
+
});
|
|
107
|
+
break; // One signal per type
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return signals;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Extract keywords from prompt for semantic matching
|
|
115
|
+
*/
|
|
116
|
+
export function extractKeywords(prompt) {
|
|
117
|
+
const keywords = new Set();
|
|
118
|
+
for (const pattern of KEYWORD_PATTERNS) {
|
|
119
|
+
const matches = prompt.match(pattern);
|
|
120
|
+
if (matches) {
|
|
121
|
+
for (const match of matches) {
|
|
122
|
+
keywords.add(match.toLowerCase());
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// Also extract quoted strings
|
|
127
|
+
const quoted = prompt.match(/"([^"]+)"|'([^']+)'/g);
|
|
128
|
+
if (quoted) {
|
|
129
|
+
for (const q of quoted) {
|
|
130
|
+
keywords.add(q.replace(/["']/g, '').toLowerCase());
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return Array.from(keywords);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Determine confidence based on pattern strength
|
|
137
|
+
*/
|
|
138
|
+
function determineConfidence(pattern, match) {
|
|
139
|
+
// Longer matches are more confident
|
|
140
|
+
if (match.length > 20)
|
|
141
|
+
return 'high';
|
|
142
|
+
if (match.length > 10)
|
|
143
|
+
return 'medium';
|
|
144
|
+
return 'low';
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Load context just-in-time based on demand signals
|
|
148
|
+
*/
|
|
149
|
+
export async function loadContextJIT(prompt, projectDir = process.cwd(), options = {}) {
|
|
150
|
+
const { minRelevance = 0.3, maxEntries = 5, includeFailures = true, } = options;
|
|
151
|
+
// Detect what context is needed
|
|
152
|
+
const signals = detectDemandSignals(prompt);
|
|
153
|
+
// Build query from signals
|
|
154
|
+
const queryParts = [prompt];
|
|
155
|
+
for (const signal of signals) {
|
|
156
|
+
queryParts.push(...signal.keywords);
|
|
157
|
+
}
|
|
158
|
+
const query = queryParts.join(' ');
|
|
159
|
+
// Determine which categories to load
|
|
160
|
+
const categories = new Set();
|
|
161
|
+
for (const signal of signals) {
|
|
162
|
+
switch (signal.type) {
|
|
163
|
+
case 'decisions':
|
|
164
|
+
categories.add('decisions');
|
|
165
|
+
break;
|
|
166
|
+
case 'patterns':
|
|
167
|
+
categories.add('patterns');
|
|
168
|
+
break;
|
|
169
|
+
case 'learnings':
|
|
170
|
+
case 'failures':
|
|
171
|
+
categories.add('learnings');
|
|
172
|
+
break;
|
|
173
|
+
case 'all':
|
|
174
|
+
categories.add('decisions');
|
|
175
|
+
categories.add('patterns');
|
|
176
|
+
categories.add('learnings');
|
|
177
|
+
break;
|
|
178
|
+
// structure, commands, session handled elsewhere
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// If no specific signals, check if prompt warrants any context
|
|
182
|
+
if (categories.size === 0) {
|
|
183
|
+
// Default: light context load for implementation tasks
|
|
184
|
+
const implPatterns = /implement|fix|add|build|create|update/i;
|
|
185
|
+
if (implPatterns.test(prompt)) {
|
|
186
|
+
categories.add('patterns');
|
|
187
|
+
categories.add('learnings');
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
// Load relevant memories via semantic recall
|
|
191
|
+
const loadedContext = {
|
|
192
|
+
decisions: [],
|
|
193
|
+
patterns: [],
|
|
194
|
+
learnings: [],
|
|
195
|
+
};
|
|
196
|
+
if (categories.size > 0) {
|
|
197
|
+
const recalled = await semanticRecall({
|
|
198
|
+
query,
|
|
199
|
+
category: categories.size === 3 ? 'all' : Array.from(categories)[0],
|
|
200
|
+
limit: maxEntries,
|
|
201
|
+
minRelevance,
|
|
202
|
+
includeSessionContext: true,
|
|
203
|
+
}, projectDir);
|
|
204
|
+
loadedContext.decisions = recalled.decisions;
|
|
205
|
+
loadedContext.patterns = recalled.patterns;
|
|
206
|
+
loadedContext.learnings = recalled.learnings;
|
|
207
|
+
}
|
|
208
|
+
// Generate injection text
|
|
209
|
+
const injectionText = formatJITInjection(loadedContext, {
|
|
210
|
+
includeFailures,
|
|
211
|
+
maxChars: 500,
|
|
212
|
+
});
|
|
213
|
+
// Estimate tokens
|
|
214
|
+
const tokensEstimate = Math.ceil(injectionText.length / 4);
|
|
215
|
+
return {
|
|
216
|
+
signals,
|
|
217
|
+
loadedContext,
|
|
218
|
+
injectionText,
|
|
219
|
+
tokensEstimate,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
// =============================================================================
|
|
223
|
+
// Injection Formatting
|
|
224
|
+
// =============================================================================
|
|
225
|
+
/**
|
|
226
|
+
* Format loaded context for minimal injection
|
|
227
|
+
*/
|
|
228
|
+
function formatJITInjection(context, options = {}) {
|
|
229
|
+
const { includeFailures = true, maxChars = 500 } = options;
|
|
230
|
+
const parts = [];
|
|
231
|
+
// Distill and format decisions
|
|
232
|
+
if (context.decisions.length > 0) {
|
|
233
|
+
const topDecision = context.decisions[0];
|
|
234
|
+
const distilled = distillDecision(topDecision.entry);
|
|
235
|
+
parts.push(`📌 ${distilled.distilled}`);
|
|
236
|
+
}
|
|
237
|
+
// Distill and format patterns
|
|
238
|
+
if (context.patterns.length > 0) {
|
|
239
|
+
const topPattern = context.patterns[0];
|
|
240
|
+
const distilled = distillPattern(topPattern.entry);
|
|
241
|
+
parts.push(`📐 ${distilled.distilled}`);
|
|
242
|
+
}
|
|
243
|
+
// Distill and format learnings (prioritize failures)
|
|
244
|
+
if (context.learnings.length > 0) {
|
|
245
|
+
const failureLearning = includeFailures
|
|
246
|
+
? context.learnings.find(l => l.entry.failedApproaches && l.entry.failedApproaches.length > 0)
|
|
247
|
+
: null;
|
|
248
|
+
if (failureLearning) {
|
|
249
|
+
const distilled = distillLearning(failureLearning.entry);
|
|
250
|
+
parts.push(`⚠️ ${distilled.distilled}`);
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
const topLearning = context.learnings[0];
|
|
254
|
+
const distilled = distillLearning(topLearning.entry);
|
|
255
|
+
parts.push(`💡 ${distilled.distilled}`);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
if (parts.length === 0) {
|
|
259
|
+
return '';
|
|
260
|
+
}
|
|
261
|
+
let result = parts.join('\n');
|
|
262
|
+
// Truncate if needed
|
|
263
|
+
if (result.length > maxChars) {
|
|
264
|
+
result = result.substring(0, maxChars - 3) + '...';
|
|
265
|
+
}
|
|
266
|
+
return result;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Format JIT context as a reminder block
|
|
270
|
+
*/
|
|
271
|
+
export function formatAsReminder(jitResult) {
|
|
272
|
+
if (!jitResult.injectionText) {
|
|
273
|
+
return '';
|
|
274
|
+
}
|
|
275
|
+
return `<memory-context>
|
|
276
|
+
${jitResult.injectionText}
|
|
277
|
+
</memory-context>`;
|
|
278
|
+
}
|
|
279
|
+
// =============================================================================
|
|
280
|
+
// Relevance Scoring
|
|
281
|
+
// =============================================================================
|
|
282
|
+
/**
|
|
283
|
+
* Calculate overall relevance score for a prompt-context pair
|
|
284
|
+
*/
|
|
285
|
+
export function calculateRelevanceScore(prompt, jitResult) {
|
|
286
|
+
if (jitResult.signals.length === 0) {
|
|
287
|
+
return 0;
|
|
288
|
+
}
|
|
289
|
+
// Base score from signal confidence
|
|
290
|
+
let score = 0;
|
|
291
|
+
for (const signal of jitResult.signals) {
|
|
292
|
+
switch (signal.confidence) {
|
|
293
|
+
case 'high':
|
|
294
|
+
score += 0.4;
|
|
295
|
+
break;
|
|
296
|
+
case 'medium':
|
|
297
|
+
score += 0.25;
|
|
298
|
+
break;
|
|
299
|
+
case 'low':
|
|
300
|
+
score += 0.1;
|
|
301
|
+
break;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
// Boost if we found relevant memories
|
|
305
|
+
const totalLoaded = jitResult.loadedContext.decisions.length +
|
|
306
|
+
jitResult.loadedContext.patterns.length +
|
|
307
|
+
jitResult.loadedContext.learnings.length;
|
|
308
|
+
if (totalLoaded > 0) {
|
|
309
|
+
score += 0.2;
|
|
310
|
+
}
|
|
311
|
+
// Cap at 1.0
|
|
312
|
+
return Math.min(1.0, score);
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Decide whether to inject context based on relevance
|
|
316
|
+
*/
|
|
317
|
+
export function shouldInjectContext(jitResult, threshold = 0.3) {
|
|
318
|
+
// No context loaded
|
|
319
|
+
if (!jitResult.injectionText) {
|
|
320
|
+
return false;
|
|
321
|
+
}
|
|
322
|
+
// Check if any high-confidence signals
|
|
323
|
+
const hasHighConfidence = jitResult.signals.some(s => s.confidence === 'high');
|
|
324
|
+
if (hasHighConfidence) {
|
|
325
|
+
return true;
|
|
326
|
+
}
|
|
327
|
+
// Check total loaded context
|
|
328
|
+
const totalLoaded = jitResult.loadedContext.decisions.length +
|
|
329
|
+
jitResult.loadedContext.patterns.length +
|
|
330
|
+
jitResult.loadedContext.learnings.length;
|
|
331
|
+
return totalLoaded > 0;
|
|
332
|
+
}
|
|
333
|
+
//# sourceMappingURL=demand-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demand-detector.js","sourceRoot":"","sources":["../../../src/core/context/demand-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Context Management Module - v6.
|
|
2
|
+
* Context Management Module - v6.6.0
|
|
3
3
|
*
|
|
4
4
|
* Tools for managing context window efficiently.
|
|
5
|
-
* Includes tool result protection
|
|
5
|
+
* Includes tool result protection, clearing recommendations,
|
|
6
|
+
* and just-in-time context retrieval (v6.6.0).
|
|
6
7
|
*/
|
|
7
8
|
export { type ProtectionLevel, type ToolCategory, type ProtectionResult, TOOL_PROTECTION_RULES, DEFAULT_RECENCY_THRESHOLD, shouldProtectToolResult, getProtectionSummary, getAlwaysProtectedTools, formatProtectionRules, estimateClearingSavings, } from './tool-protection.js';
|
|
9
|
+
export { type ContextDemandType, type DemandSignal, type JITLoadResult, detectDemandSignals, extractKeywords, loadContextJIT, formatAsReminder, calculateRelevanceScore, shouldInjectContext, } from './demand-detector.js';
|
|
8
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/context/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/context/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EAGrB,qBAAqB,EACrB,yBAAyB,EAGzB,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,aAAa,EAGlB,mBAAmB,EACnB,eAAe,EAGf,cAAc,EAGd,gBAAgB,EAGhB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC"}
|
|
@@ -1,12 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Context Management Module - v6.
|
|
2
|
+
* Context Management Module - v6.6.0
|
|
3
3
|
*
|
|
4
4
|
* Tools for managing context window efficiently.
|
|
5
|
-
* Includes tool result protection
|
|
5
|
+
* Includes tool result protection, clearing recommendations,
|
|
6
|
+
* and just-in-time context retrieval (v6.6.0).
|
|
6
7
|
*/
|
|
7
8
|
export {
|
|
8
9
|
// Constants
|
|
9
10
|
TOOL_PROTECTION_RULES, DEFAULT_RECENCY_THRESHOLD,
|
|
10
11
|
// Functions
|
|
11
12
|
shouldProtectToolResult, getProtectionSummary, getAlwaysProtectedTools, formatProtectionRules, estimateClearingSavings, } from './tool-protection.js';
|
|
13
|
+
// Just-in-time context retrieval (v6.6.0)
|
|
14
|
+
export {
|
|
15
|
+
// Detection
|
|
16
|
+
detectDemandSignals, extractKeywords,
|
|
17
|
+
// Loading
|
|
18
|
+
loadContextJIT,
|
|
19
|
+
// Formatting
|
|
20
|
+
formatAsReminder,
|
|
21
|
+
// Scoring
|
|
22
|
+
calculateRelevanceScore, shouldInjectContext, } from './demand-detector.js';
|
|
12
23
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/context/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/context/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO;AAML,YAAY;AACZ,qBAAqB,EACrB,yBAAyB;AAEzB,YAAY;AACZ,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAE9B,0CAA0C;AAC1C,OAAO;AAML,YAAY;AACZ,mBAAmB,EACnB,eAAe;AAEf,UAAU;AACV,cAAc;AAEd,aAAa;AACb,gBAAgB;AAEhB,UAAU;AACV,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC"}
|
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* CLAUDE.md generator -
|
|
2
|
+
* CLAUDE.md generator - v6.6.0
|
|
3
3
|
*
|
|
4
4
|
* Generates machine-first CLAUDE.md from analysis results
|
|
5
5
|
* Supports both full and minimal (progressive loading) modes
|
|
6
|
+
*
|
|
7
|
+
* v6.6.0: KV-Cache optimization
|
|
8
|
+
* - Stable prefix structure for cache efficiency (100:1 ratio benefit)
|
|
9
|
+
* - Static content (rules, patterns) at TOP
|
|
10
|
+
* - Dynamic state (session, memories) at BOTTOM
|
|
11
|
+
* - Soft tool disabling via instructions (preserves cache)
|
|
6
12
|
*/
|
|
7
13
|
import type { AnalysisResult } from '../analyzer/index.js';
|
|
8
14
|
/**
|
|
@@ -16,6 +22,17 @@ export declare const SECTION_MARKERS: {
|
|
|
16
22
|
readonly patternsStart: "<!-- DINO:SECTION:patterns -->";
|
|
17
23
|
readonly patternsEnd: "<!-- DINO:END:patterns -->";
|
|
18
24
|
};
|
|
25
|
+
/**
|
|
26
|
+
* KV-Cache optimization markers (v6.6.0)
|
|
27
|
+
*
|
|
28
|
+
* Content before STABLE_PREFIX_END remains constant across sessions,
|
|
29
|
+
* enabling KV-cache reuse for significant performance benefits.
|
|
30
|
+
*/
|
|
31
|
+
export declare const CACHE_MARKERS: {
|
|
32
|
+
readonly stablePrefixEnd: "<!-- DINO:STABLE_PREFIX_END -->";
|
|
33
|
+
readonly dynamicStateStart: "<!-- DINO:DYNAMIC_STATE_START -->";
|
|
34
|
+
readonly dynamicStateEnd: "<!-- DINO:DYNAMIC_STATE_END -->";
|
|
35
|
+
};
|
|
19
36
|
/**
|
|
20
37
|
* Generate machine-first CLAUDE.md content
|
|
21
38
|
*/
|
|
@@ -45,4 +62,70 @@ export declare function generatePatternsJson(analysis: AnalysisResult): object;
|
|
|
45
62
|
* Generate commands.json content from analysis
|
|
46
63
|
*/
|
|
47
64
|
export declare function generateCommandsJson(analysis: AnalysisResult): object;
|
|
65
|
+
/**
|
|
66
|
+
* Soft tool disable configuration
|
|
67
|
+
*
|
|
68
|
+
* Instead of removing tools from the API call (which breaks KV-cache),
|
|
69
|
+
* we add instructions to avoid using certain tools in certain contexts.
|
|
70
|
+
* This preserves the stable prefix while still guiding behavior.
|
|
71
|
+
*/
|
|
72
|
+
export interface SoftToolDisable {
|
|
73
|
+
tool: string;
|
|
74
|
+
reason: string;
|
|
75
|
+
context: string;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Generate soft tool disable instructions
|
|
79
|
+
* These go in the dynamic section and guide behavior without breaking cache
|
|
80
|
+
*/
|
|
81
|
+
export declare function generateSoftToolDisables(disables: SoftToolDisable[]): string;
|
|
82
|
+
/**
|
|
83
|
+
* Cache-optimized CLAUDE.md structure
|
|
84
|
+
*
|
|
85
|
+
* Layout:
|
|
86
|
+
* 1. STABLE PREFIX (cached) - Project info, architecture, commands, patterns
|
|
87
|
+
* 2. STABLE_PREFIX_END marker
|
|
88
|
+
* 3. DYNAMIC STATE (not cached) - Session state, memories, tool guidance
|
|
89
|
+
*/
|
|
90
|
+
export interface CacheOptimizedContent {
|
|
91
|
+
stablePrefix: string;
|
|
92
|
+
dynamicState: string;
|
|
93
|
+
full: string;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Generate cache-optimized CLAUDE.md content
|
|
97
|
+
*
|
|
98
|
+
* @param analysis - Project analysis result
|
|
99
|
+
* @param dynamicContent - Optional dynamic content (session state, memories)
|
|
100
|
+
* @param softDisables - Optional soft tool disables
|
|
101
|
+
*/
|
|
102
|
+
export declare function generateCacheOptimizedClaudeMd(analysis: AnalysisResult, dynamicContent?: string, softDisables?: SoftToolDisable[]): CacheOptimizedContent;
|
|
103
|
+
/**
|
|
104
|
+
* Check if content has cache optimization markers
|
|
105
|
+
*/
|
|
106
|
+
export declare function hasCacheMarkers(content: string): boolean;
|
|
107
|
+
/**
|
|
108
|
+
* Extract stable prefix from cache-optimized content
|
|
109
|
+
*/
|
|
110
|
+
export declare function extractStablePrefix(content: string): string | null;
|
|
111
|
+
/**
|
|
112
|
+
* Extract dynamic state from cache-optimized content
|
|
113
|
+
*/
|
|
114
|
+
export declare function extractDynamicState(content: string): string | null;
|
|
115
|
+
/**
|
|
116
|
+
* Update only the dynamic state section
|
|
117
|
+
* Preserves stable prefix for cache efficiency
|
|
118
|
+
*/
|
|
119
|
+
export declare function updateDynamicState(content: string, newDynamicContent: string, softDisables?: SoftToolDisable[]): string;
|
|
120
|
+
/**
|
|
121
|
+
* Estimate cache efficiency
|
|
122
|
+
* Returns ratio of stable content to total content
|
|
123
|
+
*/
|
|
124
|
+
export declare function estimateCacheEfficiency(content: string): {
|
|
125
|
+
stableChars: number;
|
|
126
|
+
dynamicChars: number;
|
|
127
|
+
totalChars: number;
|
|
128
|
+
cacheRatio: number;
|
|
129
|
+
estimatedTokensSaved: number;
|
|
130
|
+
};
|
|
48
131
|
//# sourceMappingURL=claude-md.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-md.d.ts","sourceRoot":"","sources":["../../../src/core/generator/claude-md.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"claude-md.d.ts","sourceRoot":"","sources":["../../../src/core/generator/claude-md.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;CAOlB,CAAC;AAEX;;;;;GAKG;AACH,eAAO,MAAM,aAAa;;;;CAIhB,CAAC;AAEX;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAqCjE;AAqGD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,cAAc,GAAG,UAAU,GAAG,UAAU,EACrD,UAAU,EAAE,MAAM,GACjB,MAAM,CA0BR;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAsCxE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAUrE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAgCrE;AAMD;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,MAAM,CAgB5E;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,cAAc,EACxB,cAAc,CAAC,EAAE,MAAM,EACvB,YAAY,CAAC,EAAE,eAAe,EAAE,GAC/B,qBAAqB,CAqEvB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIlE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUlE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,iBAAiB,EAAE,MAAM,EACzB,YAAY,CAAC,EAAE,eAAe,EAAE,GAC/B,MAAM,CAwBR;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CAoBA"}
|