aidevops 3.32.286 → 3.32.288

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
@@ -60,7 +60,7 @@ The result: an AI operations platform that manages projects across every busines
60
60
  [![Copyright](https://img.shields.io/badge/Copyright-Marcus%20Quinn%202025--2026-blue.svg)](https://github.com/marcusquinn)
61
61
 
62
62
  <!-- Release & Version Info -->
63
- [![Version](https://img.shields.io/badge/Version-3.32.286-blue.svg)](https://github.com/marcusquinn/aidevops/releases)
63
+ [![Version](https://img.shields.io/badge/Version-3.32.288-blue.svg)](https://github.com/marcusquinn/aidevops/releases)
64
64
  [![npm version](https://img.shields.io/npm/v/aidevops)](https://www.npmjs.com/package/aidevops)
65
65
  [![Homebrew](https://img.shields.io/badge/homebrew-marcusquinn%2Ftap-orange)](https://github.com/marcusquinn/homebrew-tap)
66
66
  [![GitHub repository](https://img.shields.io/badge/github-repository-181717.svg?logo=github)](https://github.com/marcusquinn/aidevops)
@@ -219,9 +219,9 @@ sudo -k /usr/bin/python3 -I -B /etc/aidevops/source-access/source-access-helper.
219
219
 
220
220
  Running `aidevops security` with no arguments is the single command that covers everything — user security posture, plaintext secret detection, supply chain IoC scanning, and active advisories.
221
221
 
222
- When a read guard identifies only a low-confidence source-code basename match, it emits a scoped request. A maintainer can run the displayed root-broker approval command. Approvals are bound to the exact runtime session, user, Git-tracked regular source path, approved content digest, and guard reason; they expire within 12 hours and never override private-key, environment-file, credential-store, hard-link, symlink, changed-content, or untracked-file denials. The plugin redirects the approved read to a root-controlled immutable snapshot of those bytes so the live path cannot be rebound after verification; revocation removes both receipt and snapshot.
222
+ When a read guard identifies only a low-confidence source-code basename match, it emits a scoped request. A maintainer can run the displayed root-broker approval command. Approvals are bound to the exact runtime session, user, Git-tracked regular source path, approved content digest, and guard reason; they expire within 12 hours and never override private-key, environment-file, credential-store, hard-link, symlink, changed-content, cross-worktree, or untracked-file denials. Repeating `--path` while creating a request produces one exact, repository-bound manifest that a human can approve once. The plugin redirects each approved read to its root-controlled immutable snapshot; revocation removes the receipt and every snapshot.
223
223
 
224
- `setup.sh` and interactive `aidevops update` provision this capability automatically. Setup verifies the published signed tag, asks for one sudo confirmation, has root fetch the exact reviewed broker bytes directly over TLS, compares those downloads byte-for-byte with the signed Git objects, and then creates a dedicated root-only signing key under `/etc/aidevops/source-access`. It never executes or copies the user-writable aidevops deployment as root. The plugin also rejects approvals whenever the installed broker bytes differ from the active release. Headless updates cannot request sudo, so they leave the capability fail-closed; the next terminal `aidevops update` completes provisioning without a separate bootstrap procedure.
224
+ Routine `aidevops update` never requests sudo or launches an editor. When the root-owned broker differs from the active release, update prints a machine-readable deferred action; a human runs `aidevops setup --scope source-access` in an attached terminal. Scoped setup verifies the published signed tag, invalidates inherited sudo, asks for one confirmation, has root fetch the exact reviewed broker bytes directly over TLS, compares those downloads byte-for-byte with the signed Git objects, creates a dedicated root-only signing key under `/etc/aidevops/source-access`, and invalidates sudo again. It never executes or copies the user-writable aidevops deployment as root. The plugin rejects approvals whenever installed broker bytes differ from the active release.
225
225
 
226
226
  **Security advisories** are delivered via `aidevops update` and shown in the session greeting until dismissed. The scanner never exposes secret values — only file locations and key names. All remediation commands should be run in a separate terminal, not inside AI chat sessions.
227
227
 
package/VERSION CHANGED
@@ -1 +1 @@
1
- 3.32.286
1
+ 3.32.288
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.32.286
8
+ # Version: 3.32.288
9
9
 
10
10
  set -euo pipefail
11
11
 
@@ -286,14 +286,28 @@ _run_update_setup_transaction() {
286
286
  }
287
287
 
288
288
  _run_update_source_access_reconciliation() {
289
- local setup_script="${INSTALL_DIR}/setup.sh"
290
-
291
- [[ -t 0 ]] || return 0
292
- [[ -z "${AIDEVOPS_AUTO_UPDATE:-}" ]] || return 0
293
- [[ "${AIDEVOPS_NON_INTERACTIVE:-false}" != "true" ]] || return 0
294
- if ! AIDEVOPS_SOURCE_ACCESS_INTERACTIVE=true bash "$setup_script" --stage source-access; then
295
- print_warning "Source-access broker provisioning remains deferred and fail-closed"
289
+ local broker_dir="/etc/aidevops/source-access"
290
+ local deployed_scripts="${_AIDEVOPS_REAL_HOME}/.aidevops/agents/scripts"
291
+ local broker_current=true
292
+
293
+ [[ -f "$deployed_scripts/source_access_core.py" ]] || return 0
294
+ [[ -f "$deployed_scripts/source-access-helper.py" ]] || return 0
295
+ [[ -f "$broker_dir/source_access_core.py" && ! -L "$broker_dir/source_access_core.py" ]] || broker_current=false
296
+ [[ -f "$broker_dir/source-access-helper.py" && ! -L "$broker_dir/source-access-helper.py" ]] || broker_current=false
297
+ [[ -f "$broker_dir/source-access.pub" && ! -L "$broker_dir/source-access.pub" ]] || broker_current=false
298
+ [[ -f "$broker_dir/source-access.trust" && ! -L "$broker_dir/source-access.trust" ]] || broker_current=false
299
+ [[ ! -w "$broker_dir" ]] || broker_current=false
300
+ [[ ! -w "$broker_dir/source_access_core.py" ]] || broker_current=false
301
+ [[ ! -w "$broker_dir/source-access-helper.py" ]] || broker_current=false
302
+ [[ ! -w "$broker_dir/source-access.pub" ]] || broker_current=false
303
+ [[ ! -w "$broker_dir/source-access.trust" ]] || broker_current=false
304
+ if [[ "$broker_current" == "true" ]] &&
305
+ /usr/bin/cmp -s "$deployed_scripts/source_access_core.py" "$broker_dir/source_access_core.py" &&
306
+ /usr/bin/cmp -s "$deployed_scripts/source-access-helper.py" "$broker_dir/source-access-helper.py"; then
307
+ return 0
296
308
  fi
309
+
310
+ print_warning "AIDEVOPS_DEFERRED_ACTION action=source-access-reconcile command='aidevops setup --scope source-access'"
297
311
  return 0
298
312
  }
299
313
 
@@ -308,7 +322,7 @@ _update_render_changelog() {
308
322
  fi
309
323
  echo ""
310
324
  print_info "Changes since $current_version ($total_commits commits):"
311
- git -C "$INSTALL_DIR" log --oneline --max-count=20 "$old_hash..$new_hash" || true
325
+ git -C "$INSTALL_DIR" --no-pager log --oneline --max-count=20 "$old_hash..$new_hash" || true
312
326
  if [[ "$total_commits" -gt 20 ]]; then
313
327
  echo " ... and more (run 'git log --oneline' in $INSTALL_DIR for full list)"
314
328
  fi
@@ -330,6 +344,17 @@ cmd_update_help() {
330
344
  }
331
345
 
332
346
  cmd_update() {
347
+ # Update is operational, not compositional. Do not let any reachable Git,
348
+ # package-manager, migration, or setup subprocess inherit an editor or pager.
349
+ # Local declarations restore the caller's environment when this function exits.
350
+ local EDITOR=/usr/bin/false
351
+ local VISUAL=/usr/bin/false
352
+ local GIT_EDITOR=/usr/bin/false
353
+ local GIT_SEQUENCE_EDITOR=/usr/bin/false
354
+ local GIT_PAGER=cat
355
+ local PAGER=cat
356
+ local GIT_TERMINAL_PROMPT=0
357
+ export EDITOR VISUAL GIT_EDITOR GIT_SEQUENCE_EDITOR GIT_PAGER PAGER GIT_TERMINAL_PROMPT
333
358
  local skip_project_sync=false
334
359
  local reconcile_repo_verify=false
335
360
  local update_output_mode="${AIDEVOPS_OUTPUT_MODE:-auto}"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aidevops",
3
- "version": "3.32.286",
3
+ "version": "3.32.288",
4
4
  "description": "AI DevOps Framework - AI-assisted development workflows, code quality, and deployment automation",
5
5
  "type": "module",
6
6
  "packageManager": "bun@1.3.11",
package/setup.sh CHANGED
@@ -17,7 +17,7 @@ fi
17
17
  # AI Assistant Server Access Framework Setup Script
18
18
  # Helps developers set up the framework for their infrastructure
19
19
  #
20
- # Version: 3.32.286
20
+ # Version: 3.32.288
21
21
  #
22
22
  # Quick Install:
23
23
  # npm install -g aidevops && aidevops update (recommended)