mirror of https://github.com/garrytan/gstack.git
chore: remove dead bins; extend the stale-ref scan to docs (the 36-release gap)
bin/chrome-cdp, bin/gstack-open-url, and bin/gstack-platform-detect were referenced only by an audit test and CHANGELOG history — dead weight that the stale-ref scanner should police, which required removing them FIRST. The scanner now also sweeps docs/, README.md, and USING_GBRAIN_WITH_GSTACK — the deliberate exclusion that let a dead command survive ~36 releases as a command-not-found instruction. Scan is green on the extended surface. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
8c75496391
commit
b81d72d059
|
|
@ -1,70 +0,0 @@
|
|||
#!/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" \
|
||||
--remote-debugging-address=127.0.0.1 \
|
||||
--remote-allow-origins="http://127.0.0.1:$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
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
# gstack-open-url — cross-platform URL opener
|
||||
#
|
||||
# Usage: gstack-open-url <url>
|
||||
set -euo pipefail
|
||||
|
||||
URL="${1:?Usage: gstack-open-url <url>}"
|
||||
|
||||
case "$(uname -s)" in
|
||||
Darwin) open "$URL" ;;
|
||||
Linux) xdg-open "$URL" 2>/dev/null || echo "$URL" ;;
|
||||
MINGW*|MSYS*|CYGWIN*) start "$URL" ;;
|
||||
*) echo "$URL" ;;
|
||||
esac
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# gstack-platform-detect: show which AI coding agents are installed and gstack status
|
||||
# Config-driven: reads host definitions from hosts/*.ts via host-config-export.ts
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
GSTACK_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
|
||||
printf "%-16s %-10s %-40s %s\n" "Agent" "Version" "Skill Path" "gstack"
|
||||
printf "%-16s %-10s %-40s %s\n" "-----" "-------" "----------" "------"
|
||||
|
||||
for host in $(bun run "$GSTACK_DIR/scripts/host-config-export.ts" list 2>/dev/null); do
|
||||
cmd=$(bun run "$GSTACK_DIR/scripts/host-config-export.ts" get "$host" cliCommand 2>/dev/null)
|
||||
root=$(bun run "$GSTACK_DIR/scripts/host-config-export.ts" get "$host" globalRoot 2>/dev/null)
|
||||
spath="$HOME/$root"
|
||||
|
||||
if command -v "$cmd" >/dev/null 2>&1; then
|
||||
ver=$("$cmd" --version 2>/dev/null | head -1 || echo "unknown")
|
||||
if [ -d "$spath" ] || [ -L "$spath" ]; then
|
||||
status="INSTALLED"
|
||||
else
|
||||
status="NOT INSTALLED"
|
||||
fi
|
||||
printf "%-16s %-10s %-40s %s\n" "$host" "$ver" "$spath" "$status"
|
||||
fi
|
||||
done
|
||||
|
|
@ -109,12 +109,6 @@ describe('Audit compliance', () => {
|
|||
});
|
||||
|
||||
// Round 2 Fix 4: Chrome CDP binds to localhost only
|
||||
test('chrome-cdp binds to localhost only', () => {
|
||||
const cdp = readFileSync(join(ROOT, 'bin/chrome-cdp'), 'utf-8');
|
||||
expect(cdp).toContain('--remote-debugging-address=127.0.0.1');
|
||||
expect(cdp).toContain('--remote-allow-origins=');
|
||||
});
|
||||
|
||||
// Fix 2+6: All generated SKILL.md files with telemetry are conditional
|
||||
test('all generated SKILL.md files with telemetry calls use conditional pattern', () => {
|
||||
const skills = getAllSkillMds();
|
||||
|
|
|
|||
|
|
@ -88,6 +88,12 @@ const SCAN_PATHS = [
|
|||
'review/SKILL.md.tmpl',
|
||||
'ship/SKILL.md.tmpl',
|
||||
'test/',
|
||||
// Fork port wave 2: docs were deliberately excluded and that exact gap let
|
||||
// a dead command (gstack-brain-init) survive ~36 releases as a
|
||||
// command-not-found instruction. Docs are user-facing surface; scan them.
|
||||
'docs/',
|
||||
'README.md',
|
||||
'USING_GBRAIN_WITH_GSTACK.md',
|
||||
];
|
||||
|
||||
function grepRefs(pattern: string): string[] {
|
||||
|
|
|
|||
Loading…
Reference in New Issue