refactor(brain-install): filter plugins by target ENUM in install-plugins.sh
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) <noreply@anthropic.com>
This commit is contained in:
+5
-1
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user