- Move defer cleanup after async goroutine setup to prevent premature closure
- Remove unused Password field from terminal sessions struct
- Fix line calculation in clear detection using viewportY instead of baseY
- Add onStateChange callback to connectWebSocket for connection state
- Add tabId parameter to sendToTerminal for targeted tab control
- Simplify ShellAIMessage to use specific tab for command sending
💘 Generated with Crush
Assisted-by: MiniMax-M2.7 via Crush <crush@charm.land>
- Delay buffer restoration by 300ms to avoid race condition with WebSocket init
- Read current line from terminal buffer on Enter (reliable) instead of keystroke tracking
- Fix streaming to emit full content instead of word-by-word chunks
- Fix WebSocket readyState check in sendToTerminal
- Extract and deduplicate AI message sending logic
- Fix localStorage cleanup on tab close
💘 Generated with Crush
Assisted-by: MiniMax-M2.7 via Crush <crush@charm.land>
- Handle all quota types in providersQuota, not just TIME_LIMIT
- Extract model name from model field or type field
- Use explicit limit value when available
- Add vertical center alignment to quota card content
💘 Generated with Crush
Assisted-by: MiniMax-M2.7 via Crush <crush@charm.land>
- Fix AI terminal not initializing (wait for shell col visibility, remove offsetHeight guard)
- Add Shift+Tab to cycle between shell terminals
- Handle unclosed code blocks in renderContent (Shell + Studio)
- Filter irrelevant commands from history (short/non-alpha backend + expanded frontend exclude list)
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
- Add dedicated AI Terminal tab (non-deletable) shared between user and AI
- Add Z.AI quota display on dashboard via /api/monitor/usage/quota/limit
- Add /model change command in Studio to toggle MiniMax/ZAI
- Apply Studio formatting (formatText, renderContent) to Shell AI messages
- Add render tick refresh for Shell (1s streaming, 5s idle)
- Add analysis viewer modal (Eye button) in Shell panel
- Fix multi-shell tab creation with retry init and settings ref
- Persist shell tabs to localStorage
- Fix line spacing in Studio (line-height 1.7→1.5, cleanup stray <br/>)
- Redirect Config updates to AI terminal via custom events
- Fix CI: delete existing release before recreating
- Bump version to 0.3.4
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
formatText now replaces \n with <br/> so AI responses display
with proper line breaks instead of a single unbroken block.
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
Removed PROVIDER_MODELS hardcoded map. Model is now a simple text
input pre-filled with the current model value.
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
- Only MINIMAX and ZAI displayed (names in uppercase)
- Each provider shows selectable model chips (MiniMax-M2.7, glm-4, etc.)
- Save button always visible when editing, not just after validation
- Removed setup hint text
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
Top commands (excluding ls/cd/pwd/clear/exit/history) displayed as
large chips with usage count. Click to copy. Full history below.
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
- .content > div now inherits full height so all tabs fill the viewport
- Dashboard grid uses grid-template-rows: repeat(2, 1fr) for 6 equal tiles
- Studio gets floating scroll-to-top / scroll-to-bottom buttons
- Wrapped studio-feed in scroll-wrap for proper overflow
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
- New ShellConvStore with persistent history (shell_conversation.json)
- 100k token limit — input grays out, must /clear to continue
- Commands limited to /clear and /help only
- Shell AI has NO tools — read-only analysis, never executes code
- "Analyste Système" panel with system analysis button
- System analysis uses Studio AI to write system_analysis.md,
prepended as context on every conversation start
- Code blocks show "Copier" and "Terminal" buttons to copy or
send code directly to the active terminal via WebSocket
- Token bar shows usage with warning at 80%
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
All 4 tabs (Dashboard, Studio, Shell, Config) are now always mounted
and toggled via .tab-hidden (display:none). This preserves:
- Dashboard graph history across tab switches
- Terminal session state and progress
- Studio chat context
- Config form state
Dashboard polling pauses after 3 ticks when hidden to save resources
and auto-resumes when the tab becomes visible again.
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
Show current language and keyboard as read-only values, then
"Modifier" button opens chip selection, "Sauvegarder" persists
via API. Centered layout matching profile panel style.
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
- Profile panel now shows two distinct cards with section titles
- Personal Info (name, pseudo, email, languages) and Preferences
(editor, shell, theme, etc.) are visually separated
- Content centered with max-width 540px
- Added i18n keys for section titles
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
- Add visual indicator when messages are collapsed (folder icon)
- Add animation to token bar during compression (pulse effect)
- Token bar becomes more compact after compression with "· compressé" label
- Button "voir plus" to expand collapsed messages
- Add 24px spacing at end of feed to avoid last message clipping
- Simplify provider display: show name only, badge "active" instead of key status
- Dashboard: show provider name only without model suffix
- Studio /model: show just provider name, not model
- Z.AI (GLM): mark as crush-only, no external quota check
- Claude: check /usr/bin/claude installation instead of API
💘 Generated with Crush
- Fix language prop passing keyboard value instead of language
- Add save button that persists language + keyboard_layout via API
- Add local toast for save confirmation
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
- Config tabs now have bottom padding for visual spacing
- Profile panel dynamically renders all config fields (strings, bools,
arrays, nested objects) — new struct fields appear automatically
- handleSaveProfile uses generic JSON merge via deepMerge, so any
new Profile field works without handler changes
- RenderFields recursively renders config sections with edit/view modes
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
Remove BgGraph background SVGs that were misaligned with foreground graphs.
Add max-height: 270px with overflow-y scroll to quota/processes/commands lists.
Change API quota display from remaining/total to used/total.
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
Add /summarize command, token usage bar, and summary endpoint.
Add JSON tags to config/platform/scanner structs for API serialization.
💘 Generated with Crush
Assisted-by: MiniMax-M2.7 via Crush <crush@charm.land>
- Add BgGraph component for subtle background SVG graphs
- Add gradient fills to MiniGraph components
- Track process count over time
- Calculate total API quota usage
- Improve card styling with overlay content
💘 Generated with Crush
Assisted-by: MiniMax-M2.7 via Crush <crush@charm.land>
- Rewrite dashboard from 4 tabs to single grid view with 5s auto-refresh
- Add live CPU/RAM/Network SVG graphs with rolling 30-point history
- Add backend /api/system/metrics reading /proc/stat, /proc/meminfo, /proc/net/dev
- Add backend /api/providers/quota for MiniMax and Z.AI quota monitoring
- Add backend /api/recent-commands reading bash/zsh history
- Add backend /api/running-processes filtering editors/IDEs/languages
- Add sudo/root indicator (⚡ ROOT) in footer when running as root
- Remove duplicate Ctrl+1-4 shortcut from page-specific footer (keep only right side)
- Add Ctrl+R shortcut on dashboard for metrics-only refresh
- Make API key mandatory in onboarding, auto-scan editors via AI chat
- Remove manual editor input, only show AI-detected editors
- Bump version to 0.3.3
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
- New API endpoints: /providers/quota, /recent-commands, /running-processes
- New grid-based dashboard layout with cards for tools, quota, processes, commands
- Improved OnboardingWizard with required API key validation and scanning feedback
- Auto-initialize config on first run
💘 Generated with Crush
Assisted-by: MiniMax-M2.7 via Crush <crush@charm.land>
- Add ChatEngine for deduplicated chat logic (handlers_chat/shell_chat)
- Add SendWithToolsStream for real-time streaming responses
- Add /help, /plan, /export, /model commands in Studio
- Fix XSS: sanitize HTML after markdown rendering
- Add ConversationStoreMulti for multi-conversation support
- Add Anthropic headers (x-api-key, anthropic-version)
- Add fallback logging when provider switch occurs
- Add API handler tests (handlers_test.go)
- Polish Studio: max-height 200px, word-break on tool args
- Update CLI version to show full info (version, go, platform)
🤖 Generated with Crush
Assisted-by: MiniMax-M2.5 via Crush <crush@charm.land>
- Fix cleanThinkingTags to use proper regex instead of naive ReplaceAll
- Send conversation history (last 20 messages + summary) to AI instead of single message
- Store tool results alongside tool calls so history shows complete execution info
- Stream words instead of characters for smoother SSE rendering
- Add stop button to cancel in-progress AI requests (AbortController)
- Fix markdown rendering: add h2 support, use div for bullets
- Add i18n keys for cancel/stop (EN + FR)
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
- Replace old tool-call regex with proper agent registry
- Add streaming chat via SSE (handleStreamChat / handleNonStreamChat)
- Add internal/agent package with tool definitions and execution
- Add orchestrator with system prompt and tool scaffolding
- Add internal/agent/ directory
- Studio.jsx: streaming chat with thinking indicator and tool result rendering
- global.css: chat bubble styles, streaming animation, thinking dots
- handlers_chat.go: full rewrite using new agent/orchestrator architecture
💘 Generated with Crush
Assisted-by: MiniMax-M2.7 via Crush <crush@charm.land>
- Add apikey step in onboarding wizard (optional, with validation)
- Add ScanEditors() in scanner package detecting vim/nvim/code/emacs/nano/helix/subl/zed
- Add GET /api/editors endpoint
- Editor step now has scan button to detect installed editors via backend
- MiniMax API key is saved to provider config if provided
💘 Generated with Crush
Assisted-by: MiniMax-M2.7 via Crush <crush@charm.land>
- Validate each step before allowing goNext
- Show required error message on name step if empty
- Clear error on input change
💘 Generated with Crush
Assisted-by: MiniMax-M2.7 via Crush <crush@charm.land>
- Add resetConfig and applyStarshipTheme to frontend api client
- Register handleResetConfig and handleApplyStarshipTheme in server mux
💘 Generated with Crush
Assisted-by: MiniMax-M2.7 via Crush <crush@charm.land>
- providerForm is now keyed by provider name
- Each provider (minimax/glm/claude) has isolated form data
- Validation and save target the specific provider being edited
💘 Generated with Crush
Assisted-by: MiniMax-M2.7 via Crush <crush@charm.land>