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 .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"name": "conn",
"source": "./plugin",
"description": "Conn: MCP server + working-etiquette skill.",
"version": "0.8.7"
"version": "0.8.8"
}
]
}
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,19 @@

## Unreleased

## 0.8.8 — Preview · 2026-09-23

- Keep the complete agent command through supported cursor edits, including wrapped input and colored/wide prompts. History, completion and uncertain edits no longer let a screen-row fragment determine approval for a different physical command.
- Separate cancelling permission from clearing terminal input. A confirmed idle shell is interrupted and observed before reuse; other foreground programs retain the visible line for explicit recovery. New agent commands cannot silently attach to that remainder. Human typing cancels review and takes over the visible line.
- Return PTY write/flush failures as an uncertain outcome without replaying input. Publish a new terminal size only after the local PTY confirms it, and surface resize failures.
- Ignore obsolete screen-restoration callbacks. A delayed restoration shows an input-paused status and an explicit screen recovery action. Add real Vim edit/save, reconnect and long-buffer regressions.

한국어: 긴 명령과 색상·한글 프롬프트에서 커서를 편집한 뒤에도 승인 대상 전체 명령을 보존합니다. 불확실한 히스토리·자동완성 결과를 화면 한 행으로 추정해 실행하지 않습니다. 권한 취소와 입력 정리를 분리해 거절 뒤 남은 문자열에 새 명령이 이어 붙지 않게 했으며, 사람 입력은 승인을 취소하고 보이는 입력을 직접 이어받습니다. PTY 입력·크기 변경 실패를 전달하고, 오래된 화면 복원 콜백을 무시하며, 복원 지연 시 상태와 복구 동작을 표시합니다.

Validation and limits: [release verification](docs/release-0.8.8-validation.md). Linux tests exercise the production common UI, real Rust PTYs, persistent MCP, disposable OpenSSH and real Vim. **The user's macOS Vim freeze and SSH gateway rendering issue have not been reproduced or confirmed fixed on that Mac.** Native build/signing/notarization and package checks are separate from interactive Mac acceptance. Remote prompt configuration, UTF-8 locale, physical IME and installed-app upgrades remain separate validation boundaries.

한국어: [검증 기록](docs/release-0.8.8-validation.ko.md)에 범위를 구분했습니다. **사용자 Mac의 Vim 무응답과 실제 SSH 게이트웨이 화면 문제를 해당 Mac에서 재현·해결했다고 주장하지 않습니다.** 배포 서명·공증·패키지 검사는 대화형 실기 검증과 다릅니다.

## 0.8.7 — Preview · 2026-09-23

- Ship the shared UI/runtime refactor: native and standalone web mount the same Svelte app and use the same Rust owner, input ordering, permission decisions and lifecycle. A Linux x64 web archive includes the host, matching MCP CLI and UI; it runs locally without a build toolchain.
Expand Down
11 changes: 6 additions & 5 deletions Cargo.lock

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

