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.6"
"version": "0.8.7"
}
]
}
1 change: 0 additions & 1 deletion .github/actions/setup/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,5 +36,4 @@ runs:
save-if: ${{ github.ref == 'refs/heads/main' }}
- name: Frontend dependencies
shell: bash
working-directory: frontends/tauri
run: npm ci
22 changes: 12 additions & 10 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -82,13 +82,15 @@ jobs:
sh -n scripts/install.sh
! CONN_VERSION="latest" sh scripts/install.sh > /dev/null 2>&1
- run: python -m unittest discover -s tests/release -v
- run: npm test
working-directory: frontends/tauri
- run: npm run test:ui
- run: node scripts/check-ui-boundaries.mjs
- run: node scripts/generate-owner-contract.mjs --check
- name: Core and renderer screen parity
run: npm run test:screen
working-directory: frontends/tauri
working-directory: packages/ui
- run: npm run build
working-directory: frontends/tauri
- run: npm run build:web
- name: The website builds, including the pages it generates from docs/
run: npm ci && npm run build
working-directory: site
Expand Down Expand Up @@ -169,14 +171,14 @@ jobs:
save-if: ${{ github.ref == 'refs/heads/main' }}
- name: Install the lockfile-pinned test browser
run: npx playwright install chromium --with-deps
working-directory: frontends/tauri
- run: cargo build --locked -p conn-browser-harness
working-directory: tests/collaboration
- run: cargo build --locked -p conn-web -p conn
- run: npm run build:web
- run: npm run test:checkpoint -w @conn/ui
- run: npm run test:app-lifetime -w @conn/ui
- run: npm run test:collaboration
working-directory: frontends/tauri
- run: npm run test:collaboration:harness
working-directory: frontends/tauri
- run: npm run test:context:harness
working-directory: frontends/tauri
- run: npm run test:input -w @conn/collaboration-tests
- run: npm run package:web -- --debug
required:
name: Required checks
if: always()
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,9 @@ jobs:
- name: Package Linux or Windows assets
if: runner.os != 'macOS'
run: python scripts/release.py package --target ${{ matrix.target }} --out release-artifacts
- name: Build and verify standalone Linux web package
if: runner.os == 'Linux'
run: npm run package:web -- --release-archive
- name: Sign final updater artifacts
env:
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
Expand Down
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,20 @@

## Unreleased

## 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.
- Distinguish shared-screen admission, shell control and command execution. Control requests expand from the Conn badge and collapse without granting or denying; command review stays below the terminal. Session-wide allowances require opening an explicit scope choice. Ordinary terminal letters no longer approve a newly arrived command request.
- Bind approval reasons and available choices to the request, preserve the command's risk label in uncertain shells, and recheck the shell context and policy before executing. Detect the actual foreground SSH executable on Linux/macOS so compound shell entries do not silently receive a different remote command policy.
- Recover input after visible Backspace/Delete/Ctrl-W/Ctrl-U erasure, including coalesced echoes. Empty cursor motion no longer blocks collaboration; Home followed by Ctrl-U keeps remaining input protected. No human command line or hidden input is reconstructed or logged.
- Include the macOS long-input PTY deadlock fix and keep queued output ahead of the process-exit notification. Linux desktop startup defaults to the compatible WebKit DMA-BUF path, honoring an explicit environment override.

한국어: 네이티브·웹의 공통 UI와 Rust 런타임을 배포합니다. 연결은 공유 화면 접근, 뱃지에서 펼쳐지는 요청은 입력 제어권, 하단 카드는 이번 명령 실행으로 구별합니다. 요청별 사유·승인 범위를 고정하고, 원격 환경 안내가 삭제 등 위험 사유를 덮어쓰지 않도록 했습니다. 빈 입력·커서 이동의 오판과 Home 후 Ctrl-U에 남는 입력의 보호를 함께 수정했습니다. Mac 긴 입력 교착 수정, 마지막 출력과 종료 알림의 순서 보장, Linux WebKit 시작 호환 설정도 포함합니다. Linux 독립 웹 패키지는 개발 도구 없이 로컬에서 실행할 수 있습니다.

