aidevops 3.1.387 → 3.1.389

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.
package/VERSION CHANGED
@@ -1 +1 @@
1
- 3.1.387
1
+ 3.1.389
package/aidevops.sh CHANGED
@@ -3,7 +3,7 @@
3
3
  # AI DevOps Framework CLI
4
4
  # Usage: aidevops <command> [options]
5
5
  #
6
- # Version: 3.1.387
6
+ # Version: 3.1.389
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": "3.1.387",
3
+ "version": "3.1.389",
4
4
  "description": "AI DevOps Framework - AI-assisted development workflows, code quality, and deployment automation",
5
5
  "type": "module",
6
6
  "bin": {
@@ -402,79 +402,102 @@ check_skill_updates() {
402
402
  return 0
403
403
  }
404
404
 
405
- scan_imported_skills() {
406
- # Check prerequisites before announcing setup (GH#5240)
407
- local security_helper="$HOME/.aidevops/agents/scripts/security-helper.sh"
408
-
409
- if [[ ! -f "$security_helper" ]]; then
410
- print_skip "Skill security scan" "security-helper.sh not found" "Deploy agents first (setup.sh), then re-run"
411
- setup_track_skipped "Skill security scan" "security-helper.sh not found"
412
- return 0
413
- fi
405
+ # Find the skill-scanner binary on PATH or in known install locations.
406
+ # Prints the path to the binary if found, empty string otherwise.
407
+ # PATH note: uv/pipx install to ~/.local/bin which may not be on PATH in all shells.
408
+ _find_skill_scanner_bin() {
409
+ local bin
410
+ bin=$(command -v skill-scanner 2>/dev/null || echo "")
411
+ # Fallback: check the known install path directly
412
+ if [[ -z "$bin" && -x "$HOME/.local/bin/skill-scanner" ]]; then
413
+ bin="$HOME/.local/bin/skill-scanner"
414
+ fi
415
+ echo "$bin"
416
+ return 0
417
+ }
414
418
 
415
- # Prerequisites met proceed with setup
416
- print_info "Running security scan on imported skills..."
419
+ # Find the first Python >= 3.10 interpreter available on this system.
420
+ # Prints the interpreter path if found, empty string otherwise.
421
+ # Checks the same candidates as check_python_for_skill_scanner() so the
422
+ # venv method uses the same interpreter that passed validation.
423
+ _find_python_for_skill_scanner() {
424
+ local py_bin
425
+ for py_bin in python3 python3.13 python3.12 python3.11 python3.10; do
426
+ if command -v "$py_bin" &>/dev/null; then
427
+ local ver_output
428
+ ver_output=$("$py_bin" --version 2>/dev/null) || continue
429
+ if [[ "$ver_output" != Python\ * ]]; then continue; fi
430
+ local version major remainder minor
431
+ version="${ver_output#Python }"
432
+ major="${version%%.*}"
433
+ remainder="${version#*.}"
434
+ minor="${remainder%%.*}"
435
+ if [[ ! "$major" =~ ^[0-9]+$ || ! "$minor" =~ ^[0-9]+$ ]]; then continue; fi
436
+ if [[ "$major" -gt 3 ]] || { [[ "$major" -eq 3 ]] && [[ "$minor" -ge 10 ]]; }; then
437
+ echo "$py_bin"
438
+ return 0
439
+ fi
440
+ fi
441
+ done
442
+ echo ""
443
+ return 1
444
+ }
417
445
 
418
- # Install skill-scanner if not present
419
- # Pre-check: cisco-ai-skill-scanner requires Python >= 3.10
420
- # Fallback chain: uv -> pipx -> venv+symlink -> pip3 --user (legacy)
421
- # PEP 668 (Ubuntu 24.04+) blocks pip3 --user, so we try isolated methods first
422
- #
423
- # PATH note: uv installs to ~/.local/bin which may not be on PATH in all shells.
424
- # Check both command -v and the known install path to avoid spurious reinstalls.
425
- local skill_scanner_bin
426
- skill_scanner_bin=$(command -v skill-scanner 2>/dev/null || echo "")
427
- # Fallback: uv/pipx install to ~/.local/bin which may not be on PATH
428
- if [[ -z "$skill_scanner_bin" && -x "$HOME/.local/bin/skill-scanner" ]]; then
429
- skill_scanner_bin="$HOME/.local/bin/skill-scanner"
446
+ # Install cisco-ai-skill-scanner using a 4-method fallback chain.
447
+ # Fallback order: uv -> pipx -> venv+symlink -> pip3 --user (legacy)
448
+ # PEP 668 (Ubuntu 24.04+) blocks pip3 --user, so isolated methods are tried first.
449
+ # Prints the path to the installed binary on success, empty string on failure.
450
+ _install_skill_scanner() {
451
+ # Verify Python >= 3.10 is available (or install it via uv)
452
+ if ! check_python_for_skill_scanner; then
453
+ print_warning "Skipping Cisco Skill Scanner install (Python >= 3.10 required)"
454
+ return 1
430
455
  fi
431
456
 
432
- if [[ -z "$skill_scanner_bin" ]]; then
433
- # Verify Python >= 3.10 is available (or install it via uv)
434
- if ! check_python_for_skill_scanner; then
435
- print_warning "Skipping Cisco Skill Scanner install (Python >= 3.10 required)"
436
- return 0
457
+ local installed=false
458
+ local skill_scanner_bin=""
459
+
460
+ # 1. uv tool install (preferred - fast, isolated, manages its own Python)
461
+ # Uses --force to handle two known failure modes:
462
+ # a) Dangling/corrupted environment: uv detects "Invalid environment" and
463
+ # exits 2. Detect via warning in `uv tool list` and uninstall first.
464
+ # b) Executable conflict: skill-scanner already exists (e.g. from pipx).
465
+ # --force overwrites the existing executable.
466
+ if [[ "$installed" == "false" ]] && command -v uv &>/dev/null && uv tool --help &>/dev/null; then
467
+ print_info "Installing Cisco Skill Scanner via uv..."
468
+ # Detect and remove dangling uv environment before attempting install
469
+ if uv tool list 2>&1 | grep -q "Ignoring malformed tool.*cisco-ai-skill-scanner"; then
470
+ print_info "Removing dangling uv environment for cisco-ai-skill-scanner..."
471
+ uv tool uninstall cisco-ai-skill-scanner 2>/dev/null || true
437
472
  fi
438
-
439
- local installed=false
440
-
441
- # 1. uv tool install (preferred - fast, isolated, manages its own Python)
442
- # Uses --force to handle two known failure modes:
443
- # a) Dangling/corrupted environment: uv detects "Invalid environment" and
444
- # exits 2. Detect via warning in `uv tool list` and uninstall first.
445
- # b) Executable conflict: skill-scanner already exists (e.g. from pipx).
446
- # --force overwrites the existing executable.
447
- if [[ "$installed" == "false" ]] && command -v uv &>/dev/null && uv tool --help &>/dev/null; then
448
- print_info "Installing Cisco Skill Scanner via uv..."
449
- # Detect and remove dangling uv environment before attempting install
450
- if uv tool list 2>&1 | grep -q "Ignoring malformed tool.*cisco-ai-skill-scanner"; then
451
- print_info "Removing dangling uv environment for cisco-ai-skill-scanner..."
452
- uv tool uninstall cisco-ai-skill-scanner 2>/dev/null || true
453
- fi
454
- if run_with_spinner "Installing cisco-ai-skill-scanner" uv tool install --force cisco-ai-skill-scanner; then
455
- print_success "Cisco Skill Scanner installed via uv"
456
- installed=true
457
- # uv installs to ~/.local/bin — update skill_scanner_bin for use below
458
- skill_scanner_bin=$(command -v skill-scanner 2>/dev/null || echo "$HOME/.local/bin/skill-scanner")
459
- fi
473
+ if run_with_spinner "Installing cisco-ai-skill-scanner" uv tool install --force cisco-ai-skill-scanner; then
474
+ print_success "Cisco Skill Scanner installed via uv"
475
+ installed=true
476
+ skill_scanner_bin=$(command -v skill-scanner 2>/dev/null || echo "$HOME/.local/bin/skill-scanner")
460
477
  fi
478
+ fi
461
479
 
462
- # 2. pipx install (designed for isolated app installs)
463
- if [[ "$installed" == "false" ]] && command -v pipx &>/dev/null; then
464
- print_info "Installing Cisco Skill Scanner via pipx..."
465
- if run_with_spinner "Installing cisco-ai-skill-scanner" pipx install cisco-ai-skill-scanner; then
466
- print_success "Cisco Skill Scanner installed via pipx"
467
- installed=true
468
- skill_scanner_bin=$(command -v skill-scanner 2>/dev/null || echo "$HOME/.local/bin/skill-scanner")
469
- fi
480
+ # 2. pipx install (designed for isolated app installs)
481
+ if [[ "$installed" == "false" ]] && command -v pipx &>/dev/null; then
482
+ print_info "Installing Cisco Skill Scanner via pipx..."
483
+ if run_with_spinner "Installing cisco-ai-skill-scanner" pipx install cisco-ai-skill-scanner; then
484
+ print_success "Cisco Skill Scanner installed via pipx"
485
+ installed=true
486
+ skill_scanner_bin=$(command -v skill-scanner 2>/dev/null || echo "$HOME/.local/bin/skill-scanner")
470
487
  fi
488
+ fi
471
489
 
472
- # 3. venv + symlink (works on PEP 668 systems without uv/pipx)
473
- if [[ "$installed" == "false" ]] && command -v python3 &>/dev/null; then
490
+ # 3. venv + symlink (works on PEP 668 systems without uv/pipx)
491
+ # Use the validated interpreter (same candidates as check_python_for_skill_scanner)
492
+ # so venv creation succeeds even when python3 itself is < 3.10.
493
+ if [[ "$installed" == "false" ]]; then
494
+ local py_interp
495
+ py_interp=$(_find_python_for_skill_scanner) || true
496
+ if [[ -n "$py_interp" ]]; then
474
497
  local venv_dir="$HOME/.aidevops/.agent-workspace/work/cisco-scanner-env"
475
498
  local bin_dir="$HOME/.local/bin"
476
499
  print_info "Installing Cisco Skill Scanner in isolated venv..."
477
- if python3 -m venv "$venv_dir" 2>/dev/null &&
500
+ if "$py_interp" -m venv "$venv_dir" 2>/dev/null &&
478
501
  "$venv_dir/bin/pip" install cisco-ai-skill-scanner 2>/dev/null; then
479
502
  mkdir -p "$bin_dir"
480
503
  ln -sf "$venv_dir/bin/skill-scanner" "$bin_dir/skill-scanner"
@@ -485,26 +508,61 @@ scan_imported_skills() {
485
508
  rm -rf "$venv_dir" 2>/dev/null || true
486
509
  fi
487
510
  fi
511
+ fi
488
512
 
489
- # 4. pip3 --user (legacy fallback, fails on PEP 668 systems)
490
- if [[ "$installed" == "false" ]] && command -v pip3 &>/dev/null; then
491
- print_info "Installing Cisco Skill Scanner via pip3 --user..."
492
- if run_with_spinner "Installing cisco-ai-skill-scanner" pip3 install --user cisco-ai-skill-scanner 2>/dev/null; then
493
- print_success "Cisco Skill Scanner installed via pip3"
494
- installed=true
495
- skill_scanner_bin=$(command -v skill-scanner 2>/dev/null || echo "$HOME/.local/bin/skill-scanner")
496
- fi
513
+ # 4. pip3 --user (legacy fallback, fails on PEP 668 systems)
514
+ if [[ "$installed" == "false" ]] && command -v pip3 &>/dev/null; then
515
+ print_info "Installing Cisco Skill Scanner via pip3 --user..."
516
+ if run_with_spinner "Installing cisco-ai-skill-scanner" pip3 install --user cisco-ai-skill-scanner 2>/dev/null; then
517
+ print_success "Cisco Skill Scanner installed via pip3"
518
+ installed=true
519
+ skill_scanner_bin=$(command -v skill-scanner 2>/dev/null || echo "$HOME/.local/bin/skill-scanner")
497
520
  fi
521
+ fi
498
522
 
499
- if [[ "$installed" == "false" ]]; then
500
- print_warning "Failed to install Cisco Skill Scanner - skipping security scan"
501
- print_info "Install manually with: uv tool install cisco-ai-skill-scanner"
502
- print_info "Or: pipx install cisco-ai-skill-scanner"
503
- return 0
504
- fi
523
+ if [[ "$installed" == "false" ]]; then
524
+ print_warning "Failed to install Cisco Skill Scanner - skipping security scan"
525
+ print_info "Install manually with: uv tool install cisco-ai-skill-scanner"
526
+ print_info "Or: pipx install cisco-ai-skill-scanner"
527
+ return 1
528
+ fi
529
+
530
+ echo "$skill_scanner_bin"
531
+ return 0
532
+ }
533
+
534
+ scan_imported_skills() {
535
+ # Check prerequisites before announcing setup (GH#5240)
536
+ local security_helper="$HOME/.aidevops/agents/scripts/security-helper.sh"
537
+
538
+ if [[ ! -f "$security_helper" ]]; then
539
+ print_skip "Skill security scan" "security-helper.sh not found" "Deploy agents first (setup.sh), then re-run"
540
+ setup_track_skipped "Skill security scan" "security-helper.sh not found"
541
+ return 0
542
+ fi
543
+
544
+ # Prerequisites met — proceed with setup
545
+ print_info "Running security scan on imported skills..."
546
+
547
+ # Locate or install skill-scanner binary
548
+ local skill_scanner_bin
549
+ skill_scanner_bin=$(_find_skill_scanner_bin)
550
+
551
+ if [[ -z "$skill_scanner_bin" ]]; then
552
+ # _install_skill_scanner prints the binary path on success
553
+ skill_scanner_bin=$(_install_skill_scanner) || return 0
554
+ fi
555
+
556
+ if [[ ! -x "$skill_scanner_bin" ]]; then
557
+ print_warning "skill-scanner not executable at: $skill_scanner_bin"
558
+ return 0
505
559
  fi
506
560
 
507
- if bash "$security_helper" skill-scan all 2>/dev/null; then
561
+ # Prepend the scanner's directory to PATH so security-helper.sh can resolve
562
+ # skill-scanner even when ~/.local/bin is not in the caller's PATH.
563
+ local scanner_dir
564
+ scanner_dir=$(dirname "$skill_scanner_bin")
565
+ if PATH="$scanner_dir:$PATH" bash "$security_helper" skill-scan all 2>/dev/null; then
508
566
  print_success "All imported skills passed security scan"
509
567
  else
510
568
  print_warning "Some imported skills have security findings - review with: aidevops skill scan"
package/setup.sh CHANGED
@@ -10,7 +10,7 @@ shopt -s inherit_errexit 2>/dev/null || true
10
10
  # AI Assistant Server Access Framework Setup Script
11
11
  # Helps developers set up the framework for their infrastructure
12
12
  #
13
- # Version: 3.1.387
13
+ # Version: 3.1.389
14
14
  #
15
15
  # Quick Install:
16
16
  # npm install -g aidevops && aidevops update (recommended)