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
43 changes: 43 additions & 0 deletions .teammates/_standups/2026-03-30.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Standup — 2026-03-30

## Scribe — 2026-03-30

### Done (since last standup 03-29)
- **Widget model redesign spec** — Designed identity-based FeedItem model + FeedStore + VirtualList extraction to replace 5 parallel index-keyed structures in ChatView. 4-phase migration plan. Handed off to Beacon (03-29)
- **Template improvement analysis** — Compared live `.teammates/` against `template/`, identified 9 gaps. Drafted GOALS.md as first deliverable (03-29)
- **GOALS.md template + propagation** — Created GOALS.md template in TEMPLATE.md (v2→v3), example file, and propagated across all 12 docs that reference the file structure (03-29)
- **README sandboxing note** — Added workspace sandbox initialization reminder to Getting Started (03-29)

### Next
- Finalize slash command decisions (open questions on /script, /configure, /retro)
- Track Beacon implementation of widget model redesign + thread view redesign
- Remaining template improvements from analysis (daily log frontmatter, docs/specs/ convention)

### Blockers
- None

---

## Beacon — 2026-03-30

### Done (since last standup 03-29)
- **Win32 mouse fix** — Root-caused why terminal verbs weren't clickable on Windows: Node.js doesn't disable Quick Edit Mode or manage console flags. Implemented `win32-console.ts` using koffi FFI to call `SetConsoleMode`. Iterated twice — first pass incorrectly enabled `ENABLE_MOUSE_INPUT` (conflicts with VT sequences), second pass removed it and forced `ENABLE_VIRTUAL_TERMINAL_INPUT`
- **Full mouse protocol support** — Added classic xterm (`CSI M`), URXVT (`?1015h`), UTF-8 (`?1005h`), and SGR-Pixels (`?1016h`) mouse protocols alongside existing SGR
- **Environment-aware terminal init** — Created `terminal-env.ts` with `detectTerminal()` that probes env vars to identify terminal capabilities. Init/restore sequences now adapt to detected terminal
- **Copilot activity parsing expansion** — Expanded `mapCopilotToolCall` from 8 to 20+ tool names (powershell, task, read_agent, web_search, github-mcp-server-*, plumbing filtering)
- **Clean rebuild + version bumps** — 0.7.0 → 0.7.1 → 0.7.2 → 0.7.3. All 1,000 tests passing (602 consolonia + 94 recall + 304 cli)

### Next
- User to test mouse clicks after CLI restart
- Widget model redesign (from Scribe spec)
- Continued cli.ts extraction

### Blockers
- None

---

## Pending

- **Lexicon** — standup requested, response pending
- **Pipeline** — standup requested, response pending
290 changes: 289 additions & 1 deletion .teammates/beacon/memory/2026-03-30.md

Large diffs are not rendered by default.

26 changes: 26 additions & 0 deletions .teammates/beacon/memory/decision_terminal_mouse_protocols.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
---
version: 0.7.0
name: terminal_mouse_protocols
description: Consolonia should support both SGR and classic xterm mouse packets for clickable terminal actions.
type: decision
---
# Terminal Mouse Protocols

## Context
Clickable verbs in the terminal UI were working on one Windows machine but not another. The terminal setup already enabled mouse mode, but Consolonia's parser only accepted SGR mouse packets (`ESC [ < Cb ; Cx ; Cy M/m`).

## Decision
Support both mouse packet families in Consolonia:

- SGR mouse packets (`ESC [ < ...`) remain the preferred path.
- Classic xterm/ANSI mouse packets (`ESC [ M Cb Cx Cy`) are also decoded.
- Mouse mode enablement requests classic tracking (`?1000h`) in addition to the existing motion (`?1003h`) and SGR (`?1006h`) modes.

## Why
- Some terminals or terminal configurations fall back to classic mouse packets even when newer modes are requested.
- Parsing only SGR makes clickable actions appear dead even though mouse mode is technically enabled.
- Supporting both formats keeps the UI terminal-agnostic without changing higher-level widgets.

## Verification
- `npm run build` in `packages/consolonia`
- `npx vitest run src\__tests__\input.test.ts src\__tests__\ansi.test.ts` in `packages/consolonia`
20 changes: 20 additions & 0 deletions .teammates/beacon/memory/decision_win32_console_mode.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
version: 0.7.3
name: Win32 mouse — pure ANSI, no SetConsoleMode
description: Consolonia creator confirmed ANSI escape sequences are the correct and more accurate approach for mouse tracking. Removed koffi/SetConsoleMode entirely.
type: feedback
---

# Mouse Input Strategy: Pure ANSI

## Decision

Use **ANSI DECSET escape sequences only** for mouse tracking. Do not call Win32 `SetConsoleMode()` via koffi or any FFI.

**Why:** The Consolonia creator (external project author) explicitly advised that ANSI codes are more accurate for mouse tracking. Our koffi/`SetConsoleMode` approach was manipulating console mode flags at the kernel32 layer, which likely interfered with how the terminal emulator (Windows Terminal, VS Code xterm.js) delivers VT mouse sequences through ConPTY.

**How to apply:** The ANSI sequences in `esc.ts` (`?1000h`, `?1003h`, `?1005h`, `?1006h`, `?1015h`, `?1016h`) are the single source of truth for mouse tracking. Do not add Win32 API calls for mouse. If mouse doesn't work, investigate the ANSI path — don't reach for native FFI.

## Background

The external C#/.NET Consolonia uses `ReadConsoleInput()` + `MOUSE_EVENT_RECORD` on Windows — a completely different input path. Node.js/libuv drops `MOUSE_EVENT` records from `ReadConsoleInputW`, so that path is not viable for us. The Win32 `SetConsoleMode` approach (clearing `ENABLE_QUICK_EDIT_MODE`, forcing `ENABLE_VIRTUAL_TERMINAL_INPUT`) was an attempt to work around this, but it was counterproductive — the Consolonia creator confirmed ANSI is the right approach.
26 changes: 26 additions & 0 deletions .teammates/beacon/memory/reference_terminal_mouse_sgr.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
---
version: 0.7.0
name: terminal_mouse_sgr
description: ChatView clickable verbs depend on SGR mouse tracking support from the host terminal.
type: reference
---
# Terminal Mouse SGR

`@teammates/consolonia` enables mouse tracking in the app shell, but clickable action verbs only work when the terminal sends SGR mouse escape sequences.

## Facts

- `App` enables mouse tracking with `esc.mouseTrackingOn` when created with `mouse: true`.
- The CLI creates `App` with `mouse: true`.
- `MouseMatcher` only parses SGR extended mouse sequences in the form `\x1b[<Cb;Cx;CyM` / `m`.
- `ChatView` emits verb actions only when it receives parsed mouse press events on action lines.
- There is no fallback parser for older mouse protocols or for terminals that do not forward mouse events.

## Diagnostic implication

If one user can click `[reply]`, `[copy]`, `[show activity]`, etc. and another cannot on Windows, the first suspect is a terminal/environment mismatch:

- different terminal app or host
- terminal setting that disables or intercepts mouse reporting
- intermediary layer such as tmux/remote shell that does not pass SGR mouse events through
- text selection behavior taking precedence because no mouse event reaches ChatView
Loading
Loading