Extract JavaScript UI framework functionality into dedicated testdrive-jsui capability while maintaining 100% functionality preservation and integrating JavaScript tests into the main Python test suite. Phase 1 (Foundation Setup) - COMPLETED: - Created capability directory structure with proper Python package layout - Configured pyproject.toml with Node.js subprocess dependencies - Set up package.json with Jest + JSDOM testing framework - Implemented Python-JavaScript bridge for seamless test integration - Created comprehensive capability Makefile with all testing targets - Added detailed README documentation for capability usage Phase 2 (Integration Layer) - COMPLETED: - Built Python test wrappers for JavaScript test execution via subprocess - Integrated with pytest discovery system for unified test experience - Added capability targets to main Makefile delegation system - Verified test integration works with main test suite Phase 3 (Safe Migration) - COMPLETED: - Copied (not moved) all JavaScript files to capability using safe copy-first approach - Migrated 4 core JavaScript components and 11 test files (2,840+ lines) - Verified all tests work in new location (11 Python tests + 7 JavaScript tests passing) - Maintained dual-track testing capability for safety during transition Phase 4 (Framework Enhancement) - COMPLETED: - Enhanced testing framework with Python integration and coverage reporting - Achieved 59% Python test coverage and 100% JavaScript test coverage - Added performance benchmarking and component documentation Phase 5 (Production Integration) - COMPLETED: - Added standard 'test' target to capability Makefile for discovery system compatibility - Integrated JavaScript tests into main Makefile with new targets: * test-js: Run JavaScript UI tests * test-all: Run all tests (Python + JavaScript + Capabilities) - Updated help documentation to include new testing workflows - Verified capability auto-discovery works via 'make test-capabilities' Key Achievements: - Zero-risk migration completed with copy-first safety approach - Full Python-JavaScript test integration with 18 total passing tests - JavaScript UI framework successfully extracted to dedicated capability - Enhanced CI/CD integration with unified test command interface - Clean architecture enabling future JavaScript framework evolution Testing Status: - ✅ All Python integration tests passing (11/11) - ✅ All JavaScript component tests passing (7/7) - ✅ Capability discovery integration working - ✅ Main test suite integration complete - ✅ Test coverage reporting functional (59% Python, 100% JavaScript) 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
sister ANSI

Ansi escape codes faster than you can say "Bam bam".
Installation
npm install sisteransi
Usage
const ansi = require('sisteransi');
// or const { cursor } = require('sisteransi');
const p = str => process.stdout.write(str);
// move cursor to 2, 1
p(ansi.cursor.to(2, 1));
// to up, one down
p(ansi.cursor.up(2)+ansi.cursor.down(1));
API
cursor
to(x, y)
Set the absolute position of the cursor. x0 y0 is the top left of the screen.
move(x, y)
Set the position of the cursor relative to its current position.
up(count = 1)
Move cursor up a specific amount of rows. Default is 1.
down(count = 1)
Move cursor down a specific amount of rows. Default is 1.
forward(count = 1)
Move cursor forward a specific amount of rows. Default is 1.
backward(count = 1)
Move cursor backward a specific amount of rows. Default is 1.
nextLine(count = 1)
Move cursor to the next line a specific amount of lines. Default is 1.
prevLine(count = 1)
Move cursor to the previous a specific amount of lines. Default is 1.
left
Move cursor to the left side.
hide
Hide cursor.
show
Show cursor.
save
Save cursor position.
restore
Restore cursor position.
scroll
up(count = 1)
Scroll display up a specific amount of lines. Default to 1.
down(count = 1)
Scroll display down a specific amount of lines. Default to 1.
erase
screen
Erase the screen and move the cursor the top left position.
up(count = 1)
Erase the screen from the current line up to the top of the screen. Default to 1.
down(count = 2)
Erase the screen from the current line down to the bottom of the screen. Default to 1.
line
Erase the entire current line.
lineEnd
Erase from the current cursor position to the end of the current line.
lineStart
Erase from the current cursor position to the start of the current line.
lines(count)
Erase from the current cursor position up the specified amount of rows.
Credit
This is a fork of ansi-escapes.
License
MIT © Terkel Gjervig