aidevops 2.100.8 → 2.100.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. package/VERSION +1 -1
  2. package/aidevops.sh +1 -1
  3. package/package.json +1 -1
  4. package/setup.sh +111 -42
package/VERSION CHANGED
@@ -1 +1 @@
1
- 2.100.8
1
+ 2.100.10
package/aidevops.sh CHANGED
@@ -3,7 +3,7 @@
3
3
  # AI DevOps Framework CLI
4
4
  # Usage: aidevops <command> [options]
5
5
  #
6
- # Version: 2.100.8
6
+ # Version: 2.100.10
7
7
 
8
8
  set -euo pipefail
9
9
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aidevops",
3
- "version": "2.100.8",
3
+ "version": "2.100.10",
4
4
  "description": "AI DevOps Framework - AI-assisted development workflows, code quality, and deployment automation",
5
5
  "type": "module",
6
6
  "main": "index.js",
package/setup.sh CHANGED
@@ -3,7 +3,7 @@
3
3
  # AI Assistant Server Access Framework Setup Script
4
4
  # Helps developers set up the framework for their infrastructure
5
5
  #
6
- # Version: 2.100.8
6
+ # Version: 2.100.10
7
7
  #
8
8
  # Quick Install (one-liner):
9
9
  # bash <(curl -fsSL https://aidevops.dev/install)
