prospector/run
Natalie aa3e6eacda feat(tray): replace executable stub bin (MacOS/Prospector) with featureful dispatcher
The previous dumb stub just execd the applescript. Now the bin (still used as the bundle executable and for double-click) supports CLI features/subcommands while preserving default tray UI behavior:

- no arg / tray / menu: launch tray UI (status item + menu)
- launch / open / app: start services (delegates to launch.sh, matches menu "Open Prospector")
- stop: stop services (matches menu "Stop services")
- help: list features

Updated post-build messaging, tray.applescript header comment, scripts/README.md table, and ./run usage. Tested via TRAY_DEST=/tmp/... build + direct bin help invocation (and full make-tray success).
2026-06-29 23:23:51 -04:00

96 lines
4.4 KiB
Bash
Executable file

#!/usr/bin/env bash
# prospector — Task Runner
# Usage: ./run <command> [args...]
#
# ./run install One-shot local setup: deps, env, DB + migrations, build.
# Add --launch to open the app after. See scripts/install.sh.
# ./run app Launch API + panel and open it as a Chrome app window.
# ./run db:migrate Apply pending SQL migrations (ledger-tracked).
#
# ./run install:mcp Installs the prospector MCP (new backend adapter) into
# Claude Desktop + global claude (~/.claude/mcp-config.json).
# See mcp/install-mcp.sh for details + safety notes.
#
# Follows the convention used across @applications and @projects (e.g. cocottetech/run).
set -uo pipefail
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Colors (best effort)
RED=$'\e[31m' YELLOW=$'\e[33m' BLUE=$'\e[34m' GREEN=$'\e[32m' NC=$'\e[0m' || true
usage() {
echo -e "${BLUE}prospector${NC} — Task Runner"
echo ""
echo "Usage: ./run <command> [args...]"
echo ""
echo -e "${YELLOW}Local install / run${NC}"
echo " install Setup deps, env, DB + migrations, build."
echo " install --launch …then open the app (Chrome PWA window)."
echo " app Launch API + panel, open as Chrome app window."
echo " app --build Rebuild first, then launch."
echo " stop Stop the detached app (API + panel)."
echo " tray Build the menu-bar tray app (~/Applications). The bundle's"
echo " MacOS/Prospector bin now has built-in features (launch/stop/help)"
echo " in addition to starting the ❖ tray UI on double-click/open."
echo " db:migrate Apply pending SQL migrations (ledger-tracked)."
echo ""
echo -e "${YELLOW}MCP (agent / Claude Desktop + global claude)${NC}"
echo " install:mcp Build + register 'prospector' MCP in both"
echo " Claude Desktop and ~/.claude/mcp-config.json"
echo " (quits Desktop safely first when possible)."
echo " install:mcp --help See full options (NO_RELAUNCH, VENV, etc.)"
echo ""
echo -e "${YELLOW}Local dev (delegated to npm in this tree)${NC}"
echo " build npm run build"
echo " typecheck npm run typecheck"
echo " test npm test"
echo " start:dev npm run start:dev"
echo ""
echo "All other commands are passed through if a cmd_* exists or fall back to npm."
}
cmd_build() { (cd "$REPO_ROOT" && npm run build "$@"); }
cmd_typecheck() { (cd "$REPO_ROOT" && npm run typecheck "$@"); }
cmd_test() { (cd "$REPO_ROOT" && npm test "$@"); }
cmd_start_dev() { (cd "$REPO_ROOT" && npm run start:dev "$@"); }
cmd_install() { exec "$REPO_ROOT/scripts/install.sh" "$@"; }
cmd_app() { exec "$REPO_ROOT/scripts/app.sh" "$@"; }
cmd_stop() { exec "$REPO_ROOT/scripts/stop.sh" "$@"; }
cmd_tray() { exec "$REPO_ROOT/scripts/make-tray.sh" "$@"; }
cmd_db_migrate() { exec "$REPO_ROOT/scripts/migrate.sh" "$@"; }
# The real work lives in the dedicated installer (easy to run directly too).
cmd_install_mcp() {
shift || true
exec "$REPO_ROOT/mcp/install-mcp.sh" "$@"
}
# Dispatch
COMMAND="${1:-}"
shift 2>/dev/null || true
case "$COMMAND" in
help|--help|-h|"") usage; exit 0 ;;
install:mcp|install-mcp) cmd_install_mcp install:mcp "$@"; exit $? ;;
install) cmd_install "$@"; exit $? ;;
app) cmd_app "$@"; exit $? ;;
stop) cmd_stop "$@"; exit $? ;;
tray) cmd_tray "$@"; exit $? ;;
db:migrate|db-migrate) cmd_db_migrate "$@"; exit $? ;;
build) cmd_build "$@"; exit $? ;;
typecheck) cmd_typecheck "$@"; exit $? ;;
test) cmd_test "$@"; exit $? ;;
start:dev) cmd_start_dev "$@"; exit $? ;;
*)
# Unknown: try npm script if it exists, otherwise usage
if (cd "$REPO_ROOT" && npm run | grep -q "^ $COMMAND\$"); then
(cd "$REPO_ROOT" && npm run "$COMMAND" -- "$@")
exit $?
fi
echo -e "${RED}Unknown command: $COMMAND${NC}" >&2
usage
exit 1
;;
esac