Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/release_configurations.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"is_prerelease": false,
"is_autopush": false,
"release_base_name": "Zaplex",
"release_body_text": "Zaplex 1.1.1 — signed and notarized macOS distribution",
"release_body_text": "Zaplex 1.2.0 — signed and notarized macOS distribution",
"changelog_slack_channel": "",
"gcs_cache_control_value": "",
"web_gcs_bucket_prefix": ""
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/test-dmg.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ on:
dmg_tag:
description: "GIT_RELEASE_TAG (bestimmt den remote-server-Pfad auf dem Ziel-Host)"
type: string
default: v1.1.1
default: v1.2.0
fast:
description: "Debug-Profil für Mac-App und Linux-Daemon. Nur für schnelle Entwicklerprüfung; für Abnahme-DMGs ausgeschaltet lassen."
type: boolean
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/zap_release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ on:
release_tag:
description: "Release tag; must match VERSION"
type: string
default: v1.1.1
default: v1.2.0
required: true

# Build and metadata jobs only need repository read access. The publisher job
Expand Down
4 changes: 3 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

This document records key changes: the Zap/Warp release history inherited before the zaplex fork (translated from the original Chinese), followed by zaplex's own work on top of it. Only functional commits are listed; internal dev/stable rolling tags are omitted.

## [1.1.1] — 2026-09-23
## [1.2.0] — 2026-10-06

- Tabs und Panes haben ein gemeinsames Startmenü: „+“ und alle vier Split-Richtungen zeigen Terminal, „Neuer Agent…“, die Favoriten und neu „Weitere Hosts“ mit allen übrigen registrierten Hosts. Aus einem Split heraus startet jeder Eintrag im neuen Pane, auch der Agent; Konto, Startabsicht und Prompt hängen an genau diesem Pane. Tab-spezifische Einträge (Tab-Konfigurationen, Docker-Sandbox, Worktree-Konfiguration, geschlossene Session) bleiben im „+“-Menü.

