aidevops 3.29.23 → 3.29.25

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
@@ -58,7 +58,7 @@ The result: an AI operations platform that manages projects across every busines
58
58
  [![Copyright](https://img.shields.io/badge/Copyright-Marcus%20Quinn%202025--2026-blue.svg)](https://github.com/marcusquinn)
59
59
 
60
60
  <!-- Release & Version Info -->
61
- [![Version](https://img.shields.io/badge/Version-3.29.23-blue.svg)](https://github.com/marcusquinn/aidevops/releases)
61
+ [![Version](https://img.shields.io/badge/Version-3.29.25-blue.svg)](https://github.com/marcusquinn/aidevops/releases)
62
62
  [![npm version](https://img.shields.io/npm/v/aidevops)](https://www.npmjs.com/package/aidevops)
63
63
  [![Homebrew](https://img.shields.io/badge/homebrew-marcusquinn%2Ftap-orange)](https://github.com/marcusquinn/homebrew-tap)
64
64
  [![GitHub repository](https://img.shields.io/badge/github-repository-181717.svg?logo=github)](https://github.com/marcusquinn/aidevops)
package/VERSION CHANGED
@@ -1 +1 @@
1
- 3.29.23
1
+ 3.29.25
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.29.23
8
+ # Version: 3.29.25
9
9
 
10
10
  set -euo pipefail
11
11
 
@@ -19,17 +19,23 @@ BOLD='\033[1m'
19
19
  NC='\033[0m' # No Color
20
20
 
21
21
  # Paths
22
- # When running under sudo on Linux, env_reset rewrites HOME to /root/; SUDO_USER
23
- # holds the original username. getent passwd is the canonical resolver on Linux.
24
- # On macOS, sudo preserves HOME by default (env_keep+="HOME MAIL" in /etc/sudoers)
25
- # and getent is not available, so the fallback to $HOME is correct.
22
+ # When running under sudo, env_reset may rewrite HOME to root's home; SUDO_USER
23
+ # holds the original username. getent passwd is canonical on Linux; dscl is
24
+ # canonical on macOS. Fall back to $HOME only when those resolvers are absent.
26
25
  # The command -v getent guard MUST be present — omitting it crashes aidevops.sh
27
26
  # under `set -euo pipefail` on any BSD system and breaks sudo aidevops approve.
28
27
  # Mirrors the pattern in .agents/scripts/approval-helper.sh:_resolve_real_home().
29
28
  # Security: no escalation — root already has full filesystem access.
30
29
  _AIDEVOPS_REAL_HOME="$HOME"
31
- if [[ -n "${SUDO_USER:-}" && "$(id -u)" -eq 0 ]] && command -v getent &>/dev/null; then
32
- _tmp_real_home=$(getent passwd "$SUDO_USER" | cut -d: -f6)
30
+ if [[ -n "${SUDO_USER:-}" && "$(id -u)" -eq 0 ]]; then
31
+ _tmp_real_home=""
32
+ if command -v getent &>/dev/null; then
33
+ _tmp_real_home=$(getent passwd "$SUDO_USER" | cut -d: -f6)
34
+ elif command -v dscl &>/dev/null; then
35
+ _tmp_real_home=$(dscl . -read "/Users/${SUDO_USER}" NFSHomeDirectory 2>/dev/null | awk '{print $2; exit}' || true)
36
+ elif [[ -d "/Users/${SUDO_USER}" ]]; then
37
+ _tmp_real_home="/Users/${SUDO_USER}"
38
+ fi
33
39
  if [[ -n "$_tmp_real_home" ]]; then
34
40
  _AIDEVOPS_REAL_HOME="$_tmp_real_home"
35
41
  fi
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aidevops",
3
- "version": "3.29.23",
3
+ "version": "3.29.25",
4
4
  "description": "AI DevOps Framework - AI-assisted development workflows, code quality, and deployment automation",
5
5
  "type": "module",
6
6
  "workspaces": [
@@ -6,7 +6,7 @@ import { conversationThreads } from "./conversation-fixtures";
6
6
  export function CommsConversationSurface({ mode, threads = conversationThreads }: { mode: "channels" | "directMessages" | "people"; threads?: GuiConversationThread[] }) {
7
7
  const availableThreads = threads ?? [];
8
8
  const conversations = mode === "directMessages" ? availableThreads.filter((thread) => thread.conversation.type === "dm" || thread.conversation.type === "group_dm") : availableThreads.filter((thread) => thread.conversation.type === "channel");
9
- const selectedThread = conversations[0] ?? availableThreads[0];
9
+ const selectedThread = conversations[0];
10
10
  const partsByMessage = new Map<string, GuiConversationMessagePart[]>();
11
11
 
12
12
  if (!selectedThread) {
@@ -104,7 +104,7 @@ function participantSummary(thread: GuiConversationThread): string {
104
104
  }
105
105
 
106
106
  function unreadCount(thread: GuiConversationThread): number {
107
- const lastSequence = Math.max(0, ...conversationMessages(thread).map((message) => message.sequence));
107
+ const lastSequence = conversationMessages(thread).reduce((max, message) => Math.max(max, message.sequence), 0);
108
108
  const localRead = conversationReadStates(thread)[0]?.last_read_sequence ?? 0;
109
109
  return Math.max(0, lastSequence - localRead);
110
110
  }
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.29.23
15
+ # Version: 3.29.25
16
16
  #
17
17
  # Quick Install:
18
18
  # npm install -g aidevops && aidevops update (recommended)