dino-spec 13.6.1 → 14.0.1
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 +82 -5
- package/dist/commands/hud.d.ts +1 -8
- package/dist/commands/hud.d.ts.map +1 -1
- package/dist/commands/hud.js +4 -18
- package/dist/commands/hud.js.map +1 -1
- package/dist/core/config/feature-flags.d.ts +25 -1
- package/dist/core/config/feature-flags.d.ts.map +1 -1
- package/dist/core/config/feature-flags.js +7 -1
- package/dist/core/config/feature-flags.js.map +1 -1
- package/dist/core/context/__tests__/budget-thresholds.test.d.ts +5 -0
- package/dist/core/context/__tests__/budget-thresholds.test.d.ts.map +1 -0
- package/dist/core/context/__tests__/budget-thresholds.test.js +223 -0
- package/dist/core/context/__tests__/budget-thresholds.test.js.map +1 -0
- package/dist/core/context/__tests__/compaction-engine.test.d.ts +5 -0
- package/dist/core/context/__tests__/compaction-engine.test.d.ts.map +1 -0
- package/dist/core/context/__tests__/compaction-engine.test.js +474 -0
- package/dist/core/context/__tests__/compaction-engine.test.js.map +1 -0
- package/dist/core/context/__tests__/output-persistence.test.d.ts +5 -0
- package/dist/core/context/__tests__/output-persistence.test.d.ts.map +1 -0
- package/dist/core/context/__tests__/output-persistence.test.js +246 -0
- package/dist/core/context/__tests__/output-persistence.test.js.map +1 -0
- package/dist/core/context/auto-injection-engine.d.ts +10 -1
- package/dist/core/context/auto-injection-engine.d.ts.map +1 -1
- package/dist/core/context/auto-injection-engine.js +45 -2
- package/dist/core/context/auto-injection-engine.js.map +1 -1
- package/dist/core/context/budget-thresholds.d.ts +167 -0
- package/dist/core/context/budget-thresholds.d.ts.map +1 -0
- package/dist/core/context/budget-thresholds.js +234 -0
- package/dist/core/context/budget-thresholds.js.map +1 -0
- package/dist/core/context/compaction-engine.d.ts +193 -0
- package/dist/core/context/compaction-engine.d.ts.map +1 -0
- package/dist/core/context/compaction-engine.js +376 -0
- package/dist/core/context/compaction-engine.js.map +1 -0
- package/dist/core/context/context-health.d.ts +27 -2
- package/dist/core/context/context-health.d.ts.map +1 -1
- package/dist/core/context/context-health.js +98 -12
- package/dist/core/context/context-health.js.map +1 -1
- package/dist/core/context/focus-resource-loader.d.ts +143 -0
- package/dist/core/context/focus-resource-loader.d.ts.map +1 -0
- package/dist/core/context/focus-resource-loader.js +305 -0
- package/dist/core/context/focus-resource-loader.js.map +1 -0
- package/dist/core/context/index.d.ts +10 -5
- package/dist/core/context/index.d.ts.map +1 -1
- package/dist/core/context/index.js +40 -5
- package/dist/core/context/index.js.map +1 -1
- package/dist/core/context/lazy-loader.d.ts +44 -1
- package/dist/core/context/lazy-loader.d.ts.map +1 -1
- package/dist/core/context/lazy-loader.js +59 -1
- package/dist/core/context/lazy-loader.js.map +1 -1
- package/dist/core/context/output-persistence.d.ts +142 -0
- package/dist/core/context/output-persistence.d.ts.map +1 -0
- package/dist/core/context/output-persistence.js +242 -0
- package/dist/core/context/output-persistence.js.map +1 -0
- package/dist/core/context-repl/__tests__/repl-environment.test.d.ts +7 -0
- package/dist/core/context-repl/__tests__/repl-environment.test.d.ts.map +1 -0
- package/dist/core/context-repl/__tests__/repl-environment.test.js +335 -0
- package/dist/core/context-repl/__tests__/repl-environment.test.js.map +1 -0
- package/dist/core/context-repl/context-window-monitor.d.ts +181 -0
- package/dist/core/context-repl/context-window-monitor.d.ts.map +1 -0
- package/dist/core/context-repl/context-window-monitor.js +309 -0
- package/dist/core/context-repl/context-window-monitor.js.map +1 -0
- package/dist/core/context-repl/index.d.ts +8 -3
- package/dist/core/context-repl/index.d.ts.map +1 -1
- package/dist/core/context-repl/index.js +11 -3
- package/dist/core/context-repl/index.js.map +1 -1
- package/dist/core/context-repl/repl-environment.d.ts +66 -0
- package/dist/core/context-repl/repl-environment.d.ts.map +1 -0
- package/dist/core/context-repl/repl-environment.js +795 -0
- package/dist/core/context-repl/repl-environment.js.map +1 -0
- package/dist/core/context-repl/types.d.ts +277 -1
- package/dist/core/context-repl/types.d.ts.map +1 -1
- package/dist/core/context-repl/types.js +52 -1
- package/dist/core/context-repl/types.js.map +1 -1
- package/dist/core/environment/__tests__/pre-verify.test.d.ts +5 -0
- package/dist/core/environment/__tests__/pre-verify.test.d.ts.map +1 -0
- package/dist/core/environment/__tests__/pre-verify.test.js +343 -0
- package/dist/core/environment/__tests__/pre-verify.test.js.map +1 -0
- package/dist/core/environment/index.d.ts +8 -0
- package/dist/core/environment/index.d.ts.map +1 -0
- package/dist/core/environment/index.js +7 -0
- package/dist/core/environment/index.js.map +1 -0
- package/dist/core/environment/pre-verify.d.ts +63 -0
- package/dist/core/environment/pre-verify.d.ts.map +1 -0
- package/dist/core/environment/pre-verify.js +221 -0
- package/dist/core/environment/pre-verify.js.map +1 -0
- package/dist/core/environment/types.d.ts +37 -0
- package/dist/core/environment/types.d.ts.map +1 -0
- package/dist/core/environment/types.js +5 -0
- package/dist/core/environment/types.js.map +1 -0
- package/dist/core/generator/claude-md.js +1 -1
- package/dist/core/intelligence/context-budget.d.ts +10 -5
- package/dist/core/intelligence/context-budget.d.ts.map +1 -1
- package/dist/core/intelligence/context-budget.js +12 -5
- package/dist/core/intelligence/context-budget.js.map +1 -1
- package/dist/core/provider/storage.d.ts.map +1 -1
- package/dist/core/provider/storage.js +1 -2
- package/dist/core/provider/storage.js.map +1 -1
- package/dist/hooks/post-edit.js +73 -0
- package/dist/hooks/post-edit.js.map +1 -1
- package/dist/hooks/session-start.js +115 -0
- package/dist/hooks/session-start.js.map +1 -1
- package/dist/hooks/types.js +1 -1
- package/dist/hooks/user-prompt-submit.js +100 -0
- package/dist/hooks/user-prompt-submit.js.map +1 -1
- package/dist/hud/config.d.ts +3 -28
- package/dist/hud/config.d.ts.map +1 -1
- package/dist/hud/config.js +8 -60
- package/dist/hud/config.js.map +1 -1
- package/dist/hud/index.d.ts.map +1 -1
- package/dist/hud/index.js +0 -1
- package/dist/hud/index.js.map +1 -1
- package/dist/hud/render/budget-bar.d.ts +0 -2
- package/dist/hud/render/budget-bar.d.ts.map +1 -1
- package/dist/hud/render/budget-bar.js +5 -8
- package/dist/hud/render/budget-bar.js.map +1 -1
- package/dist/hud/stdin.d.ts +0 -3
- package/dist/hud/stdin.d.ts.map +1 -1
- package/dist/hud/stdin.js +2 -29
- package/dist/hud/stdin.js.map +1 -1
- package/dist/hud/types.d.ts +0 -2
- package/dist/hud/types.d.ts.map +1 -1
- package/dist/mcp/__tests__/dynamic-updates.test.d.ts +5 -0
- package/dist/mcp/__tests__/dynamic-updates.test.d.ts.map +1 -0
- package/dist/mcp/__tests__/dynamic-updates.test.js +314 -0
- package/dist/mcp/__tests__/dynamic-updates.test.js.map +1 -0
- package/dist/mcp/dynamic-updates.d.ts +167 -0
- package/dist/mcp/dynamic-updates.d.ts.map +1 -0
- package/dist/mcp/dynamic-updates.js +313 -0
- package/dist/mcp/dynamic-updates.js.map +1 -0
- package/dist/mcp/focus-filter.d.ts +74 -0
- package/dist/mcp/focus-filter.d.ts.map +1 -0
- package/dist/mcp/focus-filter.js +229 -0
- package/dist/mcp/focus-filter.js.map +1 -0
- package/dist/mcp/index.d.ts +4 -2
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +5 -2
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/registry.d.ts +4 -4
- package/dist/mcp/registry.d.ts.map +1 -1
- package/dist/mcp/registry.js +16 -16
- package/dist/mcp/registry.js.map +1 -1
- package/dist/mcp/server.d.ts +2 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +12 -3
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tool-tiers.d.ts.map +1 -1
- package/dist/mcp/tool-tiers.js +5 -0
- package/dist/mcp/tool-tiers.js.map +1 -1
- package/dist/mcp/tools/__tests__/environment.test.d.ts +5 -0
- package/dist/mcp/tools/__tests__/environment.test.d.ts.map +1 -0
- package/dist/mcp/tools/__tests__/environment.test.js +219 -0
- package/dist/mcp/tools/__tests__/environment.test.js.map +1 -0
- package/dist/mcp/tools/auto-inject.d.ts +36 -0
- package/dist/mcp/tools/auto-inject.d.ts.map +1 -0
- package/dist/mcp/tools/auto-inject.js +143 -0
- package/dist/mcp/tools/auto-inject.js.map +1 -0
- package/dist/mcp/tools/auto-unload.d.ts +29 -0
- package/dist/mcp/tools/auto-unload.d.ts.map +1 -0
- package/dist/mcp/tools/auto-unload.js +151 -0
- package/dist/mcp/tools/auto-unload.js.map +1 -0
- package/dist/mcp/tools/context-repl.d.ts +48 -0
- package/dist/mcp/tools/context-repl.d.ts.map +1 -0
- package/dist/mcp/tools/context-repl.js +290 -0
- package/dist/mcp/tools/context-repl.js.map +1 -0
- package/dist/mcp/tools/environment.d.ts +27 -0
- package/dist/mcp/tools/environment.d.ts.map +1 -0
- package/dist/mcp/tools/environment.js +97 -0
- package/dist/mcp/tools/environment.js.map +1 -0
- package/dist/mcp/tools/health.d.ts +29 -0
- package/dist/mcp/tools/health.d.ts.map +1 -0
- package/dist/mcp/tools/health.js +171 -0
- package/dist/mcp/tools/health.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +9 -2
- package/dist/mcp/tools/index.d.ts.map +1 -1
- package/dist/mcp/tools/index.js +37 -2
- package/dist/mcp/tools/index.js.map +1 -1
- package/dist/mcp/tools/output-persistence.d.ts +44 -0
- package/dist/mcp/tools/output-persistence.d.ts.map +1 -0
- package/dist/mcp/tools/output-persistence.js +208 -0
- package/dist/mcp/tools/output-persistence.js.map +1 -0
- package/dist/mcp-server.d.ts +2 -1
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +36 -7
- package/dist/mcp-server.js.map +1 -1
- package/dist/rules/index.js +2 -2
- package/dist/utils/exec.js +2 -2
- package/dist/utils/exec.js.map +1 -1
- package/dist/utils/gitignore.d.ts.map +1 -1
- package/dist/utils/gitignore.js +5 -0
- package/dist/utils/gitignore.js.map +1 -1
- package/package.json +76 -77
- package/dist/hud/config-tui.d.ts +0 -25
- package/dist/hud/config-tui.d.ts.map +0 -1
- package/dist/hud/config-tui.js +0 -199
- package/dist/hud/config-tui.js.map +0 -1
- package/dist/hud/models.d.ts +0 -58
- package/dist/hud/models.d.ts.map +0 -1
- package/dist/hud/models.js +0 -124
- package/dist/hud/models.js.map +0 -1
- package/dist/hud/token-estimator.d.ts +0 -79
- package/dist/hud/token-estimator.d.ts.map +0 -1
- package/dist/hud/token-estimator.js +0 -126
- package/dist/hud/token-estimator.js.map +0 -1
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Budget Thresholds - v14.0.0
|
|
3
|
+
*
|
|
4
|
+
* Configurable context budget thresholds with safety margins.
|
|
5
|
+
* Optimized for Claude 4.5's extended context window (200K tokens).
|
|
6
|
+
*
|
|
7
|
+
* Key improvements over v13.x:
|
|
8
|
+
* - Raised thresholds from 80/90/95% to 85/95/98%
|
|
9
|
+
* - Safety margin calculation for reliable headroom
|
|
10
|
+
* - Config-driven thresholds via .dino/config.json
|
|
11
|
+
* - Backwards compatible with existing budget tracking
|
|
12
|
+
*
|
|
13
|
+
* Reference: Anthropic context engineering best practices
|
|
14
|
+
*/
|
|
15
|
+
import { loadConfig } from '../config/feature-flags.js';
|
|
16
|
+
/**
|
|
17
|
+
* Default budget thresholds (v14.0.0)
|
|
18
|
+
*
|
|
19
|
+
* These thresholds are optimized for safe context utilization
|
|
20
|
+
* while maximizing available token budget.
|
|
21
|
+
*/
|
|
22
|
+
export const OPTIMIZED_BUDGET_THRESHOLDS = {
|
|
23
|
+
/** Start monitoring - context filling up */
|
|
24
|
+
WARNING: 0.85, // was 0.80
|
|
25
|
+
/** High usage - recommend compaction */
|
|
26
|
+
HIGH: 0.95, // was 0.90
|
|
27
|
+
/** Critical - force compaction recommendation */
|
|
28
|
+
CRITICAL: 0.98, // was 0.95
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Legacy thresholds for backwards compatibility
|
|
32
|
+
*/
|
|
33
|
+
export const LEGACY_BUDGET_THRESHOLDS = {
|
|
34
|
+
WARNING: 0.80,
|
|
35
|
+
HIGH: 0.90,
|
|
36
|
+
CRITICAL: 0.95,
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Default safety margin in tokens
|
|
40
|
+
*
|
|
41
|
+
* Reserved buffer to prevent context overflow.
|
|
42
|
+
* Provides headroom for system messages and unexpected content.
|
|
43
|
+
*/
|
|
44
|
+
export const DEFAULT_SAFETY_MARGIN = 2000;
|
|
45
|
+
/**
|
|
46
|
+
* Default threshold configuration
|
|
47
|
+
*/
|
|
48
|
+
export const DEFAULT_THRESHOLD_CONFIG = {
|
|
49
|
+
warning: OPTIMIZED_BUDGET_THRESHOLDS.WARNING,
|
|
50
|
+
high: OPTIMIZED_BUDGET_THRESHOLDS.HIGH,
|
|
51
|
+
critical: OPTIMIZED_BUDGET_THRESHOLDS.CRITICAL,
|
|
52
|
+
safetyMargin: DEFAULT_SAFETY_MARGIN,
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Get threshold level from usage percentage
|
|
56
|
+
*
|
|
57
|
+
* @param usage - Current token usage
|
|
58
|
+
* @param limit - Context limit in tokens
|
|
59
|
+
* @param config - Threshold configuration (optional)
|
|
60
|
+
* @returns ThresholdLevel
|
|
61
|
+
*/
|
|
62
|
+
export function getThresholdLevel(usage, limit, config = DEFAULT_THRESHOLD_CONFIG) {
|
|
63
|
+
const percentage = usage / limit;
|
|
64
|
+
if (percentage >= config.critical) {
|
|
65
|
+
return 'critical';
|
|
66
|
+
}
|
|
67
|
+
if (percentage >= config.high) {
|
|
68
|
+
return 'high';
|
|
69
|
+
}
|
|
70
|
+
if (percentage >= config.warning) {
|
|
71
|
+
return 'warning';
|
|
72
|
+
}
|
|
73
|
+
return 'safe';
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Calculate threshold result with safety margin
|
|
77
|
+
*
|
|
78
|
+
* @param usage - Current token usage
|
|
79
|
+
* @param limit - Context limit in tokens
|
|
80
|
+
* @param config - Threshold configuration (optional)
|
|
81
|
+
* @returns ThresholdResult with remaining capacity
|
|
82
|
+
*/
|
|
83
|
+
export function calculateThresholdResult(usage, limit, config = DEFAULT_THRESHOLD_CONFIG) {
|
|
84
|
+
const level = getThresholdLevel(usage, limit, config);
|
|
85
|
+
const remaining = Math.max(0, limit - usage);
|
|
86
|
+
const safeRemaining = Math.max(0, remaining - config.safetyMargin);
|
|
87
|
+
const percentage = Math.round((usage / limit) * 100);
|
|
88
|
+
return {
|
|
89
|
+
level,
|
|
90
|
+
remaining,
|
|
91
|
+
safeRemaining,
|
|
92
|
+
percentage,
|
|
93
|
+
shouldCompact: level === 'high' || level === 'critical',
|
|
94
|
+
forceCompact: level === 'critical',
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Load threshold configuration from config.json
|
|
99
|
+
*
|
|
100
|
+
* Configuration can be customized via .dino/config.json:
|
|
101
|
+
* ```json
|
|
102
|
+
* {
|
|
103
|
+
* "custom": {
|
|
104
|
+
* "budgetThresholds": {
|
|
105
|
+
* "warning": 0.85,
|
|
106
|
+
* "high": 0.95,
|
|
107
|
+
* "critical": 0.98,
|
|
108
|
+
* "safetyMargin": 2000
|
|
109
|
+
* }
|
|
110
|
+
* }
|
|
111
|
+
* }
|
|
112
|
+
* ```
|
|
113
|
+
*
|
|
114
|
+
* Falls back to optimized thresholds if not configured.
|
|
115
|
+
*
|
|
116
|
+
* @param projectDir - Project directory
|
|
117
|
+
* @returns ThresholdConfig
|
|
118
|
+
*/
|
|
119
|
+
export async function loadThresholdConfig(projectDir = process.cwd()) {
|
|
120
|
+
try {
|
|
121
|
+
const config = await loadConfig(projectDir);
|
|
122
|
+
const customThresholds = config.custom?.budgetThresholds;
|
|
123
|
+
if (customThresholds) {
|
|
124
|
+
return {
|
|
125
|
+
warning: customThresholds.warning ?? DEFAULT_THRESHOLD_CONFIG.warning,
|
|
126
|
+
high: customThresholds.high ?? DEFAULT_THRESHOLD_CONFIG.high,
|
|
127
|
+
critical: customThresholds.critical ?? DEFAULT_THRESHOLD_CONFIG.critical,
|
|
128
|
+
safetyMargin: customThresholds.safetyMargin ?? DEFAULT_THRESHOLD_CONFIG.safetyMargin,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
// Fall back to defaults on any error
|
|
134
|
+
}
|
|
135
|
+
return DEFAULT_THRESHOLD_CONFIG;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Check if using legacy thresholds
|
|
139
|
+
*
|
|
140
|
+
* Returns true if config has legacy threshold values.
|
|
141
|
+
* Useful for migration warnings.
|
|
142
|
+
*
|
|
143
|
+
* @param config - Threshold configuration
|
|
144
|
+
* @returns boolean
|
|
145
|
+
*/
|
|
146
|
+
export function isLegacyThresholds(config) {
|
|
147
|
+
return (config.warning === LEGACY_BUDGET_THRESHOLDS.WARNING &&
|
|
148
|
+
config.high === LEGACY_BUDGET_THRESHOLDS.HIGH &&
|
|
149
|
+
config.critical === LEGACY_BUDGET_THRESHOLDS.CRITICAL);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Get recommendations for threshold level
|
|
153
|
+
*
|
|
154
|
+
* @param level - Current threshold level
|
|
155
|
+
* @returns Array of recommended actions
|
|
156
|
+
*/
|
|
157
|
+
export function getThresholdRecommendations(level) {
|
|
158
|
+
switch (level) {
|
|
159
|
+
case 'critical':
|
|
160
|
+
return [
|
|
161
|
+
'CRITICAL: Context at 98%+. Immediate compaction required.',
|
|
162
|
+
'Run: dino compact --force',
|
|
163
|
+
'Or start a new conversation with /dino.handoff',
|
|
164
|
+
'Consider using /dino.fossil to archive completed work.',
|
|
165
|
+
];
|
|
166
|
+
case 'high':
|
|
167
|
+
return [
|
|
168
|
+
'HIGH: Context at 95%+. Compaction recommended.',
|
|
169
|
+
'Run: dino compact',
|
|
170
|
+
'Avoid loading large files. Use targeted searches.',
|
|
171
|
+
'Checkpoint progress for potential handoff.',
|
|
172
|
+
];
|
|
173
|
+
case 'warning':
|
|
174
|
+
return [
|
|
175
|
+
'WARNING: Context at 85%+. Monitor usage.',
|
|
176
|
+
'Prefer grep/glob over full file reads.',
|
|
177
|
+
'Consider deferring non-essential file reads.',
|
|
178
|
+
];
|
|
179
|
+
case 'safe':
|
|
180
|
+
default:
|
|
181
|
+
return [];
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Format threshold result for display
|
|
186
|
+
*
|
|
187
|
+
* @param result - Threshold result
|
|
188
|
+
* @returns Formatted string
|
|
189
|
+
*/
|
|
190
|
+
export function formatThresholdResult(result) {
|
|
191
|
+
const indicator = result.level === 'critical' ? '[!!!]'
|
|
192
|
+
: result.level === 'high' ? '[!!]'
|
|
193
|
+
: result.level === 'warning' ? '[!]'
|
|
194
|
+
: '[OK]';
|
|
195
|
+
const lines = [];
|
|
196
|
+
lines.push(`## Budget Status ${indicator}`);
|
|
197
|
+
lines.push('');
|
|
198
|
+
lines.push(`**Level:** ${result.level.toUpperCase()} (${result.percentage}% used)`);
|
|
199
|
+
lines.push(`**Remaining:** ${Math.round(result.remaining / 1000)}K tokens`);
|
|
200
|
+
lines.push(`**Safe Remaining:** ${Math.round(result.safeRemaining / 1000)}K tokens`);
|
|
201
|
+
const recommendations = getThresholdRecommendations(result.level);
|
|
202
|
+
if (recommendations.length > 0) {
|
|
203
|
+
lines.push('');
|
|
204
|
+
lines.push('### Recommendations:');
|
|
205
|
+
recommendations.forEach((rec) => lines.push(`- ${rec}`));
|
|
206
|
+
}
|
|
207
|
+
return lines.join('\n');
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Calculate safe capacity at a threshold
|
|
211
|
+
*
|
|
212
|
+
* Returns the amount of tokens that can be safely used
|
|
213
|
+
* before hitting the specified threshold.
|
|
214
|
+
*
|
|
215
|
+
* @param limit - Context limit in tokens
|
|
216
|
+
* @param threshold - Threshold percentage (0-1)
|
|
217
|
+
* @param safetyMargin - Safety margin in tokens
|
|
218
|
+
* @returns Safe capacity in tokens
|
|
219
|
+
*/
|
|
220
|
+
export function calculateSafeCapacity(limit, threshold, safetyMargin = DEFAULT_SAFETY_MARGIN) {
|
|
221
|
+
return Math.max(0, Math.floor(limit * threshold) - safetyMargin);
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Get effective limit accounting for safety margin
|
|
225
|
+
*
|
|
226
|
+
* @param limit - Context limit in tokens
|
|
227
|
+
* @param config - Threshold configuration
|
|
228
|
+
* @returns Effective limit with safety margin applied
|
|
229
|
+
*/
|
|
230
|
+
export function getEffectiveLimit(limit, config = DEFAULT_THRESHOLD_CONFIG) {
|
|
231
|
+
// Use high threshold as the practical limit
|
|
232
|
+
return calculateSafeCapacity(limit, config.high, config.safetyMargin);
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=budget-thresholds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budget-thresholds.js","sourceRoot":"","sources":["../../../src/core/context/budget-thresholds.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto Compaction Engine - v14.0.0
|
|
3
|
+
*
|
|
4
|
+
* Automatic context compaction that triggers when context usage
|
|
5
|
+
* exceeds configurable thresholds. Extracts decisions, blockers,
|
|
6
|
+
* and progress to structured format for persistence.
|
|
7
|
+
*
|
|
8
|
+
* Features:
|
|
9
|
+
* - Configurable auto-compact threshold (default: 75%)
|
|
10
|
+
* - Integration with ContextBudgetTracker
|
|
11
|
+
* - Structured JSON output preserving decisions/learnings
|
|
12
|
+
* - CLI command support: dino compact --auto
|
|
13
|
+
*
|
|
14
|
+
* Reference: Anthropic context engineering best practices
|
|
15
|
+
*/
|
|
16
|
+
import { type CompactionResult, type SessionSection } from '../intelligence/session-compactor.js';
|
|
17
|
+
/**
|
|
18
|
+
* Decision extracted from session
|
|
19
|
+
*/
|
|
20
|
+
export interface ExtractedDecision {
|
|
21
|
+
/** Decision text */
|
|
22
|
+
text: string;
|
|
23
|
+
/** Topic/area the decision relates to */
|
|
24
|
+
topic: string;
|
|
25
|
+
/** What was chosen */
|
|
26
|
+
choice: string;
|
|
27
|
+
/** Why it was chosen */
|
|
28
|
+
rationale?: string;
|
|
29
|
+
/** When the decision was made */
|
|
30
|
+
timestamp?: string;
|
|
31
|
+
/** Type of decision */
|
|
32
|
+
type: 'decision' | 'choice' | 'approach';
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Blocker extracted from session
|
|
36
|
+
*/
|
|
37
|
+
export interface ExtractedBlocker {
|
|
38
|
+
/** Blocker text */
|
|
39
|
+
text: string;
|
|
40
|
+
/** When the blocker was added */
|
|
41
|
+
addedAt?: string;
|
|
42
|
+
/** Current status */
|
|
43
|
+
status: 'active' | 'resolved';
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Progress entry extracted from session
|
|
47
|
+
*/
|
|
48
|
+
export interface ExtractedProgress {
|
|
49
|
+
/** Progress signal text */
|
|
50
|
+
text: string;
|
|
51
|
+
/** Signal type */
|
|
52
|
+
type: string;
|
|
53
|
+
/** When it occurred */
|
|
54
|
+
timestamp: string;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Structured compaction output
|
|
58
|
+
*/
|
|
59
|
+
export interface StructuredCompaction {
|
|
60
|
+
/** Extracted decisions */
|
|
61
|
+
decisions: ExtractedDecision[];
|
|
62
|
+
/** Extracted blockers */
|
|
63
|
+
blockers: ExtractedBlocker[];
|
|
64
|
+
/** Extracted progress signals */
|
|
65
|
+
progress: ExtractedProgress[];
|
|
66
|
+
/** When compaction occurred */
|
|
67
|
+
timestamp: string;
|
|
68
|
+
/** Session identifier */
|
|
69
|
+
sessionId: string;
|
|
70
|
+
/** Original token count */
|
|
71
|
+
originalTokens: number;
|
|
72
|
+
/** Tokens recovered by compaction */
|
|
73
|
+
tokensRecovered: number;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Compaction engine result
|
|
77
|
+
*/
|
|
78
|
+
export interface CompactionEngineResult {
|
|
79
|
+
/** Whether compaction was triggered */
|
|
80
|
+
triggered: boolean;
|
|
81
|
+
/** Whether compaction was executed */
|
|
82
|
+
executed: boolean;
|
|
83
|
+
/** Reason for trigger or skip */
|
|
84
|
+
reason: string;
|
|
85
|
+
/** Structured compaction data (if executed) */
|
|
86
|
+
structuredOutput?: StructuredCompaction;
|
|
87
|
+
/** Compaction result from session-compactor (if executed) */
|
|
88
|
+
compactionResult?: CompactionResult;
|
|
89
|
+
/** Output file path (if persisted) */
|
|
90
|
+
outputPath?: string;
|
|
91
|
+
/** Current context usage percentage */
|
|
92
|
+
usagePercent: number;
|
|
93
|
+
/** Current token count */
|
|
94
|
+
currentTokens: number;
|
|
95
|
+
/** Effective limit */
|
|
96
|
+
limit: number;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Compaction engine options
|
|
100
|
+
*/
|
|
101
|
+
export interface CompactionEngineOptions {
|
|
102
|
+
/** Threshold for auto-compaction (0-1, default: 0.75) */
|
|
103
|
+
threshold?: number;
|
|
104
|
+
/** Token limit to use */
|
|
105
|
+
limit?: number;
|
|
106
|
+
/** Force compaction regardless of threshold */
|
|
107
|
+
force?: boolean;
|
|
108
|
+
/** Project directory */
|
|
109
|
+
projectDir?: string;
|
|
110
|
+
/** Whether to persist structured output */
|
|
111
|
+
persistOutput?: boolean;
|
|
112
|
+
/** Custom session ID */
|
|
113
|
+
sessionId?: string;
|
|
114
|
+
/** Skip actual compaction (dry run) */
|
|
115
|
+
dryRun?: boolean;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Default auto-compact threshold (75%)
|
|
119
|
+
* Lower than warning threshold to provide headroom
|
|
120
|
+
*/
|
|
121
|
+
export declare const AUTO_COMPACT_THRESHOLD = 0.75;
|
|
122
|
+
/**
|
|
123
|
+
* Directory for compacted outputs
|
|
124
|
+
*/
|
|
125
|
+
export declare const COMPACT_OUTPUT_DIR = ".dino/compacted";
|
|
126
|
+
/**
|
|
127
|
+
* Feature flag for auto-compaction
|
|
128
|
+
*/
|
|
129
|
+
export declare const AUTO_COMPACT_FEATURE_FLAG = "enableAutoCompaction";
|
|
130
|
+
/**
|
|
131
|
+
* Check if auto-compaction should trigger
|
|
132
|
+
*
|
|
133
|
+
* @param currentTokens Current token count
|
|
134
|
+
* @param limit Token limit
|
|
135
|
+
* @param threshold Threshold percentage (0-1)
|
|
136
|
+
* @returns Whether compaction should trigger
|
|
137
|
+
*/
|
|
138
|
+
export declare function shouldAutoCompact(currentTokens: number, limit?: number, threshold?: number): boolean;
|
|
139
|
+
/**
|
|
140
|
+
* Calculate usage percentage
|
|
141
|
+
*/
|
|
142
|
+
export declare function getUsagePercent(currentTokens: number, limit: number): number;
|
|
143
|
+
/**
|
|
144
|
+
* Extract structured decisions from session sections
|
|
145
|
+
*/
|
|
146
|
+
export declare function extractDecisions(sections: SessionSection[]): ExtractedDecision[];
|
|
147
|
+
/**
|
|
148
|
+
* Extract structured blockers from session sections
|
|
149
|
+
*/
|
|
150
|
+
export declare function extractBlockers(sections: SessionSection[]): ExtractedBlocker[];
|
|
151
|
+
/**
|
|
152
|
+
* Extract structured progress from session sections
|
|
153
|
+
*/
|
|
154
|
+
export declare function extractProgress(sections: SessionSection[]): ExtractedProgress[];
|
|
155
|
+
/**
|
|
156
|
+
* Generate session ID from timestamp
|
|
157
|
+
*/
|
|
158
|
+
export declare function generateSessionId(): string;
|
|
159
|
+
/**
|
|
160
|
+
* Create structured compaction output
|
|
161
|
+
*/
|
|
162
|
+
export declare function createStructuredCompaction(sections: SessionSection[], originalTokens: number, tokensRecovered: number, sessionId?: string): StructuredCompaction;
|
|
163
|
+
/**
|
|
164
|
+
* Persist structured compaction to disk
|
|
165
|
+
*/
|
|
166
|
+
export declare function persistStructuredCompaction(compaction: StructuredCompaction, projectDir?: string): Promise<string>;
|
|
167
|
+
/**
|
|
168
|
+
* List persisted compactions
|
|
169
|
+
*/
|
|
170
|
+
export declare function listCompactions(projectDir?: string): Promise<StructuredCompaction[]>;
|
|
171
|
+
/**
|
|
172
|
+
* Run auto-compaction engine
|
|
173
|
+
*
|
|
174
|
+
* This is the main entry point for the compaction engine.
|
|
175
|
+
* It checks if compaction should trigger based on current context usage
|
|
176
|
+
* and executes compaction with structured output if needed.
|
|
177
|
+
*/
|
|
178
|
+
export declare function runAutoCompaction(options?: CompactionEngineOptions): Promise<CompactionEngineResult>;
|
|
179
|
+
/**
|
|
180
|
+
* Format compaction engine result for display
|
|
181
|
+
*/
|
|
182
|
+
export declare function formatCompactionEngineResult(result: CompactionEngineResult): string;
|
|
183
|
+
/**
|
|
184
|
+
* Get compaction engine statistics
|
|
185
|
+
*/
|
|
186
|
+
export declare function getCompactionEngineStats(projectDir?: string): Promise<{
|
|
187
|
+
compactionCount: number;
|
|
188
|
+
totalTokensRecovered: number;
|
|
189
|
+
totalDecisionsExtracted: number;
|
|
190
|
+
totalBlockersExtracted: number;
|
|
191
|
+
latestCompaction: string | null;
|
|
192
|
+
}>;
|
|
193
|
+
//# sourceMappingURL=compaction-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction-engine.d.ts","sourceRoot":"","sources":["../../../src/core/context/compaction-engine.ts"],"names":[],"mappings":"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"}
|