From dc71e2338e33ac726bc5b6c3bfc5b71367cfa80e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Mon, 11 May 2026 15:00:39 +0300 Subject: [PATCH] refactor(brain-install): filter plugins by target ENUM in install-plugins.sh MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes тех-долг из routing.md v1.1 §4.1 — install-plugins.sh теперь фильтрует entries по полю `target` относительно режима install'а. Added флаг `--install-target=user|consumer` (required, с fallback на 'user' + warning для backwards-compat прямых вызовов из тестов). Filter jq-выражение: user: target ∈ {"user-level", "user-level+consumer"} consumer: target ∈ {"consumer", "user-level+consumer"} scripts/install.sh теперь передаёт --install-target автоматически на основе detected $mode (user|project). Regression: текущие 8 entries → 8 plugins при --install-target=user, 2 plugins (FD + UPM, target=user-level+consumer) при --install-target=consumer. Подготовка под Phase 1: добавление 4 consumer-only entries (target=consumer) и 1 user-level+consumer entry (context7) в plugins-manifest.json — filter обеспечит, что в brain user-level попадут только нужные. Co-Authored-By: Claude Opus 4.7 (1M context) --- scripts/install.sh | 6 +++++- scripts/lib/install-plugins.sh | 27 +++++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/scripts/install.sh b/scripts/install.sh index c726213..8da7768 100644 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -144,9 +144,13 @@ elif [ "$mode" = "user" ]; then # Plugins if [ "$with_plugins" = "yes" ]; then if [ -f "$src/marketplaces.json" ] && [ -f "$src/plugins-manifest.json" ]; then + # Map mode (user|project) to install-target (user|consumer) + plugin_target="user" + [ "$mode" = "project" ] && plugin_target="consumer" bash "$SCRIPT_DIR/lib/install-plugins.sh" \ --marketplaces="$src/marketplaces.json" \ - --manifest="$src/plugins-manifest.json" || exit 6 + --manifest="$src/plugins-manifest.json" \ + --install-target="$plugin_target" || exit 6 fi fi fi diff --git a/scripts/lib/install-plugins.sh b/scripts/lib/install-plugins.sh index df8866b..07b1829 100644 --- a/scripts/lib/install-plugins.sh +++ b/scripts/lib/install-plugins.sh @@ -18,16 +18,30 @@ source "$SCRIPT_DIR/common.sh" marketplaces="" manifest="" +install_target="" while [ $# -gt 0 ]; do case "$1" in --marketplaces=*) marketplaces="${1#--marketplaces=}" ;; --manifest=*) manifest="${1#--manifest=}" ;; + --install-target=*) install_target="${1#--install-target=}" ;; *) log_error "Unknown arg: $1"; exit 1 ;; esac shift done +# Backwards-compat: если флаг не передан, default 'user' с warning +if [ -z "$install_target" ]; then + log_warn "--install-target not specified, defaulting to 'user' (deprecated path)" + install_target="user" +fi + +# Validate +case "$install_target" in + user|consumer) ;; + *) log_error "--install-target must be 'user' or 'consumer', got: $install_target"; exit 1 ;; +esac + [ -f "$marketplaces" ] || { log_error "Marketplaces file: $marketplaces not found"; exit 1; } [ -f "$manifest" ] || { log_error "Manifest file: $manifest not found"; exit 1; } @@ -57,8 +71,17 @@ for mp in $(jq -r 'keys[]' "$marketplaces"); do fi done -# Install plugins -for plugin in $(jq -r '.plugins | keys[]' "$manifest"); do +# Install plugins (filtered by target ENUM per --install-target) +case "$install_target" in + user) + filter='.plugins | to_entries[] | select(.value[0].target == "user-level" or .value[0].target == "user-level+consumer") | .key' + ;; + consumer) + filter='.plugins | to_entries[] | select(.value[0].target == "consumer" or .value[0].target == "user-level+consumer") | .key' + ;; +esac + +for plugin in $(jq -r "$filter" "$manifest"); do expected_sha=$(jq -r ".plugins[\"$plugin\"][0].gitCommitSha" "$manifest") expected_ver=$(jq -r ".plugins[\"$plugin\"][0].version" "$manifest")