mirror of
https://github.com/mark3labs/kit.git
synced 2026-06-14 03:30:26 +00:00
72 lines
1.8 KiB
Go
72 lines
1.8 KiB
Go
//go:build ignore
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"math"
|
|
"strings"
|
|
|
|
"kit/ext"
|
|
)
|
|
|
|
// Init demonstrates a minimal-chrome extension.
|
|
// Hides the startup banner, status bar, separator, and input hint, replacing
|
|
// them with a compact footer showing model name and a context usage bar:
|
|
//
|
|
// claude-sonnet-4-5-20250929 [###-------] 30% (3.9K/200K tokens)
|
|
//
|
|
// Usage: kit -e examples/extensions/minimal.go
|
|
func Init(api ext.API) {
|
|
// updateFooter builds the footer text from current context stats.
|
|
updateFooter := func(ctx ext.Context) {
|
|
stats := ctx.GetContextStats()
|
|
pct := stats.UsagePercent * 100
|
|
if pct > 100 {
|
|
pct = 100
|
|
}
|
|
filled := int(math.Round(pct)) / 10
|
|
bar := strings.Repeat("#", filled) + strings.Repeat("-", 10-filled)
|
|
|
|
// Format token counts like the built-in status bar (e.g. "3.9K/200K").
|
|
fmtTokens := func(n int) string {
|
|
if n >= 1000 {
|
|
return fmt.Sprintf("%.1fK", float64(n)/1000)
|
|
}
|
|
return fmt.Sprintf("%d", n)
|
|
}
|
|
|
|
text := fmt.Sprintf("%s [%s] %d%%", ctx.Model, bar, int(math.Round(pct)))
|
|
if stats.ContextLimit > 0 {
|
|
text += fmt.Sprintf(" (%s/%s tokens)",
|
|
fmtTokens(stats.EstimatedTokens), fmtTokens(stats.ContextLimit))
|
|
}
|
|
|
|
ctx.SetFooter(ext.HeaderFooterConfig{
|
|
Content: ext.WidgetContent{Text: text},
|
|
Style: ext.WidgetStyle{BorderColor: "#585b70"},
|
|
})
|
|
}
|
|
|
|
api.OnSessionStart(func(_ ext.SessionStartEvent, ctx ext.Context) {
|
|
// Strip built-in chrome for a minimal look.
|
|
ctx.SetUIVisibility(ext.UIVisibility{
|
|
HideStartupMessage: true,
|
|
HideStatusBar: true,
|
|
HideSeparator: true,
|
|
HideInputHint: true,
|
|
})
|
|
|
|
updateFooter(ctx)
|
|
})
|
|
|
|
// Refresh after each agent turn — context usage changes here.
|
|
api.OnAgentEnd(func(_ ext.AgentEndEvent, ctx ext.Context) {
|
|
updateFooter(ctx)
|
|
})
|
|
|
|
api.OnSessionShutdown(func(_ ext.SessionShutdownEvent, ctx ext.Context) {
|
|
ctx.RemoveFooter()
|
|
})
|
|
}
|