aidevops 3.32.227 → 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 +9 -1
- package/VERSION +1 -1
- package/aidevops.sh +24 -2
- package/bun.lock +1 -0
- package/package.json +4 -3
- 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)
|
|
@@ -105,7 +105,9 @@ the required notices and preferred credit text.
|
|
|
105
105
|
- `aidevops runtime-bundle list` - List retained validated runtime bundles; use `rollback --bundle-id <id> --reason <text>` for an explicit audited rollback
|
|
106
106
|
- `aidevops gpt56-context [enable|disable|status]` - Keep GPT-5.6 at a 300K advertised context window in OpenCode (enabled by default), so 80% auto-compaction runs near 240K before long-context pricing; disable to use native provider limits
|
|
107
107
|
- `aidevops buzz [status|apply|rollback]` - Inspect or manage Buzz Desktop OpenCode ACP compatibility
|
|
108
|
+
- `~/.aidevops/agents/scripts/team-interface-helper.sh [providers|detect|status|doctor|plan]` - Inspect registered collaboration providers, persist read-only observations, or emit deterministic dry-run plans; no provider-write command is exposed
|
|
108
109
|
- `aidevops secret` - Manage secrets (gopass encrypted, AI-safe)
|
|
110
|
+
- `aidevops source-access` - Manage exact-path, session-bound source-read approvals signed via sudo
|
|
109
111
|
- `aidevops security` - Full security assessment (posture, secrets, supply chain)
|
|
110
112
|
- `aidevops lint audit` - Audit native lint/format/typecheck commands and repo-verify hooks
|
|
111
113
|
- `aidevops lint configure --dry-run` - Preview safe evidence-based lint provisioning
|
|
@@ -210,10 +212,16 @@ aidevops security scan-secrets # Plaintext credential locations only
|
|
|
210
212
|
aidevops security scan-deps # Unpinned dependency check
|
|
211
213
|
aidevops security check # Per-repo security posture assessment
|
|
212
214
|
aidevops security dismiss <id> # Dismiss a security advisory after taking action
|
|
215
|
+
aidevops source-access status # List temporary source-read approvals
|
|
216
|
+
sudo -k /usr/bin/python3 -I -B /etc/aidevops/source-access/source-access-helper.py revoke <approval-id>
|
|
213
217
|
```
|
|
214
218
|
|
|
215
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.
|
|
216
220
|
|
|
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.
|
|
222
|
+
|
|
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.
|
|
224
|
+
|
|
217
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.
|
|
218
226
|
|
|
219
227
|
**Supply chain hardening:** All Python dependencies are pinned to exact versions (`==`) to prevent malicious package upgrades. The `.pth` file auditor detects known supply chain attack indicators (e.g., the LiteLLM March 2026 PyPI compromise).
|
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"
|
|
@@ -1036,6 +1050,7 @@ _help_commands() {
|
|
|
1036
1050
|
echo " ip-check <cmd> IP reputation checks (check/batch/report/providers)"
|
|
1037
1051
|
echo " review-gate <cmd> Configure review_gate merge policies (rate-limit/completion)"
|
|
1038
1052
|
echo " github-app-auth GitHub App auth setup/status and API route decisions"
|
|
1053
|
+
echo " source-access <cmd> Session-bound, sudo-signed source-read approvals"
|
|
1039
1054
|
echo " secret <cmd> Manage secrets (set/list/run/init/import/status)"
|
|
1040
1055
|
echo " vault <cmd> Local encrypted Vault broker (init/unlock/lock/status/read/update)"
|
|
1041
1056
|
echo " config <cmd> Feature toggles (list/get/set/reset/path/help)"
|
|
@@ -1065,6 +1080,12 @@ _help_detailed_sections() {
|
|
|
1065
1080
|
echo " aidevops security check # Per-repo security posture assessment"
|
|
1066
1081
|
echo " aidevops security dismiss <id> # Dismiss a security advisory"
|
|
1067
1082
|
echo ""
|
|
1083
|
+
echo "Temporary source access:"
|
|
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"
|
|
1086
|
+
echo " aidevops source-access status # List active/expired approvals"
|
|
1087
|
+
echo " sudo -k /usr/bin/python3 -I -B /etc/aidevops/source-access/source-access-helper.py revoke <approval-id>"
|
|
1088
|
+
echo ""
|
|
1068
1089
|
echo "IP Reputation:"
|
|
1069
1090
|
echo " aidevops ip-check check <ip> # Check IP reputation across providers"
|
|
1070
1091
|
echo " aidevops ip-check batch <f> # Batch check IPs from file"
|
|
@@ -1843,6 +1864,7 @@ main() {
|
|
|
1843
1864
|
opencode-desktop | oc-desktop) _dispatch_helper "opencode-launcher-helper.sh" "opencode-launcher-helper.sh" desktop "$@" ;;
|
|
1844
1865
|
opencode-sandbox | oc-sandbox) _dispatch_helper "opencode-sandbox-helper.sh" "opencode-sandbox-helper.sh" "$@" ;;
|
|
1845
1866
|
review-gate | review_gate) _dispatch_helper "review-gate-config-helper.sh" "review-gate-config-helper.sh" "$@" ;;
|
|
1867
|
+
source-access | source_access) _dispatch_helper "source-access-helper.sh" "source-access-helper.sh" "$@" ;;
|
|
1846
1868
|
secret | secrets) _dispatch_helper "secret-helper.sh" "secret-helper.sh" "$@" ;;
|
|
1847
1869
|
vault) _dispatch_helper "vault-helper.sh" "vault-helper.sh" "$@" ;;
|
|
1848
1870
|
approve) _dispatch_helper "approval-helper.sh" "approval-helper.sh" "$@" ;;
|
package/bun.lock
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aidevops",
|
|
3
|
-
"version": "3.32.
|
|
3
|
+
"version": "3.32.230",
|
|
4
4
|
"description": "AI DevOps Framework - AI-assisted development workflows, code quality, and deployment automation",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"workspaces": [
|
|
@@ -65,10 +65,11 @@
|
|
|
65
65
|
"vite": "^7.0.0"
|
|
66
66
|
},
|
|
67
67
|
"devDependencies": {
|
|
68
|
-
"@types/react": "^19.0.0",
|
|
69
|
-
"@types/react-dom": "^19.0.0",
|
|
70
68
|
"@secretlint/secretlint-rule-preset-recommend": "^11.2.5",
|
|
71
69
|
"@types/bun": "latest",
|
|
70
|
+
"@types/react": "^19.0.0",
|
|
71
|
+
"@types/react-dom": "^19.0.0",
|
|
72
|
+
"ajv": "^8.18.0",
|
|
72
73
|
"react": "^19.0.0",
|
|
73
74
|
"react-dom": "^19.0.0",
|
|
74
75
|
"secretlint": "^11.2.5",
|
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
|