DaemonBus (was EventBus): typed events for system/IPC layer.
MessageBus: channel-based pub/sub for UI/extension coordination.
Messages carry publisher (auto-stamped from extension ID),
channel (required), timestamp, and payload. Subscribe by
publisher, channel, or both — zero collision across extensions.
Extension context gains publish() and subscribe() convenience
methods that auto-stamp the extension's ID as publisher.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Both views now group items into collapsible accordion sections:
- Decisions: CONFIRMED/QUESTIONS/REJECTED with colored dots
- Tickets: ACTIVE/BACKLOG/DONE/OTHER with caret toggle
Cards show type dot with tooltip, ID in mono, domain badge
(decisions), parent reference (tickets), wrapping title, and
status badges. Search filter forces all sections open. ACTIVE
and BACKLOG default expanded; DONE default collapsed.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
TicketTypeColors maps initiative/epic/story/task/bug to distinct
colors, with dark and light presets auto-selected from the active
theme. Ticket IDs are now color-coded by type (purple initiative,
blue epic, green story, muted task, red bug). Status dot remains
for state. Pattern documented in theme-ui skill as the standard
for extension-owned domain colors.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Both views were calling pql.exec (not registered). Switched to
pql.decisions.list and pql.tickets.list which are registered
IPC handlers. Response parsing updated to read structured data
instead of parsing JSON from stdout.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Decisions and tickets are now top-level sidebar sections with
their own extensions and filter boxes. The pql panel keeps only
Files and Query — its own surfaces. Removed loadDecisions,
loadTickets, _DecisionRow, _TicketColumn from pql controller
and view.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ClideTappable builder now receives (context, hovered, pressed).
Optional onLongPress and onPressChanged callbacks. ClideButton
is now a StatelessWidget wrapping ClideTappable. ClideIconRail
refactored — _RailButton uses ClideTappable with tooltip.
ClideTooltip positions smart (above when near screen bottom).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Encapsulates the hover + click + cursor pattern repeated across
the codebase. Builder receives (context, hovered) so callers
control their own hover styling. Refactored _ThemeLink to use it.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Status line aligned to the right. Theme name is clickable —
highlights on hover and executes theme.pick command to open
the theme picker dialog.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ToolCheck kernel service checks ptyc/pql/tmux/git availability
once at boot, shared by status bar and welcome screen. Welcome
status line shows "application ok" in green or lists missing
tools in amber. Logo doubled to 144px. DialogHost moved inside
Expanded to fix blank workspace. Welcome maxWidth 850px, path
overflow fixed with Flexible.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Hat bar moved above the Stack so it stays visible when the welcome
overlay shows. Recent project path row uses Flexible with ellipsis
to prevent horizontal overflow.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Three format engines adopted per the new D-058 rule (format
engines clear the dependency bar; UI chrome stays in-house):
- jovial_svg 1.1.26 (BSD-3) — SVG renderer via CustomPaint
- markdown 7.2.2 (BSD-3) — GFM parser; renderer is ours
- flutter_widget_from_html_core 0.17.2 (MIT) — HTML renderer
Welcome screen now loads logo.svg via jovial_svg instead of a
raster PNG. POLICY.md updated with format engine rule. All three
documented in licenses.yaml.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Two clean sets from their SVG sources:
logo.svg → logo-{16..1024}.png (bare, transparent)
appicon.svg → appicon-{16..1024}.png (on dark circle)
All rendered from 2048px masters. References updated in
pubspec.yaml, welcome view, and native runner.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Prebuilt ptyc binary sits alongside libtree-sitter.so in the
platform-specific native directory. Resolution order:
native/linux-x64/ptyc → ptyc/bin/ptyc → ~/.local/bin/ptyc → PATH.
Eliminates the make ptyc-build step on fresh clones.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Shared filter box with search icon, debounced input, and clear
button. Applied to all six left-panel panes for consistent
filtering: Files (flat path results when filtering), Git (filter
staged/unstaged/untracked by path), Decisions (by ID/title/domain),
Tickets (by ID/title/status), Problems (by source/message), and
pql Query (replaces custom _QueryInput).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Shows "● ok" in green when both ptyc and pql are available.
When either is missing, shows each broken tool by name in amber
("● ptyc not found", "● pql not found"). Font matches the git
branch widget — uses inherited UI face at clideFontCaption size,
no mono override. Dot indicator replaces the Phosphor icon.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Branch picker now handles Escape key to dismiss, shows an × close
button in the header, and displays error/empty states instead of
silently showing nothing. Dialog backdrop is click-to-dismiss (the
dialog content stops propagation so clicks inside don't close it).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The tool status indicator now checks the repo-local ptyc binary
before falling back to PATH lookup, matching the resolution logic
in main.dart.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The status bar now shows whether ptyc and pql are findable on PATH
(green = found, amber = missing) instead of the obsolete daemon
connection state. Per D-056 there is no daemon to connect to.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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>