6 changes: 3 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ members = ["crates/core", "crates/cli", "crates/frontend", "crates/web", "fronte
default-members = ["crates/core", "crates/cli", "crates/frontend", "crates/web"]

[workspace.package]
version = "0.8.7"
version = "0.8.8"
edition = "2021"
license = "MIT"
repository = "https://github.com/eggp-dev/conn"

[workspace.dependencies]
conn-core = { path = "crates/core", version = "0.8.7" }
conn-frontend = { path = "crates/frontend", version = "0.8.7" }
conn-core = { path = "crates/core", version = "0.8.8" }
conn-frontend = { path = "crates/frontend", version = "0.8.8" }
tokio = { version = "1", features = ["rt-multi-thread", "net", "io-util", "sync", "time", "macros", "signal"] }
portable-pty = "0.8"
vt100 = { path = "vendor/vt100", version = "0.15.2" }
Expand Down
10 changes: 5 additions & 5 deletions README.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,13 @@ curl -fsSL https://conn.eggp.dev/install.sh | sh

Rust나 Node.js는 필요 없습니다. 에이전트 연결 도구가 함께 들어 있습니다. 두 방법 모두 아래 다운로드와 같은 서명된 릴리스 파일을 설치하며, 이후에는 앱 안에서 업데이트됩니다. Windows는 설치 파일을 사용하세요.

| 운영체제 | v0.8.7 프리뷰 |
| 운영체제 | v0.8.8 프리뷰 |
|---|---|
| macOS · Apple Silicon | [Mac용 다운로드](https://github.com/eggp-dev/conn/releases/download/v0.8.7/conn-v0.8.7-aarch64-apple-darwin-desktop.dmg) |
| Windows · x64 | [설치 파일 다운로드](https://github.com/eggp-dev/conn/releases/download/v0.8.7/conn-v0.8.7-x86_64-pc-windows-msvc-setup.exe) |
| Ubuntu · x64 | [.deb 다운로드](https://github.com/eggp-dev/conn/releases/download/v0.8.7/conn-v0.8.7-x86_64-unknown-linux-gnu-desktop.deb) · [AppImage](https://github.com/eggp-dev/conn/releases/download/v0.8.7/conn-v0.8.7-x86_64-unknown-linux-gnu-desktop.AppImage) |
| macOS · Apple Silicon | [Mac용 다운로드](https://github.com/eggp-dev/conn/releases/download/v0.8.8/conn-v0.8.8-aarch64-apple-darwin-desktop.dmg) |
| Windows · x64 | [설치 파일 다운로드](https://github.com/eggp-dev/conn/releases/download/v0.8.8/conn-v0.8.8-x86_64-pc-windows-msvc-setup.exe) |
| Ubuntu · x64 | [.deb 다운로드](https://github.com/eggp-dev/conn/releases/download/v0.8.8/conn-v0.8.8-x86_64-unknown-linux-gnu-desktop.deb) · [AppImage](https://github.com/eggp-dev/conn/releases/download/v0.8.8/conn-v0.8.8-x86_64-unknown-linux-gnu-desktop.AppImage) |

Mac 배포 파일은 서명·공증되어 있습니다. Windows 프리뷰는 무서명이며, Linux는 Ubuntu 24.04에서 빌드하며, AppImage는 앱 안에서 업데이트되고 `.deb`는 새 패키지를 설치해 업데이트합니다. Intel Mac 배포는 잠시 중단했습니다. [설치·업데이트 안내](docs/getting-started.ko.md) · [전체 파일·체크섬](https://github.com/eggp-dev/conn/releases/tag/v0.8.7)
Mac 배포 파일은 서명·공증되어 있습니다. Windows 프리뷰는 무서명이며, Linux는 Ubuntu 24.04에서 빌드하며, AppImage는 앱 안에서 업데이트되고 `.deb`는 새 패키지를 설치해 업데이트합니다. Intel Mac 배포는 잠시 중단했습니다. [설치·업데이트 안내](docs/getting-started.ko.md) · [전체 파일·체크섬](https://github.com/eggp-dev/conn/releases/tag/v0.8.8)

## 처음 5분

Expand Down
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,13 @@ curl -fsSL https://conn.eggp.dev/install.sh | sh

No Rust or Node.js required; the agent connector is included. Both install the same signed release files as the downloads below, and the app updates itself afterwards. Windows: use the installer.

| Platform | v0.8.7 preview |
| Platform | v0.8.8 preview |
|---|---|
| macOS · Apple Silicon | [Download for Mac](https://github.com/eggp-dev/conn/releases/download/v0.8.7/conn-v0.8.7-aarch64-apple-darwin-desktop.dmg) |
| Windows · x64 | [Download installer](https://github.com/eggp-dev/conn/releases/download/v0.8.7/conn-v0.8.7-x86_64-pc-windows-msvc-setup.exe) |
| Ubuntu · x64 | [Download .deb](https://github.com/eggp-dev/conn/releases/download/v0.8.7/conn-v0.8.7-x86_64-unknown-linux-gnu-desktop.deb) · [AppImage](https://github.com/eggp-dev/conn/releases/download/v0.8.7/conn-v0.8.7-x86_64-unknown-linux-gnu-desktop.AppImage) |
| macOS · Apple Silicon | [Download for Mac](https://github.com/eggp-dev/conn/releases/download/v0.8.8/conn-v0.8.8-aarch64-apple-darwin-desktop.dmg) |
| Windows · x64 | [Download installer](https://github.com/eggp-dev/conn/releases/download/v0.8.8/conn-v0.8.8-x86_64-pc-windows-msvc-setup.exe) |
| Ubuntu · x64 | [Download .deb](https://github.com/eggp-dev/conn/releases/download/v0.8.8/conn-v0.8.8-x86_64-unknown-linux-gnu-desktop.deb) · [AppImage](https://github.com/eggp-dev/conn/releases/download/v0.8.8/conn-v0.8.8-x86_64-unknown-linux-gnu-desktop.AppImage) |

Mac downloads are signed and notarized. Windows previews are unsigned. Linux builds use Ubuntu 24.04, and the AppImage updates in-app while the `.deb` updates by installing a new package; Intel Mac distribution is paused. [Installation and updates](docs/getting-started.md) · [All assets and checksums](https://github.com/eggp-dev/conn/releases/tag/v0.8.7)
Mac downloads are signed and notarized. Windows previews are unsigned. Linux builds use Ubuntu 24.04, and the AppImage updates in-app while the `.deb` updates by installing a new package; Intel Mac distribution is paused. [Installation and updates](docs/getting-started.md) · [All assets and checksums](https://github.com/eggp-dev/conn/releases/tag/v0.8.8)

## First five minutes

Expand Down
1 change: 1 addition & 0 deletions crates/core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ parking_lot.workspace = true
globset.workspace = true

[dev-dependencies]
anyhow = "1"
tempfile.workspace = true

[target.'cfg(windows)'.dependencies]
Expand Down
4 changes: 2 additions & 2 deletions crates/core/src/engine.rs
Original file line number Diff line number Diff line change
Expand Up @@ -309,8 +309,8 @@ impl Engine {
}

/// Human keyboard input. Revokes any agent lease first.
pub fn write_input(&self, bytes: &[u8]) {
self.session.lock().human_input(bytes);
pub fn write_input(&self, bytes: &[u8]) -> Result<(), crate::session::SessionError> {
self.session.lock().human_input(bytes)
}

/// Deliver one bounded native external-input chunk. No command tracking.
Expand Down
5 changes: 5 additions & 0 deletions crates/core/src/human_input.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@ impl HumanInput {
pub fn remember_empty(&mut self, screen: &ScreenModel) {
self.boundary = screen.input_boundary(); self.observed = false;
}
pub fn begin_cleanup(&mut self, screen: &ScreenModel) {
self.pending = true;
self.reconcile = true;
self.observed |= self.boundary.is_some() && self.boundary != screen.input_boundary();
}
pub fn reset(&mut self) { *self = Self::default(); }

pub fn note(&mut self, bytes: &[u8], screen: &ScreenModel, agent_pending: bool) {
Expand Down
Loading