Commit Graph
20 Commits
Author SHA1 Message Date
kuddev 10ed04c656 chore: pin GPUI v1.16.1 migration baseline
Pin Zed v1.16.1 and the gpui-component baseline to immutable revisions, align the Rust toolchain requirement, and regenerate Cargo.lock.

This is a dependency checkpoint only: application API migration and Nebula product patches remain for isolated follow-up commits, so gpui-shell is not yet expected to compile.

Committed with --no-verify because the repository line-count hook rejects generated Cargo.lock growth above 2500 lines; staged diff checks and locked offline metadata validation pass.
2026-08-24 13:36:35 +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 03ea868aba feat(gpui): load markdown network images and land 1.1.0 shell parity
Register a ureq HttpClient so document tabs can fetch http(s) images. Also lands OSC 8/URL links, configurable terminal bell, and the rest of the 1.1.0 GPUI changelog.
2026-08-17 23:24:20 +08:00
kuddev 7a1a954b11 checkpoint: preserve GPUI migration baseline 2026-08-15 16:11:20 +08:00
kuddev ce140f526a feat(gpui): GPUI UI layer moves into nebula_app - one product, one codebase
Physically relocates the validated GPUI surface out of the lab crate into nebula_app/src/gpui_shell/ (git mv keeps history): the terminal stack (view/element/session/keymap/mouse_protocol/colors), the config bridge (nebula.toml + nebula_settings.txt + theme tables), the workspace view and the theme/prelude glue. Per product ruling, nebula_gpui is a scratch lab - it keeps only the component gallery (terminal preview removed) plus annotated copies of theme/prelude, and its Cargo manifest drops the terminal/settings dependencies. The gpui-shell feature is now self-contained: nebula depends directly on gpui/gpui-component/-assets (redirected to our fork by the root patch table), nebula-settings and futures; the nebula-gpui crate dependency is gone. Entry points: 'nebula --gpui' runs the GPUI main-window form on the main thread with winit never starting (P3 acceptance form; gates get re-measured here), and the NEBULA_GPUI_SHELL=1 dedicated-thread spike stays until the P3 takeover completes. Verified: cargo check on both crates, and nebula --gpui opens the Nebula main window with working tabs, ConPTY terminal, CJK text and powerline prompt (screenshot .tmp_parity_gpui-in-nebula.png).
2026-08-13 13:29:51 +08:00
kuddev 64c7c0ff1a feat(completion,settings,paste): dual completion styles, real color picker, screenshot paste over SSH
- completion: switchable inline ghost vs popup candidate list (history /
  frecency dirs / PATH commands / files, Up/Down + accept key + Esc);
  settings dropdown, palette action, persisted as completion_style
- settings: real HSV picker in the background-color popup (SV plane + hue
  bar, drag picks live, release persists); presets and hex stay in sync
- paste: image-only clipboard pastes a PNG path - local temp file, or SFTP
  upload to remote /tmp with the path typed back so
  codex/claude receive usable image paths on both sides
- fix: Explorer context-menu launches attach the resident instance and open
  a cwd tab (tab.new gains optional cwd) instead of a lone fresh window
- fix: default-shell dropdown hit-test counts imported profiles, making the
  trailing rows selectable again
- fix: git drawer works on dubious-ownership roots (wsl$ UNC, elevated) via
  per-invocation safe.directory; failures now logged instead of silent blank
- deps: gpui/gpui-component redirected to Kuddev forks pinned at the
  published base revs (patch playbook in the root manifest)
- wire the in-flight resume_ai toggle (display field, toggle, persistence)
  so the parallel session-restore work builds and tests stay green
