Commit Graph
220 Commits
Author SHA1 Message Date
kuddev 10be219f3e fix: improve GPUI blur and WSL integration 2026-08-20 23:07:14 +08:00
kuddev cb2a8e0256 Stabilize runtime control transport 2026-08-20 11:51:33 +08:00
kuddev 27f8ac3d52 Improve GPUI runtime control discovery 2026-08-20 10:36:19 +08:00
kuddev 109aa17bbd Extract workspace sidebar rendering 2026-08-20 06:32:24 +08:00
kuddev fb54723fe7 Refactor runtime control modules 2026-08-20 06:32:02 +08:00
kuddev f0597861cc Fix managed agent prompt submission 2026-08-20 06:11:01 +08:00
kuddev 8e80043ba5 Add transactional managed agent worktrees 2026-08-20 04:37:33 +08:00
kuddev fafb2a5ca5 feat(runtime): report pane lifecycle events 2026-08-19 21:55:06 +08:00
kuddev 58ccbaa31f feat(runtime): add named agent control 2026-08-19 21:40:02 +08:00
kuddev 63f3b79bee feat(runtime): run commands with real exit status 2026-08-19 21:08:25 +08:00
kuddev 8004f1399d feat(runtime): add process and control-key APIs 2026-08-19 20:47:55 +08:00
kuddev f44997e353 feat(runtime): add agent control loop 2026-08-19 20:12:33 +08:00
kuddev 8d413cfe69 feat(svn): add GPUI workflow and repository support 2026-08-19 18:54:05 +08:00
kuddev f465110e67 fix(gpui): match legacy split pane chrome 2026-08-19 18:49:00 +08:00
kuddev 9b6f899707 chore: ignore local commit hooks 2026-08-19 18:11:03 +08:00
kuddev cadf402a14 style(gpui): normalize tab gutter line ending 2026-08-19 18:10:48 +08:00
kuddev e1ef154b00 fix(gpui): attach top tabs to terminal content 2026-08-19 18:04:09 +08:00
kuddev 82e7799d46 fix(gpui): align top tabs with title bar 2026-08-19 18:00:01 +08:00
kuddev 3e9d47076e feat(gpui): support tabs in the title bar 2026-08-19 17:19:21 +08:00
kuddev 9e50b19e32 fix: preserve WSL shells, IME input, and second-launch tabs 2026-08-19 16:27:32 +08:00
kuddev 98fce1b7f2 fix(gpui): blur toggle, sidebar tab width, shell import, README attribution
Blur never actually applied. GPUI's Windows backend drives
SetWindowCompositionAttribute's ACCENT_POLICY, not the DWM system
backdrop: Transparent maps to ACCENT_ENABLE_TRANSPARENTGRADIENT
(transparent, no blur) and Blurred to ACCENT_ENABLE_ACRYLICBLURBEHIND.
wallpaper.rs pinned the appearance to Transparent and relied on
DWMWA_SYSTEMBACKDROP_TYPE, which the accent policy overrides — so the
window went see-through without a trace of blur. Pick the appearance
from the setting, drop the DWM call so a single mechanism owns
compositing, and write Opaque once before the target appearance: Win11's
DWM caches the acrylic layer, and without tearing the accent policy down
first, turning blur off left the blur on screen.

Sidebar tab rows used w_full inside the overflow-hidden scroll list, so
the percentage width never resolved and rows fell back to shrink-to-fit
— row width tracked the file name, and rows carrying an icon shifted
their status slot right by one icon. Use an explicit pixel width derived
from the sidebar width, clip overflow, and derive the label budget from
that same number so truncation cannot push the row wider again.

Add "import terminal directory" as the pinned first row of the
default-shell dropdown, mirroring the old shell's
Display::import_terminal_directory (scan, upsert, save) with the
blocking IO on a background task. Imported profiles now appear in that
dropdown too, so an import has a visible result.

