From 791107510760eef94d378ef85919aea27c193ece Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Sun, 26 Apr 2026 20:07:54 +0200 Subject: [PATCH] move canonical upstream to GitHub Gitea remote kept as secondary (`gitea`). Updated repository URLs in pubspec.yaml, licenses.yaml, and initial-plan.md. README rewritten to reflect the current single-process Flutter architecture. Co-Authored-By: Claude --- .pql/pql-plan.json | 2 +- CHANGELOG.md | 6 ++++++ README.md | 43 +++++++++++++++++++++++++++++++++---------- assets/licenses.yaml | 2 +- docs/initial-plan.md | 4 ++-- pubspec.yaml | 2 +- 6 files changed, 44 insertions(+), 15 deletions(-) diff --git a/.pql/pql-plan.json b/.pql/pql-plan.json index 7d67c2ba..d6f6cbd2 100644 --- a/.pql/pql-plan.json +++ b/.pql/pql-plan.json @@ -1,5 +1,5 @@ { - "exported_at": "2026-04-26T11:49:52Z", + "exported_at": "2026-04-26T18:07:54Z", "decisions": [ { "id": "D-1", diff --git a/CHANGELOG.md b/CHANGELOG.md index ad598392..e9e7cdbb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,12 @@ heading, and (b) bumping `pubspec.yaml` `version:` in the same commit. ### Changed +- Canonical upstream moved from Gitea to GitHub + (`github.com/postmeridiem/clide`). + +- README rewritten to reflect current single-process Flutter + architecture, built-in extensions, and build commands. + - Renamed desktop binary from `clide_app` to `clide` (Linux + macOS). - macOS app icon uses the black-circle variant matching the Linux diff --git a/README.md b/README.md index ad0a92e1..f0c85148 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,47 @@ # clide -A Flutter desktop IDE for Claude Code. Markdown-first content, pql-powered queries, canvas and graph surfaces, a Go sidecar handling PTYs / subprocesses / git / pql. Claude drives the UI through a `clide` CLI. +A Flutter desktop IDE for Claude Code. Native rendering, terminal-first interaction, pql-powered queries, canvas and graph surfaces. Linux and macOS. -Currently pre-v2.0, scaffolding. The north-star design lives in [`docs/initial-plan.md`](docs/initial-plan.md); architectural decisions are captured in [`docs/ADRs/`](docs/ADRs/). The Python Textual v1.2.0 implementation is archived under [`legacy/`](legacy/) for reference. +## Architecture -## Three surfaces, one tool +Single Flutter package at the repo root. The app hosts everything in-process: IPC server, subsystem handlers (pane, files, editor, git, pql), and the extension framework. tmux owns Claude session persistence. -- **`app/`** — Flutter desktop application (Linux / macOS; Windows is a stretch). -- **`sidecar/`** — Go sidecar/CLI, single binary with two modes: `clide ` (one-shot for Claude) and `clide --daemon` (long-running sidecar for the app). Owns PTYs, subprocesses, file watchers, git, pql invocations. -- **[`pql`](https://github.com/postmeridiem/pql)** — external supporter tool. clide wraps it for every query surface; never re-implements it. +- **`lib/`** — all Dart code. Kernel services (theme, i18n, settings, panels, commands, focus), UI widgets, built-in extensions, and the extension contract. +- **`ptyc/`** — small C helper. Spawns a PTY + child and hands the master fd back over `SCM_RIGHTS`. Every pane (shell, tmux, claude, LSP, debug adapter) goes through it. +- **[pql](https://github.com/postmeridiem/pql)** — external supporter tool. Clide wraps it for every query surface; never re-implements it. -## Why the rebuild? +Claude drives the UI through a `clide` CLI surface (Bash, not MCP). Every CLI subcommand has a UI affordance and every UI action has a CLI equivalent. -The Python Textual implementation (`legacy/`) proved the pane model but capped at terminal-only rendering. A short-lived experiment (`claudian`, April 2026) explored an Obsidian-plugin approach and was abandoned because Obsidian is Electron, and the user's history with terminal-in-Electron ruled that host out. +## Built-in extensions -Flutter desktop resolves both constraints: native Skia rendering avoids Electron's failure modes, `xterm.dart` gives us a solid terminal surface, and the pane model can be rebuilt natively. The Obsidian ideas worth keeping (canvas, graph) fold in; everything else (vault concept, inline query tables, plugin ecosystem inheritance) doesn't. +canvas, claude, claude_control, decisions, diff, editor, extensions_ui, files, git, graph, grammars_core, ipc_status, keybindings_ui, markdown, pql, problems, settings_ui, terminal, theme_picker, tickets, todos, welcome. + +## Building + +Requires Flutter (stable channel) on the host. One-time setup: + +``` +make hooks && flutter pub get +``` + +Then: + +``` +make run # launch the desktop app +make test # fast suite: analyze + format + unit + widget + golden +make test-core # core subsystem tests (IPC, PTY, git, pane registry) +make test-integration # real app boot integration tests +make build-linux # flutter build linux +make build-macos # flutter build macos +make ptyc-build # build the ptyc PTY-spawn helper +make push-check # pre-push gate: decisions + core + fast tests +``` ## Status -No build yet beyond the repo scaffold. Tier 0 acceptance: sidecar daemon runs, Flutter app connects, empty IDE shell appears with placeholders. +Pre-v2.0 (`2.0.0-dev`). Interaction model and panel system landed. The Python Textual v1.2.0 predecessor is archived under [`legacy/`](legacy/). + +Design doc: [`docs/initial-plan.md`](docs/initial-plan.md). Architectural decisions: [`decisions/`](decisions/). ## License diff --git a/assets/licenses.yaml b/assets/licenses.yaml index 2310343a..855c7791 100644 --- a/assets/licenses.yaml +++ b/assets/licenses.yaml @@ -37,7 +37,7 @@ schema_version: 1 self: name: clide version: "2.0.0-dev" - homepage: https://git.schweitz.net/jpmschweitzer/clide + homepage: https://github.com/postmeridiem/clide license: MIT license_file: assets/LICENSE copyright: "© 2026 Jeroen Schweitzer" diff --git a/docs/initial-plan.md b/docs/initial-plan.md index 71e0b98c..ce0db5ee 100644 --- a/docs/initial-plan.md +++ b/docs/initial-plan.md @@ -332,8 +332,8 @@ node; Claude can add a node by `clide canvas node …`. - **Flutter Desktop on Linux + macOS** is the primary target; Windows is a stretch goal. Mobile is not a goal. -- **Gitea remote** (`git.schweitz.net/jpmschweitzer/clide`) remains - the canonical host. +- **GitHub remote** (`github.com/postmeridiem/clide`) is the + canonical host. - **`pql` stays untouched** for Tiers 0–2; upstream pql work happens in pql's repo during Tiers 3–5. - **tmux** is optional plumbing the sidecar can compose for team diff --git a/pubspec.yaml b/pubspec.yaml index 8b22cd92..6d4461b2 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -14,7 +14,7 @@ description: >- extension framework. publish_to: none version: 2.0.0-dev -repository: https://git.schweitz.net/jpmschweitzer/clide +repository: https://github.com/postmeridiem/clide # Project metadata (was project.yaml, folded in per D-056). # version: above is the single source of truth. The Makefile reads