Commit Graph
27 Commits
Author SHA1 Message Date
Kuddev a455f7020e Merge branch 'main' into review/markdown-stress-20260919 2026-09-19 22:25:22 +08:00
kuddev 446d09cdc1 docs(governance): layer agent rules and causal notes 2026-09-19 20:21:56 +08:00
kuddev 1e0a36b551 test(markdown): add an isolated memory and scrolling stress runner 2026-09-19 19:59:54 +08:00
kuddev b69545caa5 feat: add document workflows and configurable AI toasts 2026-09-11 21:23:07 +08:00
kuddev 9cb027e2dd feat: complete Pebrel 1.6 branding and terminal workflows 2026-09-07 16:31:28 +08:00
kuddev 461975bfb2 docs: align Pebrel identity and contribution guidance
Use the public project name consistently while retaining compatibility
identifiers and existing download names. Publish the contribution,
architecture and translation contracts with their enforcement limits.
Synchronize the bilingual unreleased changelog and release notes.
2026-09-06 16:54:47 +08:00
kuddev 0e6acf89e3 wip: prepare cross-platform previews and workspace improvements
Capture cross-platform startup, SSH credentials, preview packaging gates, and current SSH, answer-reader, math, and icon work. Remove unrelated product comparisons from public source comments.

Preview helper and shell tests pass locally. Native macOS/Linux build, test, and package validation remain pending in CI. Local Windows-only hooks cannot execute under WSL; content and workflow checks were run separately.
2026-09-05 14:51:55 +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 f44997e353 feat(runtime): add agent control loop 2026-08-19 20:12:33 +08:00
kuddev 9b6f899707 chore: ignore local commit hooks 2026-08-19 18:11:03 +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 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 d1c73fd499 Merge PR #26: configurable terminal cell width mode 2026-08-11 21:56:14 +08:00
kuddev f9ec613793 chore: clean internal comparison wording 2026-08-10 21:14:21 +08:00
kuddev e1b4d67bfb chore: clean comparison wording from comments and untrack private specs
比较性引用改成描述性说法;协议与格式标识、许可证要求的署名保留。

docs/specs/ 内含后续版本路线图,改为 gitignore,不再进仓库。
CHANGELOG 去掉「排期在 0.9 之后」一节,同样是剧透。
2026-08-03 08:57:11 +08:00
kuddev a142285986 chore: 忽略打包目标目录与探针产物
`target-pack/` 是 `package-release.ps1 -TargetDirectory` 的独立 cargo target
目录——分开是为了打包不去动主 target 的增量缓存,代价是它一直挂在
`git status` 里。`probe_*.png` 与 `.tmp-*.html` 同理:单轮设计对照用的证据和
原型页,不属于产品(43ea25f 已经为原型页做过一次同样的裁定,这次落到规则里,
不再靠每次手动挑)。
2026-07-31 23:42:34 +08:00
kuddev 6f02d6ba08 chore: drop comparison wording and keep the probe copy out of the repo
The visual work was derived by reading another terminal's screenshots. That
derivation is internal: the repo ships a product, and a product's source
should not carry a competitor's name in its comments.

The conclusions were already written into the ui/ layer contract and the
call-site comments, which stand on their own — the removed prose was the
argument, not the rule. docs/nebula-visual-design-language.md is untracked
rather than deleted (same treatment as docs/future_planning.md): its section
structure is organised around per-screenshot evidence, so rewording the name
would leave chapters that no longer explain what they are looking at.

.probe/ and .run/ are ignored too. The probe directory holds a ~310 MB copy
of the debug binary, which must never reach a commit.
2026-07-29 21:11:45 +08:00
kuddev 7559e1c997 chore: checkpoint unfinished settings and SSH UI work 2026-07-28 22:26:18 +08:00
kuddev 7ef5b8ccf9 feat: workspace export/import with split-tree session restore; fix oversized startup window
Session v4 doubles as the workspace file format: tabs persist their full
split tree, per-pane cwds and launch identity (shell/profile/SSH), so both
crash recovery and exported workspaces rebuild real layouts.

Startup now always sizes the window from the config base font at the
standard 116x30 grid: the persisted Ctrl+wheel zoom no longer inflates the
first frame, and the saved window size/maximized state is write-only.
2026-07-25 21:33:49 +08:00
kuddev 1b3c93ca58 chore: prepare v0.7.0 release
Wallpaper controls (fit/alignment/opacity), shared widget components
(combobox/slider/toggle/spinner), icon geometry module, surface opacity
policy, and the backdrop layer fix so wallpaper opacity fades toward the
theme background instead of exposing the desktop behind the window.
2026-07-24 10:28:20 +08:00
kuddev 504b961a4b docs: simplify release notes and exclude internal notes 2026-07-19 18:01:44 +08:00
kuddev 8f1a30e0bd chore: remove internal documentation 2026-07-16 23:31:18 +08:00
kuddev 6f104206b7 Nebula Terminal 0.2.1 2026-07-11 13:04:59 +08:00