aidevops 3.32.229 → 3.32.230
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 +3 -12
- package/VERSION +1 -1
- package/aidevops.sh +19 -5
- package/package.json +1 -1
- package/setup.sh +23 -3
package/README.md
CHANGED
|
@@ -60,7 +60,7 @@ The result: an AI operations platform that manages projects across every busines
|
|
|
60
60
|
[](https://github.com/marcusquinn)
|
|
61
61
|
|
|
62
62
|
<!-- Release & Version Info -->
|
|
63
|
-
[](https://github.com/marcusquinn/aidevops/releases)
|
|
64
64
|
[](https://www.npmjs.com/package/aidevops)
|
|
65
65
|
[](https://github.com/marcusquinn/homebrew-tap)
|
|
66
66
|
[](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
|
|
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
|
-
|
|
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
|
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.32.
|
|
1
|
+
3.32.230
|
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.
|
|
8
|
+
# Version: 3.32.230
|
|
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 "
|
|
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
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.
|
|
20
|
+
# Version: 3.32.230
|
|
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
|