diff --git a/.agent/scripts/fix-s131-default-cases.sh b/.agent/scripts/fix-s131-default-cases.sh index 29de4e345..edbe431dd 100755 --- a/.agent/scripts/fix-s131-default-cases.sh +++ b/.agent/scripts/fix-s131-default-cases.sh @@ -15,10 +15,10 @@ readonly YELLOW='\033[1;33m' readonly RED='\033[0;31m' readonly NC='\033[0m' -print_info() { echo -e "${BLUE}[INFO]${NC} $1"; } -print_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; } -print_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; } -print_error() { echo -e "${RED}[ERROR]${NC} $1" >&2; } +print_info() { echo -e "${BLUE}[INFO]${NC} $1"; return 0; } +print_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; return 0; } +print_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; return 0; } +print_error() { echo -e "${RED}[ERROR]${NC} $1" >&2; return 0; } DRY_RUN=false TARGET_FILE="" @@ -105,6 +105,7 @@ find_missing_defaults() { } } ' "$file" + return 0 } # Add default case before esac diff --git a/.agent/scripts/generate-skills.sh b/.agent/scripts/generate-skills.sh index ef585221c..0844414f0 100755 --- a/.agent/scripts/generate-skills.sh +++ b/.agent/scripts/generate-skills.sh @@ -59,18 +59,22 @@ done log_info() { echo -e "${BLUE}$1${NC}" + return 0 } log_success() { echo -e "${GREEN}✓${NC} $1" + return 0 } log_warning() { echo -e "${YELLOW}⚠${NC} $1" + return 0 } log_error() { echo -e "${RED}✗${NC} $1" + return 0 } # Extract frontmatter field from markdown file @@ -92,6 +96,7 @@ extract_frontmatter_field() { exit } ' "$file" + return 0 } # Extract description from file - tries frontmatter first, then first heading @@ -127,6 +132,7 @@ extract_description() { to_skill_name() { local name="$1" echo "$name" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9-]/-/g' | sed 's/--*/-/g' | sed 's/^-\|-$//g' + return 0 } # Capitalize first letter (portable) @@ -137,6 +143,7 @@ capitalize() { first=$(echo "$str" | cut -c1 | tr '[:lower:]' '[:upper:]') rest=$(echo "$str" | cut -c2-) echo "${first}${rest}" + return 0 } # Generate SKILL.md content for a folder with parent .md @@ -187,6 +194,7 @@ generate_folder_skill() { echo "## Subskills" echo "$subskills" fi + return 0 } # Generate SKILL.md content for a leaf .md file @@ -215,6 +223,7 @@ generate_leaf_skill() { echo "# ${title}" echo "" echo "See [${filename}.md](${relative_path}) for full instructions." + return 0 } # ============================================================================= diff --git a/.agent/scripts/gsc-add-user-helper.sh b/.agent/scripts/gsc-add-user-helper.sh index 7d770a195..24c9d28bb 100755 --- a/.agent/scripts/gsc-add-user-helper.sh +++ b/.agent/scripts/gsc-add-user-helper.sh @@ -14,10 +14,10 @@ YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' -log_info() { echo -e "${BLUE}[INFO]${NC} $1"; } -log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; } -log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } -log_error() { echo -e "${RED}[ERROR]${NC} $1"; } +log_info() { echo -e "${BLUE}[INFO]${NC} $1"; return 0; } +log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; return 0; } +log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; return 0; } +log_error() { echo -e "${RED}[ERROR]${NC} $1"; return 0; } show_help() { cat << 'HELP' @@ -45,6 +45,7 @@ Requirements: - Chrome browser with logged-in Google session - User must have Owner access to GSC properties HELP + return 0 } get_chrome_profile_path() { @@ -63,6 +64,7 @@ get_chrome_profile_path() { exit 1 ;; esac + return 0 } ensure_playwright() { @@ -76,6 +78,7 @@ ensure_playwright() { log_info "Installing Playwright..." npm install playwright fi + return 0 } create_add_script() { @@ -181,6 +184,7 @@ async function main() { main().catch(console.error); SCRIPT + return 0 } create_list_script() { @@ -215,11 +219,13 @@ async function main() { main().catch(console.error); SCRIPT + return 0 } run_script() { cd "${WORK_DIR}" || exit node "${GSC_SCRIPT}" + return 0 } cmd_add() { @@ -266,6 +272,7 @@ cmd_add() { [[ -n "$excludes" ]] && log_info "Excluding: ${excludes}" run_script + return 0 } cmd_list() { @@ -274,6 +281,7 @@ cmd_list() { log_info "Listing all GSC properties..." run_script + return 0 } cmd_check() { @@ -287,6 +295,7 @@ cmd_check() { # Use the GSC MCP to check access log_info "Checking GSC API access for ${service_account}..." log_info "Run: opencode mcp call google-search-console list-sites" + return 0 } # Main diff --git a/.agent/scripts/memory-helper.sh b/.agent/scripts/memory-helper.sh index 3f149f25c..0c546be18 100755 --- a/.agent/scripts/memory-helper.sh +++ b/.agent/scripts/memory-helper.sh @@ -85,6 +85,7 @@ extract_ids_from_json() { # Basic fallback - extract id values echo "$input" | grep -o '"id":"[^"]*"' | sed 's/"id":"//g; s/"//g' fi + return 0 } ####################################### @@ -120,6 +121,7 @@ CREATE TABLE IF NOT EXISTS learning_access ( EOF log_success "Database initialized" fi + return 0 } ####################################### @@ -128,6 +130,7 @@ EOF generate_id() { # Use timestamp + random for uniqueness echo "mem_$(date +%Y%m%d%H%M%S)_$(head -c 4 /dev/urandom | xxd -p)" + return 0 } ####################################### @@ -389,6 +392,7 @@ FROM learnings GROUP BY 1 ORDER BY 1; EOF + return 0 } ####################################### @@ -435,6 +439,7 @@ EOF local db_size db_size=$(du -h "$MEMORY_DB" | cut -f1) log_info "Database size: $db_size" + return 0 } ####################################### @@ -615,6 +620,7 @@ EXAMPLES: # Clean up old unused entries memory-helper.sh prune --older-than-days 60 --dry-run EOF + return 0 } ####################################### diff --git a/.agent/scripts/ralph-upstream-check.sh b/.agent/scripts/ralph-upstream-check.sh index b65c35dcb..ff4cccced 100755 --- a/.agent/scripts/ralph-upstream-check.sh +++ b/.agent/scripts/ralph-upstream-check.sh @@ -41,20 +41,24 @@ verbose=false log_info() { echo -e "${BLUE}[ralph-upstream]${NC} $1" + return 0 } log_success() { echo -e "${GREEN}[ralph-upstream]${NC} $1" + return 0 } log_warning() { echo -e "${YELLOW}[ralph-upstream]${NC} $1" + return 0 } log_verbose() { if [[ "$verbose" == "true" ]]; then echo -e "${BLUE}[ralph-upstream]${NC} $1" fi + return 0 } # ============================================================================= @@ -63,6 +67,7 @@ log_verbose() { ensure_cache_dir() { mkdir -p "$CACHE_DIR" + return 0 } is_cache_valid() { @@ -86,12 +91,14 @@ read_cache() { if [[ -f "$CACHE_FILE" ]]; then cat "$CACHE_FILE" fi + return 0 } write_cache() { local data="$1" ensure_cache_dir echo "$data" > "$CACHE_FILE" + return 0 } # ============================================================================= @@ -115,6 +122,7 @@ get_file_sha() { local filename="$2" echo "$json" | jq -r ".[] | select(.name == \"$filename\") | .sha" 2>/dev/null || echo "" + return 0 } fetch_file_content() { @@ -122,6 +130,7 @@ fetch_file_content() { local url="https://raw.githubusercontent.com/${UPSTREAM_REPO}/main/${UPSTREAM_PATH}/${filename}" curl -sf "$url" 2>/dev/null || echo "" + return 0 } # ============================================================================= @@ -132,6 +141,7 @@ extract_version() { local content="$1" # Try to extract version from plugin.json or package.json echo "$content" | jq -r '.version // empty' 2>/dev/null || echo "unknown" + return 0 } compare_implementations() { @@ -189,6 +199,7 @@ compare_implementations() { fi echo "$changes_found" + return 0 } # ============================================================================= @@ -283,6 +294,7 @@ DESCRIPTION: UPSTREAM: https://github.com/anthropics/claude-code/tree/main/plugins/ralph-wiggum EOF + return 0 } # ============================================================================= diff --git a/.agent/scripts/session-review-helper.sh b/.agent/scripts/session-review-helper.sh index 5530c2a66..30215b0bf 100755 --- a/.agent/scripts/session-review-helper.sh +++ b/.agent/scripts/session-review-helper.sh @@ -41,6 +41,7 @@ find_project_root() { # Get current branch get_branch() { git branch --show-current 2>/dev/null || echo "not-a-git-repo" + return 0 } # Check if on protected branch @@ -48,12 +49,14 @@ is_protected_branch() { local branch branch=$(get_branch) [[ "$branch" == "main" || "$branch" == "master" ]] + return 0 } # Get recent commits get_recent_commits() { local count="${1:-10}" git log --oneline -"$count" 2>/dev/null || echo "No commits" + return 0 } # Get uncommitted changes count @@ -62,6 +65,7 @@ get_uncommitted_changes() { staged=$(git diff --cached --name-only 2>/dev/null | wc -l | tr -d '[:space:]') unstaged=$(git diff --name-only 2>/dev/null | wc -l | tr -d '[:space:]') echo "staged:${staged:-0},unstaged:${unstaged:-0}" + return 0 } # Get TODO.md status @@ -95,6 +99,7 @@ get_ralph_status() { else echo "active:false" fi + return 0 } # Get open PRs @@ -110,6 +115,7 @@ get_pr_status() { else echo "gh-not-installed" fi + return 0 } # Check workflow adherence diff --git a/.agent/scripts/terminal-title-setup.sh b/.agent/scripts/terminal-title-setup.sh index 33f26a276..453a3ef36 100755 --- a/.agent/scripts/terminal-title-setup.sh +++ b/.agent/scripts/terminal-title-setup.sh @@ -24,10 +24,10 @@ BLUE='\033[0;34m' NC='\033[0m' # Logging -log_info() { echo -e "${BLUE}[INFO]${NC} $*"; } -log_success() { echo -e "${GREEN}[SUCCESS]${NC} $*"; } -log_warn() { echo -e "${YELLOW}[WARNING]${NC} $*"; } -log_error() { echo -e "${RED}[ERROR]${NC} $*" >&2; } +log_info() { echo -e "${BLUE}[INFO]${NC} $*"; return 0; } +log_success() { echo -e "${GREEN}[SUCCESS]${NC} $*"; return 0; } +log_warn() { echo -e "${YELLOW}[WARNING]${NC} $*"; return 0; } +log_error() { echo -e "${RED}[ERROR]${NC} $*" >&2; return 0; } # Marker comments for our integration MARKER_START="# >>> aidevops terminal-title integration >>>" @@ -41,24 +41,29 @@ detect_shell() { local shell_name shell_name=$(basename "${SHELL:-/bin/bash}") echo "$shell_name" + return 0 } has_oh_my_zsh() { [[ -d "$HOME/.oh-my-zsh" ]] + return 0 } has_oh_my_bash() { [[ -d "$HOME/.oh-my-bash" ]] + return 0 } has_starship() { command -v starship &>/dev/null + return 0 } has_powerlevel10k() { [[ -d "$HOME/.oh-my-zsh/custom/themes/powerlevel10k" ]] || \ [[ -d "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k" ]] || \ grep -q "powerlevel10k" "$HOME/.zshrc" 2>/dev/null + return 0 } # ============================================================================= @@ -69,6 +74,7 @@ TABBY_CONFIG_FILE="$HOME/Library/Application Support/tabby/config.yaml" has_tabby() { [[ -f "$TABBY_CONFIG_FILE" ]] + return 0 } # Check if Tabby has disableDynamicTitle: true (blocks OSC title changes) @@ -83,9 +89,10 @@ tabby_has_dynamic_title_disabled() { tabby_count_disabled_profiles() { if [[ ! -f "$TABBY_CONFIG_FILE" ]]; then echo "0" - return + return 0 fi grep -c "disableDynamicTitle: true" "$TABBY_CONFIG_FILE" 2>/dev/null || echo "0" + return 0 } # Fix Tabby config to allow dynamic titles @@ -161,6 +168,7 @@ _aidevops_terminal_title() { if [[ -n "$title" ]]; then print -Pn "\e]0;${title}\a" fi + return 0 } # Override Oh-My-Zsh title variables to use our function @@ -190,6 +198,7 @@ _aidevops_terminal_title() { if [[ -n "$title" ]]; then print -Pn "\e]0;${title}\a" fi + return 0 } # Add to precmd hooks @@ -216,6 +225,7 @@ _aidevops_terminal_title() { if [[ -n "$title" ]]; then echo -ne "\033]0;${title}\007" fi + return 0 } # Add to PROMPT_COMMAND @@ -242,6 +252,7 @@ function _aidevops_terminal_title --on-event fish_prompt end end EOF + return 0 } # ============================================================================= @@ -269,11 +280,13 @@ get_rc_file() { echo "" ;; esac + return 0 } is_installed() { local rc_file="$1" [[ -f "$rc_file" ]] && grep -q "$MARKER_START" "$rc_file" + return 0 } remove_integration() { @@ -459,6 +472,7 @@ cmd_status() { log_warn "Terminal title integration is NOT installed" echo "Run: terminal-title-setup.sh install" fi + return 0 } cmd_help() { @@ -498,6 +512,7 @@ EXAMPLES: terminal-title-setup.sh uninstall EOF + return 0 } # ============================================================================= diff --git a/.agent/scripts/todo-ready.sh b/.agent/scripts/todo-ready.sh index dde0b6a84..feb5a9853 100755 --- a/.agent/scripts/todo-ready.sh +++ b/.agent/scripts/todo-ready.sh @@ -71,6 +71,7 @@ parse_tasks() { echo "READY|$task_id|$task_desc|$task_est|" fi done < "$todo_file" + return 0 } # Output as text @@ -108,6 +109,7 @@ output_text() { echo "Blocked: $blocked_count | In Progress: $in_progress_count" echo "" echo "Start work with: \"Let's work on [task-id]\"" + return 0 } # Output as verbose @@ -157,6 +159,7 @@ output_verbose() { ;; esac done + return 0 } # Output as JSON @@ -203,6 +206,7 @@ output_json() { } } EOF + return 0 } # Main diff --git a/.agent/scripts/tool-version-check.sh b/.agent/scripts/tool-version-check.sh index 5f15462c6..bb3a69eb9 100755 --- a/.agent/scripts/tool-version-check.sh +++ b/.agent/scripts/tool-version-check.sh @@ -120,12 +120,14 @@ get_installed_version() { else echo "not installed" fi + return 0 } # Get latest npm version get_npm_latest() { local pkg="$1" npm view "$pkg" version 2>/dev/null || echo "unknown" + return 0 } # Get latest brew version @@ -136,12 +138,14 @@ get_brew_latest() { else echo "unknown" fi + return 0 } # Get latest pip version get_pip_latest() { local pkg="$1" pip index versions "$pkg" 2>/dev/null | head -1 | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1 || echo "unknown" + return 0 } # Compare versions (returns 0 if v1 < v2) @@ -251,6 +255,7 @@ check_category() { IFS='|' read -r category name cmd ver_flag pkg update_cmd <<< "$tool_spec" check_tool "$category" "$name" "$cmd" "$ver_flag" "$pkg" "$update_cmd" done + return 0 } # Main