Validation and limits: [release verification](docs/release-0.8.7-validation.md). The earlier macOS native audit covers the shared-runtime/deadlock changes at `5df5e36`; this release's new control UI and input-state fixes are additionally tested on Linux with the real Rust web host, common UI and persistent MCP. They have not been re-run interactively on macOS. The user's gateway, physical IME, native notification center and complete installed-app upgrades remain separate acceptance work. The output queue remains unbounded; the report records the measured finite-load test, not a guarantee for indefinitely stalled consumers.

한국어: [릴리스 검증 기록](docs/release-0.8.7-validation.md)에 자동 검사·브라우저·Mac 실기 범위를 구분했습니다. 새 제어 UI와 입력 판정을 Mac에서 다시 대화형 검증했다고 주장하지 않습니다. 사용자 게이트웨이·물리 IME·네이티브 알림·설치 앱 전체 업그레이드는 별도 인수 범위입니다.

## 0.8.6 — Preview · 2026-09-22

- Keep terminal dimensions and shell output in the same order when an approval bar opens and closes, including in a fixed window. This fixes reproduced stale sizes and cursor disagreement after delayed resizes and shell redraws while retaining the existing motion.
Expand Down
15 changes: 7 additions & 8 deletions CONTRIBUTING.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,16 +37,14 @@ npm run tauri dev

### 공유 UI를 브라우저에서 실행

`frontends/tauri`에서:
저장소 루트에서:

```sh
npm ci
npm run test:browser
npm run dev:web
```

`http://127.0.0.1:1421/`을 엽니다. 로컬 WebSocket 어댑터를 통해 **같은 App과 Rust 프런트엔드 하네스**를 사용합니다. 별도 웹 제품이나 가짜 셸이 아니라 개발 보조 도구입니다. 명령은 로컬 사용자 권한으로 실행됩니다. 실행 스크립트가 별도 설정 폴더와 에이전트 연결 주소를 출력합니다.

브라우저 새로고침·연결 종료는 실행 중인 세션을 끝냅니다. 버려도 되는 파일로 시험하고 필요한 때만 새로고침하세요. 수명과 연결 주소에 대한 내용은 [브라우저 테스트](docs/browser-testing.md)를 참고하세요.
`http://127.0.0.1:1429`에서 서버 연결 파일의 코드를 입력합니다. 웹과 네이티브는 같은 `@conn/ui`와 Rust `AppRuntime`을 사용합니다. 새로고침해도 서버가 실행 중이면 기존 셸을 유지합니다. 개발 실행·운영 패키지·실제 MCP 검사는 [웹 호스트와 브라우저 검증](docs/browser-testing.ko.md)을 참고하세요.

## 변경할 위치 찾기

Expand All @@ -55,8 +53,9 @@ npm run test:browser
| `crates/core` | PTY, 세션 제어, 정책, 감사, IPC, 셸·백엔드 프로필 |
| `crates/cli` | MCP 어댑터, 에이전트 명령, 로컬 프로필·로그 도구 |
| `crates/frontend` | 공유 네이티브 프런트엔드 하네스와 명령 처리 |
| `crates/browser-harness` | 공유 하네스에 연결하는 로컬 브라우저 테스트 전송 계층 |
| `frontends/tauri/src` | 공유 Svelte UI, 터미널 렌더러, 타임라인, 설정, i18n |
| `crates/web` | 실제 AppRuntime을 운영하는 로컬 웹 서버 |
| `packages/ui` | 공통 Svelte UI, 앱별 룬 상태, 터미널 렌더러, 협업 액션, i18n |
| `frontends/tauri/src`, `frontends/web/src` | 네이티브·웹 진입점과 호스트 어댑터 |
| `frontends/tauri/src-tauri` | Tauri 어댑터, 네이티브 설정, 패키징 |
| `plugin` | 에이전트 작업 절차와 MCP 서버 정의 |
| `packages` | 여러 도구가 함께 읽는 데이터: `brand`(이름·저장소·사이트 주소), `themes`(내장 터미널 테마) |
Expand Down Expand Up @@ -92,7 +91,7 @@ cargo test --locked

```sh
npm ci
npm test
npm run test:ui --prefix ../..
npm run build
```

Expand Down
15 changes: 7 additions & 8 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,16 +37,14 @@ The wrapper builds the native CLI sidecar before starting Tauri. A native deskto

### Run the shared UI in a browser