- Die Integrationssuite (#472) initialisiert englische Texte vor dem Start und bedient beim Teilen eines Panes den echten Hostpicker. SSH-Prüfungen nutzen eigene kurzlebige Konten auf einem lokalen CI-SSH-Server; Passwortanmeldung, Shell-Bootstrap und ProxyCommand bleiben Teil der Prüfung.

Expand Down
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ zaplex is a fork of [Zap](https://github.com/zerx-lab/zap) — the open-source,

## Status & roadmap

Zaplex 1.1.1 is the version prepared by this source tree. The table reflects
Zaplex 1.2.0 is the version prepared by this source tree. The table reflects
the integrated source state; supported release artifacts are built, signed and
published by the release workflow:

Expand All @@ -101,7 +101,7 @@ Every designed item has a dated design doc in [`docs/superpowers/`](docs/superpo

## Install

Once published, download Zaplex 1.1.1 from
Once published, download Zaplex 1.2.0 from
[Releases](https://github.com/byte5ai/zaplex/releases). The macOS DMG is built
in GitHub Actions, signed with Developer ID, notarized by Apple, and shipped
together with its matching Linux host daemon. Nothing needs to be installed
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.1.1
1.2.0
2 changes: 1 addition & 1 deletion app/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ description = "The terminal cockpit for AI coding agents on remote machines"
edition = "2021"
autobins = false
name = "warp"
version = "1.1.1"
version = "1.2.0"
publish.workspace = true
license.workspace = true

Expand Down
4 changes: 2 additions & 2 deletions app/DockTilePlugin/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>1.1.1</string>
<string>1.2.0</string>
<key>CFBundleVersion</key>
<string>1.1.1</string>
<string>1.2.0</string>
<key>NSPrincipalClass</key>
<string>ZapDockTilePlugin</string>
<key>CFBundleInfoDictionaryVersion</key>
Expand Down
4 changes: 2 additions & 2 deletions app/assets/resources/mac/CLI-Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.1.1</string>
<string>1.2.0</string>
<key>CFBundleVersion</key>
<string>1.1.1</string>
<string>1.2.0</string>
<!-- This is marked as background-only so that macOS won't add it to the Dock -->
<!-- See https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/LaunchServicesKeys.html#//apple_ref/doc/uid/20001431-109268 and https://developer.apple.com/documentation/bundleresources/information-property-list/lsbackgroundonly?language=objc -->
<key>LSBackgroundOnly</key>
Expand Down
2 changes: 2 additions & 0 deletions app/i18n/de/warp.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -4076,6 +4076,8 @@ workspace-remote-pty-already-open = Dieses Remote-PTY ist bereits geöffnet, abe
workspace-remote-fallback-split-target-changed = Der Remote-Fallback wurde abgebrochen, weil sich das ursprüngliche Split-Ziel geändert hat.
workspace-split-target-changed = Der Split wurde nicht geöffnet, weil sich seine Pane verschoben hat oder geschlossen wurde.
workspace-split-host-already-connecting = { $host } wird bereits verbunden. Öffne den Split erneut, sobald die Verbindung steht.
workspace-split-agent-single-launch = Ein Split nimmt genau einen Agenten auf. Wähle ein einzelnes Konto.
workspace-launch-more-hosts = Weitere Hosts
workspace-remote-agent-route-validation-unavailable = Der Daemon kann diese Agent-zu-PTY-Route nicht validieren.
workspace-remote-daemon-connection-unavailable = Die Daemon-Verbindung ist nicht verfügbar; aktualisiere die Agent-Sessions.
workspace-remote-pty-agent-changed = Der Vordergrund-Agent dieses PTYs hat sich geändert. Aktualisiere die Agent-Sessions, bevor du es erneut anhängst.
Expand Down
2 changes: 2 additions & 0 deletions app/i18n/en/warp.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -4421,6 +4421,8 @@ workspace-remote-pty-already-open = This remote PTY is already open, but its exi
workspace-remote-fallback-split-target-changed = Remote fallback was cancelled because its original split target changed.
workspace-split-target-changed = The split was not opened because its pane moved or closed.
workspace-split-host-already-connecting = { $host } is already connecting. Open the split again once it is connected.
workspace-split-agent-single-launch = A split holds exactly one agent. Choose a single account.
workspace-launch-more-hosts = More hosts
workspace-remote-agent-route-validation-unavailable = The daemon cannot validate this agent-to-PTY route.
workspace-remote-daemon-connection-unavailable = The daemon connection is unavailable; refresh Agent Sessions.
workspace-remote-pty-agent-changed = This PTY's foreground agent changed. Refresh Agent Sessions before attaching again.
Expand Down
4 changes: 2 additions & 2 deletions app/src/bin/zaplex.rs
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,9 @@ embed_plist::embed_info_plist_bytes!(r#"
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.1.1</string>
<string>1.2.0</string>
<key>CFBundleVersion</key>
<string>1.1.1</string>
<string>1.2.0</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.developer-tools</string>
<key>NSHighResolutionCapable</key>
Expand Down
8 changes: 1 addition & 7 deletions app/src/integration_testing/native_workspace.rs
Original file line number Diff line number Diff line change
Expand Up @@ -264,13 +264,7 @@ pub fn split_local_right() -> TestStep {
TestStep::new("Split the real pane through its overflow menu and choose local")
.with_click_on_saved_position_fn(|app, window_id| overflow_id(app, window_id, 0))
.with_click_on_saved_position_fn(|_, _| crate::t!("keybinding-desc-pane-group-split-right"))
.with_click_on_saved_position_fn(|_, _| {
format!(
"{} · {}",
crate::t!("cockpit-spawn-card-host-local"),
crate::t!("common-current")
)
})
.with_click_on_saved_position_fn(|_, _| crate::t!("workspace-new-session-terminal"))
}

#[derive(Clone, Debug, PartialEq, Eq)]
Expand Down
10 changes: 2 additions & 8 deletions app/src/integration_testing/pane_group/step.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,19 +54,13 @@ pub fn move_pane_by_indices(
})
}

/// Completes the host picker opened by a split shortcut using the real local row.
/// Completes the launch menu opened by a split shortcut with its local Terminal entry.
pub trait LocalSplitTarget {
fn with_local_split_target(self) -> Self;
}

impl LocalSplitTarget for TestStep {
fn with_local_split_target(self) -> Self {
self.with_click_on_saved_position_fn(|_, _| {
format!(
"{} · {}",
crate::t!("cockpit-spawn-card-host-local"),
crate::t!("common-current")
)
})
self.with_click_on_saved_position_fn(|_, _| crate::t!("workspace-new-session-terminal"))
}
}
34 changes: 15 additions & 19 deletions app/src/pane_group/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4743,13 +4743,13 @@ impl PaneGroup {
PaneEvent::CloseAndFocus { pane_to_focus } => {
self.close_pane_and_focus(pane_id, *pane_to_focus, ctx);
}
// Pane-splitting events always create a new terminal pane, regardless of the original
// pane's type. This makes it easy to get a terminal session next to a non-terminal
// pane like a notebook. Once it's possible to open the same notebook more than once,
// we may revisit this so that splitting from a terminal pane starts a new session, but
// splitting from a notebook pane reopens the notebook side-by-side.
// Every split direction opens the workspace launch menu for the captured target; the
// chosen entry (local terminal, host, or agent) decides what the new pane runs.
PaneEvent::SplitLeft(chosen_shell) => {
self.insert_terminal_pane(Direction::Left, pane_id, chosen_shell.clone(), ctx);
ctx.emit(Event::SplitLaunchRequested {
target: self.capture_split_target(pane_id, Direction::Left),
chosen_shell: chosen_shell.clone(),
});
}
PaneEvent::SplitRight(chosen_shell) => {
ctx.emit(Event::SplitLaunchRequested {
Expand All @@ -4758,7 +4758,10 @@ impl PaneGroup {
});
}
PaneEvent::SplitUp(chosen_shell) => {
self.insert_terminal_pane(Direction::Up, pane_id, chosen_shell.clone(), ctx);
ctx.emit(Event::SplitLaunchRequested {
target: self.capture_split_target(pane_id, Direction::Up),
chosen_shell: chosen_shell.clone(),
});
}
PaneEvent::SplitDown(chosen_shell) => {
ctx.emit(Event::SplitLaunchRequested {
Expand Down Expand Up @@ -7221,18 +7224,11 @@ impl TypedActionView for PaneGroup {
None
}
};
match direction {
Direction::Right | Direction::Down => {
let pane_id = self.focused_pane_id(ctx);
ctx.emit(Event::SplitLaunchRequested {
target: self.capture_split_target(pane_id, *direction),
chosen_shell,
});
}
Direction::Left | Direction::Up => {
self.add_terminal_pane(*direction, chosen_shell, ctx);
}
}
let pane_id = self.focused_pane_id(ctx);
ctx.emit(Event::SplitLaunchRequested {
target: self.capture_split_target(pane_id, *direction),
chosen_shell,
});
}
Remove(view_id) => self.close_pane_with_confirmation(*view_id, ctx),
RemoveActive => self.close_active_pane_with_confirmation(ctx),
Expand Down
18 changes: 18 additions & 0 deletions app/src/workspace/action.rs
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,21 @@ pub enum WorkspaceAction {
OpenSshTerminalByNode {
node_id: String,
},
/// Launch-menu choice from a pane split: open a local terminal at the split
/// target captured when the split launch menu opened.
SplitLaunchLocal,
/// Launch-menu choice from a pane split: open a registered host at the
/// captured split target, resolving the connection by its `node_id`.
SplitLaunchHost {
node_id: String,
},
/// Launch-menu choice from a pane split: open the Spawn-Karte whose single
/// launch lands at the captured split target instead of a new tab.
/// `registry_node_id`/`host` pre-scope the card like [`Self::OpenSpawnCard`].
SplitLaunchSpawnCard {
registry_node_id: Option<String>,
host: Option<String>,
},
/// Open an SFTP file-manager pane for a registered SSH host, resolving the
/// connection by its stable registry node id. Dispatched by the visible
/// "Files" action on a Conductor host node.
Expand Down Expand Up @@ -1057,6 +1072,8 @@ impl WorkspaceAction {
| AddTerminalTab { .. }
| OpenSshTerminal { .. }
| OpenSshTerminalByNode { .. }
| SplitLaunchLocal
| SplitLaunchHost { .. }
| OpenSftpPaneByNode { .. }
| OpenLocalFileManager { .. }
| ToggleSshManager
Expand Down Expand Up @@ -1262,6 +1279,7 @@ impl WorkspaceAction {
| CreateReviewPr { .. }
| LaunchAgent { .. }
| OpenSpawnCard { .. }
| SplitLaunchSpawnCard { .. }
| RunCockpitPaletteTarget { .. }
| OpenFileInEditor { .. }
| OpenReadOnlyTextInEditor { .. }
Expand Down
Loading
Loading