Commit Graph
5 Commits
Author SHA1 Message Date
kuddev 3a1572b7f6 feat(workspace): add file editing, layout recipes and fresh themes
File tabs now save Markdown, code and text edits through one document
lifecycle, with dirty indicators, close protection, external-change checks,
and BOM/newline preservation. Markdown gains heading navigation and file
information alongside preview and source editing.

Add named tab/window layout recipes using the existing session schema,
remember quick-terminal dimensions, and allow the global hotkey to recall
an existing window. Dock previews and insertion use the hovered pane, with
an outer-edge target for a full row or column.

Add Breeze and Mint light/dark themes, filter settings navigation as the
query changes, expose a font dropdown arrow, and redraw the command icon.

Validated on the isolated commit snapshot with Windows GPUI compilation,
editor and settings interaction tests, workspace/theme tests, shared
settings/split and i18n contracts, architecture checks, and formatting.
2026-09-08 10:51:21 +08:00
kuddev 7119bd451a chore: normalize formatting and local commit policy 2026-08-30 11:49:13 +08:00
kuddev 66d1b1946e feat(runtime): resource CLI, pane exec, quick jump, terminal fixes
Snapshot commit of the in-progress runtime-control and terminal-fidelity
work on this branch. Every item below is code-complete and covered by
targeted checks; none of it has had human UX acceptance yet.

Runtime control surface
- Resource-style CLI (`nebula <resource> <verb>`) replacing the flat verb
  list, with shell completions regenerated for zsh/bash/fish.
- `pane.exec` end to end: protocol params, both UI routes, and a process
  executor that reaps the whole descendant tree through a Windows Job
  Object so a timed-out or early-exiting child cannot leave the stdout
  reader waiting on an EOF that never comes.
- `shortcuts` module exposing the keybinding surface to the API.
- Agent environment contract (`agent_env`): TERM_PROGRAM and friends, so
  third-party tooling identifies Nebula without special-casing.
- Provider command matrix filled in for OpenCode, Cursor, Kimi, Pi and
  omp (cold start / resume / fork), each from verified CLI syntax.

Workspace
- Quick Jump over tabs, panes, frecency directories, SSH hosts and AI
  sessions; Recipes and Files scopes stay hidden until their backends
  exist end to end.
- Send-selection-to-chat with explicit pane routing.
- Taskbar integration.
- Configurable terminal-card geometry (radius, gutter, shadow, divider)
  carried by the theme, with a single radius constant shared by both
  shells instead of one literal per shell.

Terminal
- PTY lost-wakeup fix completed. The 1.2.0 repost keyed on "the pipe
  still holds bytes", but `drain_inner` takes the read waker *before*
  copying, so that check was a TOCTOU: a read that got data already
  means no waker is registered. The repost now keys only on "this read
  got data", which self-converges, plus a regression test.
- `conpty_realign` now corrects both directions. Only the collapse case
  (conhost above our cursor) was handled; a rewrap that leaves conhost
  *below* us left every absolute CUP from PSReadLine landing on the
  wrong row after a split.
- DECSET 2031 colour-scheme change notifications, with the light/dark
  predicate sharing one source with the OSC 11 answer.
- `TerminalColorResolver` reachable from the GPUI shell (`pub(crate)`),
  and its line endings restored to LF after an editor round-trip had
  rewritten all 329 lines as CRLF.

Repro tooling
- `pty_stall_repro.ps1` reproduces the lost wakeup by separating the
  64 KB burst from the tail, which is the half the earlier drain probe
  was missing.
- `tui_redraw_dup_probe.ps1` checks in-place UI-block redraws for
  duplicated and dropped lines via monotonic line numbering.

Ignore rules: the `.run-*`, `.isolated-*`, `.chk*.js`, `*-probe.png`,
`NebulaTerminal-*/` and `*-preview-package/` families were reaching
`git status` as untracked. They are per-round debug evidence and local
build output.

Verification
- `cargo check -p nebula --features gpui-shell` passes.
- `cargo test -p nebula --features gpui-shell`: 1001 passed, 1 failed.
- `git diff --check` passes.
- The single failure, `math_overlay::tests::alt_screen_renders_agent_math`,
  reproduces identically on e41b3c8 in a clean worktree. It predates this
  work and is not addressed here: the test swaps to the alternate screen,
  which resets its region, then expects the primary screen's formula to
  still be planned.
2026-08-27 19:23:02 +08:00
kuddev 70fe9fcf86 wip: restore view.rs after disk-full truncation
A rustfmt run was cut short by a full D: drive and left
gpui_shell/terminal/view.rs at 0 bytes. Restored from the editor
history snapshot taken at 18:32 - the selection auto-scroll work and
the suggest_env wiring are both back in.

Emergency baseline snapshot, committed with --no-verify: the tree does
not compile yet (missing SuggestEnv import, one stale
update_selection_scroll call site) and the pre-commit size budgets are
pre-existing failures on this branch.
2026-08-21 18:57:28 +08:00
kuddev 6d3a076b80 feat(split): shared nebula-split crate - split-pane rules as pure data
Extracts the split-pane rules from the legacy shell's window_context/split.rs into a zero-dependency workspace crate: the layout tree (split/remove/collapse, path addressing), the geometry pass (floor + per-side cell clamping, divider rects with tree paths), divider drag rules (unclamped pointer ratio, preview pinning in the close zone, drag-to-close margins, whole-cell commit quantization) and directional focus (4x perpendicular-drift penalty). Math ported verbatim and locked by 12 unit tests. The legacy implementation stays frozen in-tree per the P4 ruling; the GPUI layer inside nebula_app is the intended consumer.
2026-08-13 13:08:07 +08:00