aidevops 3.8.77 → 3.8.79

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/README.md CHANGED
@@ -52,13 +52,7 @@ The result: an AI operations platform that manages projects across every busines
52
52
  [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=marcusquinn_aidevops&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=marcusquinn_aidevops)
53
53
  [![CodeFactor](https://www.codefactor.io/repository/github/marcusquinn/aidevops/badge)](https://www.codefactor.io/repository/github/marcusquinn/aidevops)
54
54
  [![Maintainability](https://qlty.sh/gh/marcusquinn/projects/aidevops/maintainability.svg)](https://qlty.sh/gh/marcusquinn/projects/aidevops)
55
- <!-- Codacy badge temporarily hidden (t2178, GH#19636): Codacy's analyzer dropped
56
- ~370K LOC from its index between 2026-04-16 and 2026-04-17 (532K → 162K)
57
- while issue count stayed flat, collapsing the displayed grade from A to E
58
- despite zero matching repo change. Same signature as prior self-healing
59
- glitches on 2026-03-26 and 2026-03-31. SonarCloud, CodeFactor, and qlty.sh
60
- still show A. Restore this line once Codacy re-indexes:
61
- [![Codacy Badge](https://app.codacy.com/project/badge/Grade/2b1adbd66c454dae92234341e801b984)](https://app.codacy.com/gh/marcusquinn/aidevops/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade) -->
55
+ [![Codacy Badge](https://app.codacy.com/project/badge/Grade/2b1adbd66c454dae92234341e801b984)](https://app.codacy.com/gh/marcusquinn/aidevops/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
62
56
  [![CodeRabbit](https://img.shields.io/badge/CodeRabbit-AI%20Reviews-FF570A?logo=coderabbit&logoColor=white)](https://coderabbit.ai)
63
57
 
64
58
  <!-- License & Legal -->
package/VERSION CHANGED
@@ -1 +1 @@
1
- 3.8.77
1
+ 3.8.79
package/aidevops.sh CHANGED
@@ -5,7 +5,7 @@
5
5
  # AI DevOps Framework CLI
6
6
  # Usage: aidevops <command> [options]
7
7
  #
8
- # Version: 3.8.77
8
+ # Version: 3.8.79
9
9
 
10
10
  set -euo pipefail
11
11
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aidevops",
3
- "version": "3.8.77",
3
+ "version": "3.8.79",
4
4
  "description": "AI DevOps Framework - AI-assisted development workflows, code quality, and deployment automation",
5
5
  "type": "module",
6
6
  "bin": {
@@ -37,6 +37,16 @@ setup_auto_update() {
37
37
  # Non-interactive: enable silently
38
38
  bash "$auto_update_script" enable >/dev/null 2>&1 || true
39
39
  print_info "Auto-update enabled (every 10 min). Disable: aidevops auto-update disable"
40
+ # On Linux systemd, advise about linger without running sudo automatically.
41
+ if [[ "$(uname -s)" == "Linux" ]] && [[ "${USER:-}" != "root" ]] \
42
+ && command -v loginctl &>/dev/null; then
43
+ local _linger_state
44
+ _linger_state=$(loginctl show-user "$USER" -p Linger --value 2>/dev/null || true)
45
+ if [[ "$_linger_state" != "yes" ]]; then
46
+ echo "[INFO] Linux systemd: enable linger so auto-update runs when logged out:" >&2
47
+ echo "[INFO] sudo loginctl enable-linger $USER" >&2
48
+ fi
49
+ fi
40
50
  else
41
51
  echo ""
42
52
  echo "Auto-update keeps aidevops current by checking every 10 minutes."
@@ -45,6 +55,29 @@ setup_auto_update() {
45
55
  setup_prompt enable_auto "Enable auto-update? [Y/n]: " "Y"
46
56
  if [[ "$enable_auto" =~ ^[Yy]?$ ]]; then
47
57
  bash "$auto_update_script" enable
58
+ # On Linux systemd hosts, offer to enable linger so the timer survives logout.
59
+ # Skip for root (irrelevant), WSL/container (loginctl may be absent or stub),
60
+ # and when the backend didn't resolve to systemd.
61
+ if [[ "$(uname -s)" == "Linux" ]] \
62
+ && [[ "${USER:-}" != "root" ]] \
63
+ && command -v loginctl &>/dev/null \
64
+ && systemctl --user is-enabled aidevops-auto-update.timer &>/dev/null 2>&1; then
65
+ local _linger_state
66
+ _linger_state=$(loginctl show-user "$USER" -p Linger --value 2>/dev/null || true)
67
+ if [[ "$_linger_state" != "yes" ]]; then
68
+ echo ""
69
+ echo "Without linger, the auto-update timer stops when you log out."
70
+ echo "On servers and headless hosts, linger is almost always required."
71
+ local enable_linger=""
72
+ setup_prompt enable_linger "Enable linger so auto-update runs when logged out? Requires sudo. [Y/n]: " "Y"
73
+ if [[ "$enable_linger" =~ ^[Yy]?$ ]]; then
74
+ sudo loginctl enable-linger "$USER"
75
+ print_success "Linger enabled for $USER"
76
+ else
77
+ print_info "Skipped. Enable later: sudo loginctl enable-linger $USER"
78
+ fi
79
+ fi
80
+ fi
48
81
  else
49
82
  print_info "Skipped. Enable later: aidevops auto-update enable"
50
83
  fi
package/setup.sh CHANGED
@@ -12,7 +12,7 @@ shopt -s inherit_errexit 2>/dev/null || true
12
12
  # AI Assistant Server Access Framework Setup Script
13
13
  # Helps developers set up the framework for their infrastructure
14
14
  #
15
- # Version: 3.8.77
15
+ # Version: 3.8.79
16
16
  #
17
17
  # Quick Install:
18
18
  # npm install -g aidevops && aidevops update (recommended)
@@ -895,6 +895,29 @@ _cleanup_legacy_model_config() {
895
895
  return 0
896
896
  }
897
897
 
898
+ # Deploy auto-hotfix.conf template to user-level configs if not already present.
899
+ # The template ships in .agents/configs/; this copies to ~/.aidevops/configs/
900
+ # where user edits survive `aidevops update`. Existing user config is preserved.
901
+ _deploy_hotfix_config() {
902
+ local source_conf="${INSTALL_DIR:-.}/.agents/configs/auto-hotfix.conf"
903
+ local target_dir="$HOME/.aidevops/configs"
904
+ local target_conf="$target_dir/auto-hotfix.conf"
905
+
906
+ if [[ ! -f "$source_conf" ]]; then
907
+ return 0
908
+ fi
909
+
910
+ # Only deploy if the user doesn't have one yet (preserve user edits)
911
+ if [[ -f "$target_conf" ]]; then
912
+ return 0
913
+ fi
914
+
915
+ mkdir -p "$target_dir"
916
+ cp "$source_conf" "$target_conf"
917
+ chmod 600 "$target_conf"
918
+ return 0
919
+ }
920
+
898
921
  # Non-interactive path: deploy agents and run safe migrations only (no prompts).
899
922
  _setup_run_non_interactive() {
900
923
  print_info "Non-interactive mode: deploying agents and running safe migrations only"
@@ -919,6 +942,7 @@ _setup_run_non_interactive() {
919
942
  _cleanup_legacy_model_config
920
943
  validate_opencode_config
921
944
  deploy_aidevops_agents
945
+ _deploy_hotfix_config
922
946
  sync_agent_sources
923
947
  install_aidevops_cli
924
948
  setup_shellcheck_wrapper
@@ -1036,7 +1060,7 @@ _setup_run_interactive() {
1036
1060
  confirm_step "Validate and repair OpenCode config schema" && validate_opencode_config
1037
1061
  confirm_step "Extract OpenCode prompts" && extract_opencode_prompts
1038
1062
  confirm_step "Check OpenCode prompt drift" && check_opencode_prompt_drift
1039
- confirm_step "Deploy aidevops agents to ~/.aidevops/agents/" && deploy_aidevops_agents
1063
+ confirm_step "Deploy aidevops agents to ~/.aidevops/agents/" && { deploy_aidevops_agents; _deploy_hotfix_config; }
1040
1064
  confirm_step "Sync agents from private repositories" && sync_agent_sources
1041
1065
  confirm_step "Set up routines repo (private repo for recurring operational jobs)" && setup_routines
1042
1066
  is_feature_enabled safety_hooks 2>/dev/null && confirm_step "Install Claude Code safety hooks (block destructive commands)" && setup_safety_hooks