fix: Per-agent terminal isolation, floating terminal z-index, and char-by-char input

- Add :key to PromptBar to force remount on agent switch, fixing shared terminal session bug
- Raise AgentTerminal z-index above PromptBar backdrop so floating terminal is visible/clickable
- Send prompt text char-by-char (15ms delay) matching FloatingVoice pattern for Claude Code compat
- Guard xterm dispose against unloaded addons to prevent errors on agent switch
- Widen PromptBar panel from 360px to 420px to fit all ChatInput buttons
This commit is contained in:
2026-02-16 00:41:38 -06:00
parent 59cc8ee87e
commit 55265d5145
18 changed files with 2308 additions and 96 deletions

View File

@@ -8,6 +8,7 @@ import FloatingResponse from './components/FloatingResponse.vue'
import FloatingVoice from './components/FloatingVoice.vue'
import AgentBar from './components/AgentBar.vue'
import HookNotifications from './components/HookNotifications.vue'
import NotificationLog from './components/NotificationLog.vue'
import PwaInstallBanner from './components/PwaInstallBanner.vue'
import { initWebMCP, getWebMCP } from './services/webmcp'
import { initTorch, destroyTorch } from './services/torch'
@@ -67,6 +68,7 @@ function clearDebugLogs() {
}
const terminalRef = ref<InstanceType<typeof FloatingTerminal> | null>(null)
const responseRef = ref<InstanceType<typeof FloatingResponse> | null>(null)
const notifLogRef = ref<InstanceType<typeof NotificationLog> | null>(null)
const voiceRef = ref<InstanceType<typeof FloatingVoice> | null>(null)
const canvasStore = useCanvasStore()
const projectCanvasStore = useProjectCanvasStore()
@@ -330,6 +332,8 @@ onMounted(async () => {
// Setup response controls for MCP tools
setResponseControls({
addMessage: (message: string, type?: 'info' | 'success' | 'warning' | 'error') => {
// Also log to notification log
notifLogRef.value?.addResponseEntry(message, type || 'info')
if (responseRef.value) {
return responseRef.value.addMessage(message, type)
}
@@ -544,6 +548,9 @@ watch(() => route.name, (newPage) => {
<!-- Hook Notifications (toasts from Claude Code hooks) -->
<HookNotifications />
<!-- Notification Log (temporary - collects all notifications, persists to localStorage) -->
<NotificationLog ref="notifLogRef" />
<!-- Floating Voice Input -->
<FloatingVoice ref="voiceRef" v-model="showVoice" />