Files
bw-copilot-resources/install/verify.sh

109 lines
3.5 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
script_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"
repo_root="$(cd -- "$script_dir/.." && pwd -P)"
canonical_home="${COPILOT_RESOURCES_HOME:-$HOME/.copilot-resources}"
copilot_home="${COPILOT_HOME:-$HOME/.copilot}"
quick="false"
detect_vscode_user_dir() {
if [[ -n "${VSCODE_USER_DIR:-}" ]]; then
printf '%s\n' "$VSCODE_USER_DIR"
return 0
fi
case "$(uname -s)" in
Darwin)
printf '%s\n' "$HOME/Library/Application Support/Code/User"
;;
Linux)
printf '%s\n' "$HOME/.config/Code/User"
;;
*)
printf '%s\n' "$HOME/.config/Code/User"
;;
esac
}
check_path() {
local label="$1"
local path="$2"
if [[ -e "$path" ]]; then
printf '[ok] %s: %s\n' "$label" "$path"
else
printf '[missing] %s: %s\n' "$label" "$path" >&2
return 1
fi
}
check_command() {
local label="$1"
local command_name="$2"
if command -v "$command_name" >/dev/null 2>&1; then
printf '[ok] %s: %s\n' "$label" "$command_name"
else
printf '[missing] %s: %s\n' "$label" "$command_name" >&2
return 1
fi
}
check_readable_file() {
local label="$1"
local path="$2"
if [[ -r "$path" ]]; then
printf '[ok] %s: %s\n' "$label" "$path"
else
printf '[unreadable] %s: %s\n' "$label" "$path" >&2
return 1
fi
}
main() {
if [[ "${1:-}" == "--quick" ]]; then
quick="true"
fi
local vscode_user_dir
vscode_user_dir="$(detect_vscode_user_dir)"
local vscode_mcp_file="$vscode_user_dir/mcp.json"
local copilot_cli_mcp_file="$copilot_home/mcp-config.json"
local local_mcp_overrides_file="$canonical_home/.local/mcp.local.jsonc"
local session_start_hook_file="$canonical_home/resources/hooks/session-audit.json"
local session_start_hook_script="$canonical_home/resources/scripts/report-hook-event.sh"
local port_registry_script="$canonical_home/resources/scripts/update-port-registry.mjs"
check_path "repo root" "$repo_root"
check_path "canonical home" "$canonical_home"
check_path "skills link" "$copilot_home/skills"
check_path "agents link" "$copilot_home/agents"
check_path "instructions link" "$copilot_home/instructions"
check_path "hooks link" "$copilot_home/hooks"
check_path "session start hook" "$session_start_hook_file"
check_path "session start hook script" "$session_start_hook_script"
check_readable_file "session start hook script" "$session_start_hook_script"
check_path "port registry updater script" "$port_registry_script"
check_readable_file "port registry updater script" "$port_registry_script"
check_command "session start hook shell" "bash"
check_command "port registry updater runtime" "node"
check_path "prompts link" "$vscode_user_dir/prompts"
check_path "VS Code MCP config" "$vscode_mcp_file"
check_path "Copilot CLI MCP config" "$copilot_cli_mcp_file"
check_path "local MCP overrides" "$local_mcp_overrides_file"
if [[ "$quick" != "true" ]]; then
check_path "VS Code settings template" "$repo_root/config/vscode/settings.template.jsonc"
check_path "CLI env template" "$repo_root/config/copilot-cli/env.example.sh"
check_path "VS Code MCP template" "$repo_root/config/mcp/vscode.mcp.template.jsonc"
check_path "Copilot CLI MCP template" "$repo_root/config/mcp/copilot-cli.mcp.template.jsonc"
check_path "MCP local override example" "$repo_root/config/mcp/local-overrides.example.jsonc"
check_path "Copilot CLI filesystem wrapper" "$repo_root/install/mcp/copilot-cli-filesystem-wrapper.mjs"
fi
}
main "$@"