feat(cli): TUI full-screen attach to cli-agent sessions (U14)
Suspend-and-handoff passthrough from the Ink TUI to a cli-agent PTY session: mint an attach ticket, open the cli-session WebSocket, enter the alternate screen + raw mode, stream WS scrollback/data frames to stdout, frame stdin bytes into input messages, propagate resizes, and ACK consumed bytes for flow control. Detach chord Ctrl-] restores the terminal and remounts Ink; a dropped WS surfaces the error and restores the terminal cleanly. Untrusted terminal output is neutralized through the same hardening filter the dashboard WS bridge uses (re-exported from @fusion/dashboard) so OSC 52, non- http(s) OSC 8 links, and device-status queries are stripped before reaching the host TTY — the riskiest leg, since the host terminal honors more sequences than xterm.js. CJK/double-width bytes pass through verbatim. - packages/cli/src/commands/dashboard-tui/terminal-attach.ts (passthrough loop + injectable WS transport for tests) - controller.openTerminalAttach() Ink integration (unmount/run/remount) - adds `ws` runtime dep to packages/cli - re-exports neutralizeTerminalOutput/flushTerminalOutput from @fusion/dashboard Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -68,7 +68,8 @@
|
||||
"multer": "^2.1.1",
|
||||
"node-pty": "npm:@homebridge/node-pty-prebuilt-multiarch@^0.13.1",
|
||||
"react": "^19.2.0",
|
||||
"react-i18next": "^17.0.8"
|
||||
"react-i18next": "^17.0.8",
|
||||
"ws": "^8.18.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@earendil-works/pi-ai": "*",
|
||||
@@ -95,6 +96,7 @@
|
||||
"@fusion/pi-llama-cpp": "workspace:*",
|
||||
"@types/node": "^22.0.0",
|
||||
"@types/react": "^19.2.0",
|
||||
"@types/ws": "^8.5.0",
|
||||
"@vitest/coverage-v8": "^3.1.0",
|
||||
"cross-env": "^7.0.0",
|
||||
"esbuild": "^0.25.12",
|
||||
|
||||
Reference in New Issue
Block a user