dissolve app/ into repo root (D-056)
Single Flutter package at the repo root. All code, tests, assets, and platform directories moved from app/ to root. Package renamed from clide_app to clide — all imports rewritten. Merged pubspec combines core (ffi) and app (flutter, yaml, xterm) dependencies. Makefile simplified: no APP_PRESENT conditionals, no cd, no daemon lifecycle. 317 tests pass. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"version": "1.0.0",
|
"version": "1.2.0",
|
||||||
"hash": "sha256:98d7fa693fa4bcb6ccd6eb1d9d191c8f7332c9c97c221afb19741a7711bd9928",
|
"hash": "sha256:c3d0c50a4be25c7fe06c46e1c0a47ffbff4f632e1f820189c2d8abbce53ea0f8",
|
||||||
"installed_at": "2026-04-22T11:22:39Z"
|
"installed_at": "2026-04-22T21:44:24Z"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -120,15 +120,30 @@ Status flow: backlog → ready → in_progress → review → done (also cancell
|
|||||||
| Command | Purpose |
|
| Command | Purpose |
|
||||||
|---|---|
|
|---|---|
|
||||||
| `pql plan status` | Dashboard: decision counts, open Qs, ticket summary, coverage gaps |
|
| `pql plan status` | Dashboard: decision counts, open Qs, ticket summary, coverage gaps |
|
||||||
|
| `pql plan export [--to FILE]` | Snapshot planning state to JSON (default: `pql-plan.json`) |
|
||||||
|
| `pql plan import [--from FILE]` | Restore planning state from a JSON snapshot |
|
||||||
|
|
||||||
|
### Versioning planning state
|
||||||
|
|
||||||
|
Planning state lives in `pql.db` (gitignored). To version it in git,
|
||||||
|
use `pql plan export` to write a committed JSON snapshot. pql does NOT
|
||||||
|
do this automatically — the user decides when and how to trigger it:
|
||||||
|
|
||||||
|
- Pre-push hook: `.githooks/pre-push` calls `pql plan export && git add pql-plan.json`
|
||||||
|
- Sprint close: a skill or script exports + commits on milestone
|
||||||
|
- Manual: run `pql plan export` before committing when state changed
|
||||||
|
|
||||||
|
On a fresh clone, `pql plan import` restores from the snapshot.
|
||||||
|
|
||||||
### Planning cookbook
|
### Planning cookbook
|
||||||
|
|
||||||
- **Sync and list confirmed** → `pql decisions sync && pql decisions list --type confirmed`
|
- **Sync and list confirmed** → `pql decisions sync && pql decisions list --type confirmed`
|
||||||
- **Show with refs** → `pql decisions show D-005 --with-refs --pretty`
|
- **Show with refs** → `pql decisions show D-005 --with-refs --pretty`
|
||||||
- **Create ticket** → `pql ticket new task "implement X" --decision D-005`
|
- **Create ticket** → `pql ticket new task "implement X" --decision D-005`
|
||||||
- **Move forward** → `pql ticket status T-001 in_progress`
|
- **Batch close** → `pql ticket status T-001,T-002,T-003 done`
|
||||||
- **Coverage gaps** → `pql decisions coverage`
|
- **Coverage gaps** → `pql decisions coverage`
|
||||||
- **Dashboard** → `pql plan status --pretty`
|
- **Dashboard** → `pql plan status --pretty`
|
||||||
|
- **Snapshot for git** → `pql plan export`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
project:
|
||||||
|
layout:
|
||||||
|
sidebar:
|
||||||
|
activeTab: files.tree
|
||||||
|
context:
|
||||||
|
activeTab: markdown.viewer
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# -- Flutter / Dart (app + core at repo root) ---------------------------
|
# -- Flutter / Dart (single package at repo root) -----------------------
|
||||||
/.dart_tool/
|
/.dart_tool/
|
||||||
/.packages
|
/.packages
|
||||||
/.flutter-plugins
|
/.flutter-plugins
|
||||||
@@ -16,18 +16,6 @@
|
|||||||
/bin/clide.exe
|
/bin/clide.exe
|
||||||
# pubspec.lock is committed (supply-chain policy).
|
# pubspec.lock is committed (supply-chain policy).
|
||||||
|
|
||||||
# Flutter app sub-package under app/. Same patterns, different prefix.
|
|
||||||
app/.dart_tool/
|
|
||||||
app/.flutter-plugins
|
|
||||||
app/.flutter-plugins-dependencies
|
|
||||||
app/build/
|
|
||||||
app/*.iml
|
|
||||||
app/ios/Pods/
|
|
||||||
app/macos/Pods/
|
|
||||||
app/windows/flutter/ephemeral/
|
|
||||||
app/linux/flutter/ephemeral/
|
|
||||||
app/macos/Flutter/ephemeral/
|
|
||||||
|
|
||||||
# UI harness (Playwright) — npm + output artefacts.
|
# UI harness (Playwright) — npm + output artefacts.
|
||||||
tools/ui/node_modules/
|
tools/ui/node_modules/
|
||||||
tools/ui/out/
|
tools/ui/out/
|
||||||
@@ -50,7 +38,7 @@ coverage.*
|
|||||||
# Alchemist golden-test failure artefacts (diff images written when a
|
# Alchemist golden-test failure artefacts (diff images written when a
|
||||||
# pixel-compare fails locally; the committed fixtures live under
|
# pixel-compare fails locally; the committed fixtures live under
|
||||||
# app/test/goldens/goldens/{ci,linux}/).
|
# app/test/goldens/goldens/{ci,linux}/).
|
||||||
app/test/goldens/failures/
|
test/goldens/failures/
|
||||||
|
|
||||||
# -- pql per-repo state (index + planning DB, rebuilt from markdown) ----
|
# -- pql per-repo state (index + planning DB, rebuilt from markdown) ----
|
||||||
/.pql/
|
/.pql/
|
||||||
|
|||||||
@@ -1,13 +1,10 @@
|
|||||||
# clide — local dev targets. CI scripts in ci/ shell out to these.
|
# clide — local dev targets. CI scripts in ci/ shell out to these.
|
||||||
#
|
#
|
||||||
# One toolchain: Flutter + Dart. Native supporter tools (`ptyc`, future
|
# Single Flutter package at the repo root. Native supporter tools
|
||||||
# peers) live in their own directories with their own build targets and
|
# (ptyc, future peers) live in their own directories.
|
||||||
# compose in under `make build`.
|
|
||||||
|
|
||||||
INSTALL_DIR ?= $(HOME)/.local/bin
|
INSTALL_DIR ?= $(HOME)/.local/bin
|
||||||
|
|
||||||
# Version stamping. Source of truth: project.yaml `version:` field. Local
|
|
||||||
# builds augment with git short SHA + dirty marker (semver build metadata).
|
|
||||||
VERSION_BASE ?= $(shell awk -F': *' '/^version:/ {gsub(/[" ]/,"",$$2); print $$2; exit}' project.yaml)
|
VERSION_BASE ?= $(shell awk -F': *' '/^version:/ {gsub(/[" ]/,"",$$2); print $$2; exit}' project.yaml)
|
||||||
COMMIT ?= $(shell git rev-parse --short HEAD 2>/dev/null || echo unknown)
|
COMMIT ?= $(shell git rev-parse --short HEAD 2>/dev/null || echo unknown)
|
||||||
DIRTY := $(shell git diff --quiet HEAD 2>/dev/null || echo .dirty)
|
DIRTY := $(shell git diff --quiet HEAD 2>/dev/null || echo .dirty)
|
||||||
@@ -18,85 +15,30 @@ DATE ?= $(shell date -u +%Y-%m-%dT%H:%M:%SZ)
|
|||||||
help: ## Show this help.
|
help: ## Show this help.
|
||||||
@awk 'BEGIN {FS = ":.*##"} /^[a-zA-Z0-9_-]+:.*##/ {printf " \033[36m%-22s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)
|
@awk 'BEGIN {FS = ":.*##"} /^[a-zA-Z0-9_-]+:.*##/ {printf " \033[36m%-22s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)
|
||||||
|
|
||||||
# -- app + core (Flutter / Dart) ----------------------------------------
|
# -- app (Flutter) -------------------------------------------------------
|
||||||
|
|
||||||
# App and core targets gracefully noop if the Dart package isn't
|
|
||||||
# scaffolded yet (pre-Tier-0 state) or if flutter isn't installed
|
|
||||||
# locally.
|
|
||||||
APP_PRESENT := $(shell test -f pubspec.yaml && echo yes || echo no)
|
|
||||||
HAS_FLUTTER := $(shell command -v flutter >/dev/null && echo yes || echo no)
|
|
||||||
|
|
||||||
.PHONY: build
|
|
||||||
build: ## Build the Dart AOT `clide` binary (CLI + --daemon modes in one binary).
|
|
||||||
ifeq ($(APP_PRESENT),yes)
|
|
||||||
dart compile exe bin/clide.dart -o bin/clide \
|
|
||||||
--define=clideVersion=$(VERSION) \
|
|
||||||
--define=clideCommit=$(COMMIT) \
|
|
||||||
--define=clideDate=$(DATE)
|
|
||||||
else
|
|
||||||
@echo "(pubspec.yaml not scaffolded yet; skipping)"
|
|
||||||
endif
|
|
||||||
|
|
||||||
DAEMON_PID_FILE := /tmp/clide-daemon-$(shell id -u).pid
|
|
||||||
|
|
||||||
.PHONY: run
|
.PHONY: run
|
||||||
run: stop build ## Build the daemon + launch the Flutter desktop app.
|
run: ## Launch the Flutter desktop app.
|
||||||
ifeq ($(APP_PRESENT),yes)
|
LD_LIBRARY_PATH=$(CURDIR)/native/linux-x64$${LD_LIBRARY_PATH:+:$$LD_LIBRARY_PATH} flutter run -d linux
|
||||||
@echo "Starting daemon…"
|
|
||||||
@bin/clide --daemon & echo $$! > $(DAEMON_PID_FILE)
|
|
||||||
@echo "Daemon PID $$(cat $(DAEMON_PID_FILE))"
|
|
||||||
@echo "Launching Flutter app…"
|
|
||||||
-cd app && LD_LIBRARY_PATH=$(CURDIR)/app/native/linux-x64$${LD_LIBRARY_PATH:+:$$LD_LIBRARY_PATH} flutter run -d linux
|
|
||||||
@$(MAKE) --no-print-directory stop
|
|
||||||
else
|
|
||||||
@echo "(pubspec.yaml not scaffolded yet; skipping)"
|
|
||||||
endif
|
|
||||||
|
|
||||||
.PHONY: stop
|
|
||||||
stop: ## Kill any running clide daemon.
|
|
||||||
@if [ -f $(DAEMON_PID_FILE) ]; then \
|
|
||||||
kill $$(cat $(DAEMON_PID_FILE)) 2>/dev/null && echo "daemon stopped" || true; \
|
|
||||||
rm -f $(DAEMON_PID_FILE); \
|
|
||||||
fi
|
|
||||||
|
|
||||||
.PHONY: install
|
|
||||||
install: build ## Install bin/clide into $(INSTALL_DIR).
|
|
||||||
ifeq ($(APP_PRESENT),yes)
|
|
||||||
install -m 0755 bin/clide $(INSTALL_DIR)/clide
|
|
||||||
else
|
|
||||||
@echo "(pubspec.yaml not scaffolded yet; skipping)"
|
|
||||||
endif
|
|
||||||
|
|
||||||
.PHONY: pubget
|
.PHONY: pubget
|
||||||
pubget: ## flutter pub get (hydrate the pub cache).
|
pubget: ## flutter pub get.
|
||||||
ifeq ($(APP_PRESENT),yes)
|
|
||||||
flutter pub get
|
flutter pub get
|
||||||
else
|
|
||||||
@echo "(pubspec.yaml not scaffolded yet; skipping)"
|
|
||||||
endif
|
|
||||||
|
|
||||||
.PHONY: analyze
|
.PHONY: analyze
|
||||||
analyze: ## dart analyze / flutter analyze.
|
analyze: ## flutter analyze.
|
||||||
ifeq ($(APP_PRESENT),yes)
|
|
||||||
flutter analyze
|
flutter analyze
|
||||||
else
|
|
||||||
@echo "(pubspec.yaml not scaffolded yet; skipping)"
|
|
||||||
endif
|
|
||||||
|
|
||||||
.PHONY: format
|
.PHONY: format
|
||||||
format: ## dart format --set-exit-if-changed.
|
format: ## dart format --set-exit-if-changed.
|
||||||
ifeq ($(APP_PRESENT),yes)
|
|
||||||
dart format --set-exit-if-changed .
|
dart format --set-exit-if-changed .
|
||||||
else
|
|
||||||
@echo "(pubspec.yaml not scaffolded yet; skipping)"
|
|
||||||
endif
|
|
||||||
|
|
||||||
.PHONY: test
|
.PHONY: test
|
||||||
test: ## Fast: analyze + format + unit + widget + golden (<60s).
|
test: ## Fast: analyze + format + unit + widget + golden (<60s).
|
||||||
ci/test.sh
|
ci/test.sh
|
||||||
|
|
||||||
.PHONY: test-core
|
.PHONY: test-core
|
||||||
test-core: ## Flutter-free core tests (IPC, daemon, PTY) with hard timeout.
|
test-core: ## Core subsystem tests (IPC, PTY, git, pane registry).
|
||||||
ci/test_core.sh
|
ci/test_core.sh
|
||||||
|
|
||||||
.PHONY: test-a11y
|
.PHONY: test-a11y
|
||||||
@@ -108,7 +50,7 @@ test-integration: ## Integration tests (real app boot; xvfb on headless Linux).
|
|||||||
ci/test_integration.sh
|
ci/test_integration.sh
|
||||||
|
|
||||||
.PHONY: test-e2e
|
.PHONY: test-e2e
|
||||||
test-e2e: build ## Daemon subprocess + web WASM Playwright smoke.
|
test-e2e: ## End-to-end Playwright smoke.
|
||||||
ci/test_e2e.sh
|
ci/test_e2e.sh
|
||||||
|
|
||||||
.PHONY: test-all
|
.PHONY: test-all
|
||||||
@@ -122,7 +64,7 @@ coverage: ## flutter test --coverage + lcov summary.
|
|||||||
smoke-bundle: ## Build Linux release bundle and run it under xvfb for 5s.
|
smoke-bundle: ## Build Linux release bundle and run it under xvfb for 5s.
|
||||||
ci/smoke_bundle.sh
|
ci/smoke_bundle.sh
|
||||||
|
|
||||||
# -- web UI harness (for Claude Code to drive the app) -----------------
|
# -- web UI harness ------------------------------------------------------
|
||||||
|
|
||||||
.PHONY: ui-dev
|
.PHONY: ui-dev
|
||||||
ui-dev: ## Build web WASM + start localhost:4280 in the background.
|
ui-dev: ## Build web WASM + start localhost:4280 in the background.
|
||||||
@@ -141,23 +83,14 @@ ui-smoke: ## Build + serve + run Playwright smoke + stop.
|
|||||||
|
|
||||||
.PHONY: build-linux
|
.PHONY: build-linux
|
||||||
build-linux: ## flutter build linux (desktop bundle).
|
build-linux: ## flutter build linux (desktop bundle).
|
||||||
ifeq ($(APP_PRESENT),yes)
|
|
||||||
flutter build linux
|
flutter build linux
|
||||||
else
|
|
||||||
@echo "(pubspec.yaml not scaffolded yet; skipping)"
|
|
||||||
endif
|
|
||||||
|
|
||||||
.PHONY: build-macos
|
.PHONY: build-macos
|
||||||
build-macos: ## flutter build macos (desktop bundle).
|
build-macos: ## flutter build macos (desktop bundle).
|
||||||
ifeq ($(APP_PRESENT),yes)
|
|
||||||
flutter build macos
|
flutter build macos
|
||||||
else
|
|
||||||
@echo "(pubspec.yaml not scaffolded yet; skipping)"
|
|
||||||
endif
|
|
||||||
|
|
||||||
# -- ptyc (C supporter tool) --------------------------------------------
|
# -- ptyc (C supporter tool) ---------------------------------------------
|
||||||
|
|
||||||
# Compiled alongside the main binary. Tiny, no deps beyond libc.
|
|
||||||
PTYC_PRESENT := $(shell test -f ptyc/Makefile && echo yes || echo no)
|
PTYC_PRESENT := $(shell test -f ptyc/Makefile && echo yes || echo no)
|
||||||
|
|
||||||
.PHONY: ptyc-build
|
.PHONY: ptyc-build
|
||||||
@@ -184,33 +117,32 @@ else
|
|||||||
@echo "(ptyc/ not scaffolded yet; skipping)"
|
@echo "(ptyc/ not scaffolded yet; skipping)"
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# -- security ------------------------------------------------------------
|
# -- security -------------------------------------------------------------
|
||||||
|
|
||||||
.PHONY: security
|
.PHONY: security
|
||||||
security: ## Dart advisory review + ptyc source review (manual — no floating deps).
|
security: ## Dart advisory review + ptyc source review.
|
||||||
@echo "security: Dart advisories reviewed manually before pubspec.yaml bumps;"
|
@echo "security: Dart advisories reviewed manually before pubspec.yaml bumps;"
|
||||||
@echo " ptyc is reviewed by reading it (tiny libc-only C)."
|
@echo " ptyc is reviewed by reading it (tiny libc-only C)."
|
||||||
@echo " Automated Dart CVE tooling lands here when a reliable option exists."
|
|
||||||
|
|
||||||
# -- pre-push gate -------------------------------------------------------
|
# -- pre-push gate --------------------------------------------------------
|
||||||
|
|
||||||
.PHONY: decisions-validate
|
.PHONY: decisions-validate
|
||||||
decisions-validate: ## Parser dry-run over decisions/*.md (cheap pre-push gate).
|
decisions-validate: ## Parser dry-run over decisions/*.md.
|
||||||
pql decisions validate
|
pql decisions validate
|
||||||
|
|
||||||
.PHONY: push-check
|
.PHONY: push-check
|
||||||
push-check: decisions-validate test-core test test-a11y ## Pre-push gate: decisions + core + fast unit + widget + golden + a11y (<90s).
|
push-check: decisions-validate test-core test test-a11y ## Pre-push gate.
|
||||||
|
|
||||||
.PHONY: hooks
|
.PHONY: hooks
|
||||||
hooks: ## Install the repo's git hooks (points core.hooksPath at .githooks/).
|
hooks: ## Install the repo's git hooks.
|
||||||
git config core.hooksPath .githooks
|
git config core.hooksPath .githooks
|
||||||
@echo "hooks installed (core.hooksPath = .githooks)"
|
@echo "hooks installed (core.hooksPath = .githooks)"
|
||||||
|
|
||||||
# -- housekeeping --------------------------------------------------------
|
# -- housekeeping ---------------------------------------------------------
|
||||||
|
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
clean: ## Remove build artefacts.
|
clean: ## Remove build artefacts.
|
||||||
rm -rf bin build .dart_tool
|
rm -rf build .dart_tool
|
||||||
$(MAKE) ptyc-clean
|
$(MAKE) ptyc-clean
|
||||||
|
|
||||||
.DEFAULT_GOAL := help
|
.DEFAULT_GOAL := help
|
||||||
|
|||||||
@@ -1,45 +0,0 @@
|
|||||||
# Miscellaneous
|
|
||||||
*.class
|
|
||||||
*.log
|
|
||||||
*.pyc
|
|
||||||
*.swp
|
|
||||||
.DS_Store
|
|
||||||
.atom/
|
|
||||||
.build/
|
|
||||||
.buildlog/
|
|
||||||
.history
|
|
||||||
.svn/
|
|
||||||
.swiftpm/
|
|
||||||
migrate_working_dir/
|
|
||||||
|
|
||||||
# IntelliJ related
|
|
||||||
*.iml
|
|
||||||
*.ipr
|
|
||||||
*.iws
|
|
||||||
.idea/
|
|
||||||
|
|
||||||
# The .vscode folder contains launch configuration and tasks you configure in
|
|
||||||
# VS Code which you may wish to be included in version control, so this line
|
|
||||||
# is commented out by default.
|
|
||||||
#.vscode/
|
|
||||||
|
|
||||||
# Flutter/Dart/Pub related
|
|
||||||
**/doc/api/
|
|
||||||
**/ios/Flutter/.last_build_id
|
|
||||||
.dart_tool/
|
|
||||||
.flutter-plugins-dependencies
|
|
||||||
.pub-cache/
|
|
||||||
.pub/
|
|
||||||
/build/
|
|
||||||
/coverage/
|
|
||||||
|
|
||||||
# Symbolication related
|
|
||||||
app.*.symbols
|
|
||||||
|
|
||||||
# Obfuscation related
|
|
||||||
app.*.map.json
|
|
||||||
|
|
||||||
# Android Studio will place build artifacts here
|
|
||||||
/android/app/debug
|
|
||||||
/android/app/profile
|
|
||||||
/android/app/release
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
# clide_app
|
|
||||||
|
|
||||||
A new Flutter project.
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
import 'package:clide/clide.dart';
|
|
||||||
import 'package:clide_app/builtin/claude/src/claude_pane.dart';
|
|
||||||
import 'package:clide_app/extension/extension.dart';
|
|
||||||
import 'package:clide_app/kernel/kernel.dart';
|
|
||||||
|
|
||||||
/// Claude pane. Primary per repo (tmux-persisted per D-041); optional
|
|
||||||
/// secondaries spawned via the `claude.new-secondary` command.
|
|
||||||
class ClaudeExtension extends ClideExtension {
|
|
||||||
@override
|
|
||||||
String get id => 'builtin.claude';
|
|
||||||
@override
|
|
||||||
String get title => 'Claude';
|
|
||||||
@override
|
|
||||||
String get version => '0.1.0';
|
|
||||||
@override
|
|
||||||
List<String> get dependsOn => const [];
|
|
||||||
|
|
||||||
@override
|
|
||||||
List<ContributionPoint> get contributions => [
|
|
||||||
TabContribution(
|
|
||||||
id: 'claude.primary',
|
|
||||||
slot: Slots.workspace,
|
|
||||||
title: 'Claude',
|
|
||||||
titleKey: 'tab.title',
|
|
||||||
i18nNamespace: id,
|
|
||||||
priority: 90, // just before terminal (100)
|
|
||||||
build: (_) => const ClaudePane(isPrimary: true),
|
|
||||||
),
|
|
||||||
CommandContribution(
|
|
||||||
id: 'claude.new-secondary',
|
|
||||||
command: 'claude.new-secondary',
|
|
||||||
title: 'Claude: open a secondary session',
|
|
||||||
run: (_) async {
|
|
||||||
// Secondary spawn is a UI-side concern (tab creation in
|
|
||||||
// the workspace slot). Returning OK signals the palette
|
|
||||||
// that the command exists; wiring the workspace-slot tab
|
|
||||||
// manager to open `ClaudePane(isPrimary: false,
|
|
||||||
// secondaryIndex: N)` on this command lands in a follow-up.
|
|
||||||
// D-041 policy is captured in the decision record either
|
|
||||||
// way.
|
|
||||||
return IpcResponse.ok(
|
|
||||||
id: '',
|
|
||||||
data: const {
|
|
||||||
'status': 'accepted',
|
|
||||||
'note': 'UI-side tab manager wires this up in a '
|
|
||||||
'follow-up commit.',
|
|
||||||
},
|
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,347 +0,0 @@
|
|||||||
# Generated by pub
|
|
||||||
# See https://dart.dev/tools/pub/glossary#lockfile
|
|
||||||
packages:
|
|
||||||
alchemist:
|
|
||||||
dependency: "direct dev"
|
|
||||||
description:
|
|
||||||
name: alchemist
|
|
||||||
sha256: "4c5f5146b7539eb9a53211d81489f09f08fc3821f754a370f493477a9ef9e390"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "0.12.1"
|
|
||||||
async:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: async
|
|
||||||
sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "2.13.1"
|
|
||||||
boolean_selector:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: boolean_selector
|
|
||||||
sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "2.1.2"
|
|
||||||
characters:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: characters
|
|
||||||
sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "1.4.1"
|
|
||||||
clide:
|
|
||||||
dependency: "direct main"
|
|
||||||
description:
|
|
||||||
path: ".."
|
|
||||||
relative: true
|
|
||||||
source: path
|
|
||||||
version: "2.0.0-dev"
|
|
||||||
clock:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: clock
|
|
||||||
sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "1.1.2"
|
|
||||||
collection:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: collection
|
|
||||||
sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "1.19.1"
|
|
||||||
convert:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: convert
|
|
||||||
sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "3.1.2"
|
|
||||||
equatable:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: equatable
|
|
||||||
sha256: "3e0141505477fd8ad55d6eb4e7776d3fe8430be8e497ccb1521370c3f21a3e2b"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "2.0.8"
|
|
||||||
fake_async:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: fake_async
|
|
||||||
sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "1.3.3"
|
|
||||||
ffi:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: ffi
|
|
||||||
sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "2.1.3"
|
|
||||||
file:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: file
|
|
||||||
sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "7.0.1"
|
|
||||||
flutter:
|
|
||||||
dependency: "direct main"
|
|
||||||
description: flutter
|
|
||||||
source: sdk
|
|
||||||
version: "0.0.0"
|
|
||||||
flutter_driver:
|
|
||||||
dependency: transitive
|
|
||||||
description: flutter
|
|
||||||
source: sdk
|
|
||||||
version: "0.0.0"
|
|
||||||
flutter_lints:
|
|
||||||
dependency: "direct dev"
|
|
||||||
description:
|
|
||||||
name: flutter_lints
|
|
||||||
sha256: "3105dc8492f6183fb076ccf1f351ac3d60564bff92e20bfc4af9cc1651f4e7e1"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "6.0.0"
|
|
||||||
flutter_test:
|
|
||||||
dependency: "direct dev"
|
|
||||||
description: flutter
|
|
||||||
source: sdk
|
|
||||||
version: "0.0.0"
|
|
||||||
fuchsia_remote_debug_protocol:
|
|
||||||
dependency: transitive
|
|
||||||
description: flutter
|
|
||||||
source: sdk
|
|
||||||
version: "0.0.0"
|
|
||||||
integration_test:
|
|
||||||
dependency: "direct dev"
|
|
||||||
description: flutter
|
|
||||||
source: sdk
|
|
||||||
version: "0.0.0"
|
|
||||||
leak_tracker:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: leak_tracker
|
|
||||||
sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "11.0.2"
|
|
||||||
leak_tracker_flutter_testing:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: leak_tracker_flutter_testing
|
|
||||||
sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "3.0.10"
|
|
||||||
leak_tracker_testing:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: leak_tracker_testing
|
|
||||||
sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "3.0.2"
|
|
||||||
lints:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: lints
|
|
||||||
sha256: "12f842a479589fea194fe5c5a3095abc7be0c1f2ddfa9a0e76aed1dbd26a87df"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "6.1.0"
|
|
||||||
matcher:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: matcher
|
|
||||||
sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "0.12.19"
|
|
||||||
material_color_utilities:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: material_color_utilities
|
|
||||||
sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "0.13.0"
|
|
||||||
meta:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: meta
|
|
||||||
sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "1.17.0"
|
|
||||||
mocktail:
|
|
||||||
dependency: "direct dev"
|
|
||||||
description:
|
|
||||||
name: mocktail
|
|
||||||
sha256: "890df3f9688106f25755f26b1c60589a92b3ab91a22b8b224947ad041bf172d8"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "1.0.4"
|
|
||||||
path:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: path
|
|
||||||
sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "1.9.1"
|
|
||||||
platform:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: platform
|
|
||||||
sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "3.1.6"
|
|
||||||
process:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: process
|
|
||||||
sha256: c6248e4526673988586e8c00bb22a49210c258dc91df5227d5da9748ecf79744
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "5.0.5"
|
|
||||||
quiver:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: quiver
|
|
||||||
sha256: ea0b925899e64ecdfbf9c7becb60d5b50e706ade44a85b2363be2a22d88117d2
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "3.2.2"
|
|
||||||
sky_engine:
|
|
||||||
dependency: transitive
|
|
||||||
description: flutter
|
|
||||||
source: sdk
|
|
||||||
version: "0.0.0"
|
|
||||||
source_span:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: source_span
|
|
||||||
sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "1.10.2"
|
|
||||||
stack_trace:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: stack_trace
|
|
||||||
sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "1.12.1"
|
|
||||||
stream_channel:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: stream_channel
|
|
||||||
sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "2.1.4"
|
|
||||||
string_scanner:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: string_scanner
|
|
||||||
sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "1.4.1"
|
|
||||||
sync_http:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: sync_http
|
|
||||||
sha256: "7f0cd72eca000d2e026bcd6f990b81d0ca06022ef4e32fb257b30d3d1014a961"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "0.3.1"
|
|
||||||
term_glyph:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: term_glyph
|
|
||||||
sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "1.2.2"
|
|
||||||
test_api:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: test_api
|
|
||||||
sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "0.7.10"
|
|
||||||
typed_data:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: typed_data
|
|
||||||
sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "1.4.0"
|
|
||||||
vector_math:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: vector_math
|
|
||||||
sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "2.2.0"
|
|
||||||
vm_service:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: vm_service
|
|
||||||
sha256: "046d3928e16fa4dc46e8350415661755ab759d9fc97fc21b5ab295f71e4f0499"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "15.1.0"
|
|
||||||
webdriver:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: webdriver
|
|
||||||
sha256: "2f3a14ca026957870cfd9c635b83507e0e51d8091568e90129fbf805aba7cade"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "3.1.0"
|
|
||||||
xterm:
|
|
||||||
dependency: "direct main"
|
|
||||||
description:
|
|
||||||
name: xterm
|
|
||||||
sha256: "168dfedca77cba33fdb6f52e2cd001e9fde216e398e89335c19b524bb22da3a2"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "4.0.0"
|
|
||||||
yaml:
|
|
||||||
dependency: "direct main"
|
|
||||||
description:
|
|
||||||
name: yaml
|
|
||||||
sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "3.1.3"
|
|
||||||
zmodem:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: zmodem
|
|
||||||
sha256: "3b7e5b29f3a7d8aee472029b05165a68438eff2f3f7766edf13daba1e297adbf"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "0.0.6"
|
|
||||||
sdks:
|
|
||||||
dart: ">=3.9.0-0 <4.0.0"
|
|
||||||
flutter: ">=3.32.0"
|
|
||||||
@@ -1,117 +0,0 @@
|
|||||||
# clide_app — Flutter desktop UI.
|
|
||||||
#
|
|
||||||
# Renders clide's IDE surfaces; depends on the root `clide` Dart core
|
|
||||||
# package (shared with the CLI + daemon). Prefer-zero-deps; every
|
|
||||||
# third-party entry below is exact-pinned and justified. No carets.
|
|
||||||
|
|
||||||
name: clide_app
|
|
||||||
description: >-
|
|
||||||
Flutter desktop IDE for Claude Code — renders the UI. Talks to the
|
|
||||||
Dart core (CLI + daemon) via IPC; all PTY/subprocess/filesystem work
|
|
||||||
lives in the daemon (D-005).
|
|
||||||
publish_to: none
|
|
||||||
version: 2.0.0-dev
|
|
||||||
repository: https://git.schweitz.net/jpmschweitzer/clide
|
|
||||||
|
|
||||||
environment:
|
|
||||||
sdk: ">=3.5.0 <4.0.0"
|
|
||||||
flutter: ">=3.19.0"
|
|
||||||
|
|
||||||
dependencies:
|
|
||||||
flutter:
|
|
||||||
sdk: flutter
|
|
||||||
|
|
||||||
# Dart core — shared types, IPC protocol, anything CLI + daemon + app
|
|
||||||
# all import. Kept Flutter-free so `dart compile exe` produces a lean
|
|
||||||
# static binary (see D-005).
|
|
||||||
clide:
|
|
||||||
path: ../
|
|
||||||
|
|
||||||
# YAML — the one justified exception to prefer-zero-deps. Dart-team
|
|
||||||
# maintained, used for theme files and extension manifests.
|
|
||||||
yaml: 3.1.3
|
|
||||||
|
|
||||||
# xterm.dart — Flutter-native terminal emulator (ANSI / xterm / truecolor
|
|
||||||
# parser + renderer). Writing a vt100/ANSI parser that handles everything
|
|
||||||
# tmux / neovim / claude emit would be weeks of work for no fidelity
|
|
||||||
# win. Listed in licenses.yaml per D-042. MIT.
|
|
||||||
xterm: 4.0.0
|
|
||||||
|
|
||||||
dev_dependencies:
|
|
||||||
flutter_test:
|
|
||||||
sdk: flutter
|
|
||||||
flutter_lints: 6.0.0
|
|
||||||
|
|
||||||
# Integration tests for the real-app startup-regression gate.
|
|
||||||
integration_test:
|
|
||||||
sdk: flutter
|
|
||||||
|
|
||||||
# Mocks at IO/IPC boundaries; hand-rolled fakes for ChangeNotifiers.
|
|
||||||
mocktail: 1.0.4
|
|
||||||
|
|
||||||
# Golden-test framework (Ahem font, cross-platform pixel stability).
|
|
||||||
# Used only for widget primitives, not compositions.
|
|
||||||
alchemist: 0.12.1
|
|
||||||
|
|
||||||
flutter:
|
|
||||||
uses-material-design: false
|
|
||||||
|
|
||||||
assets:
|
|
||||||
- lib/kernel/src/theme/themes/
|
|
||||||
- lib/kernel/src/i18n/catalog/
|
|
||||||
# Licensing — read by the About screen. `licenses.yaml` is the
|
|
||||||
# manifest (self + runtime deps + dev deps); each `license_file`
|
|
||||||
# pointer must also be a bundled asset so the About screen can
|
|
||||||
# display each dependency's full license text at runtime.
|
|
||||||
# Root LICENSE is mirrored into assets/LICENSE for the same reason
|
|
||||||
# (root paths can't be referenced from a Flutter package's assets).
|
|
||||||
# See CLAUDE.md "Dependencies & supply chain" and D-042.
|
|
||||||
- assets/licenses.yaml
|
|
||||||
- assets/LICENSE
|
|
||||||
- assets/fonts/jetbrains_mono/OFL.txt
|
|
||||||
- assets/fonts/josefin_sans/OFL.txt
|
|
||||||
- assets/fonts/phosphor/LICENSE
|
|
||||||
- assets/logo/clide-logo.svg
|
|
||||||
- assets/logo/clide-logo-16.png
|
|
||||||
- assets/logo/clide-logo-32.png
|
|
||||||
- assets/logo/clide-logo-48.png
|
|
||||||
- assets/logo/clide-logo-192.png
|
|
||||||
- assets/logo/clide-logo-256.png
|
|
||||||
- assets/logo/clide-logo-512.png
|
|
||||||
- assets/logo/clide-logo-1024.png
|
|
||||||
# Tree-sitter WASM grammars and highlight queries.
|
|
||||||
- assets/grammars/
|
|
||||||
- assets/queries/
|
|
||||||
|
|
||||||
# Bundled fonts. OFL-licensed; license files live alongside each.
|
|
||||||
#
|
|
||||||
# JosefinSans — UI default. Variable font covers weights 100-700
|
|
||||||
# plus an italic axis companion; we default to Light (300) per the
|
|
||||||
# project's aesthetic direction.
|
|
||||||
#
|
|
||||||
# JetBrainsMono — terminal / code surfaces. Static weights keep
|
|
||||||
# rendering predictable across xterm.dart, goldens, and CI.
|
|
||||||
fonts:
|
|
||||||
- family: JosefinSans
|
|
||||||
fonts:
|
|
||||||
- asset: assets/fonts/josefin_sans/JosefinSans-VariableFont.ttf
|
|
||||||
- asset: assets/fonts/josefin_sans/JosefinSans-Italic-VariableFont.ttf
|
|
||||||
style: italic
|
|
||||||
|
|
||||||
- family: Phosphor
|
|
||||||
fonts:
|
|
||||||
- asset: assets/fonts/phosphor/Phosphor.ttf
|
|
||||||
- asset: assets/fonts/phosphor/Phosphor-Bold.ttf
|
|
||||||
weight: 700
|
|
||||||
- asset: assets/fonts/phosphor/Phosphor-Fill.ttf
|
|
||||||
|
|
||||||
- family: JetBrainsMono
|
|
||||||
fonts:
|
|
||||||
- asset: assets/fonts/jetbrains_mono/JetBrainsMono-Regular.ttf
|
|
||||||
- asset: assets/fonts/jetbrains_mono/JetBrainsMono-Italic.ttf
|
|
||||||
style: italic
|
|
||||||
- asset: assets/fonts/jetbrains_mono/JetBrainsMono-Bold.ttf
|
|
||||||
weight: 700
|
|
||||||
- asset: assets/fonts/jetbrains_mono/JetBrainsMono-BoldItalic.ttf
|
|
||||||
weight: 700
|
|
||||||
style: italic
|
|
||||||
|
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 84 KiB |
|
Before Width: | Height: | Size: 950 B After Width: | Height: | Size: 950 B |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 408 B After Width: | Height: | Size: 408 B |