Commit Graph

92 Commits

Author SHA1 Message Date
chin 7f4de7d77b docs+comment: clarify copy-tab connection-reuse + menu order from review
- Spec: copies inherit copySession's connection-reuse behavior (SSH reuse),
  not 'independent' — correct the inaccurate wording.
- Spec/plan: Copy Tab sits after Rename, matching the session-tab menu order.
- useSessionState: document the sessionIdMap-completeness precondition behind
  the buildCopiedWorkspace 'as string' casts.
2026-07-29 22:02:20 +08:00
chin 3dcf38bd14 docs(plan): implementation plan for copying multi-pane workspace tabs 2026-07-29 20:42:05 +08:00
chin 63d1e4e541 docs(spec): design for copying multi-pane workspace tabs
Extends Copy Tab to workspace (split/focus) tabs: recreate the layout
tree with fresh per-pane sessions, each inheriting its source pane's cwd.
2026-07-29 20:30:19 +08:00
chin 2616c5043e chore: drop internal plan doc from PR (gitignored scratch) 2026-07-29 15:24:05 +08:00
chin 2c22f8d94d docs: implementation plan for clone-tab/split-cwd/local-terminal-icon 2026-07-29 14:38:10 +08:00
chin 5a14bb73d0 docs: design for clone-tab, split-inherits-cwd, local-terminal quick icon 2026-07-29 14:28:47 +08:00
陈大猫 8cdc887383 [Feature] Optimize large Vault imports and group management (#2540)
* feat(vault): optimize large imports and vault rendering (#2526)

* fix(vault): address import review findings

* fix(vault): preserve filtered selection and import consistency

* fix(vault): complete import review fixes

* fix(vault): make import cancellation concurrency-safe

* fix(vault): preserve concurrent edits during import rollback

* fix(vault): handle concurrent saves and reset import target

* fix(vault): drop empty source groups after targeted import

* fix(vault): preserve sidebar accessibility check

* fix(vault): correct group counts and selection semantics

* fix(vault): preserve imports across concurrent saves

* fix(vault): preserve concurrent group changes during import

* fix(vault): close concurrent import edge cases

* fix(vault): retry rollback and enable tree keyboard selection

* fix(vault): retain concurrent sources and visible selections

* fix(vault): merge imported sources with persisted state

* fix(vault): serialize duplicate managed imports

* fix(vault): keep imports non-blocking and grouped views responsive

* fix(vault): preserve concurrent managed sessions

* fix(vault): preserve concurrent groups and keyboard access

* fix(vault): serialize cross-window import commits

* fix(vault): make import commits atomic

* fix(vault): surface import rollback failures

* fix(vault): recover import transactions safely

* fix(vault): commit imported hosts atomically

* fix(vault): preserve unfinished import recovery

* fix(vault): wait for edits and preserve keyboard focus

* fix(vault): protect group settings and lock fallback

* fix(vault): keep virtual focus aligned

* fix(vault): complete keyboard navigation semantics

* fix(vault): finish keyboard navigation

* fix(vault): close large-vault concurrency gaps

* fix(vault): finish large-vault interaction safety

* fix(vault): harden filtered large-vault flows

* fix(vault): keep managed deletion atomic

* fix(vault): coordinate managed file deletion

* fix(vault): close cross-window managed races

* fix(vault): refresh persisted managed state

* fix(vault): preserve distinct imported sessions

* fix(vault): keep failed progress accurate

* fix(vault): keep search tree collapsible

* fix(vault): close final review gaps

* fix(vault): reveal filtered tree matches

* fix(vault): close final review edge cases

* fix(vault): preserve concurrent import changes

* fix(vault): serialize all vault saves under one cross-window lock

Hold the shared import lock for ordinary host/group/key writes and the
full import commit path so check-then-write can no longer interleave
across windows. Make the lock re-entrant in-window to avoid nested
deadlocks, and announce large tree item positions for screen readers.

* fix(vault): keep concurrent saves serialized and fix tree ARIA siblings

Stop treating same-window concurrent work as nested lock re-entry; nested
helpers skip re-acquire only when the outer critical section already owns
the lock. Announce treeitem position among true siblings at each level.

* fix(vault): require explicit lock handle for nested saves

Independent concurrent vault writes always queue on the shared lock.
Nested import/deletion helpers continue only when they pass the active
lock handle from their outer critical section.

* fix(vault): avoid lock deadlocks with encrypt-then-write saves

Encrypt outside the shared lock and only acquire it for the final write so
importers waiting on pending work cannot deadlock on lock acquisition.
Retry plugin commits outside the lock when concurrent edits intervene, and
rebase imports onto in-memory host edits when disk is still stale.

* fix(vault): release import lock before concurrent-edit retries

Drain encrypt work under the lock and full disk writes only outside it.
When an import or group deletion is superseded by a concurrent edit, release
the shared lock so that edit can finish, then retry. Functional group updates
now base on the latest in-memory snapshot while a write is still pending.

* fix(vault): tidy import dialog destination and SecureCRT prompts

Move import destination settings behind a bottom-left control with its own
step, and keep SecureCRT guidance in a dedicated chooser instead of inside
the format tile.

* test(vault): fix import dialog layout guard test under ESM

* fix(vault): simplify import destination footer control

Replace the heavy two-line destination card with a single quiet text link
that shows the current placement choice.

* fix(vault): simplify import destination settings page

Drop the nested card and duplicate headings. Show only the three placement
choices, finish immediately for preserve, and keep Done only when a group
name is needed.

* fix(vault): simplify SecureCRT chooser and iconify destination options

Remove redundant SecureCRT prompt copy while keeping the two source cards
with icons. Add small folder icons to the import-location choices so that
page is less plain.

* fix(vault): use SecureCRT logo in import chooser header

* fix(vault): drop border around SecureCRT import logo

* fix(vault): clarify import location footer with icon and label

Show a folder icon plus "Import location · current choice" so the control
is recognizable without becoming a heavy card again.

* fix(vault): remove border from import progress status icon
2026-07-28 00:54:03 +08:00
陈大猫 1801bfe427 chore: update star history charts [skip ci] (#2549)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-27 22:09:51 +08:00
陈大猫 f91913171b fix(ci): use GITHUB_TOKEN for star history PRs (#2548)
RELEASE_TOKEN can push the chart branch and read stargazers, but lacks
createPullRequest. Keep it for git push; open/merge PRs with GITHUB_TOKEN.
2026-07-27 22:08:20 +08:00
陈大猫 044a2851d1 fix(ci): update star history via PR on protected main (#2547)
Direct pushes to main fail with GH006 because the branch requires PRs
(with admin enforcement). Open or reuse chore/star-history and squash-merge.
2026-07-27 22:05:52 +08:00
netcatty-bot 78bfa01fec fix: address Codex review on PR #2537 2026-07-27 10:00:03 +00:00
bincxz 8f246670e4 feat(settings): add searchable font pickers 2026-07-27 17:30:56 +08:00
bincxz ac8ef5de38 fix(plugins): complete provider contract and lifecycle handling 2026-07-27 13:55:43 +08:00
ryan-wong-coder 874fb255cc fix(plugins): bind connection providers by operation 2026-07-26 01:51:18 +08:00
ryan-wong-coder b9fc1dfb7f fix(plugins): address provider review gaps 2026-07-26 00:44:13 +08:00
bincxz e46cb7711e fix(docs): restore star history chart with static SVGs
Embed self-hosted light/dark star history charts after api.star-history.com
stopped serving public embeds, and add a weekly workflow that refreshes them
via RELEASE_TOKEN.
2026-07-25 21:02:47 +08:00
bincxz 3962a87a23 docs(sftp): translate transfer research to English 2026-07-25 12:31:03 +08:00
bincxz 2de1f901bb refactor(sftp): unify transfer transactions 2026-07-25 00:32:26 +08:00
bincxz a5a1edb9ed docs(sftp): clarify split transfer guarantees 2026-07-24 22:31:19 +08:00
bincxz 43009240bd docs(sftp): compare transfer architectures 2026-07-24 22:27:48 +08:00
陈大猫 67f8108713 feat(plugins): add reviewed privileged terminal data pipeline (#2402)
* feat(plugins): add privileged terminal data pipeline

* fix(plugins): harden terminal interceptor lifecycle

* fix(plugins): close terminal interceptor lifecycle gaps

* fix(plugins): preserve terminal interceptor state transitions

* fix(plugin): close terminal pipeline lifecycle gaps

* fix(plugin): harden terminal interceptor startup

* fix(plugin): isolate terminal output route attempts

* fix(plugin): isolate reused terminal sessions

* fix(plugin): harden terminal interceptor boundaries

* fix(plugin): harden terminal replay metadata

* fix(plugin): preserve terminal replay provenance

* fix(plugin): close terminal pipeline lifecycle races

* fix(plugin): harden terminal route handoff

* fix(plugin): contain terminal handoff failures

* fix(plugin): route terminal attachment through RPC

* fix(plugin): validate terminal attachment RPC

* fix(plugin): close unexpected runtime ports

* fix(plugin): canonicalize terminal data frames

* fix(plugin): close terminal pipeline lifecycle gaps

* fix(plugin): close terminal interceptor review gaps

* fix(plugin): harden terminal interceptor protocol handling

* fix(plugin): preserve terminal flow compatibility

* fix(plugin): preserve terminal protocol accounting

* fix(plugin): bound terminal interceptor lifecycle

* fix(plugin): close terminal interceptor review gaps

---------

Co-authored-by: ryan-wong-coder <wangsiyuan19990317@gmail.com>
2026-07-23 09:42:47 +08:00
bincxz 569917a05f test(terminal): cover restored startup command policy 2026-07-21 14:04:40 +08:00
bincxz 173730e633 fix(terminal): run host startup command after restore
Closes #2342
2026-07-21 13:55:30 +08:00
bincxz e56ff806fd fix(plugins): complete terminal provider contracts 2026-07-21 10:44:36 +08:00
ryan-wong-coder 2a31e7c409 fix(plugins): close terminal provider lifecycle gaps 2026-07-21 01:52:34 +08:00
ryan-wong-coder 17c7286be8 fix(plugins): complete terminal provider contracts 2026-07-20 22:40:48 +08:00
ryan-wong-coder 10737bd655 feat(plugins): complete ordinary terminal providers 2026-07-20 22:40:48 +08:00
ryan-wong-coder f4de781ef0 feat(plugins): publish terminal command completion 2026-07-20 22:40:48 +08:00
ryan-wong-coder 8d364abe04 fix(plugins): preserve terminal transport identity 2026-07-20 22:40:48 +08:00
ryan-wong-coder af379a75ee fix(plugins): align terminal provider lifecycle 2026-07-20 22:40:48 +08:00
ryan-wong-coder 3ff40b4d2e fix(plugins): harden terminal provider rendering 2026-07-20 22:40:48 +08:00
ryan-wong-coder 86df60f6d1 feat(plugins): add terminal provider API 2026-07-20 22:40:48 +08:00
ryan-wong-coder cd5a15938d fix(plugins): preserve tabs during context refresh 2026-07-20 14:54:27 +08:00
ryan-wong-coder aa4c653bf7 fix(plugins): preserve localized view lifecycles 2026-07-20 13:49:18 +08:00
ryan-wong-coder c7d15a6f52 fix(plugins): complete native contribution lifecycle 2026-07-20 12:39:29 +08:00
ryan-wong-coder 50b7c315fd fix(plugins): complete contribution lifecycle and native UI 2026-07-20 12:39:29 +08:00
ryan-wong-coder c516930577 fix(plugins): enforce contribution ownership boundaries 2026-07-20 12:39:29 +08:00
ryan-wong-coder e1b3e3ac42 fix(plugin-ui): harden contribution contexts and view state 2026-07-20 12:39:29 +08:00
ryan-wong-coder 6d0475bf3e fix(plugins): harden contribution lifecycle and activation 2026-07-20 12:39:29 +08:00
ryan-wong-coder 71a12f2786 fix(plugins): complete UI contribution lifecycle 2026-07-20 12:39:29 +08:00
ryan-wong-coder e6e9ffdd7a feat(plugins): add native UI contributions 2026-07-20 12:39:29 +08:00
ryan-wong-coder fbe3d50e39 docs(plugins): align companion runtime selection 2026-07-19 18:07:58 +08:00
ryan-wong-coder a6e5b43d14 fix(plugins): close companion placement gaps 2026-07-19 18:04:01 +08:00
ryan-wong-coder f51e5b28e3 fix(plugins): close activation and companion trust gaps 2026-07-19 18:04:01 +08:00
ryan-wong-coder 6e79ef9ff9 fix(plugins): harden capability authorization 2026-07-19 18:04:01 +08:00
ryan-wong-coder 33ad8eea20 fix(plugin): harden runtime cleanup containment 2026-07-19 18:04:01 +08:00
ryan-wong-coder 688ae1902b fix(plugin): defer protected resource probes 2026-07-19 18:04:01 +08:00
ryan-wong-coder 7bd58ba157 fix(plugin-security): close reviewed containment gaps 2026-07-19 18:04:01 +08:00
ryan-wong-coder fec3c26f56 fix(plugin-security): close reviewed authorization races 2026-07-19 18:04:01 +08:00
ryan-wong-coder 614476b947 feat(plugins): add permission security boundary 2026-07-19 18:04:01 +08:00