mirror of
https://github.com/garrytan/gstack.git
synced 2026-05-01 19:25:10 +02:00
cdd6f7865d
* test: add 16 failing tests for 6 community fixes
Tests-first for all fixes in this PR wave:
- #594 discoverability: gstack tag in descriptions, 120-char first line
- #573 feature signals: ship/SKILL.md Step 4 detection
- #510 context warnings: no preemptive warnings in generated files
- #474 Safety Net: no find -delete in generated files
- #467 telemetry: JSONL writes gated by _TEL conditional
- #584 sidebar: Write in allowedTools, stderr capture
- #578 relink: prefixed/flat symlinks, cleanup, error, config hook
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: replace find -delete with find -exec rm for Safety Net (#474)
-delete is a non-POSIX extension that fails on Safety Net environments.
-exec rm {} + is POSIX-compliant and works everywhere.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: gate local JSONL writes by telemetry setting (#467)
When telemetry is off, nothing is written anywhere — not just remote,
but local JSONL too. Clean trust contract: off means off everywhere.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: remove preemptive context warnings from plan-eng-review (#510)
The system handles context compaction automatically. Preemptive warnings
waste tokens and create false urgency. Skills should not warn about
context limits — just describe the compression priority order.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat: add (gstack) tag to skill descriptions for discoverability (#594)
Every SKILL.md.tmpl description now contains "gstack" on the last line,
making skills findable in Claude Code's command palette. First-line hooks
stay under 120 chars. Split ship description to fix wrapping.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat: auto-relink skill symlinks on prefix config change (#578)
New bin/gstack-relink creates prefixed (gstack-*) or flat symlinks
based on skill_prefix config. gstack-config auto-triggers relink
when skill_prefix changes. Setup guards against recursive calls
with GSTACK_SETUP_RUNNING env var.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat: add feature signal detection to version bump heuristic (#573)
/ship Step 4 now checks for feature signals (new routes, migrations,
test+source pairs, feat/ branches) when deciding version bumps.
PATCH requires no feature signals. MINOR asks the user if any signal
is detected or 500+ lines changed.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat: sidebar Write tool, stderr capture, cross-platform URL opener (#584)
Add Write to sidebar allowedTools (both sidebar-agent.ts and server.ts).
Write doesn't expand attack surface beyond what Bash already provides.
Replace empty stderr handler with buffer capture for better error
diagnostics. New bin/gstack-open-url for cross-platform URL opening.
Does NOT include Search Before Building intro flow (deferred).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: update sidebar-security test for Write tool addition
The fallback allowedTools string now includes Write, matching the
sidebar-agent.ts change from commit 68dc957.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* chore: bump version and changelog (v0.13.5.0)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: prevent gstack-relink from double-prefixing gstack-upgrade
gstack-relink now checks if a skill directory is already named gstack-*
before prepending the prefix. Previously, setting skill_prefix=true would
create gstack-gstack-upgrade, breaking the /gstack-upgrade command.
Matches setup script behavior (setup:260) which already has this guard.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* chore: add double-prefix fix to changelog
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* chore: remove .factory/ from git tracking and add to .gitignore
Generated Factory Droid skills are build output, same as .agents/.
They should not be committed to the repo.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
85 lines
2.6 KiB
Cheetah
85 lines
2.6 KiB
Cheetah
---
|
|
name: setup-browser-cookies
|
|
preamble-tier: 1
|
|
version: 1.0.0
|
|
description: |
|
|
Import cookies from your real Chromium browser into the headless browse session.
|
|
Opens an interactive picker UI where you select which cookie domains to import.
|
|
Use before QA testing authenticated pages. Use when asked to "import cookies",
|
|
"login to the site", or "authenticate the browser". (gstack)
|
|
allowed-tools:
|
|
- Bash
|
|
- Read
|
|
- AskUserQuestion
|
|
---
|
|
|
|
{{PREAMBLE}}
|
|
|
|
# Setup Browser Cookies
|
|
|
|
Import logged-in sessions from your real Chromium browser into the headless browse session.
|
|
|
|
## CDP mode check
|
|
|
|
First, check if browse is already connected to the user's real browser:
|
|
```bash
|
|
$B status 2>/dev/null | grep -q "Mode: cdp" && echo "CDP_MODE=true" || echo "CDP_MODE=false"
|
|
```
|
|
If `CDP_MODE=true`: tell the user "Not needed — you're connected to your real browser via CDP. Your cookies and sessions are already available." and stop. No cookie import needed.
|
|
|
|
## How it works
|
|
|
|
1. Find the browse binary
|
|
2. Run `cookie-import-browser` to detect installed browsers and open the picker UI
|
|
3. User selects which cookie domains to import in their browser
|
|
4. Cookies are decrypted and loaded into the Playwright session
|
|
|
|
## Steps
|
|
|
|
### 1. Find the browse binary
|
|
|
|
{{BROWSE_SETUP}}
|
|
|
|
### 2. Open the cookie picker
|
|
|
|
```bash
|
|
$B cookie-import-browser
|
|
```
|
|
|
|
This auto-detects installed Chromium browsers and opens
|
|
an interactive picker UI in your default browser where you can:
|
|
- Switch between installed browsers
|
|
- Search domains
|
|
- Click "+" to import a domain's cookies
|
|
- Click trash to remove imported cookies
|
|
|
|
Tell the user: **"Cookie picker opened — select the domains you want to import in your browser, then tell me when you're done."**
|
|
|
|
### 3. Direct import (alternative)
|
|
|
|
If the user specifies a domain directly (e.g., `/setup-browser-cookies github.com`), skip the UI:
|
|
|
|
```bash
|
|
$B cookie-import-browser comet --domain github.com
|
|
```
|
|
|
|
Replace `comet` with the appropriate browser if specified.
|
|
|
|
### 4. Verify
|
|
|
|
After the user confirms they're done:
|
|
|
|
```bash
|
|
$B cookies
|
|
```
|
|
|
|
Show the user a summary of imported cookies (domain counts).
|
|
|
|
## Notes
|
|
|
|
- On macOS, the first import per browser may trigger a Keychain dialog — click "Allow" / "Always Allow"
|
|
- On Linux, `v11` cookies may require `secret-tool`/libsecret access; `v10` cookies use Chromium's standard fallback key
|
|
- Cookie picker is served on the same port as the browse server (no extra process)
|
|
- Only domain names and cookie counts are shown in the UI — no cookie values are exposed
|
|
- The browse session persists cookies between commands, so imported cookies work immediately
|