@@ -1075,7 +1075,8 @@ setup_worktrunk() {
1075
1075
  print_info "Shell integration not detected"
1076
1076
  read -r -p "Install Worktrunk shell integration (enables 'wt switch' to change directories)? [Y/n]: " install_shell
1077
1077
  if [[ "$install_shell" =~ ^[Yy]?$ ]]; then
1078
- if wt config shell install 2>/dev/null; then
1078
+ print_info "Installing shell integration..."
1079
+ if wt config shell install; then
1079
1080
  print_success "Shell integration installed"
1080
1081
  print_info "Restart your terminal or run: source $shell_rc"
1081
1082
  else
@@ -1107,8 +1108,10 @@ setup_worktrunk() {
1107
1108
 
1108
1109
  if [[ "$install_wt" =~ ^[Yy]?$ ]]; then
1109
1110
  if run_with_spinner "Installing Worktrunk via Homebrew" brew install max-sixty/worktrunk/wt; then
1110
- # Install shell integration
1111
- if run_with_spinner "Installing shell integration" wt config shell install; then
1111
+ # Install shell integration (don't use spinner - command is fast and may need interaction)
1112
+ print_info "Installing shell integration..."
1113
+ if wt config shell install; then
1114
+ print_success "Shell integration installed"
1112
1115
  print_info "Restart your terminal or source your shell config"
1113
1116
  else
1114
1117
  print_warning "Shell integration failed - run manually: wt config shell install"
@@ -1135,8 +1138,10 @@ setup_worktrunk() {
1135
1138
 
1136
1139
  if [[ "$install_wt" =~ ^[Yy]?$ ]]; then
1137
1140
  if run_with_spinner "Installing Worktrunk via Cargo" cargo install worktrunk; then
1138
- # Install shell integration
1139
- if run_with_spinner "Installing shell integration" wt config shell install; then
1141
+ # Install shell integration (don't use spinner - command is fast and may need interaction)
1142
+ print_info "Installing shell integration..."
1143
+ if wt config shell install; then
1144
+ print_success "Shell integration installed"
1140
1145
  print_info "Restart your terminal or source your shell config"
1141
1146
  else
1142
1147
  print_warning "Shell integration failed - run manually: wt config shell install"
@@ -1892,15 +1897,24 @@ deploy_aidevops_agents() {
1892
1897
  if [[ -f "$plan_reminder" && -f "$plan_plus" ]]; then
1893
1898
  # Check if plan-plus.md has the placeholder marker
1894
1899
  if grep -q "OPENCODE-PLAN-REMINDER-INJECT" "$plan_plus"; then
1895
- # Replace placeholder with extracted content
1896
- local reminder_content
1897
- reminder_content=$(cat "$plan_reminder")
1898
- # Use awk to replace the placeholder section
1899
- awk -v content="$reminder_content" '
1900
- /<!-- OPENCODE-PLAN-REMINDER-INJECT-START -->/ { print; print content; skip=1; next }
1901
- /<!-- OPENCODE-PLAN-REMINDER-INJECT-END -->/ { skip=0 }
1902
- !skip { print }
1903
- ' "$plan_plus" > "$plan_plus.tmp" && mv "$plan_plus.tmp" "$plan_plus"
1900
+ # Replace placeholder with extracted content using sed
1901
+ # (awk -v doesn't handle multi-line content with special chars well)
1902
+ local tmp_file
1903
+ tmp_file=$(mktemp)
1904
+ local in_placeholder=false
1905
+ while IFS= read -r line || [[ -n "$line" ]]; do
1906
+ if [[ "$line" == *"OPENCODE-PLAN-REMINDER-INJECT-START"* ]]; then
1907
+ echo "$line" >> "$tmp_file"
1908
+ cat "$plan_reminder" >> "$tmp_file"
1909
+ in_placeholder=true
1910
+ elif [[ "$line" == *"OPENCODE-PLAN-REMINDER-INJECT-END"* ]]; then
1911
+ echo "$line" >> "$tmp_file"
1912
+ in_placeholder=false
1913
+ elif [[ "$in_placeholder" == false ]]; then
1914
+ echo "$line" >> "$tmp_file"
1915
+ fi
1916
+ done < "$plan_plus"
1917
+ mv "$tmp_file" "$plan_plus"
1904
1918
  print_info "Injected OpenCode plan-reminder into Plan+"
1905
1919
  fi
1906
1920
  fi
@@ -2615,7 +2629,7 @@ setup_osgrep() {
2615
2629
  if ! command -v node &> /dev/null; then
2616
2630
  print_warning "Node.js not found - osgrep setup skipped"
2617
2631
  print_info "Install Node.js 18+ to enable osgrep"
2618
- return
2632
+ return 0
2619
2633
  fi
2620
2634
 
2621
2635
  local node_version
@@ -2623,31 +2637,58 @@ setup_osgrep() {
2623
2637
  if [[ $node_version -lt 18 ]]; then
2624
2638
  print_warning "Node.js 18+ required for osgrep, found v$node_version"
2625
2639
  print_info "Install: brew install node@18 (macOS) or nvm install 18"
2626
- return
2640
+ return 0
2627
2641
  fi
2628
2642
 
2629
2643
  # Check if osgrep is installed
2630
2644
  if ! command -v osgrep &> /dev/null; then
2631
- print_warning "osgrep CLI not found"
2632
- print_info "Install with: npm install -g osgrep"
2633
- print_info "Then run: osgrep setup (downloads ~150MB embedding models)"
2634
- return
2645
+ echo ""
2646
+ print_info "osgrep provides 100% local semantic search (no cloud, no auth)"
2647
+ echo " Search code by meaning, not just keywords"
2648
+ echo " • Works offline with ~150MB local embedding models"
2649
+ echo " • Supports: OpenCode, Cursor, Claude Code, Zed, Gemini CLI"
2650
+ echo ""
2651
+
2652
+ read -r -p "Install osgrep CLI? [Y/n]: " install_osgrep
2653
+ if [[ "$install_osgrep" =~ ^[Yy]?$ ]]; then
2654
+ if run_with_spinner "Installing osgrep CLI" npm install -g osgrep; then
2655
+ print_info "Now downloading embedding models (~150MB)..."
2656
+ # osgrep setup is interactive, don't use spinner
2657
+ if osgrep setup; then
2658
+ print_success "osgrep installed and configured"
2659
+ else
2660
+ print_warning "Model download failed - run manually: osgrep setup"
2661
+ fi
2662
+ else
2663
+ print_warning "Installation failed - try manually: npm install -g osgrep"
2664
+ return 0
2665
+ fi
2666
+ else
2667
+ print_info "Skipped osgrep installation"
2668
+ print_info "Install later: npm install -g osgrep && osgrep setup"
2669
+ return 0
2670
+ fi
2635
2671
  fi
2636
2672
 
2637
2673
  # Check if models are downloaded
2638
2674
  if [[ ! -d "$HOME/.osgrep" ]]; then
2639
2675
  print_warning "osgrep models not yet downloaded"
2640
- print_info "Run: osgrep setup"
2641
- print_info "This downloads ~150MB of embedding models for local semantic search"
2676
+ read -r -p "Download embedding models now (~150MB)? [Y/n]: " download_models
2677
+ if [[ "$download_models" =~ ^[Yy]?$ ]]; then
2678
+ if osgrep setup; then
2679
+ print_success "osgrep models downloaded"
2680
+ else
2681
+ print_warning "Model download failed - run manually: osgrep setup"
2682
+ fi
2683
+ else
2684
+ print_info "Download later: osgrep setup"
2685
+ fi
2642
2686
  else
2643
- print_success "osgrep CLI found and configured"
2687
+ print_success "osgrep CLI installed and configured"
2644
2688
  fi
2645
2689
 
2646
- # Note about Claude Code integration
2647
- print_info "osgrep provides 100% local semantic search (no cloud, no auth)"
2648
- print_info "For Claude Code: osgrep install-claude-code"
2649
- print_info "Supported tools: OpenCode, Cursor, Gemini CLI, Claude Code, Zed"
2650
2690
  print_info "Verification: 'Search for authentication handling in this codebase'"
2691
+ return 0
2651
2692
  }
2652
2693
 
2653
2694
  # Setup Beads - Task Graph Visualization
@@ -2721,25 +2762,53 @@ setup_beads_ui() {
2721
2762
 
2722
2763
  local installed_count=0
2723
2764
 
2724
- # beads_viewer (Python) - use pipx for isolated install
2725
- if command -v pipx &> /dev/null || command -v pip3 &> /dev/null || command -v pip &> /dev/null; then
2726
- read -r -p " Install beads_viewer (Python TUI with graph analytics)? [Y/n]: " install_viewer
2727
- if [[ "$install_viewer" =~ ^[Yy]?$ ]]; then
2728
- if command -v pipx &> /dev/null; then
2729
- if run_with_spinner "Installing beads_viewer via pipx" pipx install beads-viewer; then
2730
- print_info "Run: beads-viewer"
2731
- ((installed_count++))
2765
+ # beads_viewer (Python) - use pipx for isolated install (recommended)
2766
+ # pip install --user often fails on macOS due to PEP 668 (externally-managed-environment)
2767
+ read -r -p " Install beads_viewer (Python TUI with graph analytics)? [Y/n]: " install_viewer
2768
+ if [[ "$install_viewer" =~ ^[Yy]?$ ]]; then
2769
+ if command -v pipx &> /dev/null; then
2770
+ # pipx available - use it (best option)
2771
+ if run_with_spinner "Installing beads_viewer via pipx" pipx install beads-viewer; then
2772
+ print_info "Run: beads-viewer"
2773
+ ((installed_count++))
2774
+ else
2775
+ print_warning "pipx install failed - try manually: pipx install beads-viewer"
2776
+ fi
2777
+ elif command -v brew &> /dev/null; then
2778
+ # macOS with Homebrew - offer to install pipx first
2779
+ print_info "pipx recommended for Python CLI tools (isolated environments)"
2780
+ read -r -p " Install pipx first? [Y/n]: " install_pipx
2781
+ if [[ "$install_pipx" =~ ^[Yy]?$ ]]; then
2782
+ if run_with_spinner "Installing pipx" brew install pipx; then
2783
+ # Ensure pipx is in PATH
2784
+ pipx ensurepath > /dev/null 2>&1
2785
+ export PATH="$HOME/.local/bin:$PATH"
2786
+ if run_with_spinner "Installing beads_viewer via pipx" pipx install beads-viewer; then
2787
+ print_info "Run: beads-viewer"
2788
+ ((installed_count++))
2789
+ else
2790
+ print_warning "Installation failed - try manually: pipx install beads-viewer"
2791
+ fi
2732
2792
  else
2733
- print_info "Try manually: pipx install beads-viewer"
2793
+ print_warning "pipx installation failed"
2734
2794
  fi
2735
2795
  else
2796
+ print_info "Skipped beads_viewer (requires pipx)"
2797
+ print_info "Install later: brew install pipx && pipx install beads-viewer"
2798
+ fi
2799
+ else
2800
+ # No pipx, no brew - try pip as last resort
2801
+ print_warning "pipx not found - trying pip (may fail on macOS)"
2802
+ if command -v pip3 &> /dev/null; then
2736
2803
  if run_with_spinner "Installing beads_viewer" pip3 install --user beads-viewer; then
2737
- ((installed_count++))
2738
- elif run_with_spinner "Installing beads_viewer" pip install --user beads-viewer; then
2804
+ print_info "Run: beads-viewer"
2739
2805
  ((installed_count++))
2740
2806
  else
2741
- print_info "On macOS, install pipx first: brew install pipx && pipx ensurepath"
2807
+ print_warning "pip install failed - install pipx first"
2808
+ print_info "Linux: pip install pipx && pipx install beads-viewer"
2742
2809
  fi
2810
+ else
2811
+ print_warning "Neither pipx nor pip3 found"
2743
2812
  fi
2744
2813
  fi
2745
2814
  fi
@@ -3612,8 +3681,8 @@ echo " aidevops uninstall - Remove aidevops"
3612
3681
  read -r -p "Launch OpenCode with /onboarding now? [Y/n]: " launch_onboarding
3613
3682
  if [[ "$launch_onboarding" =~ ^[Yy]?$ || "$launch_onboarding" == "Y" ]]; then
3614
3683
  echo ""
3615
- echo "Starting OpenCode..."
3616
- opencode --prompt "/onboarding"
3684
+ echo "Starting OpenCode with Onboarding agent..."
3685
+ opencode --agent Onboarding --prompt "/onboarding"
3617
3686
  else
3618
3687
  echo ""
3619
3688
  echo "You can run /onboarding anytime in OpenCode to configure services."