* fix: remove @gsd/* cross-deps that break npm install (#hotfix) Workspace packages declared @gsd/* as dependencies in their own package.json files. npm's bundleDependencies bundles packages into node_modules/ but still tries to resolve sub-dependencies from the registry — causing 404s for the unpublished @gsd/* scope. - Remove @gsd/* from all dependencies (root and workspace packages) - Add validate-pack.sh: tests tarball installability before publish - Wire validate-pack into CI (every PR) and publish pipeline - Bump to v2.10.10 - Update changelog Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: drop bundleDependencies, use postinstall symlinks instead bundleDependencies with workspace packages causes npm to resolve @gsd/* from the registry during install — 404 since they're not published. Replace with a postinstall script that creates node_modules/@gsd/* symlinks pointing to packages/*. - Remove @gsd/* from dependencies and bundleDependencies - Add link-workspace-packages.cjs (CJS, runs before ESM postinstall) - Update validate-pack to verify symlinks after install - Include link script in files array Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: robust validate-pack + fallback workspace linking - Keep @gsd/* in bundleDependencies (for npm pack bundling) - Remove @gsd/* from root dependencies (prevents 404 registry lookups) - Add link-workspace-packages.cjs fallback for when bundled symlinks aren't created - Simplified validate-pack with better error diagnostics Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: remove bundleDependencies — use postinstall symlinks only npm 10.x fetches packument metadata for ALL deps including bundled ones. @gsd/* packages don't exist on npm → 404 → hard install failure. bundleDependencies is fundamentally broken for unpublished workspace packages. Replace with: - packages/ shipped via files array (already was) - link-workspace-packages.cjs creates node_modules/@gsd/* symlinks in postinstall, pointing to packages/* - No @gsd/* in dependencies or bundleDependencies at all Tarball drops from 40M to 3M (no bundled node_modules). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: add .npmignore to prevent .gitignore from excluding dist/ .gitignore contains /dist/ and packages/*/dist/ which are needed in the published tarball. Without .npmignore, npm pack respects .gitignore and excludes them — even though "files" in package.json should override. An empty .npmignore causes npm to ignore .gitignore entirely, letting the "files" field control what's packed. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: avoid SIGPIPE in validate-pack on Linux tar | grep -q causes SIGPIPE (exit 141) on Linux when grep closes the pipe early. Write tar listing to a temp file and grep that instead. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
25 KiB
25 KiB
Changelog
All notable changes to GSD are documented in this file.
Format based on Keep a Changelog.
Unreleased
Added
- Linux voice mode: Groq Whisper API backend for fast, accurate speech-to-text (Ctrl+Alt+V toggle)
- Auto-reads
GROQ_API_KEYfrom project.envfile - Fallback
--backend=localfor offline faster-whisper on CPU - Venv-aware Python detection (
~/.gsd/voice-venv/bin/python3)
2.10.10 - 2026-03-14
Fixed
- Fix broken
npm install/npx gsd-pi@latestcaused by unpublished@gsd/*workspace packages leaking into npm dependencies. Workspace cross-references removed from published package metadata; packages resolve via bundlednode_modules/at runtime. - Add pre-publish tarball install validation (
validate-pack) to CI and publish pipeline, preventing broken packages from reaching npm.
2.10.9 - 2026-03-14
Added
- Team collaboration: multiple users can work on the same repo without milestone name clashes by checking in
.gsd/planning artifacts (#338)
Changed
- Execute-task loop detection uses adaptive reconciliation instead of hard-stopping, reducing false positives (#342)
- Memory storage switched from better-sqlite3 to sql.js (WASM) for Node 25+ compatibility (#356)
Fixed
- Node 22.22+ compatibility:
.tsimport extensions normalized to.jsfor module resolution (#354) - Infinite loop when complete-slice merges to main are interrupted (#345)
- Credential backoff no longer triggers on transport errors; quota exhaustion handled gracefully (#353)
- OAuth-backed providers (Gemini) no longer crash on quota exhaustion (#347)
- Secrets skip in auto mode no longer crashes (#352)
- Untracked runtime files discarded before branch switch to prevent checkout conflicts (#346)
- TUI crash/corruption on code blocks with lines exceeding terminal width (#343)
- Infinite skip loop in
gsd autobroken by adding roadmap completion check - Model ID variant suffix stripped correctly for OAuth Anthropic API calls
.gsd/planning artifacts force-added andhandleAgentEndreentrancy guarded (#341)
2.10.8 - 2026-03-14
Fixed
- Publish verification checks
dist/loader.jsis non-empty (-s) and uses--ignore-scriptsonnpm pack --dry-runto match actual publish behaviour (#298)
2.10.7 - 2026-03-14
Added
- GitHub Workflows skill with CI workflow template and
ci_monitortool (#294) - Auto-resolve merge conflicts via LLM-powered fix-merge session
- Auto-update integration branch when user starts auto-mode from a different branch (#300)
Changed
- Secrets manifest is re-checked before every dispatch, not just at auto mode start
- Replaced TS parameter properties with explicit fields for Node strip-types compatibility
- Hardened CI publish pipeline to prevent broken releases (#304)
Fixed
- Unresolvable artifact paths now correctly treated as stale completion state, preventing OOM crashes (#313)
- Eliminated branch checkout during slice merge that caused STATE.md conflicts (#307)
- Removed infinite delivery retry loop for background job completions (#301)
- Display ⌥ instead of Alt for keybindings on macOS (#299)
Removed
- Deprecated legacy dead code from OAuth module
2.10.6 - 2026-03-13
Added
- Native Rust output truncation module for efficient large-output handling (#268)
- Native Rust xxHash32 hasher for hashline IDs — faster line hashing (#272)
- Native Rust bash stream processor for single-pass chunk processing (#271)
- Memory extraction pipeline (#261)
claude-opus-4-6model with 1M context window (#288)
Fixed
- Oversized TUI lines now truncated instead of crashing (#287)
- Anthropic rate limit backoff now respects server-requested retry delay
- CI publish guard: skip main package publish if already on npm
2.10.5 - 2026-03-13
Fixed
optionalDependenciesin publishedgsd-pi@2.10.4were still pinned to2.10.2, causing users to install the broken engine binaries that 2.10.4 was meant to fix (#276)
2.10.4 - 2026-03-13
Fixed
- Native binary distribution —
.nodebinaries were missing from the npm tarball, causing startup crashes on all platforms since v2.10.0 - Native loader resolution chain: tries
@gsd-build/engine-{platform}npm package first, then local dev build, with clear error messages listing supported platforms
Added
- Per-platform optional dependency packages (
@gsd-build/engine-*) for macOS (ARM64/x64), Linux (x64/ARM64), and Windows (x64) - Cross-platform native binary CI build and publish workflow
- Version synchronization script for lock-step platform package releases
2.10.2 - 2026-03-13
Added
- Native Rust TTSR regex engine — pre-compiles all stream rule conditions into a single
RegexSetfor one-pass DFA matching instead of O(rules × conditions) JS regex iteration - Native Rust diff engine — fuzzy text matching (
fuzzyFindText,normalizeForFuzzyMatch) and unified diff generation (generateDiff) via thesimilarcrate, replacing thediffnpm package - Native Rust GSD file parser — frontmatter parsing, section extraction, batch
.gsd/directory parsing, and structured roadmap parsing with transparent JS fallback
2.10.1 - 2026-03-13
Fixed
@gsd/nativepackage ships pre-compiled JavaScript instead of raw TypeScript, fixing startup crashes on Node.js 20, 22, and 24 (#248)
2.10.0 - 2026-03-13
Added
- Native Rust engine with high-performance N-API modules replacing JS/WASM dependencies:
- grep — ripgrep-backed content and filesystem search
- glob — gitignore-aware file discovery with scan caching
- ps — cross-platform process tree management
- clipboard — native clipboard access via arboard (text + image)
- highlight — syntect-based syntax highlighting (replaces
cli-highlight) - ast — structural code search and rewrite via ast-grep (38+ languages)
- html — HTML-to-Markdown conversion
- text — ANSI-aware text measurement, wrapping, truncation, and slicing
- fd — fuzzy file path discovery for autocomplete
- image — decode, encode, and resize images (PNG, JPEG, GIF, WebP)
- Background shell
envaction to query shell session environment state - Background shell
runaction for blocking command execution on persistent sessions - Background shell
sessionprocess type for persistent interactive sessions - Hashline edits — line-hash-anchored file editing
- Universal config discovery extension
Changed
- Find tool uses native Rust glob instead of
fdCLI binary - Syntax highlighting uses native syntect instead of
cli-highlightnpm package - Autocomplete uses native fd module instead of
fdCLI subprocess - Text utilities (visible width, wrapping, truncation, slicing) use native Rust instead of JS
- Clipboard operations use native arboard instead of platform-specific CLI tools
- Image processing uses native Rust
imagecrate instead of Photon WASM
Fixed
- Prevent move operation from silently overwriting existing files
- Separate access/unlink error handling in delete path
- Untrack runtime files from slice branch before squash-merge
- Copy LSP defaults.json to dist during build
- Native module test assertions
2.9.0 - 2026-03-13
Added
- LSP tool — full Language Server Protocol integration with diagnostics, go-to-definition, references, hover, document/workspace symbols, rename, code actions, type definition, and implementation support
/thinkingslash command for toggling thinking level during sessions- Interactive wizard mode for
/gsd prefswith guided configuration - Startup update check with 24-hour cache — notifies when a new version is available
Fixed
- TypeScript type errors across gsd, browser-tools, search-the-web, and misc extension files
- Milestone ID generation uses max-based approach instead of length+1 (prevents ID collisions)
- Non-thinking models handled correctly in
/thinkingcommand - Auto-mode pauses on provider errors to prevent reassess-roadmap loop
- TAB hint displayed for notes input in discuss-mode survey
- Slice branches merge to integration branch instead of main
- Prefs wizard audit findings addressed
- Deduplicated maxNum logic with test coverage
- Command injection eliminated in LSP config
which()function - Unhandled JSON.parse in LSP message reader wrapped with error handling
2.8.3 - 2026-03-13
Fixed
ask_user_questionshandles undefinedcustom()result in RPC mode- Provider-aware model resolution for per-phase preferences (respects
providerfield instead of parsing model name prefixes) - Execute-task artifact verification aligned with
deriveState— adds self-repair for missing artifacts - Research phase infinite loop broken; state synced on stop
- Auto-resolve merge conflicts on
.gsd/runtime files - Auto-switch model after
/loginand/logoutto prevent API key errors - Anthropic provider detection uses
providerfield instead of model name prefix matching
2.8.2 - 2026-03-13
Fixed
- Path operations use
node:pathstdlib instead of hardcoded forward slashes, fixing cross-platform compatibility - Prompts use relative paths to prevent Windows drive letter mangling
- Runtime files already in the git index are untracked to prevent merge conflicts
- HTTP_PROXY and HTTPS_PROXY environment variables respected for all outbound requests
- Windows NUL redirects sanitized to /dev/null in Git Bash environments
Changed
.claude/and.gsd/directories untracked from repo,*.tgzgitignored
2.8.1 - 2026-03-13
Added
- Discussion depth verification and context write-gate for richer milestone discussions
- TTSR + blob/artifact storage (ported from oh-my-pi)
- Skip/discard escape hatches in no-roadmap wizard
- Configurable
merge_strategypreference for slice completion
Fixed
fseventsbumped to ~2.3.3 for Node 25 compatibility; added as optional dep for Linux installs- Observability warnings injected into agent prompt for enforcement
- Auto-detect headless environment for Playwright browser launch
- UAT artifact verified before marking complete-slice done
- Prior slices must complete on main before next slice dispatches
- smartStage fallback bypasses runtime exclusions when
.gsd/is gitignored /exituses graceful shutdown instead of hard kill
2.8.0 - 2026-03-13
Added
- Browser tools:
browser_analyze_formandbrowser_fill_form— form field inventory and intelligent filling by label/name/placeholder - Browser tools:
browser_find_best— scored element candidates for semantic intents - Browser tools:
browser_act— execute common browser micro-tasks in one call - Browser tools: 108 unit and integration tests covering all new components
Changed
- Browser tools: decomposed 5000-line monolithic
index.tsinto focused modules (state, capture, settle, lifecycle, refs, utils) with 11 categorized tool files - Browser tools: consolidated state capture reduces evaluate round-trips per action
- Browser tools: zero-mutation settle short-circuit for faster page interaction
- Browser tools: conditional body text capture — low-signal tools skip it for smaller token payloads
- Browser tools: screenshot resizing uses
sharpinstead of canvas evaluate calls - Browser tools: screenshots opt-in on navigate (no longer sent by default)
2.7.1 - 2026-03-13
Added
- Model fallback support for auto-mode phases — if the configured model fails, GSD tries alternate models before stopping
/killcommand for immediate process termination
Fixed
npm install -g gsd-pinow works — workspace packages bundled in npm tarball viabundleDependencies- External PI ecosystem packages (pi-rtk, pi-context, etc.) can now resolve
@mariozechner/*imports through jiti aliases - Missing
export-htmlvendor files (marked.min.js, highlight.min.js) restored - Skipped API keys now persist so the setup wizard doesn't repeat on every launch
- Provider config and extension loading reused correctly
Changed
/exituses graceful shutdown (saves session state);/killreplaces the old immediate-exit behavior
2.7.0 - 2026-03-12
Changed
- Vendor Pi SDK source (tui, ai, agent-core, coding-agent) into workspace monorepo under
packages/, replacing the compiled npm dependency and patch-package workflow. Pi internals are now directly modifiable as TypeScript source. - Existing patches (setModel persist option, Windows VT input caching) applied as source edits.
- Build pipeline runs workspace packages in dependency order before GSD compilation.
- Removed
patch-packagefrom devDependencies and postinstall.
2.6.0 - 2026-03-12
Added
- Proactive secret management — planning phase forecasts required API keys into a manifest; auto-mode collects pending secrets before dispatching the first slice
--continue/-cCLI flag to resume the most recent session
Fixed
- Doctor post-hook no longer preempts
complete-slicedispatch main_branchpreference restored;runPreMergeCheckimplemented for merge safety- Recovery/retry prompt injection capped to prevent V8 OOM on large sessions
.gsd/excluded from pre-switch auto-commits to prevent squash merge conflicts
2.5.1 - 2026-03-12
Added
secure_env_collectnow auto-detects existing keys, destination files, and provides guidance field for better onboarding UX
Changed
- Right-sized pipeline for simple work — single-slice milestones skip redundant research/plan sessions, reducing 9-10 sessions to 5-6
- Heavyweight plan sections (Proof Level, Integration Closure, Observability) are now conditional, omitted for simple slices
Fixed
- Squash-merge now aborts cleanly on conflict and stops auto-mode instead of looping with corrupted state
- Resolved baked-in merge conflict markers in loader.ts, logo.ts, and postinstall.js
2.5.0 - 2026-03-12
Added
- Native Anthropic web search — Claude models get server-side web search automatically, no Brave API key required
- GitService fully wired into codebase — programmatic git operations replace shell-based git commands in prompts
- Merge guards prevent slice completion when uncommitted changes or conflicts exist
- Snapshot support for saving and restoring
.gsd/state - Auto-push after slice squash-merge to main
- Rich commit messages with structured metadata
Fixed
- State machine deadlock when units fail to produce expected artifacts — retry and cross-validation now gate completion
- Duplicate Brave search tools when toggling providers repeatedly
- Windows test glob patterns (single quotes → unquoted for shell expansion)
- Conversation replay error caused by thinking blocks in stored history
- Brave search tools removed from API payload when no
BRAVE_API_KEYis set - Restore notifications suppressed on session resume to reduce UX noise
2.4.0 - 2026-03-12
Added
- Automatic migration of provider credentials from existing Pi installations — skip re-authentication when switching to GSD
- Pi extensions from
~/.pi/agent/extensions/discoverable in interactive mode - GitService core implementation for programmatic git operations
Changed
- System prompt compressed by 48% (360 → 187 lines) for better context efficiency
- Refined agent character and communication style prompts
- Added craft standards, self-debugging awareness, and work narration to agent prompts
Fixed
- RPC mode crash when
ctx.ui.themeis undefined (#121)
2.3.11 - 2026-03-12
Added
- Branded clack-based onboarding wizard on first launch — LLM provider selection (OAuth + API key), optional tool API keys, and setup summary (#118)
gsd configsubcommand to re-run the setup wizard anytime- Shared
src/logo.tsmodule as single source of truth for ASCII banner
Fixed
- Parallel subagent results no longer truncated at 200 characters
Changed
wizard.tstrimmed to env hydration only — onboarding logic moved toonboarding.ts- First-launch banner removed from
loader.ts(onboarding wizard handles branding)
2.3.10 - 2026-03-12
Added
- Branded postinstall experience with animated spinners, progress indicators, and clean summary (#115)
Fixed
- Ctrl+Alt shortcuts (dashboard, bg manager, voice) now show slash-command fallback in terminals that lack Kitty keyboard protocol support — macOS Terminal.app, JetBrains IDEs (#100, #104)
2.3.9 - 2026-03-12
Added
- Tavily as alternative web search provider alongside Brave Search (#102)
- Auto-mode progress widget now shows all stats; footer hidden during auto-mode (#75)
Fixed
- Auto-mode infinite loop and closeout instability — idempotent unit dispatch, retry caps, and atomic closeout (#96, #109)
- Migration no longer requires ROADMAP.md — milestones inferred from phases/ directory when missing (#93, #90)
- Worktree branch safety — proper namespacing and slice branch base selection (#92)
- Windows: use
execFileto avoid single-quote shell issues (#103) - Broken
read @GSD-WORKFLOW.mdreferences replaced with/gsdcommand (#88) - Google Search extension updated to use
gemini-2.5-flash(#83) - Duplicate
getCurrentBranchimport in auto.ts (#87) formatCostcrash on non-number cost values (#74)- Avoid
sudoprompts in postinstall script (#73) .gsd/folder removed from git tracking; consolidated.gitignore(#78)- Multiple community-reported bugs across CLI, auto-mode, and extensions
2.3.8 - 2026-03-11
Fixed
- Worktree file operations (Write, Read, Edit) now resolve paths against the active working directory instead of the launch directory (#72)
- Auto-mode merge guard handles all slice completion paths, preventing infinite dispatch loops when
complete-sliceis bypassed (#71)
2.3.7 - 2026-03-11
Added
- Remote user questions via Slack/Discord for headless auto-mode sessions
Fixed
- Auto-mode model switches no longer persist as the user's global default (#30)
- Auto-mode resume now rebuilds disk state and runs doctor before dispatching, preventing inline execution after pause (#16)
- Silent dispatch failure when command context is null now surfaces an error notification
- Race condition between timeout handlers and prompt dispatch in auto-mode
- Remote questions: validate IDs before test-send, sanitize error messages to prevent token leakage
- Remote questions: cap user_note at 500 chars to prevent LLM context injection
- Remote questions: validate channel ID format to prevent SSRF
- Remote questions: add 15s per-request fetch timeout to adapters
- Remote questions: distinguish Discord 404 from auth errors in reactions
- Prompt store sorting uses
updatedAtinstead of filename - TypeScript parameter properties desugared for
--experimental-strip-typescompatibility
Changed
- Remote question result details use discriminated union type
2.3.6 - 2026-03-11
Fixed
- Postinstall no longer triggers hidden
sudoprompt on Linux — Playwright's--with-depsflag is no longer run automatically, preventingnpm install -gfrom appearing to hang (#67) - Auto-commit dirty files before branch switch to prevent lost work during slice transitions
Changed
- Updated README to reflect current commands, extensions, and step mode workflow
2.3.5 - 2026-03-11
Fixed
- Voice extension: transcription no longer lost when pausing and resuming recording
2.3.4 - 2026-03-11
Added
- CHANGELOG.md with curated history from v0.1.6 onwards
- Project-local
/publish-versioncommand for npm releases - GitHub Sponsors funding configuration
- npm publish and install smoke test
0.3.3 - 2026-03-11
Added
/gsd nextstep mode — walk through units one at a time with a wizard between each/gsdbare command defaults to step mode/exitcommand to kill the GSD process immediately/clearas alias for/new(new session)- MCPorter extension for lazy on-demand MCP server integration
/voiceextension for real-time speech-to-text- Pi global install scripts
- Post-hook bookkeeping: auto-run doctor + rebuild STATE.md after each unit
Changed
- Improved worktree merge, create, remove, and reload resilience
- Discuss prompt rewritten with reflection step and depth enforcement
Fixed
- Idle watchdog false-firing on active agents — tasks >10min no longer get incorrectly skipped (#52)
- Browser screenshots constrained to 1568px max dimension (#56)
- Pi extensions loaded from
~/.pi/agent/extensions/(#51)
Removed
/gsd-runcommand (replaced by/gsdand/gsd next)
0.3.1 - 2026-03-11
Fixed
- Windows VT input restored after child processes exit (#41)
- Print/JSON mode in cli.js so subagents don't hang
- Discuss prompt loop prevention
- Managed tools bootstrap and gh auth
- Session list scoped to current working directory
- Bash/bg_shell hang and kill issues on Windows (#40)
/gsd-runhardcoded~/.pi/path (#38)- Windows backspace in masked input + custom browser path support (#36, #34)
Changed
- Renamed "Get Stuff Done" to "Get Shit Done"
0.3.0 - 2026-03-11
Added
/worktree(/wt) — git worktree lifecycle management (#31)/gsd migrate—.planningto.gsdmigration tool (#28)
Fixed
- Skipped API keys now persist so wizard doesn't repeat on every launch (#27)
- Scoped models restored from settings on new session startup (#22)
- Startup fallback no longer overwrites user's default model with Sonnet (#29)
0.2.9 - 2026-03-11
Fixed
- Idle recovery skips stuck units instead of silently stalling (#19)
pkg/package.jsonversion synced with pi-coding-agent to prevent false update banner- Milestones with summary but no roadmap treated as complete (#13)
0.2.8 - 2026-03-11
Added
- Mac-tools extension (macOS native automation)
0.2.6 - 2026-03-11
Fixed
- Default model validated against full registry on every startup
0.2.5 - 2026-03-11
Fixed
- Circular self-dependency removed, default model set to anthropic/claude-sonnet-4-6 with thinking off
0.2.4 - 2026-03-11
Added
- Branded setup wizard UI with visual hierarchy, descriptions, and status feedback
- Branded banner on first launch
- Postinstall banner with version and next-step hint
Fixed
- All
.pi/paths updated to.gsd/ - Default model matching by
id.includes('sonnet')for dated API IDs - Circular gsd-pi self-dependency removed
- Pi SDK version check suppressed
- Selected options stay lit when notes field is focused
0.1.6 - 2026-03-11
Added
- GitHub extension tool suite with confirmation gate
- Bundled skills: frontend-design, swiftui, debug-like-expert
- Skills trigger table in system prompt
- Resource loader syncs bundled skills to
~/.gsd/agent/skills/
Fixed
~/.gsd/agent/paths in prompt templates instead of~/.pi/agent/(#10)- Guard against re-injecting discuss prompt when session already in flight
Changed
- License updated to MIT