aidevops 3.8.93 → 3.8.95
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/VERSION +1 -1
- package/aidevops.sh +12 -1
- package/package.json +1 -1
- package/setup-modules/schedulers.sh +44 -13
- package/setup.sh +1 -1
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.8.
|
|
1
|
+
3.8.95
|
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.8.
|
|
8
|
+
# Version: 3.8.95
|
|
9
9
|
|
|
10
10
|
set -euo pipefail
|
|
11
11
|
|
|
@@ -1382,11 +1382,14 @@ _help_commands() {
|
|
|
1382
1382
|
echo " opencode-sandbox Test OpenCode versions in isolation (install/run/check/clean)"
|
|
1383
1383
|
echo " approve <cmd> Cryptographic issue/PR approval (setup/issue/pr/verify/status)"
|
|
1384
1384
|
echo " security [cmd] Full security assessment (posture + hygiene + supply chain)"
|
|
1385
|
+
echo " contributions External contributions inbox (bare: status | seed/scan/stop/restart/install/uninstall)"
|
|
1385
1386
|
echo " ip-check <cmd> IP reputation checks (check/batch/report/providers)"
|
|
1387
|
+
echo " review-gate <cmd> Configure review_gate.rate_limit_behavior (list/set/unset)"
|
|
1386
1388
|
echo " secret <cmd> Manage secrets (set/list/run/init/import/status)"
|
|
1387
1389
|
echo " config <cmd> Feature toggles (list/get/set/reset/path/help)"
|
|
1388
1390
|
echo " stats <cmd> LLM usage analytics (summary/models/projects/costs/trend)"
|
|
1389
1391
|
echo " tabby <cmd> Manage Tabby terminal profiles (sync/status/zshrc/help)"
|
|
1392
|
+
echo " parent-status <N> Show decomposition state of parent-task issue #N (alias: ps)"
|
|
1390
1393
|
echo " detect Find and register aidevops projects"
|
|
1391
1394
|
echo " uninstall Remove aidevops from your system"
|
|
1392
1395
|
echo " version Show version information"
|
|
@@ -1747,12 +1750,20 @@ main() {
|
|
|
1747
1750
|
model-accounts-pool | map) _dispatch_helper "oauth-pool-helper.sh" "oauth-pool-helper.sh" "$@" ;;
|
|
1748
1751
|
client-format) _cmd_client_format "$@" ;;
|
|
1749
1752
|
opencode-sandbox | oc-sandbox) _dispatch_helper "opencode-sandbox-helper.sh" "opencode-sandbox-helper.sh" "$@" ;;
|
|
1753
|
+
review-gate | review_gate) _dispatch_helper "review-gate-config-helper.sh" "review-gate-config-helper.sh" "$@" ;;
|
|
1750
1754
|
secret | secrets) _dispatch_helper "secret-helper.sh" "secret-helper.sh" "$@" ;;
|
|
1751
1755
|
approve) _dispatch_helper "approval-helper.sh" "approval-helper.sh" "$@" ;;
|
|
1752
1756
|
signing) _dispatch_helper "signing-setup.sh" "signing-setup.sh" "$@" ;;
|
|
1757
|
+
contributions | contrib)
|
|
1758
|
+
# Bare `aidevops contributions` defaults to status (most common use).
|
|
1759
|
+
# Other subcommands (seed, scan, stop, restart, install, uninstall) forward verbatim.
|
|
1760
|
+
[[ $# -eq 0 ]] && set -- status
|
|
1761
|
+
_dispatch_helper "contribution-watch-helper.sh" "contribution-watch-helper.sh" "$@"
|
|
1762
|
+
;;
|
|
1753
1763
|
stats | observability) _dispatch_helper "observability-helper.sh" "observability-helper.sh" "$@" ;;
|
|
1754
1764
|
tabby) _dispatch_helper "tabby-helper.sh" "tabby-helper.sh" "$@" ;;
|
|
1755
1765
|
init-routines) _dispatch_helper "init-routines-helper.sh" "init-routines-helper.sh" "$@" ;;
|
|
1766
|
+
parent-status | ps) _dispatch_helper "parent-status-helper.sh" "parent-status-helper.sh" "$@" ;;
|
|
1756
1767
|
config | configure) _dispatch_config "$@" ;;
|
|
1757
1768
|
uninstall | remove) cmd_uninstall ;;
|
|
1758
1769
|
version | v | -v | --version) cmd_version ;;
|
package/package.json
CHANGED
|
@@ -9,6 +9,11 @@
|
|
|
9
9
|
# Keep pulse workers alive long enough for opus-tier dispatches.
|
|
10
10
|
PULSE_STALE_THRESHOLD_SECONDS=1800
|
|
11
11
|
|
|
12
|
+
# Cron expression: top of every hour. Shared by stats-wrapper,
|
|
13
|
+
# contribution-watch, and profile-readme schedulers — keep DRY so a
|
|
14
|
+
# future cadence shift only touches one place.
|
|
15
|
+
CRON_HOURLY="0 * * * *"
|
|
16
|
+
|
|
12
17
|
# Resolve the modern bash binary path for use in launchd ProgramArguments.
|
|
13
18
|
# Launchd bypasses the shebang when ProgramArguments specifies an explicit
|
|
14
19
|
# interpreter, so we must resolve the path at plist generation time.
|
|
@@ -263,12 +268,14 @@ PULSE_STALE_THRESHOLD=${PULSE_STALE_THRESHOLD_SECONDS}"
|
|
|
263
268
|
}
|
|
264
269
|
|
|
265
270
|
# Read supervisor.pulse_interval_seconds from settings.json.
|
|
266
|
-
# Falls back to
|
|
271
|
+
# Falls back to 180 if the file is missing, the key is absent, or jq is unavailable.
|
|
267
272
|
# Clamps to the validated range [30, 3600].
|
|
268
273
|
# GH#18018: previously this was hardcoded as "120" in _install_supervisor_pulse.
|
|
274
|
+
# t2744: default raised 120 → 180 to reduce GraphQL pressure (33% fewer cycles)
|
|
275
|
+
# on multi-repo setups where per-cycle cost chronically exceeds 5000/hr.
|
|
269
276
|
_read_pulse_interval_seconds() {
|
|
270
277
|
local _settings_file="$HOME/.config/aidevops/settings.json"
|
|
271
|
-
local _interval=
|
|
278
|
+
local _interval=180
|
|
272
279
|
|
|
273
280
|
if command -v jq >/dev/null 2>&1 && [[ -f "$_settings_file" ]]; then
|
|
274
281
|
local _raw
|
|
@@ -495,6 +502,13 @@ _build_pulse_headless_env_xml() {
|
|
|
495
502
|
# Generate the full pulse launchd plist XML content.
|
|
496
503
|
# Args: $1=pulse_label, $2=wrapper_script, $3=opencode_bin
|
|
497
504
|
# Prints the complete plist XML to stdout.
|
|
505
|
+
#
|
|
506
|
+
# StartInterval is read from supervisor.pulse_interval_seconds in
|
|
507
|
+
# settings.json via _read_pulse_interval_seconds (default 180 — t2744).
|
|
508
|
+
# Previously this was hardcoded as 120, meaning macOS users could not
|
|
509
|
+
# tune the pulse cadence via settings (Linux/cron path always honoured
|
|
510
|
+
# the setting). The hardcoding is now removed; the macOS path matches
|
|
511
|
+
# the Linux path's behaviour.
|
|
498
512
|
_generate_pulse_plist_content() {
|
|
499
513
|
local pulse_label="$1"
|
|
500
514
|
local wrapper_script="$2"
|
|
@@ -519,6 +533,11 @@ _generate_pulse_plist_content() {
|
|
|
519
533
|
local _xml_bash_bin
|
|
520
534
|
_xml_bash_bin=$(_xml_escape "$(_resolve_modern_bash)")
|
|
521
535
|
|
|
536
|
+
# Resolve the configured pulse interval (settings.json, with default).
|
|
537
|
+
# Already validated to [30, 3600] inside _read_pulse_interval_seconds.
|
|
538
|
+
local _pulse_interval_sec
|
|
539
|
+
_pulse_interval_sec=$(_read_pulse_interval_seconds)
|
|
540
|
+
|
|
522
541
|
cat <<PLIST
|
|
523
542
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
524
543
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
@@ -532,7 +551,7 @@ _generate_pulse_plist_content() {
|
|
|
532
551
|
<string>${_xml_wrapper_script}</string>
|
|
533
552
|
</array>
|
|
534
553
|
<key>StartInterval</key>
|
|
535
|
-
<integer
|
|
554
|
+
<integer>${_pulse_interval_sec}</integer>
|
|
536
555
|
<key>StandardOutPath</key>
|
|
537
556
|
<string>${_xml_home}/.aidevops/logs/pulse-wrapper.log</string>
|
|
538
557
|
<key>StandardErrorPath</key>
|
|
@@ -579,12 +598,21 @@ _install_pulse_launchd() {
|
|
|
579
598
|
# Write the plist (always regenerated to pick up config changes)
|
|
580
599
|
_generate_pulse_plist_content "$pulse_label" "$wrapper_script" "$opencode_bin" >"$pulse_plist"
|
|
581
600
|
|
|
601
|
+
# Resolve interval for the user-facing message (matches what the plist contains).
|
|
602
|
+
local _interval_sec _interval_label
|
|
603
|
+
_interval_sec=$(_read_pulse_interval_seconds)
|
|
604
|
+
if (( _interval_sec % 60 == 0 )); then
|
|
605
|
+
_interval_label="$((_interval_sec / 60)) min"
|
|
606
|
+
else
|
|
607
|
+
_interval_label="${_interval_sec}s"
|
|
608
|
+
fi
|
|
609
|
+
|
|
582
610
|
# shell-portability: ignore next — _install_pulse_launchd is macOS-only (launchd)
|
|
583
611
|
if launchctl load "$pulse_plist"; then
|
|
584
612
|
if [[ "$_pulse_installed" == "true" ]]; then
|
|
585
|
-
print_info "Supervisor pulse updated (launchd config regenerated)"
|
|
613
|
+
print_info "Supervisor pulse updated (launchd config regenerated, every ${_interval_label})"
|
|
586
614
|
else
|
|
587
|
-
print_info "Supervisor pulse enabled (launchd, every
|
|
615
|
+
print_info "Supervisor pulse enabled (launchd, every ${_interval_label})"
|
|
588
616
|
fi
|
|
589
617
|
else
|
|
590
618
|
print_warning "Failed to load supervisor pulse LaunchAgent"
|
|
@@ -940,7 +968,10 @@ _uninstall_pulse() {
|
|
|
940
968
|
# Setup stats-wrapper scheduler — runs quality sweep and health issue updates
|
|
941
969
|
# separately from the pulse (t1429). Only installed when the supervisor
|
|
942
970
|
# pulse is enabled (stats are useless without it).
|
|
943
|
-
# macOS: launchd plist (
|
|
971
|
+
# macOS: launchd plist (hourly) | Linux: systemd timer or cron (hourly)
|
|
972
|
+
# t2744: interval raised from 15 min → hourly. Stats UI is not realtime,
|
|
973
|
+
# the four-times-an-hour cadence drove ~200-400 GraphQL points/hr of pure
|
|
974
|
+
# overhead on multi-repo setups.
|
|
944
975
|
setup_stats_wrapper() {
|
|
945
976
|
local _pulse_lower="$1"
|
|
946
977
|
# Use effective pulse state (PULSE_ENABLED) if available; fall back to consent string.
|
|
@@ -974,7 +1005,7 @@ setup_stats_wrapper() {
|
|
|
974
1005
|
<string>${_xml_stats_script}</string>
|
|
975
1006
|
</array>
|
|
976
1007
|
<key>StartInterval</key>
|
|
977
|
-
<integer>
|
|
1008
|
+
<integer>3600</integer>
|
|
978
1009
|
<key>StandardOutPath</key>
|
|
979
1010
|
<string>${_xml_stats_home}/.aidevops/logs/stats.log</string>
|
|
980
1011
|
<key>StandardErrorPath</key>
|
|
@@ -995,7 +1026,7 @@ setup_stats_wrapper() {
|
|
|
995
1026
|
PLIST
|
|
996
1027
|
)
|
|
997
1028
|
if _launchd_install_if_changed "$stats_label" "$stats_plist" "$stats_plist_content"; then
|
|
998
|
-
print_info "Stats wrapper enabled (launchd, every
|
|
1029
|
+
print_info "Stats wrapper enabled (launchd, every hour)"
|
|
999
1030
|
else
|
|
1000
1031
|
print_warning "Failed to load stats wrapper LaunchAgent"
|
|
1001
1032
|
fi
|
|
@@ -1003,12 +1034,12 @@ PLIST
|
|
|
1003
1034
|
_install_scheduler_linux \
|
|
1004
1035
|
"$stats_systemd" \
|
|
1005
1036
|
"aidevops: stats-wrapper" \
|
|
1006
|
-
"
|
|
1037
|
+
"$CRON_HOURLY" \
|
|
1007
1038
|
"\"${stats_script}\"" \
|
|
1008
|
-
"
|
|
1039
|
+
"3600" \
|
|
1009
1040
|
"$stats_log" \
|
|
1010
1041
|
"" \
|
|
1011
|
-
"Stats wrapper enabled (every
|
|
1042
|
+
"Stats wrapper enabled (every hour)" \
|
|
1012
1043
|
"Failed to install stats wrapper scheduler" \
|
|
1013
1044
|
"true" \
|
|
1014
1045
|
"false"
|
|
@@ -1503,7 +1534,7 @@ _install_cw_linux() {
|
|
|
1503
1534
|
_install_scheduler_linux \
|
|
1504
1535
|
"$cw_systemd" \
|
|
1505
1536
|
"aidevops: contribution-watch" \
|
|
1506
|
-
"
|
|
1537
|
+
"$CRON_HOURLY" \
|
|
1507
1538
|
"\"${cw_script}\" scan" \
|
|
1508
1539
|
"3600" \
|
|
1509
1540
|
"${_cw_log_dir}/contribution-watch.log" \
|
|
@@ -1670,7 +1701,7 @@ _install_profile_readme_scheduler() {
|
|
|
1670
1701
|
_install_scheduler_linux \
|
|
1671
1702
|
"$pr_systemd" \
|
|
1672
1703
|
"aidevops: profile-readme-update" \
|
|
1673
|
-
"
|
|
1704
|
+
"$CRON_HOURLY" \
|
|
1674
1705
|
"\"${pr_script}\" update" \
|
|
1675
1706
|
"3600" \
|
|
1676
1707
|
"$pr_log" \
|
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.8.
|
|
15
|
+
# Version: 3.8.95
|
|
16
16
|
#
|
|
17
17
|
# Quick Install:
|
|
18
18
|
# npm install -g aidevops && aidevops update (recommended)
|