• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

umputun / agterm / 33350906889
97%

Build:
DEFAULT BRANCH: master
Ran 31 Aug 2026 02:34AM UTC
Jobs 1
Files 97
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

31 Aug 2026 02:30AM UTC coverage: 97.939% (-0.02%) from 97.954%
33350906889

push

github

web-flow
Add session.swap to exchange a split's two panes (#513)

adds `session.swap`, which exchanges a split session's two terminals in both screen position and primary/split model role. Reachable from the control API, `agtermctl`, the command palette and the View menu.

position and role move together on purpose. A view-only reorder would leave `left`/`right` addressing disagreeing with what is physically left and right; a role-only swap would change what `tree` reports with nothing visible happening.

**what it does**

`session.swap` requires `hasSplit`, so a hidden split swaps too and the exchange shows on re-show. Focus follows the terminal, while the divider ratio and axis stay with the layout. Overlays, their exit codes, pane-tagged status, creation identity and wait policy all move with their terminal. The command is deliberately not idempotent: two calls restore the prior state, snapshot included.

**what it needed underneath**

the exchange itself is small. Most of the work is the seams around it.

Panes had no split twin for `initialCommand`/`commandWait`, so a swapped `--command` session would have re-run its command on the wrong side after a relaunch. `splitInitialCommand`/`splitCommandWait` are persisted, cleared by `closeSplit`, promoted by `closePrimaryPane`, and the wait policy now travels through `CommandRestore.RestorePlan` so both surface factories consume one value.

Three SwiftUI host families rendered a swappable surface with a fixed id and would have hosted a torn-down view afterwards: the deck's split pane, both pane-overlay panels, and zoom's slots. One shared `PaneHostIdentity.token` fixes all three; the dashboard already had the cure and now shares it.

`TerminalSurface` gains nothing. The role flip arrives as a separate `PaneRoleMutableSurface` capability and `ControlActions.swapSessionPanes` carries a default, so the `agterm-linux` fork that consumes `agtermCore` as a library still builds.

`session text` gains `--pane-id`, and t... (continued)

101 of 104 new or added lines in 11 files covered. (97.12%)

8316 of 8491 relevant lines covered (97.94%)

4805699.26 hits per line

Uncovered Changes

Lines Coverage ∆ File
3
96.92
-0.38% agtermCore/Sources/agtermCore/ControlDispatcher.swift
Jobs
ID Job ID Ran Files Coverage
1 33350906889.1 31 Aug 2026 02:34AM UTC 97
97.94
GitHub Action Run
Source Files on build 33350906889
  • Tree
  • List 97
  • Changed 11
  • Source Changed 11
  • Coverage Changed 10
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #33350906889
  • db62080d on github
  • Prev Build on master (#33302277790)
  • Next Build on master (#33371092483)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc