@@ -298,6 +380,7 @@ onBeforeUnmount(() => {
cursor: grab;
user-select: none;
}
+.at-titlebar { touch-action: none; }
.agent-terminal.dragging .at-titlebar { cursor: grabbing; }
.at-left {
@@ -362,6 +445,8 @@ onBeforeUnmount(() => {
.wc-btn.start { color: #0a0; }
.wc-btn.start:hover { background: rgba(16, 185, 129, 0.3); }
.wc-btn.restart:hover { background: rgba(245, 158, 11, 0.3); color: #a80; }
+.wc-btn.nav-toggle.active { background: rgba(99, 102, 241, 0.3); border-color: rgba(99, 102, 241, 0.4); color: #818cf8; }
+.wc-btn.nav-toggle:hover { background: rgba(99, 102, 241, 0.2); color: #818cf8; }
.at-content {
flex: 1;
diff --git a/frontend/src/composables/useAgentTerminal.ts b/frontend/src/composables/useAgentTerminal.ts
index 56ad84e..6445668 100644
--- a/frontend/src/composables/useAgentTerminal.ts
+++ b/frontend/src/composables/useAgentTerminal.ts
@@ -40,6 +40,9 @@ export interface AgentTerminal {
// Direct PTY input (char-by-char, no agent auto-start)
sendInput: (text: string) => void
+ // Raw PTY input (single write, no \r appended)
+ sendRaw: (data: string) => void
+
// Cleanup
dispose: () => void
}
@@ -378,6 +381,12 @@ export function useAgentTerminal(agentId: string): AgentTerminal {
}
}
+ function sendRaw(data: string) {
+ if (socket?.readyState === WebSocket.OPEN) {
+ socket.send(JSON.stringify({ type: 'input', data }))
+ }
+ }
+
function flushPendingPrompt() {
if (pendingPrompt && socket?.readyState === WebSocket.OPEN) {
typeTextToSocket(pendingPrompt)
@@ -406,6 +415,7 @@ export function useAgentTerminal(agentId: string): AgentTerminal {
checkStatus,
sendPrompt,
sendInput,
+ sendRaw,
dispose
}
}