From `frontends/tauri`:
From the repository root:

```sh
npm ci
npm run test:browser
npm run dev:web
```

Open `http://127.0.0.1:1421/`. This uses the **same App and Rust frontend harness** through a local WebSocket adapter. It is a development aid, not a separate web product or a simulated shell. Shell commands run as your local user. The launcher prints a separate settings directory and agent endpoint.

Reloading or disconnecting the browser ends its live sessions. Test with disposable files and deliberate reloads. See [browser testing](docs/browser-testing.md) for lifecycle and endpoint details.
Open `http://127.0.0.1:1429` and enter the code from the server connection file. Web and native mount the same `@conn/ui` and use Rust `AppRuntime`. Reloading preserves shells while the server remains running. See [the web host and browser validation guide](docs/browser-testing.md) for development, operating a package and real MCP tests.

## Know where the change belongs

Expand All @@ -55,8 +53,9 @@ Reloading or disconnecting the browser ends its live sessions. Test with disposa
| `crates/core` | PTY, session control, policy, audit, IPC, shell/backend profiles |
| `crates/cli` | MCP adapter, agent commands, local profile and log utilities |
| `crates/frontend` | Owner-window harness, sharing, native extensions |
| `crates/browser-harness` | Local browser-test transport to the shared harness |
| `frontends/tauri/src` | Shared Svelte UI, terminal renderer, timeline, settings, i18n |
| `crates/web` | Local web server for the production AppRuntime |
| `packages/ui` | Common Svelte UI, app-scoped runes, terminal renderer, collaboration actions and i18n |
| `frontends/tauri/src`, `frontends/web/src` | Native/web entry points and host adapters |
| `frontends/tauri/src-tauri` | Tauri adapter, native configuration, packaging |
| `plugin` | Agent procedure and MCP server definition |
| `packages` | Data shared across toolchains: `brand` (name, repository, site address) and `themes` (built-in terminal themes) |
Expand Down Expand Up @@ -92,7 +91,7 @@ From `frontends/tauri`:

```sh
npm ci
npm test
npm run test:ui --prefix ../..
npm run build
```

Expand Down
44 changes: 27 additions & 17 deletions Cargo.lock

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

10 changes: 5 additions & 5 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
[workspace]
resolver = "2"
exclude = ["vendor/vt100"]
members = ["crates/core", "crates/cli", "crates/frontend", "crates/browser-harness", "frontends/tauri/src-tauri"]
members = ["crates/core", "crates/cli", "crates/frontend", "crates/web", "frontends/tauri/src-tauri"]
# The desktop shell needs the platform webview toolchain; plain `cargo test` stays on the portable crates.
default-members = ["crates/core", "crates/cli", "crates/frontend", "crates/browser-harness"]
default-members = ["crates/core", "crates/cli", "crates/frontend", "crates/web"]

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

[workspace.dependencies]
conn-core = { path = "crates/core", version = "0.8.6" }
conn-frontend = { path = "crates/frontend", version = "0.8.6" }
conn-core = { path = "crates/core", version = "0.8.7" }
conn-frontend = { path = "crates/frontend", version = "0.8.7" }
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.6 프리뷰 |
| 운영체제 | v0.8.7 프리뷰 |
|---|---|
| macOS · Apple Silicon | [Mac용 다운로드](https://github.com/eggp-dev/conn/releases/download/v0.8.6/conn-v0.8.6-aarch64-apple-darwin-desktop.dmg) |
| Windows · x64 | [설치 파일 다운로드](https://github.com/eggp-dev/conn/releases/download/v0.8.6/conn-v0.8.6-x86_64-pc-windows-msvc-setup.exe) |
| Ubuntu · x64 | [.deb 다운로드](https://github.com/eggp-dev/conn/releases/download/v0.8.6/conn-v0.8.6-x86_64-unknown-linux-gnu-desktop.deb) · [AppImage](https://github.com/eggp-dev/conn/releases/download/v0.8.6/conn-v0.8.6-x86_64-unknown-linux-gnu-desktop.AppImage) |
| 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) |

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.6)
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)

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

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.6)
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)

## First five minutes

Expand Down
13 changes: 0 additions & 13 deletions crates/browser-harness/Cargo.toml

This file was deleted.

Loading