Skip to content

Feature/TUI Pivot#2

Merged
dflor003 merged 47 commits intomainfrom
feature/TuiPivot
Apr 19, 2026
Merged

Feature/TUI Pivot#2
dflor003 merged 47 commits intomainfrom
feature/TuiPivot

Conversation

@dflor003
Copy link
Copy Markdown
Owner

Moved to TUI/CLI as the primary mechanism for running tests

dflor003 and others added 30 commits April 5, 2026 15:00
- Added basic CI for unit and skill tests
- Built initial prompt and plan
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Ports parseYaml, loadConfig, and CONFIG_DEFAULTS from the JS compiler to TypeScript.
Adds @types/node and types: ["node"] to tsconfig for node: imports.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Port compiler.js to TypeScript: parseFrontmatter, parseTestCases, parseSpecFile, resolveToolPermissions, resolveSkillPath, resolveFixturePath, buildManifest, formatTimestamp with full type coverage.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Port logger.js to TypeScript with full type annotations, testable stream injection, and MdStream for streaming markdown rendering.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Ports transcript-formatter.js to TypeScript with full type safety. Includes
tool-specific formatters (Bash, Agent, Read, Write, Edit, Glob, Grep, Skill),
a generic fallback, and public formatters for tool calls, results, turn usage,
session init, and usage summaries.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Port runner.js to TypeScript as src/core/runner.ts. Exports buildSystemPrompt, scopeToolsToWorkspace, parseTimeout, copyDirSync, installSkillPlugin, TOOL_PROFILES, and runTest. runTest spawns isolated CLI processes, parses stream-json events, writes transcripts, and emits output/tool-use/progress/complete events for TUI integration.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Ports report.js to TypeScript as src/core/reporter.ts with parseResultsFile,
generateReport, and generateSummary. Adds full test coverage in reporter.spec.ts.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Implements ls, compile, test, and report subcommands using citty's
defineCommand. The entry point detects TTY for future TUI wiring (Task 14)
and prints help in non-interactive contexts. The test command requires
an explicit --all or filter flag, and all commands wire into the existing
core modules (loadConfig, discoverSpecPaths, parseSpecFile, filterSpecs,
buildManifest, generateReport).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Implements Task 14: creates App component with keyboard-driven screen
switching, BottomBar with active-screen highlighting, wires TUI into
the CLI entry point, and configures vitest (vmForks pool + jsx aliases)
to support ink/yoga-wasm in tests.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Implements the Dashboard landing screen with a searchable, filterable test list, cursor navigation, space-to-toggle selection, select-all, and Enter-to-run. Wires Dashboard into App with spec loading via loadConfig/discoverSpecPaths/parseSpecFile.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…panel

Implements the Phase 1 TUI runner view: ProgressTree sidebar, Ticker tab strip, SessionPanel transcript area, useTestRun hook for state management, and wires Runner into App with startRun on dashboard onRunTests.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Implements RunManager component with scrollable run list, cursor navigation, delete/cleanup actions, and empty state. Wires it into App with loadIndex on mount and cleanupRuns/delete callbacks.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Implements the Statistics screen (Task 18) with aggregate stats panel,
sortable per-test table ([s] key cycles sort field), and wires it into app.tsx.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds SplitPanes component with grid layout (single column for 1-2 sessions, 2x2 for 3-4, 3-col for 5+), focused/maximized pane support, and [v] key toggle in the Runner screen between primary and split view modes.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Connect runner, grader, reporter, and stats modules into the full
execution pipeline. The CLI test command now runs tests with semaphore-
based concurrency, grades results, generates reports, records stats,
and exits with the correct code. The TUI hook gains an executeRun
action that drives the same pipeline with event-driven state updates
and transcript throttling. App.tsx passes config and manifests through
to the runner.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Wraps marked + marked-terminal (v7.3.0) into an Ink Text component, using the named markedTerminal() extension API. Adds a local type declaration for the untyped package to satisfy strict TypeScript checks.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Persist selected test keys and view mode to .skill-unit/selection.json so
the Dashboard restores the user's selection on next open.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Tweaked TUI layout and keybindings
- Made TUI render fullscreen using terminal alternative buffer
- Fixed issues with stdout/stderr bleeding into TUI
- Added architecture doc on TUI design
- Tweaked CLAUDE.md to guide agents to less approvals by using
  whitelisted settings.json rules
…urrency

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@dflor003 dflor003 force-pushed the feature/TuiPivot branch 4 times, most recently from 27e5cd0 to fc68bb7 Compare April 17, 2026 20:26
- Added auto-create of `.skill-unit.yml` the first time you save
- Fixed layout jankiness on live/historical run screens
- Fixed dashboard behavior when no tests selected
- Added context-sensitive keyboard shortcuts view
- Added cancelable runs
- Fixed layout moving on scroll
@dflor003 dflor003 force-pushed the feature/TuiPivot branch 10 times, most recently from c4aaf26 to f09614e Compare April 18, 2026 04:30
- Updated CLI to be more CI friendly
- Added junit xml reporter
- Added auto-populating GHA summary file with test results
- Removed old helper scripts from when cli was part of skill
- Rewrote skill to act as proxy to CLI invocation with helper script to
  discover and run CLI
- Fixed using `process.exit(0)` which caused ink to not send terminal
  escape sequences to undo some of its handlers
- Fixed a few dashboard layout issues and made elements more visually
  distinct
- Made dashboard search more visually distinct
- Fixed keybindings for nav applying while trying to search
- Removed backspace as keybinding for deleting a run to avoid
  accidentally deleting all runs when typing into search and
  accidentally switching to runs screen
@dflor003 dflor003 force-pushed the feature/TuiPivot branch 5 times, most recently from c2f87fc to 4c00d7e Compare April 19, 2026 16:40
@dflor003 dflor003 removed the run-skill-tests Tag PR with this to automatically run skill tests label Apr 19, 2026
- Added src/tui/keyboard/ with KeyboardRegistry, provider, useKeyboardShortcuts hook, useKeyboardHints selector, and three scope modes (normal, modal, textInput)
- Migrated App global nav, five screens, and both dialogs from useInput to useKeyboardShortcuts; dialogs and the Options field editor use modal scopes, and Dashboard uses a textInput scope to absorb typed characters into the search box
- Rewrote BottomBar to derive hints from the registry via useKeyboardHints() and deleted ContextBar; removed onContextHintsChange, onEditingChange, and onViewModeChange callback plumbing along with their backing state in app.tsx
- Fixed the typed-letter-navigates bug: lowercase D/R/S/O nav bindings are restored since Dashboard's textInput scope now absorbs printable characters before they reach App
- Added registry, provider, match-key, and App integration tests covering scope dispatch, modal shadowing, textInput absorption (including the topmost-only rule), and the typed-character fix end-to-end
- Added docs/specs/2026-04-19-keyboard-shortcut-abstraction-design.md and docs/plans/2026-04-19-keyboard-shortcut-abstraction.md; updated docs/architecture/tui-design.md for the registry-driven BottomBar
@dflor003 dflor003 merged commit 00b3eb4 into main Apr 19, 2026
4 checks passed
@dflor003 dflor003 deleted the feature/TuiPivot branch April 19, 2026 17:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant