diff --git a/lib/builtin/claude/src/activity_cluster.dart b/lib/builtin/claude/src/activity_cluster.dart index 248fde18..ff557c42 100644 --- a/lib/builtin/claude/src/activity_cluster.dart +++ b/lib/builtin/claude/src/activity_cluster.dart @@ -7,7 +7,7 @@ /// This file is pure (no Flutter): it turns a flat [ConversationItem] list /// into a list of [RenderGroup]s — each either a first-class [StickyItem] or /// a foldable [FoldedCluster]. The widget layer renders sticky items as -/// before and clusters as one [activity card]. Kept separate + unit-tested +/// before and clusters as one `activity card`. Kept separate + unit-tested /// because the fold rules are the load-bearing part. library; diff --git a/lib/builtin/claude/src/claude_status.dart b/lib/builtin/claude/src/claude_status.dart index 2720da40..2c4baa06 100644 --- a/lib/builtin/claude/src/claude_status.dart +++ b/lib/builtin/claude/src/claude_status.dart @@ -53,8 +53,8 @@ String nextSafePermissionMode(String current) { } /// Status-line segments split around the permission-mode badge so the UI can -/// render the mode as an interactive control between them (T-226). [leading] -/// is the model; [trailing] joins context / cost / rate-limit. Either may be +/// render the mode as an interactive control between them (T-226). `leading` +/// is the model; `trailing` joins context / cost / rate-limit. Either may be /// null when there's nothing to show. ({String? leading, String? trailing}) statusSegmentsAroundMode(SessionStatus s) { final trailing = [ diff --git a/lib/builtin/claude/src/conversation_controller.dart b/lib/builtin/claude/src/conversation_controller.dart index eede1dd2..7a272be3 100644 --- a/lib/builtin/claude/src/conversation_controller.dart +++ b/lib/builtin/claude/src/conversation_controller.dart @@ -28,8 +28,8 @@ class ConversationController extends ChangeNotifier { } /// Build a controller fed from the kernel [MessageBus] — it consumes - /// the [ConversationItem]s a [TranscriptPublisher] writes onto - /// [publisher]/[channel]. Decouples the view from the reader so several + /// the [ConversationItem]s a `TranscriptPublisher` writes onto + /// `publisher`/[channel]. Decouples the view from the reader so several /// panels can render the same conversation (team work, T-139/T-140). factory ConversationController.fromBus({required MessageBus messages, String channel = ClaudeConversation.leadChannel, Future Function()? onDispose}) { final stream = messages diff --git a/lib/builtin/claude/src/file_tail_follower.dart b/lib/builtin/claude/src/file_tail_follower.dart index cd71299f..6eefdc68 100644 --- a/lib/builtin/claude/src/file_tail_follower.dart +++ b/lib/builtin/claude/src/file_tail_follower.dart @@ -4,7 +4,7 @@ /// process), so to "watch the same output" we open our OWN read-only follower /// on the file the command tails. This never spawns a process and never /// touches Claude's command — it just reads the file as it grows, like -/// `tail -f`, and hands new bytes to [onData]. +/// `tail -f`, and hands new bytes to `onData`. /// /// Pure dart:io/dart:async (no Flutter) so it's unit-testable. Polls rather /// than using a watcher so it works uniformly across platforms and survives diff --git a/lib/builtin/claude/src/meta_sidebar/roster_row.dart b/lib/builtin/claude/src/meta_sidebar/roster_row.dart index 8ddd1925..04e2d929 100644 --- a/lib/builtin/claude/src/meta_sidebar/roster_row.dart +++ b/lib/builtin/claude/src/meta_sidebar/roster_row.dart @@ -51,7 +51,7 @@ class AgentRosterRow extends StatefulWidget { final void Function(String memberName, String text) onInjectSubmit; final void Function(String memberName) onClose; - /// Called when the badge cycles to a new [mode] string for this member. + /// Called when the badge cycles to a new `mode` string for this member. /// Handles both safe-trio clicks and confirmed bypass. The parent sends /// the mode to the session via `StreamJsonSession.setPermissionMode`. final void Function(String memberName, String mode) onSetPermissionMode; diff --git a/lib/builtin/claude/src/prompt_card.dart b/lib/builtin/claude/src/prompt_card.dart index 2d7593b5..d2cb9162 100644 --- a/lib/builtin/claude/src/prompt_card.dart +++ b/lib/builtin/claude/src/prompt_card.dart @@ -5,7 +5,7 @@ /// Rendered in the composer zone (not inline in the conversation) so /// interaction and conversation widgets don't mix — the pane swaps it in for /// the text input while a prompt is open. The decision is returned via -/// [onResolve]; the pane then removes the card. +/// `onResolve`; the pane then removes the card. /// /// Plain [ClideButton]s (Semantics buttons → keyboard/AT reachable), no /// hover-revealed chrome that would fight the buttons. diff --git a/lib/builtin/claude/src/session_orchestrator.dart b/lib/builtin/claude/src/session_orchestrator.dart index 041e9f68..dbf317a6 100644 --- a/lib/builtin/claude/src/session_orchestrator.dart +++ b/lib/builtin/claude/src/session_orchestrator.dart @@ -2,8 +2,8 @@ /// /// A session is a `claude` stream-json process clide spawns and renders; a /// pane is just a *view* on one. The orchestrator decouples a session's -/// lifecycle from any pane: [spawn] starts and registers it, [show]/[hide] -/// toggle visibility WITHOUT tearing the process down, and [close] kills it. +/// lifecycle from any pane: `spawn` starts and registers it, `show`/`hide` +/// toggle visibility WITHOUT tearing the process down, and `close` kills it. /// This is the one primitive behind teammate / secondary tab / forked branch /// (Phase 2): they are all just managed sessions shown as panes. /// diff --git a/lib/builtin/claude/src/team_chat_model.dart b/lib/builtin/claude/src/team_chat_model.dart index b140c038..31332022 100644 --- a/lib/builtin/claude/src/team_chat_model.dart +++ b/lib/builtin/claude/src/team_chat_model.dart @@ -5,8 +5,8 @@ /// and the full workspace pane read from this one model — they share state, /// they do NOT each hold their own copy. /// -/// [postAsUser] is the user's write path: it routes by @tag (one agent or -/// broadcast) and, when the interrupt flag is set, calls [interrupt()] on the +/// `postAsUser` is the user's write path: it routes by @tag (one agent or +/// broadcast) and, when the interrupt flag is set, calls `interrupt()` on the /// target session THEN delivers the message. /// /// Flutter-free on purpose: this module (like [TeamBroker]) runs under diff --git a/lib/builtin/claude/src/team_chat_sidebar.dart b/lib/builtin/claude/src/team_chat_sidebar.dart index 49110773..6cc999c4 100644 --- a/lib/builtin/claude/src/team_chat_sidebar.dart +++ b/lib/builtin/claude/src/team_chat_sidebar.dart @@ -2,7 +2,7 @@ /// /// Displays the live broker chat timeline as colour-coded rows and provides a /// quick @-post composer. Tapping the pop-out icon opens the full chat pane -/// ([claude.team-chat] workspace tab). +/// (`claude.team-chat` workspace tab). /// /// Both this widget and [TeamChatPane] read from the same [TeamChatModel] — /// there is one model, two surfaces. diff --git a/lib/builtin/claude/src/transcript_reader.dart b/lib/builtin/claude/src/transcript_reader.dart index aeb5e0be..ddcd1427 100644 --- a/lib/builtin/claude/src/transcript_reader.dart +++ b/lib/builtin/claude/src/transcript_reader.dart @@ -24,7 +24,7 @@ /// /// # Version drift-guard /// If the envelope `version` field has an unfamiliar major version the reader -/// warns via [onWarn] (or stderr if omitted) and degrades gracefully — it +/// warns via `onWarn` (or stderr if omitted) and degrades gracefully — it /// parses whatever it can and skips the rest rather than crashing. library; @@ -227,7 +227,7 @@ class TranscriptReader { /// [pollInterval] controls how often the reader polls for new data and /// session switches (default 500 ms). /// - /// [onWarn] receives warning messages from the version drift-guard. + /// `onWarn` receives warning messages from the version drift-guard. /// If omitted, warnings are written to stderr. TranscriptReader( this.workspacePath, { @@ -419,7 +419,7 @@ class TranscriptReader { } /// Parse a single JSONL line into its items (forwarding any version - /// warnings to [onWarn]). Public so tests exercise the real parser. + /// warnings to `onWarn`). Public so tests exercise the real parser. List parseLine(String line) { final parsed = parseTranscriptChunk(line); for (final w in parsed.warnings) { diff --git a/lib/builtin/editor/src/editor_view.dart b/lib/builtin/editor/src/editor_view.dart index f1b95eb9..9b59ca2d 100644 --- a/lib/builtin/editor/src/editor_view.dart +++ b/lib/builtin/editor/src/editor_view.dart @@ -13,7 +13,7 @@ import 'vim_edit_ops.dart'; /// Tier-2 editor pane. Shows one tab per open buffer via the shared /// [MultitabPane] (the same strip the Claude pane uses); the body -/// reflects the daemon's active buffer. The daemon ([EditorRegistry]) +/// reflects the daemon's active buffer. The daemon (`EditorRegistry`) /// is the source of truth for which buffers are open and which is /// active — the local [MultitabController] is reconciled from it, and /// tab gestures (select / close) are routed back as `editor.activate` diff --git a/lib/builtin/vim/src/vim_mode_service.dart b/lib/builtin/vim/src/vim_mode_service.dart index a2fe7a1e..bd33c011 100644 --- a/lib/builtin/vim/src/vim_mode_service.dart +++ b/lib/builtin/vim/src/vim_mode_service.dart @@ -9,7 +9,7 @@ /// the `vim.yaml` preset (T-65) guards its bindings with `when: vim.normal` /// etc. Nothing reaches into this object across the builtin boundary. /// -/// The whole layer is gated by [enabled], which the Vim extension ties to +/// The whole layer is gated by `enabled`, which the Vim extension ties to /// the active preset: under a non-Vim preset the flags are cleared so they /// can never affect another preset's bindings. library; @@ -47,7 +47,7 @@ class VimModeService extends ChangeNotifier { /// Whether the Vim layer is live. False under non-Vim presets. bool get enabled => _enabled; - /// The active mode. Meaningful only while [enabled]; defaults to + /// The active mode. Meaningful only while `enabled`; defaults to /// [VimMode.normal] and resets to it whenever the layer is enabled. VimMode get mode => _mode; diff --git a/lib/kernel/src/keymap/keymap_service.dart b/lib/kernel/src/keymap/keymap_service.dart index f78232f4..23044ac1 100644 --- a/lib/kernel/src/keymap/keymap_service.dart +++ b/lib/kernel/src/keymap/keymap_service.dart @@ -13,7 +13,7 @@ /// /// Scope context is a `Map` keyed by named flags (e.g. /// `palette.open`, `editor.focused`). Producing services call -/// [setScopeFlag] when their state changes; consumers reference the +/// `setScopeFlag` when their state changes; consumers reference the /// flag name in when-clauses. library; diff --git a/lib/kernel/src/keymap/modifier_tap.dart b/lib/kernel/src/keymap/modifier_tap.dart index e51b1339..5c17aae4 100644 --- a/lib/kernel/src/keymap/modifier_tap.dart +++ b/lib/kernel/src/keymap/modifier_tap.dart @@ -9,8 +9,8 @@ /// /// Headless and clock-injected: the caller (the root shell's raw-keyboard /// handler) passes the event time so it neither reads a clock nor consumes -/// events. Feed every [KeyDownEvent] to [down] and every [KeyUpEvent] to -/// [up], passing the event's [KeyModifier] (null for non-modifier keys). +/// events. Feed every [KeyDownEvent] to `down` and every [KeyUpEvent] to +/// `up`, passing the event's [KeyModifier] (null for non-modifier keys). library; import 'key_chord.dart'; diff --git a/lib/kernel/src/keymap/pane_key_nav.dart b/lib/kernel/src/keymap/pane_key_nav.dart index 65c34173..77be4e14 100644 --- a/lib/kernel/src/keymap/pane_key_nav.dart +++ b/lib/kernel/src/keymap/pane_key_nav.dart @@ -10,7 +10,7 @@ /// While a `vim.normal` scope flag is set and this region holds focus, bare and /// shift-only chords (plus the two half-page chords `ctrl+d` / `ctrl+u`) feed /// the matcher against the live keymap; a fired [NavIntent] is handed to -/// [onNav] with its repeat count. Everything else under `vim.normal` is +/// `onNav` with its repeat count. Everything else under `vim.normal` is /// swallowed (vim normal mode is inert for unbound keys), except other-modifier /// chords (palette, quick-open, …) which bubble to the global handler. Under a /// non-vim preset or in insert mode the region is transparent — keys pass diff --git a/lib/kernel/src/keymap/when_clause.dart b/lib/kernel/src/keymap/when_clause.dart index c51e4cd8..ed1e9194 100644 --- a/lib/kernel/src/keymap/when_clause.dart +++ b/lib/kernel/src/keymap/when_clause.dart @@ -6,7 +6,7 @@ /// and := unary ('&&' unary)* /// unary := '!' unary | atom /// atom := IDENT | '(' expr ')' -/// IDENT := [a-zA-Z_][a-zA-Z0-9._-]* +/// IDENT := `[a-zA-Z_][a-zA-Z0-9._-]*` /// /// Identifiers resolve against a `Map` context. A missing /// identifier evaluates to `false` — bindings can assume any required diff --git a/lib/kernel/src/log_ring.dart b/lib/kernel/src/log_ring.dart index 4c23ed13..ba59585d 100644 --- a/lib/kernel/src/log_ring.dart +++ b/lib/kernel/src/log_ring.dart @@ -2,9 +2,9 @@ /// output dock (T-54 / D-87) reads on open. /// /// The [Logger] only live-broadcasts to its stream; a panel that opens late -/// would see nothing. [LogRing] is a sink that keeps the last [capacity] +/// would see nothing. [LogRing] is a sink that keeps the last `capacity` /// records (drop-oldest, same shape as the D-85 event ring) plus enough -/// bookkeeping to drive the panel's filter dropdown (distinct [sources]) and +/// bookkeeping to drive the panel's filter dropdown (distinct `sources`) and /// the status-bar health badge (level counts). /// /// Flutter-free (only `dart:async`/`dart:collection` + the [LogRecord] type) @@ -42,7 +42,7 @@ class LogRing { int get length => _records.length; bool get isEmpty => _records.isEmpty; - /// Append a record (the [Logger] sink). Drops the oldest past [capacity]. + /// Append a record (the [Logger] sink). Drops the oldest past `capacity`. void add(LogRecord r) { _records.addLast(r); _sourceCounts.update(r.source, (n) => n + 1, ifAbsent: () => 1); diff --git a/lib/kernel/src/panels/view_pane_snapshot.dart b/lib/kernel/src/panels/view_pane_snapshot.dart index 7ba2b11d..12c8df9b 100644 --- a/lib/kernel/src/panels/view_pane_snapshot.dart +++ b/lib/kernel/src/panels/view_pane_snapshot.dart @@ -1,7 +1,7 @@ /// Snapshots the kernel's live tabs into [ViewPane]s so `pane list` reflects /// the panes the user actually sees in the GUI (T-219, D-6 parity / D-83). /// -/// Read-at-request-time: no state is mirrored into the IPC [PaneRegistry], so +/// Read-at-request-time: no state is mirrored into the IPC `PaneRegistry`, so /// nothing can drift from the live UI. Lives in the kernel (not `lib/src/panes/`) /// because it reads Flutter-coupled kernel state; it produces the Flutter-free /// [ViewPane] the pane command serialises. diff --git a/lib/widgets/src/clide_anchored.dart b/lib/widgets/src/clide_anchored.dart index 4106628d..3af93e1b 100644 --- a/lib/widgets/src/clide_anchored.dart +++ b/lib/widgets/src/clide_anchored.dart @@ -5,15 +5,15 @@ /// re-derive the same four things: a [LayerLink] + [CompositedTransformFollower] /// (or a hand-rolled `Positioned`), a full-screen tap-away barrier, the /// `Overlay.insert` / `OverlayEntry` bookkeeping, and post-frame focus capture. -/// This widget owns all of it; callers supply the trigger ([anchor]) and the -/// floating content ([overlayBuilder]). Modal, centred dialogs stay on the +/// This widget owns all of it; callers supply the trigger (`anchor`) and the +/// floating content (`overlayBuilder`). Modal, centred dialogs stay on the /// kernel `DialogRouter` — this is for anchored, non-modal popovers. library; import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart'; -/// Primary placement of the floating panel relative to the [anchor]. +/// Primary placement of the floating panel relative to the `anchor`. enum ClideAnchorSide { below, above, left, right } /// Cross-axis alignment of the panel's edge to the anchor's edge. @@ -41,8 +41,8 @@ class ClideOverlayController extends ChangeNotifier { void toggle() => _open ? close() : open(); } -/// Wraps [anchor] with a [CompositedTransformTarget] and, while [controller] is -/// open, inserts an [OverlayEntry] built from [overlayBuilder], positioned +/// Wraps `anchor` with a [CompositedTransformTarget] and, while [controller] is +/// open, inserts an [OverlayEntry] built from `overlayBuilder`, positioned /// relative to the anchor (or centred when [centered]). class ClideAnchoredOverlay extends StatefulWidget { const ClideAnchoredOverlay({ diff --git a/lib/widgets/src/clide_collapser_card.dart b/lib/widgets/src/clide_collapser_card.dart index 2c012c8a..41fa92db 100644 --- a/lib/widgets/src/clide_collapser_card.dart +++ b/lib/widgets/src/clide_collapser_card.dart @@ -4,9 +4,9 @@ /// list of one: there is no separate single-card path, which keeps the model /// uniform and reliable. /// -/// - **Collapsed** (default): a one-line ticker — the [label], the echoed -/// [collapsedSummary] (the run's latest content line), a fixed-width [counter] -/// ("3 steps"), and the aggregate [status] (spinner / check / cross). The +/// - **Collapsed** (default): a one-line ticker — the `label`, the echoed +/// `collapsedSummary` (the run's latest content line), a fixed-width `counter` +/// ("3 steps"), and the aggregate `status` (spinner / check / cross). The /// whole row is the toggle. /// - **Expanded**: a framed inner canvas wrapping the item cards; clicking the /// frame BACKGROUND (padding, the gaps between items, the gutter — anywhere an @@ -16,7 +16,7 @@ /// /// Chrome is consistent across every collapser: the chevron is hard against the /// LEFT edge, the status icon hard against the RIGHT edge, the counter sits in a -/// fixed-width slot just inboard of it, and [color] drives the border + the +/// fixed-width slot just inboard of it, and `color` drives the border + the /// chevron/label tint so each instance keeps its visual identity through one /// widget. The inner item cards are content (they keep their OWN per-item status /// + stripe); the aggregate status/count/title shown here are computed by the diff --git a/lib/widgets/src/clide_lightbox.dart b/lib/widgets/src/clide_lightbox.dart index fa244474..6f071293 100644 --- a/lib/widgets/src/clide_lightbox.dart +++ b/lib/widgets/src/clide_lightbox.dart @@ -1,5 +1,5 @@ /// Full-screen zoom + pan overlay (T-252 / D-78). A reusable primitive: it -/// takes any [child] and shows it over the [DialogRouter]'s dimmed backdrop +/// takes any `child` and shows it over the [DialogRouter]'s dimmed backdrop /// (the host supplies the backdrop + outside-click dismiss). The image card is /// its first consumer; canvas / graph / diff previews can adopt it later. /// diff --git a/lib/widgets/src/clide_marquee.dart b/lib/widgets/src/clide_marquee.dart index f1d09975..b3fbf1f6 100644 --- a/lib/widgets/src/clide_marquee.dart +++ b/lib/widgets/src/clide_marquee.dart @@ -1,6 +1,6 @@ -/// Horizontal marquee (T-150). Shows [child] statically when it fits the +/// Horizontal marquee (T-150). Shows `child` statically when it fits the /// available width; when it's wider, scrolls it leftward in a seamless -/// loop (a second copy follows after [gap]). Clips to its box. Used by +/// loop (a second copy follows after `gap`). Clips to its box. Used by /// the status-bar slot so a long pane status doesn't get truncated. /// /// Own-the-stack: a `Ticker`-driven `SingleChildScrollView`, no package. diff --git a/lib/widgets/src/clide_pane.dart b/lib/widgets/src/clide_pane.dart index c7cde994..411df042 100644 --- a/lib/widgets/src/clide_pane.dart +++ b/lib/widgets/src/clide_pane.dart @@ -1,12 +1,12 @@ /// Behaviour-only wrapper every pane uses (T-150). No chrome — that's /// [ClidePaneChrome]'s job. ClidePane handles cross-pane uniformity: -/// surfacing the pane's [statusWidget] to the bottom status bar while the +/// surfacing the pane's `statusWidget` to the bottom status bar while the /// pane is focused, via [FocusTracker.setStatusWidget]. /// /// The widget lives with the pane; ClidePane only conveys it to the /// shared slot while this pane is the shown one (its contribution is -/// focused and, for multi-pane contributions, it's the [active] sub-tab), -/// and re-conveys whenever [statusWidget] changes. A backgrounded pane +/// focused and, for multi-pane contributions, it's the `active` sub-tab), +/// and re-conveys whenever `statusWidget` changes. A backgrounded pane /// keeps its content locally and re-conveys on regaining focus. library; diff --git a/lib/widgets/src/clide_typeahead.dart b/lib/widgets/src/clide_typeahead.dart index 870946c5..bafc25a3 100644 --- a/lib/widgets/src/clide_typeahead.dart +++ b/lib/widgets/src/clide_typeahead.dart @@ -2,11 +2,11 @@ /// /// The host owns the text parsing + completion (where the `@`/`/` token is, how /// to filter, how to rewrite the text on select); `ClideTypeahead` owns the -/// anchored overlay + the suggestion list. It is driven by [suggestions] — +/// anchored overlay + the suggestion list. It is driven by `suggestions` — /// non-empty shows the popover above the field, empty hides it. Unlike a menu, /// it does NOT capture focus or install a tap-away barrier: the text field keeps /// focus (you're still typing), and the host closes it on text change / blur / -/// Esc. Pass [navController] to drive the highlight from the field's own key +/// Esc. Pass `navController` to drive the highlight from the field's own key /// handler (the slash typeahead does this while the EditableText keeps focus); /// omit it for a mouse-only list (the @-mention). library;