fix: keep selected options lit when notes field is focused

When Tab opens the notes field, committed/checked options now stay
visually prominent (text color + muted description) while unselected
options dim. Previously Tab greyed everything out equally.

- optionUnselected: respect isCommitted when isFocusDimmed
- checkboxUnselected: respect isChecked for description color when isFocusDimmed
This commit is contained in:
Lex Christopherson 2026-03-11 01:31:03 -06:00
parent 647ecbba16
commit 0ce45020af
4 changed files with 26 additions and 13 deletions

25
package-lock.json generated
View file

@ -1,16 +1,17 @@
{
"name": "gsd-pi",
"version": "0.1.5",
"version": "0.2.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "gsd-pi",
"version": "0.1.5",
"version": "0.2.2",
"hasInstallScript": true,
"license": "BUSL-1.1",
"license": "MIT",
"dependencies": {
"@mariozechner/pi-coding-agent": "^0.57.1",
"gsd-pi": "^0.1.7",
"playwright": "^1.58.2"
},
"bin": {
@ -2575,6 +2576,24 @@
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"license": "ISC"
},
"node_modules/gsd-pi": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/gsd-pi/-/gsd-pi-0.1.7.tgz",
"integrity": "sha512-zHpdoOFc6yFnfRJ9oWEEHLv7S8pNr3ZzToZESSofFVbRbPq6VDF+5xZehcXR8ADNpl67XeVG6JEmIZRsnvjLdw==",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
"@mariozechner/pi-coding-agent": "^0.57.1",
"playwright": "^1.58.2"
},
"bin": {
"gsd": "dist/loader.js",
"gsd-cli": "dist/loader.js"
},
"engines": {
"node": ">=20.6.0"
}
},
"node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",

View file

@ -1,6 +1,6 @@
{
"name": "gsd-pi",
"version": "0.2.1",
"version": "0.2.2",
"description": "GSD — Get Stuff Done coding agent",
"license": "MIT",
"repository": {

View file

@ -266,8 +266,8 @@ export function makeUI(theme: Theme, width: number): UI {
optionUnselected: (num, label, description, opts = {}) => {
const { isCommitted = false, isFocusDimmed = false } = opts;
const marker = isCommitted ? theme.fg("success", ` ${GLYPH.check}`) : "";
const labelColor = isFocusDimmed ? "dim" : "text";
const descColor = isFocusDimmed ? "dim" : "muted";
const labelColor = isFocusDimmed ? (isCommitted ? "text" : "dim") : "text";
const descColor = isFocusDimmed ? (isCommitted ? "muted" : "dim") : "muted";
return [
...wrap(`${INDENT.option} ${theme.fg(labelColor, `${num}. ${label}`)}${marker}`),
...wrapIndented(`${INDENT.description}${theme.fg(descColor, description)}`, INDENT.description),
@ -287,7 +287,7 @@ export function makeUI(theme: Theme, width: number): UI {
checkboxUnselected: (label, description, isChecked, isFocusDimmed = false) => {
const box = isChecked ? theme.fg("success", GLYPH.checkedBox) : theme.fg("dim", GLYPH.uncheckedBox);
const labelColor = isFocusDimmed ? (isChecked ? "text" : "dim") : "text";
const descColor = isFocusDimmed ? "dim" : "muted";
const descColor = isFocusDimmed ? (isChecked ? "muted" : "dim") : "muted";
return [
add(`${INDENT.option} ${box} ${theme.fg(labelColor, label)}`),
...wrapIndented(`${INDENT.description}${theme.fg(descColor, description)}`, INDENT.description),

View file

@ -156,12 +156,6 @@ export async function runWizardIfNeeded(authStorage: AuthStorage): Promise<void>
` These unlock additional tools. All optional — press ${cyan}Enter${reset} to skip any.\n\n`
)
// Show what each key unlocks
for (const key of missing) {
process.stdout.write(` ${dim}${reset} ${cyan}${key.label}${reset} ${dim}${key.description}${reset}\n`)
}
process.stdout.write('\n')
// ── Prompts ─────────────────────────────────────────────────────────────────
let savedCount = 0