Restore the Alacritty attribution dropped when the acknowledgements were
rewritten for GPUI: the terminal core's provenance in the tech-stack
table, a paragraph beside the GPUI credit, and the derivation notice
pointing at THIRD-PARTY-NOTICES. Document the Markdown rendering
capabilities, and record the two gpui-component input patches in the
workspace manifest.
2026-08-19 14:28:27 +08:00
kuddev da1434be91 docs: complete the 1.1.0 changelog and release notes
The 1.1.0 entries covered only part of the cycle's 70 commits. Added what was
missing on both sides: the rebuilt GPUI shell as the default window, AI session
forking, AI turn-state detection, the full settings page, tab rename/color/
export, split panes with session restore, AI provider settings and the runtime
control CLI, built-in box-drawing geometry, mouse-semantics parity, and the
Markdown/image reader; on the fixed side the ConPTY cursor drift after resize,
the user PowerShell profile not loading (#30), the shrink-grow reflow round
trip, the cursor focus/blink state machine (#21), Esc reaching Claude Code,
the busy-process close confirmation, notification anchoring, acrylic opacity,
brand-icon scaling, Relaxed-mode glyph width, and tab launch identity.

Removed the multi-protocol remote backup entry: the feature is hidden in
1.1.0, so it must not be announced. Contributors now lists only the PR author.
The published release notes were updated in place with the same content.
2026-08-18 23:02:01 +08:00
kuddev 0eddfaf2f1 fix(gpui): draw the tab context menu once — shadow no longer stacks per tab
`ContextMenuExt::context_menu()` wraps the host element and keys its element
state by a hardcoded "context-menu" id. The wrapper's id enters the
GlobalElementId stack *before* the wrapped row's own `("sidebar-tab", ix)`,
so every sidebar tab row resolved to the same state — the same
`Rc<RefCell<ContextMenuSharedState>>`. Opening one menu set `open = true` for
all rows, and each row then re-rendered the same PopupMenu entity at the same
anchor. The panel is opaque so the stack was invisible, but the popover shadow
is not: its alpha composited once per tab. That is the whole of "the more tabs,
the thicker the right-click shadow" — no packaging or config involvement.

The tab menu now uses the same carrier as the file tree: rows only record the
anchor and index, and a single `deferred(anchored(PopupMenu))` is drawn from
the workspace root, so the component's own popover shadow stays single-layer.
The menu is dropped when the TABS section folds, and skipped when its captured
index no longer exists.

Alongside it:

- CHANGELOG: 1.1.0 gains this fix and issue #38 (two notify wrappers wrapping
  each other until Codex's config.toml reached 130MB); release date moves to
  2026-08-18.
- docs/release-notes/v1.1.0.md: release notes in the 1.0.0 format, with PR
  credits, reporter credits, and a pointer to the issue templates.
- README / THIRD-PARTY-NOTICES: GPUI and gpui-component are credited and
  declared — both Apache-2.0, compiled as lightly patched forks.
- .gitignore: ignore the whole `.probe-*/` family instead of one name at a time.
2026-08-18 22:37:16 +08:00
kuddev 95a79e7255 fix(gpui): 1.1.0 polish — SSH key dialog crash, GitHub HTML notes, package hardening
- SSH settings: the modal private-key file dialog now runs on a dedicated
  thread with results returned via oneshot and dropped when the editor
  generation changed. Running it inside the update borrow let the dialog's
  message pump re-enter the GPUI wndproc and panic the AppCell — the
  "click add private key, window vanishes" crash. Includes the reworked
  host editor panel and dialog owner-HWND plumbing (file_dialog, cli).
- Markdown reader: GitHub-flavored HTML semantics land in the local
  gpui-component fork (align="center" blocks, badge rows in one line,
  <br/> document order, <a><img/></a> badges keep image + link);
  changelog entries and the fork patch ledger recorded here.
- Packaging: freshness guards refuse binaries older than the newest
  source change, the staged exe must report the release version, all four
  ps1 carry a UTF-8 BOM, and the zip drops the 20MB fonts/ copy (the
  embedded font materializes on demand via ensure_bundled_font_on_disk).
- Size budget: release profile goes thin-LTO + codegen-units=1 +
  strip=symbols + opt-level=s with render/shaping/VT hot crates pinned at
  O3 — nebula.exe 136MB → 93MB, both packages 54.4MB → 28.6MB.
- Tab row: width no longer tracks content (w_full rows shipped in a fresh
  binary), tab bar collapse behavior tuned; probe/packaging scratch dirs
  ignored.
2026-08-18 19:30:35 +08:00
kuddev 282d41dd5d fix(gpui): flatten markdown GIFs and ship the GPUI shell in 1.1.0 packages
Convert local and HTTP GIF/WebP to a still PNG before gpui's img element, which panics when a frame index is reused on a static image. Release zip and installer now rebuild nebula with gpui-shell against the local component fork.
2026-08-17 23:59:32 +08:00
kuddev 2f4d2a3b4f chore: keep private research notes out of the published tree 2026-08-17 23:44:50 +08:00
kuddev c0f0096c9f chore: add issue templates and probe scripts
Issue templates (bug report / feature request) and the sidebar, tab-badge,
ink-extent and crop-zoom probe scripts used during 1.1.0 GPUI parity work.
Ignore git filter-branch's .git-rewrite scratch directory.
2026-08-17 23:36:13 +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 1ea860a2f7 fix(gpui): restore CC Esc and default-shell plus button
Win32 input emits Esc down+up with uChar=27 so Claude Code sees 0x1b;
kitty flags encode CSI 27u instead of a bare escape. The TABS plus
button now creates the configured default shell; the dots keep the
profile picker. Plus/dots use the old 20px chrome size.

Checkpoint remaining GPUI parity work in the tree (settings rewrite,
math overlay, SSH settings, SVN status).
2026-08-17 18:30:03 +08:00
kuddev 4dee70beb2 chore: checkpoint GPUI parity work 2026-08-16 19:46:45 +08:00
kuddev 09f224aa5f fix(gpui): confirm busy processes before window close 2026-08-16 11:36:34 +08:00
kuddev 300c98221a fix(gpui): anchor notifications to viewport bottom right 2026-08-16 11:32:50 +08:00
kuddev 145d833129 fix(gpui): match legacy spinner geometry 2026-08-16 11:28:50 +08:00
kuddev a81afed25f fix(gpui): pre-scale shell picker brand icons 2026-08-16 11:27:20 +08:00
kuddev ac7939968f fix(gpui): preserve tab launch identity and full row hit areas 2026-08-16 11:21:29 +08:00
kuddev 65f33a64c2 fix(gpui): restore font picker dropdown contract 2026-08-16 11:11:34 +08:00
kuddev bd33d411dc checkpoint: preserve GPUI interaction fixes 2026-08-16 10:55:41 +08:00
kuddev 6332b4854d fix gpui acrylic surface composition 2026-08-16 10:52:06 +08:00
kuddev 467c087dcd fix gpui settings controls and chrome interactions 2026-08-16 10:48:50 +08:00
kuddev dd76e797f6 feat(gpui): tab rename, color label, and single-tab export
三项标签元数据功能补齐旧壳能力边界:

• **F2 重命名**:侧栏行内编辑,Enter 提交 / Esc 取消 / 失焦提交。
  空串 = 恢复自动标签名(取 cwd 末段或文件名)。custom_name 与
  session v4 同字段,导出/恢复直通不需转换层。

• **标签颜色**:右键菜单尾部色板(首槽 A = 无色 + 7 枚品牌色,同色
  再点取消,当前色带选中环)。左侧栏行首画一条竖光条(4px 内缩、
  上下各留 7px、宽 2.5px + 圆角),默认标签不占视觉层级。旧壳
  context_menu::TAB_COLORS 原地复用(已设色的 tab 可迁移过来)。

• **导出单标签为工作区**:文件名取标签名,扩展名 .nebula-workspace.json,
  落盘走共享 v4 schema。只导出可恢复的终端标签(图片/文档/设置页
  从不进 session)。

**结构性约束**:tabs 与 tab_meta 必须同下标(长度一致),所有增删移
操作封口到 insert_tab_at / remove_tab_at / move_tab 三个 helper,
避免本地分叉时色条和名字错位到邻居身上。恢复期保留文件里的既有次序,
不套「新标签插入位置」策略;快照时从 meta 拿 custom_name/color。

右键菜单新增「导出为工作区…」「重命名」条目,action 字段只用来渲染
键帽(handler 存在时组件不会 dispatch 它),命令仍然作用在被右键的
那个 tab 上,而不是活动标签。菜单结构、分隔符与键帽对齐旧壳
display::context_menu 的 Tab 目标。

依赖 gpui-component 1b737db8(popover_shadow helper + Theme::shadow
门控),已推送 Kuddev/gpui-component nebula 分支并更新 Cargo.toml。
2026-08-15 21:07:19 +08:00
kuddev ad869bb3ea checkpoint: preserve settings layout parity work 2026-08-15 16:39:18 +08:00
kuddev 7a1a954b11 checkpoint: preserve GPUI migration baseline 2026-08-15 16:11:20 +08:00
kuddev 467abf259f fix(terminal): realign ConPTY cursor after resize 2026-08-15 14:43:09 +08:00
kuddev 4610610d12 checkpoint resize diagnostics and debug profile 2026-08-15 08:33:47 +08:00
kuddev 49c421dc8b feat(agent): fork live sessions from the tab sidebar 2026-08-14 09:53:00 +08:00
kuddev 5db39fcc0b feat(agent): add unified session registry and detection coverage 2026-08-14 09:48:19 +08:00
kuddev 7ab047ffbc feat(agent): add semantic detection and resumable sessions
Use declarative screen evidence beneath exact hooks so more AI clients surface working and blocked states, while safe resume and fork commands preserve agent sessions across restarts.
2026-08-13 23:48:30 +08:00
kuddev af41bae643 feat(gpui): full settings page - legacy section nav, every key-value setting migrated
Settings page now mirrors the legacy shell's layout: left section nav (Appearance / Profiles / Providers / SSH / Network / Interaction / Keymap / Advanced / Backup, same names and order as NebulaSettingsSection) with single-section content on the right. nebula-settings grows the full key-value surface ported verbatim from nebula_settings_load - language, shell, startup_directory, ghost/accept/completion_style, cjk_bold_regular, tab_reveal, density, new_tab_position, cell_width_mode, fetch, keep_session, restore_session, resume_ai, tray, blur, opacity, background (hex), panel_resize, ssh proxy trio, quick_terminal_hotkey - with factory defaults asserted item-by-item in tests (9 passing). Fixes a real unit bug: the font_size key stores LOGICAL PIXELS (legacy persists size/scale), not points - the GPUI shell was multiplying by 4/3 and rendering every terminal a third too large. Editors that depend on unmigrated subsystems (keymap table, SSH hosts, AI providers, backup) show explicit placeholders pointing at the legacy page; both shells keep reading and writing the same nebula_settings.txt.
2026-08-13 14:29:48 +08:00
kuddev 3d738f6bd8 feat(backup): multi-protocol remote backup - folder/WebDAV/S3/SFTP push and restore-latest
设置→备份页正式开放,新增「远程备份」组:口令保护归档(密文出境)可推送
到本地/网络目录、WebDAV、S3 兼容存储(SigV4,路径式,AWS/MinIO/R2/B2)或
SFTP(复用已保存 SSH 主机与认证)。归档时间戳命名、每端保留最近 10 份,
「恢复最新备份」取回最新一份after口令确认落盘。WebDAV/S3 密钥入 Windows
凭据管理器;打包/Argon2/网络全在后台线程(NebulaBackupRemote 事件模型与
WebDAV 同步一致)。OAuth 三家(GitHub/Drive/OneDrive)暂缓。SigV4 附
AWS 官方文档签名值的 KAT 守护。

同车提交并行会话的收尾:托盘 attention(tray.rs 与 main/window_context 接
线)、GPUI 侧栏设置按钮、sync 同步集补 resume_ai/tray 键。工作区整体通过
722 项测试后提交。
2026-08-13 14:04:08 +08:00
kuddev 076fd3addc feat(gpui): settings page as a singleton tab - components over shared semantics
First product-facing settings surface in the GPUI shell, kept strictly as a thin view: every semantic (keys, value domains, theme tables, persistence format) lives in the shared nebula-settings crate that was ported verbatim from the legacy shell. The pane edits theme / font size / cursor shape / cursor blink / copy-on-select / powerline via library Select/Checkbox/Button components and writes back through the new persist_keys (in-place key replacement preserving line order, unknown keys and comments - 3 new unit tests, 8/8 passing), so both shells keep reading the same nebula_settings.txt. Changes hot-apply: the workspace re-derives global Settings, pushes palette/font-size/fonts/copy_on_select into every open terminal view and re-syncs window chrome light/dark to the theme; cursor shape and font family take effect for new tabs, matching the legacy semantics. Entry points: titlebar gear button, Ctrl+comma, singleton settings tab in the sidebar.
2026-08-13 13:49:17 +08:00