merge: incorporate origin/main into community-mode branch

Main advanced from 0.12.0.0 to 0.12.5.0 (voice directive, deploy
dry-run, smarter browsing, headed mode, full commit coverage, codex
hang fixes). Our branch had a stale 0.12.0.0 entry for community mode.

Conflicts resolved:
- VERSION/package.json: take main's 0.12.5.0
- CHANGELOG: take main's entries; our community-mode entry rewrites at ship
- gen-skill-docs.ts: removed duplicate slug functions (main moved to resolvers/utility.ts)
- touchfiles.ts: removed duplicate review-plan-completion tier entry
- All 21 SKILL.md files: regenerated from templates (never resolve generated files manually)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Garry Tan
2026-03-26 19:21:47 -06:00
89 changed files with 10224 additions and 644 deletions
Executable
+68
View File
@@ -0,0 +1,68 @@
#!/bin/bash
# Launch Chrome with CDP (remote debugging) enabled.
# Usage: chrome-cdp [port]
#
# Chrome refuses --remote-debugging-port on its default data directory.
# We create a separate data dir with a symlink to the user's real profile,
# so Chrome thinks it's non-default but uses the same cookies/extensions.
PORT="${1:-9222}"
CHROME="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
REAL_PROFILE="$HOME/Library/Application Support/Google/Chrome"
CDP_DATA_DIR="$HOME/.gstack/cdp-profile/chrome"
if ! [ -f "$CHROME" ]; then
echo "Chrome not found at $CHROME" >&2
exit 1
fi
# Check if Chrome is running
if pgrep -f "Google Chrome" >/dev/null 2>&1; then
echo "Chrome is still running. Quitting..."
osascript -e 'tell application "Google Chrome" to quit' 2>/dev/null
# Wait for it to fully exit
for i in $(seq 1 20); do
pgrep -f "Google Chrome" >/dev/null 2>&1 || break
sleep 0.5
done
if pgrep -f "Google Chrome" >/dev/null 2>&1; then
echo "Chrome won't quit. Force-killing..." >&2
pkill -f "Google Chrome"
sleep 1
fi
fi
# Set up CDP data dir with symlinked profile
# Chrome requires a "non-default" data dir for --remote-debugging-port.
# We symlink the real Default profile so cookies/extensions carry over.
mkdir -p "$CDP_DATA_DIR"
if [ -d "$REAL_PROFILE/Default" ] && ! [ -e "$CDP_DATA_DIR/Default" ]; then
ln -s "$REAL_PROFILE/Default" "$CDP_DATA_DIR/Default"
echo "Linked real Chrome profile into CDP data dir"
fi
# Also link Local State (contains crypto keys for cookie decryption, etc.)
if [ -f "$REAL_PROFILE/Local State" ] && ! [ -e "$CDP_DATA_DIR/Local State" ]; then
ln -s "$REAL_PROFILE/Local State" "$CDP_DATA_DIR/Local State"
fi
echo "Launching Chrome with CDP on port $PORT..."
"$CHROME" \
--remote-debugging-port="$PORT" \
--user-data-dir="$CDP_DATA_DIR" \
--restore-last-session &
disown
# Wait for CDP to be available
for i in $(seq 1 30); do
if curl -s "http://127.0.0.1:$PORT/json/version" >/dev/null 2>&1; then
echo "CDP ready on port $PORT"
echo "Run: \$B connect chrome"
exit 0
fi
sleep 1
done
echo "CDP not available after 30s." >&2
exit 1
+65
View File
@@ -0,0 +1,65 @@
#!/bin/bash
# gstack-extension — helper to install the Chrome extension
#
# When using $B connect, the extension auto-loads. This script is for
# installing it in your regular Chrome (not the Playwright-controlled one).
set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
# Find the extension directory
EXT_DIR=""
if [ -f "$REPO_ROOT/extension/manifest.json" ]; then
EXT_DIR="$REPO_ROOT/extension"
elif [ -f "$HOME/.claude/skills/gstack/extension/manifest.json" ]; then
EXT_DIR="$HOME/.claude/skills/gstack/extension"
fi
if [ -z "$EXT_DIR" ]; then
echo "Error: extension/ directory not found."
echo "Expected at: $REPO_ROOT/extension/ or ~/.claude/skills/gstack/extension/"
exit 1
fi
# Copy path to clipboard
echo -n "$EXT_DIR" | pbcopy 2>/dev/null
# Get browse server port
PORT=""
STATE_FILE="$REPO_ROOT/.gstack/browse.json"
if [ -f "$STATE_FILE" ]; then
PORT=$(grep -o '"port":[0-9]*' "$STATE_FILE" | grep -o '[0-9]*')
fi
echo "gstack Chrome Extension Setup"
echo "=============================="
echo ""
echo "Extension path (copied to clipboard):"
echo " $EXT_DIR"
echo ""
if [ -n "$PORT" ]; then
echo "Browse server port: $PORT"
echo ""
fi
echo "Quick install (if using \$B connect):"
echo " The extension auto-loads when you run \$B connect."
echo " No manual installation needed!"
echo ""
echo "Manual install (for your regular Chrome):"
echo ""
echo " 1. Opening chrome://extensions now..."
# Open chrome://extensions
osascript -e 'tell application "Google Chrome" to open location "chrome://extensions"' 2>/dev/null || \
open "chrome://extensions" 2>/dev/null || \
echo " Could not open Chrome. Navigate to chrome://extensions manually."
echo " 2. Toggle 'Developer mode' ON (top-right)"
echo " 3. Click 'Load unpacked'"
echo " 4. In the file picker: Cmd+Shift+G → paste (path is in your clipboard) → Enter → Select"
echo " 5. Click the gstack puzzle icon in toolbar → enter port: ${PORT:-<check \$B status>}"
echo " 6. Click 'Open Side Panel'"