dino-spec 13.5.0 → 13.6.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 +2 -47
- package/bin/dino-hud.js +0 -0
- package/bin/dino.js +0 -0
- package/dist/commands/hud.d.ts +8 -1
- package/dist/commands/hud.d.ts.map +1 -1
- package/dist/commands/hud.js +18 -4
- package/dist/commands/hud.js.map +1 -1
- package/dist/core/config/feature-flags.d.ts +0 -15
- package/dist/core/config/feature-flags.d.ts.map +1 -1
- package/dist/core/config/feature-flags.js +0 -3
- package/dist/core/config/feature-flags.js.map +1 -1
- package/dist/core/context/context-health.d.ts +2 -27
- package/dist/core/context/context-health.d.ts.map +1 -1
- package/dist/core/context/context-health.js +12 -98
- package/dist/core/context/context-health.js.map +1 -1
- package/dist/core/context/index.d.ts +2 -3
- package/dist/core/context/index.d.ts.map +1 -1
- package/dist/core/context/index.js +2 -18
- package/dist/core/context/index.js.map +1 -1
- package/dist/core/context/lazy-loader.d.ts +1 -44
- package/dist/core/context/lazy-loader.d.ts.map +1 -1
- package/dist/core/context/lazy-loader.js +1 -59
- package/dist/core/context/lazy-loader.js.map +1 -1
- package/dist/core/generator/claude-md.js +1 -1
- package/dist/core/provider/storage.d.ts.map +1 -1
- package/dist/core/provider/storage.js +2 -1
- package/dist/core/provider/storage.js.map +1 -1
- package/dist/hooks/post-edit.js +0 -73
- package/dist/hooks/post-edit.js.map +1 -1
- package/dist/hooks/session-start.js +0 -115
- package/dist/hooks/session-start.js.map +1 -1
- package/dist/hooks/types.js +1 -1
- package/dist/hooks/user-prompt-submit.js +0 -100
- package/dist/hooks/user-prompt-submit.js.map +1 -1
- package/dist/hud/config-tui.d.ts +25 -0
- package/dist/hud/config-tui.d.ts.map +1 -0
- package/dist/hud/config-tui.js +199 -0
- package/dist/hud/config-tui.js.map +1 -0
- package/dist/hud/config.d.ts +28 -3
- package/dist/hud/config.d.ts.map +1 -1
- package/dist/hud/config.js +60 -8
- package/dist/hud/config.js.map +1 -1
- package/dist/hud/index.d.ts.map +1 -1
- package/dist/hud/index.js +1 -0
- package/dist/hud/index.js.map +1 -1
- package/dist/hud/models.d.ts +58 -0
- package/dist/hud/models.d.ts.map +1 -0
- package/dist/hud/models.js +124 -0
- package/dist/hud/models.js.map +1 -0
- package/dist/hud/render/budget-bar.d.ts +2 -0
- package/dist/hud/render/budget-bar.d.ts.map +1 -1
- package/dist/hud/render/budget-bar.js +8 -5
- package/dist/hud/render/budget-bar.js.map +1 -1
- package/dist/hud/stdin.d.ts +3 -0
- package/dist/hud/stdin.d.ts.map +1 -1
- package/dist/hud/stdin.js +29 -2
- package/dist/hud/stdin.js.map +1 -1
- package/dist/hud/token-estimator.d.ts +79 -0
- package/dist/hud/token-estimator.d.ts.map +1 -0
- package/dist/hud/token-estimator.js +126 -0
- package/dist/hud/token-estimator.js.map +1 -0
- package/dist/hud/types.d.ts +2 -0
- package/dist/hud/types.d.ts.map +1 -1
- package/dist/mcp/server.d.ts +1 -2
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +3 -12
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/index.d.ts +2 -6
- package/dist/mcp/tools/index.d.ts.map +1 -1
- package/dist/mcp/tools/index.js +2 -17
- package/dist/mcp/tools/index.js.map +1 -1
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +5 -9
- package/dist/mcp-server.js.map +1 -1
- package/dist/rules/index.js +2 -2
- package/dist/utils/gitignore.d.ts.map +1 -1
- package/dist/utils/gitignore.js +0 -5
- package/dist/utils/gitignore.js.map +1 -1
- package/package.json +2 -1
- package/dist/core/context/focus-resource-loader.d.ts +0 -143
- package/dist/core/context/focus-resource-loader.d.ts.map +0 -1
- package/dist/core/context/focus-resource-loader.js +0 -305
- package/dist/core/context/focus-resource-loader.js.map +0 -1
- package/dist/mcp/focus-filter.d.ts +0 -74
- package/dist/mcp/focus-filter.d.ts.map +0 -1
- package/dist/mcp/focus-filter.js +0 -229
- package/dist/mcp/focus-filter.js.map +0 -1
- package/dist/mcp/tools/auto-inject.d.ts +0 -36
- package/dist/mcp/tools/auto-inject.d.ts.map +0 -1
- package/dist/mcp/tools/auto-inject.js +0 -143
- package/dist/mcp/tools/auto-inject.js.map +0 -1
- package/dist/mcp/tools/auto-unload.d.ts +0 -29
- package/dist/mcp/tools/auto-unload.d.ts.map +0 -1
- package/dist/mcp/tools/auto-unload.js +0 -151
- package/dist/mcp/tools/auto-unload.js.map +0 -1
- package/dist/mcp/tools/health.d.ts +0 -29
- package/dist/mcp/tools/health.d.ts.map +0 -1
- package/dist/mcp/tools/health.js +0 -171
- package/dist/mcp/tools/health.js.map +0 -1
|
@@ -154,71 +154,6 @@ if (Test-Path $budgetPath) {
|
|
|
154
154
|
} catch {}
|
|
155
155
|
}
|
|
156
156
|
|
|
157
|
-
# v13.5.0: Context health check on session start
|
|
158
|
-
$healthEnabled = $true
|
|
159
|
-
if (Test-Path $configPath) {
|
|
160
|
-
try {
|
|
161
|
-
$config = Get-Content $configPath -Raw | ConvertFrom-Json
|
|
162
|
-
if ($config.features.contextHealthMonitor -eq $false) {
|
|
163
|
-
$healthEnabled = $false
|
|
164
|
-
}
|
|
165
|
-
} catch {}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
if ($healthEnabled) {
|
|
169
|
-
try {
|
|
170
|
-
# Get budget percentage for health check
|
|
171
|
-
$healthBudget = 50
|
|
172
|
-
if (Test-Path $budgetPath) {
|
|
173
|
-
try {
|
|
174
|
-
$budgetData = Get-Content $budgetPath -Raw | ConvertFrom-Json
|
|
175
|
-
$healthBudget = [math]::Round(($budgetData.estimated / $budgetData.limit) * 100)
|
|
176
|
-
} catch {}
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
$healthResult = & npx dino mcp call dino_health_check --budgetPercentage $healthBudget 2>$null
|
|
180
|
-
if ($healthResult -and $healthResult -match "Status:.*\\[(WARNING|CRITICAL)\\]") {
|
|
181
|
-
# Extract rot index
|
|
182
|
-
$rotMatch = [regex]::Match($healthResult, "Rot Index:\\s*(\\d+)%")
|
|
183
|
-
if ($rotMatch.Success) {
|
|
184
|
-
$rotIndex = $rotMatch.Groups[1].Value
|
|
185
|
-
Write-Host "[dino] Context health: $($matches[1].ToLower()) (\$rotIndex% rot)"
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
} catch {}
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
# v13.5.0: Auto-unload at budget thresholds (70%, 80%, 90%)
|
|
192
|
-
$unloadEnabled = $true
|
|
193
|
-
if (Test-Path $configPath) {
|
|
194
|
-
try {
|
|
195
|
-
$config = Get-Content $configPath -Raw | ConvertFrom-Json
|
|
196
|
-
if ($config.features.autoUnload -eq $false) {
|
|
197
|
-
$unloadEnabled = $false
|
|
198
|
-
}
|
|
199
|
-
} catch {}
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
if ($unloadEnabled -and $budgetPercent -ge 70) {
|
|
203
|
-
try {
|
|
204
|
-
# Determine aggressiveness based on budget level
|
|
205
|
-
$aggressiveness = "light"
|
|
206
|
-
if ($budgetPercent -ge 90) {
|
|
207
|
-
$aggressiveness = "aggressive"
|
|
208
|
-
} elseif ($budgetPercent -ge 80) {
|
|
209
|
-
$aggressiveness = "medium"
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
$unloadResult = & npx dino mcp call dino_auto_unload --budgetPercentage $budgetPercent --aggressiveness $aggressiveness 2>$null
|
|
213
|
-
if ($unloadResult -and $unloadResult -match "Tokens freed:\\s*~(\\d+)") {
|
|
214
|
-
$tokensFreed = $matches[1]
|
|
215
|
-
if ([int]$tokensFreed -gt 0) {
|
|
216
|
-
Write-Host "[dino] Auto-unload: ~\$tokensFreed tokens freed (budget was \$budgetPercent%)"
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
} catch {}
|
|
220
|
-
}
|
|
221
|
-
|
|
222
157
|
# v13.2.1: Clean up completed Ralph loops on session start (more reliable than SessionEnd)
|
|
223
158
|
$ralphProgressPath = Join-Path $dinoDir "ralph-progress.md"
|
|
224
159
|
if (Test-Path $ralphProgressPath) {
|
|
@@ -414,56 +349,6 @@ if [ -f "\$BUDGET_PATH" ]; then
|
|
|
414
349
|
fi
|
|
415
350
|
fi
|
|
416
351
|
|
|
417
|
-
# v13.5.0: Context health check on session start
|
|
418
|
-
HEALTH_ENABLED="true"
|
|
419
|
-
CONFIG_PATH="\$DINO_DIR/config.json"
|
|
420
|
-
if [ -f "\$CONFIG_PATH" ]; then
|
|
421
|
-
if grep -q '"contextHealthMonitor"[[:space:]]*:[[:space:]]*false' "\$CONFIG_PATH" 2>/dev/null; then
|
|
422
|
-
HEALTH_ENABLED="false"
|
|
423
|
-
fi
|
|
424
|
-
fi
|
|
425
|
-
|
|
426
|
-
if [ "\$HEALTH_ENABLED" = "true" ]; then
|
|
427
|
-
# Get budget percentage for health check
|
|
428
|
-
HEALTH_BUDGET=50
|
|
429
|
-
if [ -f "\$BUDGET_PATH" ]; then
|
|
430
|
-
HEALTH_BUDGET=\$BUDGET_PERCENT
|
|
431
|
-
fi
|
|
432
|
-
|
|
433
|
-
HEALTH_RESULT=\$(npx dino mcp call dino_health_check --budgetPercentage "\$HEALTH_BUDGET" 2>/dev/null)
|
|
434
|
-
if echo "\$HEALTH_RESULT" | grep -qE "Status:.*\\[(WARNING|CRITICAL)\\]"; then
|
|
435
|
-
HEALTH_STATUS=\$(echo "\$HEALTH_RESULT" | grep -oE "\\[(WARNING|CRITICAL)\\]" | tr -d '[]' | tr '[:upper:]' '[:lower:]')
|
|
436
|
-
ROT_INDEX=\$(echo "\$HEALTH_RESULT" | grep -oE "Rot Index:\\s*[0-9]+%" | grep -oE "[0-9]+")
|
|
437
|
-
if [ -n "\$ROT_INDEX" ]; then
|
|
438
|
-
echo "[dino] Context health: \$HEALTH_STATUS (\$ROT_INDEX% rot)"
|
|
439
|
-
fi
|
|
440
|
-
fi
|
|
441
|
-
fi
|
|
442
|
-
|
|
443
|
-
# v13.5.0: Auto-unload at budget thresholds (70%, 80%, 90%)
|
|
444
|
-
UNLOAD_ENABLED="true"
|
|
445
|
-
if [ -f "\$CONFIG_PATH" ]; then
|
|
446
|
-
if grep -q '"autoUnload"[[:space:]]*:[[:space:]]*false' "\$CONFIG_PATH" 2>/dev/null; then
|
|
447
|
-
UNLOAD_ENABLED="false"
|
|
448
|
-
fi
|
|
449
|
-
fi
|
|
450
|
-
|
|
451
|
-
if [ "\$UNLOAD_ENABLED" = "true" ] && [ "\$BUDGET_PERCENT" -ge 70 ] 2>/dev/null; then
|
|
452
|
-
# Determine aggressiveness based on budget level
|
|
453
|
-
AGGRESSIVENESS="light"
|
|
454
|
-
if [ "\$BUDGET_PERCENT" -ge 90 ]; then
|
|
455
|
-
AGGRESSIVENESS="aggressive"
|
|
456
|
-
elif [ "\$BUDGET_PERCENT" -ge 80 ]; then
|
|
457
|
-
AGGRESSIVENESS="medium"
|
|
458
|
-
fi
|
|
459
|
-
|
|
460
|
-
UNLOAD_RESULT=\$(npx dino mcp call dino_auto_unload --budgetPercentage "\$BUDGET_PERCENT" --aggressiveness "\$AGGRESSIVENESS" 2>/dev/null)
|
|
461
|
-
TOKENS_FREED=\$(echo "\$UNLOAD_RESULT" | grep -oE "Tokens freed:\\s*~[0-9]+" | grep -oE "[0-9]+")
|
|
462
|
-
if [ -n "\$TOKENS_FREED" ] && [ "\$TOKENS_FREED" -gt 0 ]; then
|
|
463
|
-
echo "[dino] Auto-unload: ~\$TOKENS_FREED tokens freed (budget was \$BUDGET_PERCENT%)"
|
|
464
|
-
fi
|
|
465
|
-
fi
|
|
466
|
-
|
|
467
352
|
# v13.2.1: Clean up completed Ralph loops on session start (more reliable than SessionEnd)
|
|
468
353
|
RALPH_PROGRESS_PATH="\$DINO_DIR/ralph-progress.md"
|
|
469
354
|
if [ -f "\$RALPH_PROGRESS_PATH" ]; then
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-start.js","sourceRoot":"","sources":["../../src/hooks/session-start.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1D;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAA+B;IACxE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAClE,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,wBAAwB,EAAE,CAAC;IACpC,CAAC;IACD,OAAO,kBAAkB,EAAE,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,SAAS,wBAAwB;IAC/B,MAAM,QAAQ,GAAG,OAAgB,CAAC;IAElC,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,oBAAoB,CAAC;;;EAGrE,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC;EAC1B,KAAK,CAAC,6BAA6B,CAAC,QAAQ,CAAC;;;;EAI7C,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAgCT,KAAK,CAAC,UAAU,CAAC,0BAA0B,EAAE,QAAQ,CAAC;;;sBAGtD,KAAK,CAAC,UAAU,CAAC,sCAAsC,EAAE,QAAQ,CAAC;;;0BAG9D,KAAK,CAAC,UAAU,CAAC,wEAAwE,EAAE,QAAQ,CAAC;;;;;;;;0BAQpG,KAAK,CAAC,UAAU,CAAC,8CAA8C,EAAE,QAAQ,CAAC;;;;;;;;;;;;;;;MAe9F,KAAK,CAAC,UAAU,CAAC,kCAAkC,EAAE,QAAQ,CAAC
|
|
1
|
+
{"version":3,"file":"session-start.js","sourceRoot":"","sources":["../../src/hooks/session-start.ts"],"names":[],"mappings":"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"}
|
package/dist/hooks/types.js
CHANGED
|
@@ -107,7 +107,7 @@ export const DOC_PATTERNS = [
|
|
|
107
107
|
* Pending actions for different change types
|
|
108
108
|
*/
|
|
109
109
|
export const PENDING_ACTIONS = {
|
|
110
|
-
dependency: 'Run `
|
|
110
|
+
dependency: 'Run `npm install` (or equivalent) after dependency changes',
|
|
111
111
|
structural: null,
|
|
112
112
|
config: null,
|
|
113
113
|
test: null,
|
|
@@ -137,58 +137,6 @@ if ($memoryQuery) {
|
|
|
137
137
|
$suggestions += "@dino://memories/summary"
|
|
138
138
|
}
|
|
139
139
|
|
|
140
|
-
# v13.5.0: Auto-context injection based on prompt demand signals
|
|
141
|
-
$autoInjectConfigPath = Join-Path $dinoDir "config.json"
|
|
142
|
-
$autoInjectEnabled = $true
|
|
143
|
-
if (Test-Path $autoInjectConfigPath) {
|
|
144
|
-
try {
|
|
145
|
-
$config = Get-Content $autoInjectConfigPath -Raw | ConvertFrom-Json
|
|
146
|
-
if ($config.features.PSObject.Properties['autoContextInjection']) {
|
|
147
|
-
$autoInjectEnabled = $config.features.autoContextInjection
|
|
148
|
-
}
|
|
149
|
-
} catch {}
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
if ($autoInjectEnabled) {
|
|
153
|
-
# Check for demand signals in prompt (questions about past decisions, patterns, failures)
|
|
154
|
-
$hasDemand = $false
|
|
155
|
-
if ($promptLower -match "\\b(what|why|how)\\b.*\\b(decide|chose|previous|before|earlier|did we)\\b") {
|
|
156
|
-
$hasDemand = $true
|
|
157
|
-
}
|
|
158
|
-
if ($promptLower -match "\\b(usually|normally|pattern|convention|prefer)\\b") {
|
|
159
|
-
$hasDemand = $true
|
|
160
|
-
}
|
|
161
|
-
if ($promptLower -match "\\b(fail|broke|error|issue)\\b.*\\b(earlier|before|last time)\\b") {
|
|
162
|
-
$hasDemand = $true
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
if ($hasDemand) {
|
|
166
|
-
try {
|
|
167
|
-
# Get current budget percentage (approximate)
|
|
168
|
-
$budgetPercent = 50
|
|
169
|
-
$sessionState = Join-Path $dinoDir "session.md"
|
|
170
|
-
if (Test-Path $sessionState) {
|
|
171
|
-
$sessionContent = Get-Content $sessionState -Raw
|
|
172
|
-
if ($sessionContent -match "Budget.*?(\d+)%") {
|
|
173
|
-
$budgetPercent = [int]$matches[1]
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
# Only inject if budget has headroom
|
|
178
|
-
if ($budgetPercent -lt 90) {
|
|
179
|
-
$injectResult = & npx dino mcp call dino_auto_inject --prompt "$userPrompt" --budgetPercentage $budgetPercent 2>$null
|
|
180
|
-
if ($injectResult -and $injectResult -match "executed.*true") {
|
|
181
|
-
# Extract tokens injected
|
|
182
|
-
if ($injectResult -match "~(\d+) tokens") {
|
|
183
|
-
$tokensInjected = $matches[1]
|
|
184
|
-
$contextInjections += "Auto-injected ~$tokensInjected tokens of relevant context"
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
} catch {}
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
|
|
192
140
|
# Only check session state if we have alerts to give
|
|
193
141
|
if (Test-Path $sessionPath) {
|
|
194
142
|
$content = Get-Content $sessionPath -Raw
|
|
@@ -646,54 +594,6 @@ if [ -n "\$MEMORY_QUERY" ]; then
|
|
|
646
594
|
SUGGESTIONS="\${SUGGESTIONS}@dino://memories/summary"
|
|
647
595
|
fi
|
|
648
596
|
|
|
649
|
-
# v13.5.0: Auto-context injection based on prompt demand signals
|
|
650
|
-
AUTO_INJECT_ENABLED="true"
|
|
651
|
-
CONFIG_PATH="\$DINO_DIR/config.json"
|
|
652
|
-
if [ -f "\$CONFIG_PATH" ]; then
|
|
653
|
-
if grep -q '"autoContextInjection"[[:space:]]*:[[:space:]]*false' "\$CONFIG_PATH" 2>/dev/null; then
|
|
654
|
-
AUTO_INJECT_ENABLED="false"
|
|
655
|
-
fi
|
|
656
|
-
fi
|
|
657
|
-
|
|
658
|
-
if [ "\$AUTO_INJECT_ENABLED" = "true" ]; then
|
|
659
|
-
# Check for demand signals in prompt
|
|
660
|
-
HAS_DEMAND="false"
|
|
661
|
-
if echo "\$PROMPT_LOWER" | grep -qE "(what|why|how).*(decide|chose|previous|before|earlier|did we)"; then
|
|
662
|
-
HAS_DEMAND="true"
|
|
663
|
-
fi
|
|
664
|
-
if echo "\$PROMPT_LOWER" | grep -qE "(usually|normally|pattern|convention|prefer)"; then
|
|
665
|
-
HAS_DEMAND="true"
|
|
666
|
-
fi
|
|
667
|
-
if echo "\$PROMPT_LOWER" | grep -qE "(fail|broke|error|issue).*(earlier|before|last time)"; then
|
|
668
|
-
HAS_DEMAND="true"
|
|
669
|
-
fi
|
|
670
|
-
|
|
671
|
-
if [ "\$HAS_DEMAND" = "true" ]; then
|
|
672
|
-
# Get current budget percentage (approximate)
|
|
673
|
-
BUDGET_PERCENT=50
|
|
674
|
-
if [ -f "\$SESSION_PATH" ]; then
|
|
675
|
-
BUDGET_MATCH=\$(grep -oE "Budget.*[0-9]+%" "\$SESSION_PATH" 2>/dev/null | grep -oE "[0-9]+" | head -1)
|
|
676
|
-
if [ -n "\$BUDGET_MATCH" ]; then
|
|
677
|
-
BUDGET_PERCENT="\$BUDGET_MATCH"
|
|
678
|
-
fi
|
|
679
|
-
fi
|
|
680
|
-
|
|
681
|
-
# Only inject if budget has headroom
|
|
682
|
-
if [ "\$BUDGET_PERCENT" -lt 90 ]; then
|
|
683
|
-
INJECT_RESULT=\$(npx dino mcp call dino_auto_inject --prompt "\$USER_PROMPT" --budgetPercentage "\$BUDGET_PERCENT" 2>/dev/null)
|
|
684
|
-
if echo "\$INJECT_RESULT" | grep -q "executed.*true"; then
|
|
685
|
-
TOKENS_MATCH=\$(echo "\$INJECT_RESULT" | grep -oE "~[0-9]+ tokens" | grep -oE "[0-9]+")
|
|
686
|
-
if [ -n "\$TOKENS_MATCH" ]; then
|
|
687
|
-
if [ -n "\$CONTEXT_INJECTIONS" ]; then
|
|
688
|
-
CONTEXT_INJECTIONS="\$CONTEXT_INJECTIONS; "
|
|
689
|
-
fi
|
|
690
|
-
CONTEXT_INJECTIONS="\${CONTEXT_INJECTIONS}Auto-injected ~\$TOKENS_MATCH tokens of relevant context"
|
|
691
|
-
fi
|
|
692
|
-
fi
|
|
693
|
-
fi
|
|
694
|
-
fi
|
|
695
|
-
fi
|
|
696
|
-
|
|
697
597
|
# Only check session state if we have alerts to give
|
|
698
598
|
if [ -f "\$SESSION_PATH" ]; then
|
|
699
599
|
CONTENT=\$(cat "\$SESSION_PATH")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-prompt-submit.js","sourceRoot":"","sources":["../../src/hooks/user-prompt-submit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAuB,MAAM,mBAAmB,CAAC;AAEzF;;GAEG;AACH,MAAM,UAAU,8BAA8B,CAAC,OAA+B;IAC5E,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,wBAAwB,EAAE,CAAC;IACpC,CAAC;IACD,OAAO,kBAAkB,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,wBAAwB;IAC/B,MAAM,QAAQ,GAAG,OAAgB,CAAC;IAElC,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,yBAAyB,CAAC;;;;;;;;;;EAU1E,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC;EAC1B,KAAK,CAAC,kBAAkB,CAAC,QAAQ,CAAC;;;;;;;;EAQlC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC;;;EAG9B,iBAAiB,CAAC,QAAQ,CAAC
|
|
1
|
+
{"version":3,"file":"user-prompt-submit.js","sourceRoot":"","sources":["../../src/hooks/user-prompt-submit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAuB,MAAM,mBAAmB,CAAC;AAEzF;;GAEG;AACH,MAAM,UAAU,8BAA8B,CAAC,OAA+B;IAC5E,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,wBAAwB,EAAE,CAAC;IACpC,CAAC;IACD,OAAO,kBAAkB,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,wBAAwB;IAC/B,MAAM,QAAQ,GAAG,OAAgB,CAAC;IAElC,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,yBAAyB,CAAC;;;;;;;;;;EAU1E,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC;EAC1B,KAAK,CAAC,kBAAkB,CAAC,QAAQ,CAAC;;;;;;;;EAQlC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC;;;EAG9B,iBAAiB,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAma5B,CAAC;AACF,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,QAAQ,GAAG,OAAgB,CAAC;IAElC,uFAAuF;IACvF,OAAO;uCAC8B,OAAO;;;;;;;;;;;EAW5C,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC;EAC1B,KAAK,CAAC,kBAAkB,CAAC,QAAQ,CAAC;;;;;;;EAOlC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC;;;EAG9B,iBAAiB,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkY5B,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HUD Config TUI - Interactive configuration wizard
|
|
3
|
+
*
|
|
4
|
+
* Provides an interactive terminal UI for configuring HUD display options.
|
|
5
|
+
* Uses @inquirer/prompts for cross-platform TUI support.
|
|
6
|
+
*
|
|
7
|
+
* @module config-tui
|
|
8
|
+
*/
|
|
9
|
+
import type { HudDisplayConfig } from './types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Run the interactive TUI configuration
|
|
12
|
+
*
|
|
13
|
+
* @param projectDir - Project directory (defaults to cwd)
|
|
14
|
+
* @returns true if configuration was saved
|
|
15
|
+
*/
|
|
16
|
+
export declare function runConfigTui(projectDir?: string): Promise<boolean>;
|
|
17
|
+
/**
|
|
18
|
+
* Get count of enabled display options
|
|
19
|
+
*/
|
|
20
|
+
export declare function getEnabledCount(display: HudDisplayConfig): number;
|
|
21
|
+
/**
|
|
22
|
+
* Get total count of display options
|
|
23
|
+
*/
|
|
24
|
+
export declare function getTotalDisplayOptions(): number;
|
|
25
|
+
//# sourceMappingURL=config-tui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-tui.d.ts","sourceRoot":"","sources":["../../src/hud/config-tui.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH,OAAO,KAAK,EAAa,gBAAgB,EAAE,MAAM,YAAY,CAAC;AA8E9D;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,UAAU,GAAE,MAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,CA0HvF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAEjE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HUD Config TUI - Interactive configuration wizard
|
|
3
|
+
*
|
|
4
|
+
* Provides an interactive terminal UI for configuring HUD display options.
|
|
5
|
+
* Uses @inquirer/prompts for cross-platform TUI support.
|
|
6
|
+
*
|
|
7
|
+
* @module config-tui
|
|
8
|
+
*/
|
|
9
|
+
import chalk from 'chalk';
|
|
10
|
+
import { checkbox, confirm, select } from '@inquirer/prompts';
|
|
11
|
+
import { loadHudConfig, saveHudConfig, saveUserConfig, DEFAULT_CONFIG, getHudConfigPath, getUserConfigPath, } from './config.js';
|
|
12
|
+
/**
|
|
13
|
+
* Organized display options by category
|
|
14
|
+
*/
|
|
15
|
+
const DISPLAY_GROUPS = [
|
|
16
|
+
{
|
|
17
|
+
name: 'Context Info',
|
|
18
|
+
options: [
|
|
19
|
+
{ key: 'model', label: 'Model', description: 'Show model name (e.g., Opus 4.5)' },
|
|
20
|
+
{ key: 'budget', label: 'Budget', description: 'Show context usage percentage with bar' },
|
|
21
|
+
{ key: 'contextHealth', label: 'Context Health', description: 'Show health-based coloring (deprecated)' },
|
|
22
|
+
],
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
name: 'Session Info',
|
|
26
|
+
options: [
|
|
27
|
+
{ key: 'sessionDuration', label: 'Session Duration', description: 'Show time since session start' },
|
|
28
|
+
{ key: 'sessionLimit', label: 'Session Limit', description: 'Show 5-hour rate limit tracking' },
|
|
29
|
+
{ key: 'weeklyUsage', label: 'Weekly Usage', description: 'Show weekly rate limit tracking' },
|
|
30
|
+
{ key: 'gitBranch', label: 'Git Branch', description: 'Show current git branch' },
|
|
31
|
+
],
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'Tools & Agents',
|
|
35
|
+
options: [
|
|
36
|
+
{ key: 'toolUsage', label: 'Tool Usage', description: 'Show tool call counts' },
|
|
37
|
+
{ key: 'agentStatus', label: 'Agent Status', description: 'Show subagent activity' },
|
|
38
|
+
{ key: 'todoProgress', label: 'Todo Progress', description: 'Show todo completion status' },
|
|
39
|
+
{ key: 'mcpStatus', label: 'MCP Status', description: 'Show MCP server connection' },
|
|
40
|
+
],
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'Dino Features',
|
|
44
|
+
options: [
|
|
45
|
+
{ key: 'configCounts', label: 'Config Counts', description: 'Show CLAUDE.md, rules, hooks counts' },
|
|
46
|
+
{ key: 'cacheStats', label: 'Cache Stats', description: 'Show file cache hit rate' },
|
|
47
|
+
{ key: 'deferredStatus', label: 'Deferred Status', description: 'Show lazy loading status' },
|
|
48
|
+
{ key: 'circuitStatus', label: 'Circuit Status', description: 'Show circuit breaker health' },
|
|
49
|
+
],
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'Legacy (Session.md)',
|
|
53
|
+
options: [
|
|
54
|
+
{ key: 'phase', label: 'Phase', description: 'Show current workflow phase' },
|
|
55
|
+
{ key: 'focus', label: 'Focus', description: 'Show current focus area' },
|
|
56
|
+
{ key: 'testStatus', label: 'Test Status', description: 'Show test pass/fail status' },
|
|
57
|
+
{ key: 'buildStatus', label: 'Build Status', description: 'Show build status' },
|
|
58
|
+
{ key: 'lintStatus', label: 'Lint Status', description: 'Show lint status' },
|
|
59
|
+
{ key: 'blockers', label: 'Blockers', description: 'Show active blockers' },
|
|
60
|
+
],
|
|
61
|
+
},
|
|
62
|
+
];
|
|
63
|
+
/**
|
|
64
|
+
* Print the TUI header
|
|
65
|
+
*/
|
|
66
|
+
function printHeader() {
|
|
67
|
+
console.log('');
|
|
68
|
+
console.log(chalk.cyan('┌─────────────────────────────────────────┐'));
|
|
69
|
+
console.log(chalk.cyan('│ ') + chalk.bold('dino-hud Configuration') + chalk.cyan(' │'));
|
|
70
|
+
console.log(chalk.cyan('│ ') + chalk.dim('Configure statusline display options') + chalk.cyan(' │'));
|
|
71
|
+
console.log(chalk.cyan('└─────────────────────────────────────────┘'));
|
|
72
|
+
console.log('');
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Run the interactive TUI configuration
|
|
76
|
+
*
|
|
77
|
+
* @param projectDir - Project directory (defaults to cwd)
|
|
78
|
+
* @returns true if configuration was saved
|
|
79
|
+
*/
|
|
80
|
+
export async function runConfigTui(projectDir = process.cwd()) {
|
|
81
|
+
// Check if terminal supports TUI
|
|
82
|
+
if (!process.stdout.isTTY) {
|
|
83
|
+
console.log(chalk.red('Error: Interactive configuration requires a terminal.'));
|
|
84
|
+
console.log(chalk.dim('Use --json flag to view config as JSON.'));
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
printHeader();
|
|
88
|
+
try {
|
|
89
|
+
// Load current config
|
|
90
|
+
const currentConfig = await loadHudConfig(projectDir);
|
|
91
|
+
// Build choices for each group
|
|
92
|
+
const allChoices = [];
|
|
93
|
+
for (const group of DISPLAY_GROUPS) {
|
|
94
|
+
// Add group separator
|
|
95
|
+
allChoices.push({
|
|
96
|
+
name: chalk.cyan.bold(`── ${group.name} ──`),
|
|
97
|
+
value: group.options[0].key, // Dummy value
|
|
98
|
+
checked: false,
|
|
99
|
+
disabled: true,
|
|
100
|
+
});
|
|
101
|
+
for (const option of group.options) {
|
|
102
|
+
allChoices.push({
|
|
103
|
+
name: `${option.label}${option.description ? chalk.dim(` - ${option.description}`) : ''}`,
|
|
104
|
+
value: option.key,
|
|
105
|
+
checked: currentConfig.display[option.key] ?? false,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Show checkbox selection
|
|
110
|
+
const selected = await checkbox({
|
|
111
|
+
message: 'Select display options (Space to toggle, Enter to confirm)',
|
|
112
|
+
choices: allChoices.filter(c => !c.disabled),
|
|
113
|
+
pageSize: 15,
|
|
114
|
+
});
|
|
115
|
+
// Build new display config
|
|
116
|
+
const newDisplay = {};
|
|
117
|
+
for (const group of DISPLAY_GROUPS) {
|
|
118
|
+
for (const option of group.options) {
|
|
119
|
+
newDisplay[option.key] = selected.includes(option.key);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// Check if reset to defaults is desired
|
|
123
|
+
const resetPrompt = await confirm({
|
|
124
|
+
message: 'Reset all other settings to defaults?',
|
|
125
|
+
default: false,
|
|
126
|
+
});
|
|
127
|
+
// Build final config
|
|
128
|
+
let finalConfig;
|
|
129
|
+
if (resetPrompt) {
|
|
130
|
+
finalConfig = {
|
|
131
|
+
...DEFAULT_CONFIG,
|
|
132
|
+
display: newDisplay,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
finalConfig = {
|
|
137
|
+
...currentConfig,
|
|
138
|
+
display: newDisplay,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
// Ask where to save
|
|
142
|
+
const saveLocation = await select({
|
|
143
|
+
message: 'Save configuration to:',
|
|
144
|
+
choices: [
|
|
145
|
+
{
|
|
146
|
+
name: `Project (${chalk.dim('.dino/hud.json')})`,
|
|
147
|
+
value: 'project',
|
|
148
|
+
description: 'Only affects this project',
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
name: `Global (${chalk.dim('~/.config/dino/hud.json')})`,
|
|
152
|
+
value: 'global',
|
|
153
|
+
description: 'Default for all projects',
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
name: chalk.dim('Cancel'),
|
|
157
|
+
value: 'cancel',
|
|
158
|
+
},
|
|
159
|
+
],
|
|
160
|
+
});
|
|
161
|
+
if (saveLocation === 'cancel') {
|
|
162
|
+
console.log(chalk.yellow('Configuration not saved.'));
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
// Save config
|
|
166
|
+
if (saveLocation === 'global') {
|
|
167
|
+
await saveUserConfig(finalConfig);
|
|
168
|
+
console.log(chalk.green(`✓ Saved to ${getUserConfigPath()}`));
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
await saveHudConfig(finalConfig, projectDir);
|
|
172
|
+
console.log(chalk.green(`✓ Saved to ${getHudConfigPath(projectDir)}`));
|
|
173
|
+
}
|
|
174
|
+
console.log('');
|
|
175
|
+
console.log(chalk.cyan('Restart Claude Code to see changes.'));
|
|
176
|
+
console.log('');
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
if (error instanceof Error && (error.message.includes('User force closed') || error.name === 'ExitPromptError')) {
|
|
181
|
+
console.log(chalk.dim('\n Configuration cancelled.\n'));
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
throw error;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Get count of enabled display options
|
|
189
|
+
*/
|
|
190
|
+
export function getEnabledCount(display) {
|
|
191
|
+
return Object.values(display).filter(Boolean).length;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Get total count of display options
|
|
195
|
+
*/
|
|
196
|
+
export function getTotalDisplayOptions() {
|
|
197
|
+
return DISPLAY_GROUPS.reduce((count, group) => count + group.options.length, 0);
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=config-tui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-tui.js","sourceRoot":"","sources":["../../src/hud/config-tui.ts"],"names":[],"mappings":"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"}
|
package/dist/hud/config.d.ts
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* HUD Config - Load and manage HUD configuration
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Configuration loading order (v13.4.0):
|
|
5
|
+
* 1. Default configuration (hardcoded)
|
|
6
|
+
* 2. User configuration (~/.config/dino/hud.json)
|
|
7
|
+
* 3. Project configuration (.dino/hud.json)
|
|
8
|
+
*
|
|
9
|
+
* Later configs override earlier ones.
|
|
5
10
|
*/
|
|
6
11
|
import type { HudConfig } from './types.js';
|
|
7
12
|
/**
|
|
@@ -9,10 +14,30 @@ import type { HudConfig } from './types.js';
|
|
|
9
14
|
*/
|
|
10
15
|
export declare const DEFAULT_CONFIG: HudConfig;
|
|
11
16
|
/**
|
|
12
|
-
* Load HUD configuration from
|
|
17
|
+
* Load user-level HUD configuration from ~/.config/dino/hud.json
|
|
18
|
+
*
|
|
19
|
+
* @returns User config or null if not found
|
|
20
|
+
*/
|
|
21
|
+
export declare function loadUserConfig(): Promise<Partial<HudConfig> | null>;
|
|
22
|
+
/**
|
|
23
|
+
* Save user-level HUD configuration to ~/.config/dino/hud.json
|
|
24
|
+
*
|
|
25
|
+
* Creates the ~/.config/dino/ directory if it doesn't exist.
|
|
26
|
+
*
|
|
27
|
+
* @param config - Configuration to save
|
|
28
|
+
*/
|
|
29
|
+
export declare function saveUserConfig(config: Partial<HudConfig>): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Get user config file path
|
|
32
|
+
*/
|
|
33
|
+
export declare function getUserConfigPath(): string;
|
|
34
|
+
/**
|
|
35
|
+
* Load HUD configuration with three-level merge
|
|
36
|
+
*
|
|
37
|
+
* Merge order: DEFAULT_CONFIG < userConfig < projectConfig
|
|
13
38
|
*
|
|
14
39
|
* @param projectDir - Project directory (defaults to cwd)
|
|
15
|
-
* @returns Merged HudConfig
|
|
40
|
+
* @returns Merged HudConfig
|
|
16
41
|
*/
|
|
17
42
|
export declare function loadHudConfig(projectDir?: string): Promise<HudConfig>;
|
|
18
43
|
/**
|
package/dist/hud/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/hud/config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/hud/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,KAAK,EAAE,SAAS,EAAyE,MAAM,YAAY,CAAC;AAiFnH;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,SAK5B,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAMzE;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAI9E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,UAAU,GAAE,MAAsB,GAAG,OAAO,CAAC,SAAS,CAAC,CAsB1F;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,EAC1B,UAAU,GAAE,MAAsB,GACjC,OAAO,CAAC,IAAI,CAAC,CAIf;AA0BD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,GAAE,MAAsB,GAAG,MAAM,CAE3E"}
|
package/dist/hud/config.js
CHANGED
|
@@ -1,11 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* HUD Config - Load and manage HUD configuration
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Configuration loading order (v13.4.0):
|
|
5
|
+
* 1. Default configuration (hardcoded)
|
|
6
|
+
* 2. User configuration (~/.config/dino/hud.json)
|
|
7
|
+
* 3. Project configuration (.dino/hud.json)
|
|
8
|
+
*
|
|
9
|
+
* Later configs override earlier ones.
|
|
5
10
|
*/
|
|
6
11
|
import { join } from 'path';
|
|
12
|
+
import { homedir } from 'os';
|
|
7
13
|
import { FileSystem } from '../utils/file-system.js';
|
|
8
14
|
import { DINO_DIR_NAME } from '../core/config/constants.js';
|
|
15
|
+
/**
|
|
16
|
+
* User-level config directory
|
|
17
|
+
*/
|
|
18
|
+
const USER_CONFIG_DIR = join(homedir(), '.config', 'dino');
|
|
19
|
+
const USER_CONFIG_PATH = join(USER_CONFIG_DIR, 'hud.json');
|
|
9
20
|
/**
|
|
10
21
|
* Default display configuration
|
|
11
22
|
*
|
|
@@ -79,19 +90,60 @@ export const DEFAULT_CONFIG = {
|
|
|
79
90
|
limits: DEFAULT_LIMITS,
|
|
80
91
|
};
|
|
81
92
|
/**
|
|
82
|
-
* Load HUD configuration from
|
|
93
|
+
* Load user-level HUD configuration from ~/.config/dino/hud.json
|
|
94
|
+
*
|
|
95
|
+
* @returns User config or null if not found
|
|
96
|
+
*/
|
|
97
|
+
export async function loadUserConfig() {
|
|
98
|
+
try {
|
|
99
|
+
return await FileSystem.readJsonSafe(USER_CONFIG_PATH);
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Save user-level HUD configuration to ~/.config/dino/hud.json
|
|
107
|
+
*
|
|
108
|
+
* Creates the ~/.config/dino/ directory if it doesn't exist.
|
|
109
|
+
*
|
|
110
|
+
* @param config - Configuration to save
|
|
111
|
+
*/
|
|
112
|
+
export async function saveUserConfig(config) {
|
|
113
|
+
// Ensure directory exists
|
|
114
|
+
await FileSystem.createDirectory(USER_CONFIG_DIR);
|
|
115
|
+
await FileSystem.writeJson(USER_CONFIG_PATH, config);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get user config file path
|
|
119
|
+
*/
|
|
120
|
+
export function getUserConfigPath() {
|
|
121
|
+
return USER_CONFIG_PATH;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Load HUD configuration with three-level merge
|
|
125
|
+
*
|
|
126
|
+
* Merge order: DEFAULT_CONFIG < userConfig < projectConfig
|
|
83
127
|
*
|
|
84
128
|
* @param projectDir - Project directory (defaults to cwd)
|
|
85
|
-
* @returns Merged HudConfig
|
|
129
|
+
* @returns Merged HudConfig
|
|
86
130
|
*/
|
|
87
131
|
export async function loadHudConfig(projectDir = process.cwd()) {
|
|
88
132
|
try {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
133
|
+
// Start with defaults
|
|
134
|
+
let config = DEFAULT_CONFIG;
|
|
135
|
+
// Layer 2: User config (~/.config/dino/hud.json)
|
|
136
|
+
const userConfig = await loadUserConfig();
|
|
137
|
+
if (userConfig) {
|
|
138
|
+
config = mergeConfig(config, userConfig);
|
|
139
|
+
}
|
|
140
|
+
// Layer 3: Project config (.dino/hud.json)
|
|
141
|
+
const projectConfigPath = join(projectDir, DINO_DIR_NAME, 'hud.json');
|
|
142
|
+
const projectConfig = await FileSystem.readJsonSafe(projectConfigPath);
|
|
143
|
+
if (projectConfig) {
|
|
144
|
+
config = mergeConfig(config, projectConfig);
|
|
93
145
|
}
|
|
94
|
-
return
|
|
146
|
+
return config;
|
|
95
147
|
}
|
|
96
148
|
catch {
|
|
97
149
|
return DEFAULT_CONFIG;
|