aidevops 3.32.229 → 3.32.231

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.229-blue.svg)](https://github.com/marcusquinn/aidevops/releases)
63
+ [![Version](https://img.shields.io/badge/Version-3.32.231-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)
@@ -213,23 +213,14 @@ aidevops security scan-deps # Unpinned dependency check
213
213
  aidevops security check # Per-repo security posture assessment
214
214
  aidevops security dismiss <id> # Dismiss a security advisory after taking action
215
215
  aidevops source-access status # List temporary source-read approvals
216
- sudo -k /usr/bin/python3 /etc/aidevops/source-access/source-access-helper.py setup
217
- sudo -k /usr/bin/python3 /etc/aidevops/source-access/source-access-helper.py revoke <approval-id>
216
+ sudo -k /usr/bin/python3 -I -B /etc/aidevops/source-access/source-access-helper.py revoke <approval-id>
218
217
  ```
219
218
 
220
219
  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
220
 
222
221
  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.
223
222
 
224
- Privileged operations never execute the user-managed aidevops deployment as root. Resolve the immutable commit from the published, signed aidevops release metadata, substitute it for `<verified-release-commit>`, and let root fetch the reviewed broker files directly over TLS. Never install the broker from the user-writable deployed tree.
225
-
226
- ```bash
227
- sudo -k /usr/bin/install -d -o 0 -g 0 -m 0755 /etc/aidevops/source-access
228
- sudo -k -H /usr/bin/curl --disable --fail --location --proto '=https' --proto-redir '=https' --tlsv1.2 "https://raw.githubusercontent.com/marcusquinn/aidevops/<verified-release-commit>/.agents/scripts/source_access_core.py" --output /etc/aidevops/source-access/source_access_core.py
229
- sudo -k -H /usr/bin/curl --disable --fail --location --proto '=https' --proto-redir '=https' --tlsv1.2 "https://raw.githubusercontent.com/marcusquinn/aidevops/<verified-release-commit>/.agents/scripts/source-access-helper.py" --output /etc/aidevops/source-access/source-access-helper.py
230
- sudo /bin/chmod 0644 /etc/aidevops/source-access/source_access_core.py /etc/aidevops/source-access/source-access-helper.py
231
- sudo -k /usr/bin/python3 /etc/aidevops/source-access/source-access-helper.py setup
232
- ```
223
+ `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.
233
224
 
234
225
  **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.
235
226
 
@@ -1088,13 +1079,13 @@ OpenCode Server (opencode serve)
1088
1079
 
1089
1080
  **Example runner templates:** [code-reviewer](.agents/tools/ai-assistants/runners/code-reviewer.md), [seo-analyst](.agents/tools/ai-assistants/runners/seo-analyst.md) - copy and customize for your own runners.
1090
1081
 
1091
- **Matrix bot dispatch** (optional): Bridge Matrix chat rooms to runners for chat-triggered AI. Each room maintains persistent conversation context via SQLite -- on idle timeout, the session is compacted (summarised) and stored, so the next message resumes with full context.
1082
+ **Matrix bot dispatch** (optional): Bridge Matrix chat rooms to runners for chat-triggered AI. Accepted text events normalize through the provider-neutral contract and are durably claimed before dispatch. SQLite context is isolated by room and actor; idle sessions compact to summaries without deleting immutable interaction history.
1092
1083
 
1093
1084
  ```bash
1094
1085
  # Setup Matrix bot (interactive wizard)
1095
1086
  matrix-dispatch-helper.sh setup
1096
1087
 
1097
- # Map rooms to runners (each room = separate session)
1088
+ # Map rooms to runners (mutable context is isolated by room and actor)
1098
1089
  matrix-dispatch-helper.sh map '!dev-room:server' code-reviewer
1099
1090
  matrix-dispatch-helper.sh map '!seo-room:server' seo-analyst
1100
1091
 
package/VERSION CHANGED
@@ -1 +1 @@
1
- 3.32.229
1
+ 3.32.231
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.229
8
+ # Version: 3.32.231
9
9
 
10
10
  set -euo pipefail
11
11
 
@@ -285,6 +285,18 @@ _run_update_setup_transaction() {
285
285
  return 0
286
286
  }
287
287
 
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"
296
+ fi
297
+ return 0
298
+ }
299
+
288
300
  _update_render_changelog() {
289
301
  local old_hash="$1"
290
302
  local new_hash="$2"
@@ -435,6 +447,7 @@ cmd_update() {
435
447
  _update_fresh_install || return 1
436
448
  fi
437
449
 
450
+ _run_update_source_access_reconciliation
438
451
  _update_sync_projects "$skip_project_sync" "$(get_version)"
439
452
  if [[ "$skip_project_sync" != "$_AIDEVOPS_UPDATE_TRUE" && "$reconcile_repo_verify" == "$_AIDEVOPS_UPDATE_TRUE" ]]; then
440
453
  _update_reconcile_repo_verify
@@ -930,6 +943,7 @@ _cmd_setup_help() {
930
943
  printf '%s\n' " opencode Repair/install the OpenCode CLI only"
931
944
  printf '%s\n' " agents Deploy aidevops agents/scripts only"
932
945
  printf '%s\n' " runtime-config Reconcile generated runtime commands/configuration"
946
+ printf '%s\n' " source-access Install/verify the signed root approval broker"
933
947
  printf '%s\n' " hooks Install safety hooks only"
934
948
  printf '%s\n' " tabby Sync Tabby terminal profiles only"
935
949
  printf '%s\n' " pulse Install/refresh the pulse scheduler only"
@@ -995,7 +1009,7 @@ cmd_setup() {
995
1009
  _help_commands() {
996
1010
  echo "Commands:"
997
1011
  echo " init [features] Initialize aidevops in current project"
998
- echo " setup --scope <s> Run scoped setup/deploy (opencode, agents, hooks, tabby, pulse, gui-desktop, ai-session, full)"
1012
+ echo " setup --scope <s> Run scoped setup/deploy (opencode, agents, source-access, hooks, tabby, pulse, gui-desktop, ai-session, full)"
999
1013
  echo " init-routines Scaffold private routines repo (--org <name> | --local)"
1000
1014
  echo " upgrade-planning Upgrade TODO.md/PLANS.md to latest templates"
1001
1015
  echo " features List available features for init"
@@ -1067,10 +1081,10 @@ _help_detailed_sections() {
1067
1081
  echo " aidevops security dismiss <id> # Dismiss a security advisory"
1068
1082
  echo ""
1069
1083
  echo "Temporary source access:"
1070
- echo " sudo -k /usr/bin/python3 /etc/aidevops/source-access/source-access-helper.py setup"
1071
- echo " sudo -k /usr/bin/python3 /etc/aidevops/source-access/source-access-helper.py approve <id> --ttl 12h"
1084
+ echo " aidevops update # Install/verify broker during normal setup"
1085
+ echo " sudo -k /usr/bin/python3 -I -B /etc/aidevops/source-access/source-access-helper.py approve <id> --ttl 12h"
1072
1086
  echo " aidevops source-access status # List active/expired approvals"
1073
- echo " sudo -k /usr/bin/python3 /etc/aidevops/source-access/source-access-helper.py revoke <approval-id>"
1087
+ echo " sudo -k /usr/bin/python3 -I -B /etc/aidevops/source-access/source-access-helper.py revoke <approval-id>"
1074
1088
  echo ""
1075
1089
  echo "IP Reputation:"
1076
1090
  echo " aidevops ip-check check <ip> # Check IP reputation across providers"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aidevops",
3
- "version": "3.32.229",
3
+ "version": "3.32.231",
4
4
  "description": "AI DevOps Framework - AI-assisted development workflows, code quality, and deployment automation",
5
5
  "type": "module",
6
6
  "workspaces": [
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.229
20
+ # Version: 3.32.231
21
21
  #
22
22
  # Quick Install:
23
23
  # npm install -g aidevops && aidevops update (recommended)
@@ -35,6 +35,7 @@ NC='\033[0m' # No Color
35
35
  CLEAN_MODE=false
36
36
  INTERACTIVE_MODE=false
37
37
  NON_INTERACTIVE="${AIDEVOPS_NON_INTERACTIVE:-false}"
38
+ SETUP_EXPLICIT_NON_INTERACTIVE="${AIDEVOPS_NON_INTERACTIVE:-false}"
38
39
  UPDATE_TOOLS_MODE=false
39
40
  SETUP_STAGE=""
40
41
  SETUP_STAGE_OPENCODE="setup_opencode_cli"
@@ -45,6 +46,7 @@ SETUP_STAGE_PULSE="setup_supervisor_pulse"
45
46
  SETUP_STAGE_GUI_DESKTOP="setup_gui_desktop_app"
46
47
  SETUP_STAGE_AI_SESSION="setup_ai_session_incremental"
47
48
  SETUP_STAGE_RUNTIME_CONFIG="reconcile_runtime_config"
49
+ SETUP_STAGE_SOURCE_ACCESS="setup_source_access_broker"
48
50
  SETUP_STAGE_OPENCODE_PLUGINS="setup_opencode_plugins"
49
51
  SETUP_STAGE_HOTFIX_CONFIG="_deploy_hotfix_config"
50
52
  SETUP_GUI_APP_NAME="aidevops.app"
@@ -372,6 +374,8 @@ source "${SETUP_IMPL_MODULES_DIR}/tool-beads.sh"
372
374
  # shellcheck disable=SC1091
373
375
  source "${SETUP_IMPL_MODULES_DIR}/config.sh"
374
376
  # shellcheck disable=SC1091
377
+ source "${SETUP_IMPL_MODULES_DIR}/source-access.sh"
378
+ # shellcheck disable=SC1091
375
379
  source "${SETUP_IMPL_MODULES_DIR}/plugins.sh"
376
380
  # shellcheck disable=SC1091
377
381
  source "${SETUP_IMPL_MODULES_DIR}/schedulers.sh"
@@ -392,6 +396,7 @@ parse_args() {
392
396
  ;;
393
397
  --non-interactive | -n)
394
398
  NON_INTERACTIVE=true
399
+ SETUP_EXPLICIT_NON_INTERACTIVE=true
395
400
  shift
396
401
  ;;
397
402
  --update | -u)
@@ -433,8 +438,9 @@ parse_args() {
433
438
  echo "Use --clean after removing or renaming agents to sync deletions."
434
439
  echo "Use --interactive to control each step individually."
435
440
  echo "Use --non-interactive for CI/CD or AI agent shells (no stdin required)."
436
- echo "Use --stage for targeted updates: opencode, agents, runtime-config, hooks, tabby, pulse, gui-desktop, ai-session, full."
437
- echo "Stage aliases: ${SETUP_STAGE_OPENCODE}, ${SETUP_STAGE_AGENTS}, ${SETUP_STAGE_RUNTIME_CONFIG}, ${SETUP_STAGE_HOOKS}, ${SETUP_STAGE_TABBY}, ${SETUP_STAGE_PULSE}, ${SETUP_STAGE_GUI_DESKTOP}, ${SETUP_STAGE_AI_SESSION}."
441
+ echo "Use --stage for targeted updates: opencode, agents, runtime-config, source-access, hooks, tabby, pulse, gui-desktop, ai-session, full."
442
+ echo "Stage aliases: ${SETUP_STAGE_OPENCODE}, ${SETUP_STAGE_AGENTS}, ${SETUP_STAGE_RUNTIME_CONFIG}, ${SETUP_STAGE_SOURCE_ACCESS}, ${SETUP_STAGE_HOOKS}, ${SETUP_STAGE_TABBY}, ${SETUP_STAGE_PULSE}, ${SETUP_STAGE_GUI_DESKTOP}, ${SETUP_STAGE_AI_SESSION}."
443
+ echo "The source-access stage may request sudo when attached to an interactive terminal."
438
444
  echo "Install ${SETUP_GUI_APP_NAME} explicitly with --stage gui-desktop or AIDEVOPS_GUI_DESKTOP_INSTALL=true."
439
445
  echo "Use --update to check for tool updates after setup completes."
440
446
  exit 0
@@ -457,6 +463,7 @@ _setup_print_stage_help() {
457
463
  printf ' opencode | %s Repair/install OpenCode CLI only\n' "$SETUP_STAGE_OPENCODE"
458
464
  printf ' agents | %s Deploy .agents scripts/prompts only\n' "$SETUP_STAGE_AGENTS"
459
465
  printf ' runtime-config | %s Reconcile generated runtime commands/configuration\n' "$SETUP_STAGE_RUNTIME_CONFIG"
466
+ printf ' source-access | %s Install/verify the signed root broker\n' "$SETUP_STAGE_SOURCE_ACCESS"
460
467
  printf ' hooks | %s Install safety hooks only\n' "$SETUP_STAGE_HOOKS"
461
468
  printf ' tabby | %s Sync Tabby profiles only\n' "$SETUP_STAGE_TABBY"
462
469
  printf ' pulse | %s Install/refresh pulse scheduler only\n' "$SETUP_STAGE_PULSE"
@@ -472,6 +479,7 @@ _setup_canonical_stage() {
472
479
  opencode | "$SETUP_STAGE_OPENCODE") printf '%s' "$SETUP_STAGE_OPENCODE" ;;
473
480
  agents | "$SETUP_STAGE_AGENTS") printf '%s' "$SETUP_STAGE_AGENTS" ;;
474
481
  runtime-config | runtime | "$SETUP_STAGE_RUNTIME_CONFIG") printf '%s' "$SETUP_STAGE_RUNTIME_CONFIG" ;;
482
+ source-access | "$SETUP_STAGE_SOURCE_ACCESS") printf '%s' "$SETUP_STAGE_SOURCE_ACCESS" ;;
475
483
  hooks | "$SETUP_STAGE_HOOKS") printf '%s' "$SETUP_STAGE_HOOKS" ;;
476
484
  tabby | "$SETUP_STAGE_TABBY") printf '%s' "$SETUP_STAGE_TABBY" ;;
477
485
  pulse | "$SETUP_STAGE_PULSE") printf '%s' "$SETUP_STAGE_PULSE" ;;
@@ -1452,6 +1460,14 @@ _setup_run_scoped_stage() {
1452
1460
  "$SETUP_STAGE_RUNTIME_CONFIG")
1453
1461
  _time_step "$SETUP_STAGE_RUNTIME_CONFIG" _setup_reconcile_runtime_config
1454
1462
  ;;
1463
+ "$SETUP_STAGE_SOURCE_ACCESS")
1464
+ if [[ "$SETUP_EXPLICIT_NON_INTERACTIVE" == "true" ]]; then
1465
+ _time_step "$SETUP_STAGE_SOURCE_ACCESS" setup_source_access_broker
1466
+ else
1467
+ AIDEVOPS_SOURCE_ACCESS_INTERACTIVE=true \
1468
+ _time_step "$SETUP_STAGE_SOURCE_ACCESS" setup_source_access_broker
1469
+ fi
1470
+ ;;
1455
1471
  "$SETUP_STAGE_HOOKS")
1456
1472
  _time_step "$SETUP_STAGE_HOOKS" setup_safety_hooks
1457
1473
  ;;
@@ -1549,6 +1565,7 @@ _setup_run_non_interactive() {
1549
1565
  _time_step "setup_opencode_desktop_launcher" setup_opencode_desktop_launcher
1550
1566
  _time_step "sync_agent_sources" sync_agent_sources
1551
1567
  _time_step "install_aidevops_cli" install_aidevops_cli || print_warning "aidevops CLI installation encountered issues; continuing configuration reconciliation"
1568
+ _time_step "setup_source_access_broker" setup_source_access_broker_nonfatal
1552
1569
  _time_step "setup_shellcheck_wrapper" setup_shellcheck_wrapper
1553
1570
  if is_feature_enabled safety_hooks 2>/dev/null; then
1554
1571
  _time_step "$SETUP_STAGE_HOOKS" setup_safety_hooks
@@ -1722,6 +1739,9 @@ _setup_run_interactive() {
1722
1739
  # Launcher verification reads the deployed VERSION, so it must follow agent
1723
1740
  # deployment on first-run interactive setup as it already does non-interactively.
1724
1741
  confirm_step "Install and verify aidevops CLI command" && install_aidevops_cli
1742
+ if confirm_step "Install the secure source-access approval broker"; then
1743
+ AIDEVOPS_SOURCE_ACCESS_INTERACTIVE=true setup_source_access_broker_nonfatal
1744
+ fi
1725
1745
  confirm_step "Sync agents from private repositories" && sync_agent_sources
1726
1746
  confirm_step "Set up routines repo (private repo for recurring operational jobs)" && setup_routines
1727
1747
  is_feature_enabled safety_hooks 2>/dev/null && confirm_step "Install Claude Code safety hooks (block destructive commands)" && setup_safety_hooks