Adds a manifest-driven "Install CircuitForge Apps" menu to install.sh, alongside the existing extras-menu pattern. - cf-apps/*.manifest: one file per product (circuitforge-core, peregrine, kiwi, snipe, turnstone, pagepiper, linnet - the beta/alpha menagerie products), declaring repo URLs, supported install types, conda env, .env template, and per-install-type setup hooks. Hooks prefer shelling out to each product's own install.sh/Makefile/docker-compose rather than reimplementing their setup logic. - lib/cf-apps.functions: registry loader, provisioning-profile prompt (oem/collaborator/orchard), app multiselect menu, and the install dispatcher (clone, .env bootstrap, install-type selection, hook dispatch). circuitforge-core installs automatically as a dependency for apps that declare app_needs_core=true. Provisioning profiles gate both which apps are offered and which remote credentials are used: - oem: public CircuitForgeLLC GitHub mirrors only, no Forgejo access, no circuitforge-orch (product install menu only) - collaborator: private Circuit-Forge Forgejo, same product menu - orchard: narrow flow, not the product menu - clones circuitforge-orch (Forgejo-only, no public mirror exists) and hands off interactively to its own install.sh, which gathers agent/coordinator topology itself (it has no --topology/--coordinator-url flags to script around). NOTE: circuitforge-orch has no model-sync/cache-sync mechanism today (checked its install.sh and README); this wrapper doesn't invent one. Design rationale and survey of each product's real install story: circuitforge-plans/cf-node-bootstrap/superpowers/plans/2026-07-17-cf-apps-install-menu.md
32 lines
1.5 KiB
Text
32 lines
1.5 KiB
Text
app_name="kiwi"
|
|
app_desc="Pantry tracker + leftover recipe suggestions (beta)"
|
|
app_repo_url_github="https://github.com/CircuitForgeLLC/kiwi.git"
|
|
app_repo_url_forgejo="https://git.opensourcesolarpunk.com/Circuit-Forge/kiwi.git"
|
|
app_available_profiles=(oem collaborator)
|
|
app_install_types=(docker bare-metal)
|
|
app_conda_env="kiwi"
|
|
app_env_template=".env.example"
|
|
app_needs_core=true
|
|
|
|
# kiwi has a single Dockerfile (no compose), listening on 8512. No
|
|
# persistent-storage volume is assumed here since that isn't documented;
|
|
# follow up manually if kiwi needs one for your data to survive a restart.
|
|
app_setup_docker() {
|
|
local dir="$1"
|
|
boxline "Building and running ${app_name} (port 8512)..."
|
|
(cd "$dir" && docker build -t "${app_name}" .)
|
|
(cd "$dir" && docker run -d --name "${app_name}" --env-file .env -p 8512:8512 "${app_name}")
|
|
}
|
|
|
|
# kiwi's bare-metal path is documented (docs/getting-started/installation.md,
|
|
# llm-setup.md - BYOK: Ollama/vLLM/OpenAI/Anthropic) but not scripted end to
|
|
# end. This creates the conda env from environment.yml; point the user at
|
|
# the docs for the LLM backend choice rather than guessing one.
|
|
app_setup_bare_metal() {
|
|
local dir="$1"
|
|
run "conda env create -f \"${dir}/environment.yml\" -n \"${app_conda_env}\""
|
|
if [[ $dry_run != true ]]; then
|
|
conda env create -f "${dir}/environment.yml" -n "${app_conda_env}"
|
|
fi
|
|
boxline "${app_name}: conda env '${app_conda_env}' created. See docs/getting-started/installation.md and llm-setup.md for the remaining BYOK LLM backend setup (Ollama/vLLM/OpenAI/Anthropic)."
|
|
}
|