0198ab6881
Attach/onboard sandbox from agents/hermes, additive OpenShell policy overlays, and nemohermes skill install for scaffold skills. No doctor/connect and no push.
138 lines
3.9 KiB
Bash
Executable File
138 lines
3.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# scripts/install.sh — Lumina staged installer
|
||
#
|
||
# Runs install stages S0b–S5.
|
||
#
|
||
# Usage:
|
||
# ./scripts/install.sh # run all implemented stages (S0b–S5)
|
||
# ./scripts/install.sh --stage s1 # run only S1
|
||
# ./scripts/install.sh --stage s3-s5 # run S3 through S5
|
||
# ./scripts/install.sh --help
|
||
#
|
||
# All stages are idempotent. Re-running is safe.
|
||
|
||
set -euo pipefail
|
||
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||
|
||
# Source shared helpers
|
||
# shellcheck source=lib/common.sh
|
||
source "$SCRIPT_DIR/lib/common.sh"
|
||
|
||
# ── Usage ──────────────────────────────────────────────────────────────────
|
||
usage() {
|
||
cat <<EOF
|
||
Usage: $(basename "$0") [OPTIONS]
|
||
|
||
Run Lumina install stages (S0b–S5 implemented).
|
||
|
||
Options:
|
||
--stage <s0b|s1|s2|s3|s4|s5|s3-s5> Run only the specified stage or range
|
||
--help Show this help
|
||
|
||
Stages:
|
||
S0b Docker install-if-missing (bootstrap)
|
||
S1 Repository environment (.env)
|
||
S2 Model + vision configuration + smoke test
|
||
S3 Stack alignment (compose documentation; no-op on attach)
|
||
S4 Sandbox verification or onboard (attach mode default)
|
||
S5 Policy overlays + skills sync
|
||
|
||
All stages are idempotent.
|
||
|
||
Examples:
|
||
$(basename "$0") # run S0b → S1 → S2 → S3 → S4 → S5
|
||
$(basename "$0") --stage s1 # run only S1 (env)
|
||
$(basename "$0") --stage s5 # run only S5 (policy + skills)
|
||
$(basename "$0") --stage s3-s5 # run S3 → S4 → S5
|
||
EOF
|
||
}
|
||
|
||
# ── Parse args ─────────────────────────────────────────────────────────────
|
||
SINGLE_STAGE=""
|
||
while [[ $# -gt 0 ]]; do
|
||
case "$1" in
|
||
--help|-h) usage; exit 0 ;;
|
||
--stage)
|
||
shift
|
||
SINGLE_STAGE="${1:-}"
|
||
if [[ -z "$SINGLE_STAGE" ]]; then
|
||
log_error "--stage requires a value"
|
||
exit 1
|
||
fi
|
||
shift
|
||
;;
|
||
*)
|
||
log_error "Unknown argument: $1"
|
||
usage
|
||
exit 1
|
||
;;
|
||
esac
|
||
done
|
||
|
||
# ── Stage runners ──────────────────────────────────────────────────────────
|
||
run_s0b() {
|
||
log_section "S0b: Docker bootstrap"
|
||
bash "$SCRIPT_DIR/bootstrap.sh"
|
||
}
|
||
|
||
run_s1() {
|
||
bash "$SCRIPT_DIR/install/s1-env.sh"
|
||
}
|
||
|
||
run_s2() {
|
||
bash "$SCRIPT_DIR/install/s2-models.sh"
|
||
}
|
||
|
||
run_s3() {
|
||
log_section "S3: Stack alignment"
|
||
log_info "OpenShell manages the Hermes sandbox container."
|
||
log_info "Product compose (deploy/compose/) is optional for local MCP/webhooks."
|
||
log_info "No action needed for UAT attach path."
|
||
}
|
||
|
||
run_s4() {
|
||
bash "$SCRIPT_DIR/install/s4-sandbox.sh"
|
||
}
|
||
|
||
run_s5() {
|
||
bash "$SCRIPT_DIR/install/s5-policy-skills.sh"
|
||
}
|
||
|
||
# ── Main ───────────────────────────────────────────────────────────────────
|
||
log_section "Lumina installer (stages S0b–S5)"
|
||
warn_if_root
|
||
|
||
if [[ -n "$SINGLE_STAGE" ]]; then
|
||
case "$SINGLE_STAGE" in
|
||
s0b) run_s0b ;;
|
||
s1) run_s1 ;;
|
||
s2) run_s2 ;;
|
||
s3) run_s3 ;;
|
||
s4) run_s4 ;;
|
||
s5) run_s5 ;;
|
||
s3-s5) run_s3; run_s4; run_s5 ;;
|
||
*)
|
||
log_error "Unknown stage: $SINGLE_STAGE"
|
||
log_error "Valid stages: s0b, s1, s2, s3, s4, s5, s3-s5"
|
||
exit 1
|
||
;;
|
||
esac
|
||
else
|
||
# Run all implemented stages in order
|
||
run_s0b
|
||
run_s1
|
||
run_s2
|
||
run_s3
|
||
run_s4
|
||
run_s5
|
||
fi
|
||
|
||
log_section "Install complete (S0b–S5)"
|
||
log_info "Next steps:"
|
||
log_info " - Review .env for correctness"
|
||
log_info " - Verify policy: nemohermes $(get_sandbox_name) policy-list"
|
||
log_info " - Continue with S6 (doctor) when implemented"
|
||
log_info " - See docs/INSTALL.md for full procedure"
|