Commit graph

57 commits

Author SHA1 Message Date
Lex Christopherson
273d6b9cf9 2.8.1 2026-03-13 09:26:23 -06:00
Lex Christopherson
6a960a4897 fix: bump fsevents to ~2.3.3 for Node 25 compatibility (#186)
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>
2026-03-13 09:25:27 -06:00
Adam Dry
c18f7d1f69 fix: add fsevents as optional dep to fix install on Linux (#182)
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.
2026-03-13 08:48:14 -06:00
TÂCHES
789a6645da feat: TTSR + blob/artifact storage (ported from oh-my-pi)
* docs(M002): context, requirements, and roadmap

* feat: port TTSR and blob/artifact storage from oh-my-pi

Phase 1 — TTSR (Time Traveling Stream Rules):
- TtsrManager: regex-based stream monitoring with scope filtering,
  repeat gating, and buffer isolation (picomatch replaces Bun.Glob)
- Rule loader: scans ~/.gsd/agent/rules/*.md and .gsd/rules/*.md
  with YAML frontmatter parsing; project rules override global
- TTSR extension: wires into pi event lifecycle (session_start,
  turn_start, message_update, turn_end, agent_end) to abort on
  match and inject violation as system reminder via sendMessage
- Interrupt template for rule violation injection

Phase 2 — Blob/Artifact Storage:
- BlobStore: content-addressed storage at ~/.gsd/agent/blobs/ using
  Node crypto (sha256), sync I/O, automatic deduplication
- ArtifactManager: session-scoped sequential artifact files stored
  alongside session JSONL (lazy dir creation, resume-safe ID scan)
- Session manager integration: prepareForPersistence externalizes
  images ≥1KB to blob store before JSONL write; resolveBlobRefs
  rehydrates on session load; truncates strings >500KB
- Bash tool artifact spill: uses ArtifactManager instead of temp
  files when available, includes artifact:// references in output

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: harden blob store, TTSR manager, and dep classification

- Validate SHA-256 hex format in BlobStore.get/has/parseBlobRef to
  prevent path traversal via crafted blob references
- Cap TTSR per-stream buffers at 512KB to prevent unbounded memory growth
- Move picomatch from devDependencies to dependencies (runtime import)
- Warn on invalid regex in TTSR rule conditions instead of silent skip
- Remove .gsd/ planning files that were force-added past .gitignore
- Add trailing newline to ttsr-interrupt.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* test: add tests for blob store, artifact manager, TTSR manager, and rule loader

55 tests covering:
- BlobStore put/get/has, idempotency, path traversal rejection
- parseBlobRef/isBlobRef validation, externalize/resolve round-trips
- ArtifactManager sequential IDs, lazy dir creation, session resume
- TtsrManager rule matching, scope filtering, buffer isolation,
  repeat gating, buffer size cap, injection persistence
- Rule loader frontmatter parsing, directory scanning, merge logic

Also fixes BlobStore constructor to avoid TS parameter property syntax
(incompatible with Node's strip-only TypeScript mode).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 08:43:56 -06:00
Lex Christopherson
c88b54711f 2.8.0
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 08:05:20 -06:00
Lex Christopherson
5155d69d55 test(M002/S06): Test coverage
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
2026-03-13 08:04:27 -06:00
Lex Christopherson
68cf10eed5 feat(M002/S03): Screenshot pipeline
Tasks:
- chore(M002/S03): auto-commit after complete-slice
- chore(M002/S03): auto-commit after complete-slice
- chore(M002/S03/T01): auto-commit after execute-task
- chore(M002/S03/T01): auto-commit after execute-task
- chore(M002/S03): auto-commit after plan-slice
- docs(S03): add slice plan

Branch: gsd/M002/S03
2026-03-13 08:04:27 -06:00
Lex Christopherson
edc05f3715 2.7.1
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 07:29:41 -06:00
alphinus_biosdesk
d6bf806f1a fix: bundle workspace dependencies for npm registry installs
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>
2026-03-13 08:36:53 +01:00
Lex Christopherson
7f2ba0e839 2.7.0 2026-03-12 22:06:48 -06:00
Lex Christopherson
c80d640d35 feat: vendor Pi source into workspace monorepo
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>
2026-03-12 21:55:17 -06:00
Lex Christopherson
9d3735b9a3 2.6.0 2026-03-12 21:38:23 -06:00
Lex Christopherson
59a4d06fae 2.5.1 2026-03-12 15:32:39 -06:00
Lex Christopherson
ad2931a521 2.5.0 2026-03-12 13:24:24 -06:00
TÂCHES
108f6b4f1d Merge pull request #79 from FacuVCanale/feat/native-web-search
feat: native Anthropic web search via before_provider_request hook
2026-03-12 11:56:00 -06:00
Lex Christopherson
71984a8f0f 2.4.0 2026-03-12 11:16:20 -06:00
Facu_Viñas
a595b9e28e fix: prevent duplicate tools on provider toggle, suppress restore notifications, fix Windows test globs
- Prevent duplicate Brave tool entries when toggling providers repeatedly
  by filtering already-active tools before re-adding (BUG-1)
- Remove single quotes from test glob patterns in package.json so Windows
  shell expands them correctly (BUG-2)
- Fix test mock fire() to call all handlers instead of short-circuiting
  on first match, matching real framework behavior (BUG-3)
- Suppress "Native Anthropic web search active" notification on session
  restore (source: "restore") to reduce UX noise (BUG-4)
- Add regression tests for all 4 bugs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 13:50:03 -03:00
Lex Christopherson
2a5c270bb0 2.3.11 2026-03-12 10:06:22 -06:00
Lex Christopherson
17a409f8cb 2.3.10 2026-03-12 09:21:38 -06:00
TÂCHES
46c88e6494 feat: branded postinstall with @clack/prompts (#115)
* 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>
2026-03-12 09:18:13 -06:00
Lex Christopherson
2a292e1981 2.3.9 2026-03-12 09:08:46 -06:00
Lex Christopherson
9fa0d657a5 2.3.8 2026-03-11 18:12:56 -06:00
Lex Christopherson
6c91434a80 2.3.7 2026-03-11 17:43:14 -06:00
Lex Christopherson
c092ff97a9 2.3.6 2026-03-11 17:23:04 -06:00
Lex Christopherson
10c7189480 2.3.5 2026-03-11 16:59:03 -06:00
Lex Christopherson
928f38f2e4 2.3.4 2026-03-11 16:44:28 -06:00
Lex Christopherson
7f130aa1e6 chore: bump version to 0.3.3
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 16:17:16 -06:00
dan bachelder
a69a44a890 Add pi global install scripts (#57) 2026-03-11 14:34:03 -06:00
Lex Christopherson
80d13379df chore: bump version to 0.3.1
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:24:58 -06:00
Lex Christopherson
58ca04e7de fix: restore Windows VT input after child processes exit (#41)
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>
2026-03-11 11:24:44 -06:00
amanape
1a05266326 Rename 'Get Stuff Done' to 'Get Shit Done' 2026-03-11 08:11:11 -06:00
Lex Christopherson
71f749c6da 0.3.0 2026-03-11 07:11:40 -06:00
Lex Christopherson
0ec7a36cd6 0.2.9 2026-03-11 02:42:27 -06:00
alphinus_biosdesk
32156ec036 fix: sync pkg/package.json version with pi-coding-agent to prevent false update banner
pkg/package.json had a hardcoded version (0.1.0) that never got updated.
Since gsd-pi sets PI_PACKAGE_DIR=pkg/, pi's config.js reads VERSION from
pkg/package.json. The update check compares this stale version against npm
registry and always shows 'Update Available' even when the user is already
on the latest release.

Fix:
- Update pkg/package.json to current pi-coding-agent version (0.57.1)
- Add sync-pkg-version.cjs script that reads the installed pi-coding-agent
  version and writes it into pkg/package.json
- Run the sync script in prepublishOnly so the version stays correct on
  every publish
2026-03-11 09:07:17 +01:00
Lex Christopherson
729218e58e chore: bump version to 0.2.8 2026-03-11 01:57:53 -06:00
Lex Christopherson
b05fb8df2c chore: bump version to 0.2.7 2026-03-11 01:53:34 -06:00
Lex Christopherson
d1636482d5 chore: bump version to 0.2.6 2026-03-11 01:51:54 -06:00
Lex Christopherson
8d19c2ee5e chore: bump version to 0.2.5 2026-03-11 01:48:13 -06:00
Lex Christopherson
b364e369d5 fix: remove circular self-dependency, default to anthropic/claude-sonnet-4-6 with thinking off
- 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
2026-03-11 01:47:36 -06:00
Lex Christopherson
67edb120d4 chore: bump version to 0.2.3 2026-03-11 01:34:10 -06:00
Lex Christopherson
aafa823319 fix: remove circular gsd-pi self-dependency from package.json 2026-03-11 01:31:54 -06:00
Lex Christopherson
0ce45020af 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
2026-03-11 01:31:03 -06:00
Lex Christopherson
647ecbba16 chore: bump version to 0.2.1 2026-03-11 01:30:20 -06:00
Lex Christopherson
45ed047140 chore: bump version to 0.2.0 2026-03-11 01:23:11 -06:00
Lex Christopherson
2645ef7f5d chore: bump version to 0.1.9 2026-03-11 01:16:55 -06:00
Lex Christopherson
501a004122 chore: bump version to 0.1.8 2026-03-11 01:13:26 -06:00
Lex Christopherson
cf9a41f1ed chore: bump version to 0.1.7 2026-03-11 01:10:19 -06:00
Lex Christopherson
dea9fa5a60 chore: bump version to 0.1.6 2026-03-11 01:07:40 -06:00
Lex Christopherson
86a6456aef Add confirmation gate to GitHub tools + update license to MIT
- All outward-facing GitHub tool actions now require user confirmation
  via a themed yes/no dialog before executing (create, update, close,
  reopen issues; create/update PRs; add comments; submit reviews;
  request reviewers; create labels/milestones)
- New shared confirm-ui.ts component using the shared UI design system
- Read-only actions (list, view, search, diff, files, checks) ungated
- License changed from BUSL-1.1 to MIT
2026-03-11 00:53:15 -06:00
Lex Christopherson
610b8aea63 chore: bump version to 0.1.5 2026-03-11 00:07:38 -06:00