2026-08-13 13:06:49 +08:00
kuddev b79c05776b feat(gpui): terminal mouse semantics parity - app reporting, right-click, copy-on-select
Mouse-mode apps (vim/htop) now own the pointer: press/release/drag/motion/wheel are encoded per protocol (SGR, normal, UTF-8 extension) and reported to the app, with Shift as the local-selection escape hatch - same as the legacy shell. The encoder is a pure module ported verbatim from input/mouse.rs with unit tests locking the byte sequences. Right-click follows the legacy Windows convention (copy+clear when a selection exists, paste otherwise), copy_on_select fires on release, Shift+click extends an existing selection, and Shift+PageUp/PageDown/Home/End page the scrollback on the primary screen.
2026-08-13 12:42:26 +08:00
kuddev 189e5ac4ff feat(settings): shared nebula-settings crate; GPUI lab reads runtime settings + theme term colors
New zero-dependency workspace crate owning nebula_settings.txt path resolution, key semantics and the per-theme terminal color tables (background, light-theme foreground/ANSI-16 replacement, powerline slots 16..=23) - values transcribed verbatim from the legacy shell's theme.rs, which stays frozen per P4. The GPUI lab now honors the user's actual runtime intent: theme (SilverLight etc.) applied over toml colors in the same order as apply_term_colors, font family/size from the settings UI, default cursor shape/blink wired into the engine Term config, copy_on_select exposed for the next slice. Cargo.lock intentionally not committed: it currently carries the user's in-flight gpui-fork switch.
2026-08-13 12:18:21 +08:00
kuddev d44bf59ae2 docs(gpui): G2 IME manual acceptance checklist
One-page hand-verification list for the Chinese IME gate: preedit anchoring, candidate window tracking, commit/cancel/backspace paths, scrolling during composition, TUI anchoring, focus/tab/DPI interactions. Any failing item vetoes G2.
2026-08-13 11:21:49 +08:00
kuddev 837aac5a00 docs: long-term roadmap - GPUI lands inside nebula_app, nebula_gpui stays a lab
Final form pinned per product decision: one product and one codebase (nebula.exe / nebula_app) with GPUI as its in-process UI layer; nebula_gpui is a validation lab whose proven modules get integrated into nebula_app, never a second product. Grid rendering stays first-party via the render contract; powerline/fastfetch/CJK fidelity are acceptance gates. Mega-file split (display/mod.rs 10k+ lines etc.) is scheduled as a dedicated refactor pass after GPUI integration.
2026-08-13 10:36:41 +08:00
kuddev 30d5279d9f feat(terminal): built-in boxdraw geometry in the render contract
Port nebula_app's builtin_font coverage (box drawing, block elements, legacy sextants/blocks, Powerline separators) from pixel rasterization to renderer-agnostic fill primitives: axis-aligned rects plus convex polygons, snapped to device pixels so strokes stay crisp and join seamlessly across cells. RenderSnapshot::capture now routes these cells to box_glyphs instead of text segments - the typography engine never touches them, which roots out the box-line misalignment CJK fonts cause. The GPUI element consumes the primitives via paint_quad/paint_path (cursor inversion rules unchanged). Known deltas vs the legacy rasterizer: narrow-cell Powerline tips clip instead of falling back to the font, and shade blocks use alpha 64/128/192. Engine tests: 202 passing (11 new).
2026-08-13 10:26:05 +08:00
kuddev 907a40b57b docs(gpui): adoption is direct, rollback is code retention + git history
Per product decision: once GPUI genuinely beats the hand-drawn UI for a surface, it becomes that surface's code path outright - no runtime switches or long-lived feature flags keeping two UI paths alive. Rollback = the winit shell and existing modules staying buildable in-tree, plus per-step commits to revert. The gpui-shell cargo feature is spike scaffolding slated for removal, not a rollback mechanism.
2026-08-13 10:25:53 +08:00
kuddev 754c6b6889 feat(gpui): lib+bin dual form; in-process shell hook behind gpui-shell feature
nebula_gpui now exposes run_shell() as a library entry so nebula.exe can
host the GPUI UI layer on a dedicated thread (route C: one program, GPUI
provides the component layer). The standalone bin remains for development.
Off by default; enabled via the gpui-shell feature + NEBULA_GPUI_SHELL=1.
2026-08-13 00:29:39 +08:00
kuddev 40a1f9edb2 refactor(gpui): fold terminal panel into workspace view, expand palette
Removes the standalone panel.rs in favor of workspace-managed terminal
views, extends the color palette mapping, and registers the config module.
2026-08-13 00:16:19 +08:00
kuddev c520bc6de2 feat(terminal): renderer-agnostic render contract (nebula_terminal::render)
Layering: Term (model) -> render contract -> frontend backend.

- CellMetrics + TerminalViewport: floor division, minimum grid, exact
  text-area pixels (cols x cell_width) for PTY/app reporting.
- ViewportTracker: resize coalescing, monotonic revisions (a stale resize
  can never override a newer one), and pixel-only changes still reported
  to the PTY even when rows/cols are unchanged.
- RenderSnapshot: single-lock plain-data capture (bg runs, selection runs,
  wide-aware text segments, cursor, OSC color-override copy). Colors stay
  as vte values; frontends resolve them outside the lock.
- gpui element/view now consume the contract: grid math single-sourced in
  the tracker, cursor-cell isolation for block-cursor inversion. Swapping
  the paint backend later touches element.rs only.
- 6 contract tests (segmentation, cursor isolation, viewport rules).
2026-08-12 23:54:14 +08:00
kuddev b5ff2de9b7 feat: merge nebula_gpui into the root workspace (crossfont 0.9.0 unblocks links)
- crossfont 0.8.1 -> 0.9.0: upstream bumped yeslogic-fontconfig-sys to ^6.0,
  aligning with gpui's zed-font-kit so a single 6.0.1 owns links=fontconfig.
- wayland CSD switches to the ab_glyph flavor so sctk-adwaita 0.10 stops
  pulling crossfont ^0.8 (and yeslogic ^5) back into the graph. Linux-only
  decoration text; Windows/macOS unaffected.
- Drop the workspace exclude and nebula_gpui's member-level lockfile; one
  lockfile now holds gpui 0.2.2 + crossfont 0.9.0. Both bins compile.
- ARCHITECTURE.md: the "unresolvable conflict" section now records the fix.
2026-08-12 23:52:53 +08:00
kuddev 3240727d8d docs: record proven fontconfig links conflict blocking workspace merge 2026-08-12 19:47:09 +08:00
kuddev 6d794f2f1c feat: multi-tab terminal workspace as the nebula-gpui main window
TerminalView now emits TitleChanged/Exited and owns session teardown
(Msg::Shutdown on removal, Drop as backstop). TerminalPanel adapts the
terminal to the dock Panel contract with a title_suffix close button,
since a root-level TabPanel never renders its own. NebulaWorkspace
wires TitleBar + tabs with ctrl-shift-t/w hotkeys (passed through the
terminal key handler), closes tabs on shell exit, and quits when the
last tab closes. The component gallery moves to a secondary window.
2026-08-12 19:26:46 +08:00
kuddev 433cf63571 feat: terminal vertical slice — nebula_terminal rendered as GPUI element
ConPTY + EventLoop wired through a futures channel into a GPUI entity;
custom Element paints the grid from a single-lock snapshot (bg runs,
force_width text segments for CJK alignment, cursor, selection); view
handles keyboard encoding, mouse selection, wheel scroll, clipboard,
and IME via EntityInputHandler. No fork of either side; boundary stays
symmetric (no GPUI types in nebula_terminal, no terminal types outside
src/terminal).
2026-08-12 18:02:51 +08:00
kuddev 9863cff05b feat: add isolated GPUI component foundation 2026-08-12 15:06:26 +08:00