feat(tools): auto-discover per-app <app>.tools.json (drop-in tool registration)
webui_tools.sh now merges any containers/<app>/<app>.tools.json into apps-tools.json (jq, sets .apps[<app>]) on top of the central heredoc. So a dropped-in app — e.g. from LibrePortal-Infra — registers its own Tools-tab actions WITHOUT editing this file. Combined with the container scan already sourcing containers/<app>/*.sh live, an app can now be fully self-contained (install fn + tool fns in <app>.sh + tool declarations in <app>.tools.json) → true copy-on-top deploy, no array regen, no central edits. Core apps in the heredoc are unaffected; invalid tools files are skipped with a notice. Verified the merge (drop-in registers, core preserved). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> Signed-off-by: librelad <librelad@digitalangels.vip>
This commit is contained in:
parent
1efb5cf772
commit
7bed2de2d2
@ -414,6 +414,23 @@ webuiGenerateAppsToolsConfig() {
|
||||
}
|
||||
JSON
|
||||
|
||||
# Merge per-app tool declarations so a DROPPED-IN app (e.g. from LibrePortal-Infra)
|
||||
# registers its own Tools tab actions without editing this file. Each app may ship
|
||||
# containers/<app>/<app>.tools.json = { "tools": [ … ] } (same schema as above);
|
||||
# it sets .apps[<app>]. Core apps declared in the heredoc need no such file.
|
||||
if command -v jq >/dev/null 2>&1; then
|
||||
local _tj _app
|
||||
for _tj in "${install_containers_dir}"*/*.tools.json; do
|
||||
[[ -f "$_tj" ]] || continue
|
||||
_app="$(basename "$(dirname "$_tj")")"
|
||||
if jq -e . "$_tj" >/dev/null 2>&1; then
|
||||
jq --arg app "$_app" --slurpfile t "$_tj" '.apps[$app] = $t[0]' "$tmp" > "$tmp.m" && mv "$tmp.m" "$tmp"
|
||||
else
|
||||
isNotice "Skipping invalid tools file: $_tj"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if command -v jq >/dev/null 2>&1; then
|
||||
if ! jq . "$tmp" >/dev/null 2>&1; then
|
||||
isNotice "Generated apps-tools.json failed JSON validation; keeping existing file."
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user