feat(run,ui): make the lane console usable — terminal focus, live-exit recovery, auto permission mode, model aliases
Terminal (issue #33): - `convertEol` is gone from xterm. It rewrote every bare LF as CR+LF, so a tmux pane that scrolled (tmux emits a bare LF and keeps drawing at the column it was on) had the rest of that draw land at column 0, stamping a line's first characters into the left margin of the rows below — the torn left edge that only showed up once content scrolled. - The attach carries the client's real size (`?cols=&rows=`, `sizeFromQuery` in `server/websocket.js`, bounded because it reaches a TIOCSWINSZ ioctl). `attach()` spawned `tmux attach-session` at a hardcoded 80x24 on every attach, and tmux sizes the window to the newest client, so `claude` redrew its whole UI at 80 columns until the first `resize` message landed. - The terminal takes the keyboard on mount, so typing reaches tmux without clicking the pane first. - A pane that ends (double Ctrl+C, `exit`, a crash) reports itself through a new `onExit` prop and `LaneConsolePane` runs `newRun()`, so the console returns to the setup form instead of leaving a dead pane behind a "New run" button. Pane environment: - `server/lib/desktop-env.js` forwards the graphical session's DISPLAY / WAYLAND_DISPLAY / XAUTHORITY / XDG_RUNTIME_DIR (from `systemctl --user show-environment`, this process's own values winning) into the pane. The server normally runs as a systemd user service with none of them, so `claude` there could not read the clipboard and answered "no image found in clipboard" on every image paste. Run setup: - `auto` is a permission mode and is now the default everywhere — allowlists, the `--permission-mode` fallback, the select, and the pane's initial state. - The model picker sends the CLI's aliases (`fable`/`opus`/`sonnet`/`haiku`) instead of pinned ids. `claude --model` resolves an alias to the latest model itself, so a release like Fable 5.1 needs no edit here; pricing is unaffected because it keys off the resolved id the transcript reports. - **Create/update readme file** moved from the Add-lane modal into the lane's Tools menu: creating a lane and writing its docs are separate decisions, and the second is worth re-running long after the first. - The Workspace's no-lane state is a real banner; the lane strip (add tile included) renders only once a lane exists. Refs #32, #33. Tests: npm run test:server (1828 pass), client vitest (558 pass).
This commit is contained in:
+9
-6
@@ -3428,12 +3428,13 @@ components:
|
||||
permissionMode:
|
||||
type: string
|
||||
enum:
|
||||
- auto
|
||||
- acceptEdits
|
||||
- default
|
||||
- plan
|
||||
- bypassPermissions
|
||||
description: Permission mode passed via `--permission-mode`. Defaults to `acceptEdits` when omitted or invalid.
|
||||
example: acceptEdits
|
||||
description: Permission mode passed via `--permission-mode`. Defaults to `auto` when omitted or invalid.
|
||||
example: auto
|
||||
effort:
|
||||
type: string
|
||||
enum:
|
||||
@@ -3611,12 +3612,13 @@ components:
|
||||
type: string
|
||||
nullable: true
|
||||
enum:
|
||||
- auto
|
||||
- acceptEdits
|
||||
- default
|
||||
- plan
|
||||
- bypassPermissions
|
||||
description: Permission mode recorded at spawn time.
|
||||
example: acceptEdits
|
||||
example: auto
|
||||
effort:
|
||||
type: string
|
||||
nullable: true
|
||||
@@ -3792,13 +3794,14 @@ components:
|
||||
permissionMode:
|
||||
type: string
|
||||
enum:
|
||||
- auto
|
||||
- acceptEdits
|
||||
- default
|
||||
- plan
|
||||
- bypassPermissions
|
||||
default: acceptEdits
|
||||
description: Permission mode passed via `--permission-mode`. Unknown values silently fall back to `acceptEdits`.
|
||||
example: acceptEdits
|
||||
default: auto
|
||||
description: Permission mode passed via `--permission-mode`. Unknown values silently fall back to `auto`.
|
||||
example: auto
|
||||
RunSpawnConcurrencyResponse:
|
||||
type: object
|
||||
description: HTTP 429 body when the concurrency cap is reached (ECONCURRENCY). In addition to the standard `error` envelope, this response carries a top-level `running` array listing the runs currently occupying the cap.
|
||||
|
||||
Reference in New Issue
Block a user