fsevents 2.3.2 lacks prebuilt binaries for Node 25, causing node-gyp
build failures on install. Bumping to 2.3.3 which ships compatible
prebuilds while preserving the optionalDependency hoisting that fixes
Linux installs (#182).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fsevents is a macOS-only native module that comes as a transitive
optional dependency of playwright. On Linux, npm tries to build it
via node-gyp which fails fatally, breaking 'npm install -g gsd-pi'.
Adding fsevents as an explicit optionalDependency at the root level
ensures npm gracefully skips it on non-macOS platforms. This is the
standard pattern used by vite, webpack, and chokidar.
Tasks:
- chore(M002/S06): auto-commit after complete-slice
- chore(M002/S06): auto-commit after complete-slice
- chore(M002/S06/T02): auto-commit after execute-task
- chore(M002/S06/T02): auto-commit after execute-task
- chore(M002/S06/T01): auto-commit after execute-task
- chore(M002/S06/T01): auto-commit after execute-task
- chore(M002/S06): auto-commit after plan-slice
- chore: update state for S06 execution
- docs(S06): add slice plan
Branch: gsd/M002/S06
Workspace packages (@gsd/pi-agent-core, @gsd/pi-ai, @gsd/pi-coding-agent,
@gsd/pi-tui) are included in the published tarball via the "files" field but
are not resolvable by Node because npm does not recreate workspace symlinks
when installing from the registry. This causes "ERR_MODULE_NOT_FOUND: Cannot
find package '@gsd/pi-coding-agent'" on fresh installs.
Add workspace packages to both "dependencies" and "bundleDependencies" so npm
packs them into node_modules/ within the tarball and installs them correctly.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Vendor all 4 Pi packages (tui, ai, agent-core, coding-agent) from
pi-mono v0.57.1 as @gsd/* workspace packages under packages/. This
replaces the compiled npm dependency (@mariozechner/pi-coding-agent)
and patch-package workflow, giving direct source access for
modifications.
- Copy Pi source from pi-mono v0.57.1 into packages/
- Create workspace package.json + tsconfig.json for each package
- Rename ~240 imports from @mariozechner/pi-* to @gsd/pi-*
- Apply existing patches as source edits (setModel persist, VT input)
- Remove @mariozechner/pi-coding-agent dep and patch-package
- Update build pipeline to build packages in dependency order
- Add pi-upstream git remote for future selective syncing
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: branded postinstall with @clack/prompts
Replace raw ANSI ASCII art dump with structured, branded installer
flow using @clack/prompts and picocolors:
- Branded intro header with product name and version
- Animated spinners during patch and Playwright install steps
- Subprocess output captured (no more raw npm/Playwright noise)
- Boxed summary note with status indicators (✓/⚠)
- Clean outro with next-step instructions
- Graceful fallback to minimal output if clack unavailable
- All output routed to stderr for npm lifecycle visibility
- Async subprocess execution (not execSync) so spinners animate
* fix: restore ASCII banner alongside clack postinstall UI
The branded ASCII art banner is a key differentiator. Keep it as the
first thing users see, then follow with clack spinner steps for the
setup progress. Fallback path also simplified since the banner already
shows the version.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Child processes (Git Bash/MSYS2) strip the ENABLE_VIRTUAL_TERMINAL_INPUT
flag from the shared stdin console handle, corrupting terminal input.
Re-enable the flag after every child process exits in bash.js, bg-shell,
and cache FFI handles in pi-tui for cheap repeated calls.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Remove gsd-pi from its own dependencies (circular dep caused ENOTEMPTY install failures)
- Auto-select anthropic/claude-sonnet-4-6 as default model for new installs
- Reset to valid model if configured model no longer exists in registry
- Default thinking level to off
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
Issue #2: npm deprecation warnings
- Add gaxios@7.1.4 override to eliminate glob@10.5.0 deprecation
Verified: glob now shows only v13.0.6, rimraf removed from tree
Note: node-domexception@1.0.0 remains (requires upstream changes)
Issue #1: gsd CLI conflicts with git svn dcommit alias
- Add gsd-cli as alternative bin entry for users with oh-my-zsh git plugin
Users can now use 'gsd-cli' if 'gsd' is shadowed by the git alias
Maintains backward compatibility with 'gsd' entry
Build verified