fix(install): make install.sh idempotent + add onboard-project.sh
- install.sh: no longer exits early when ~/.automaton exists. Skips the clone but runs all setup (VRAM detection, guards, self-improvement loop, virtualenv). Both curl|bash and git-clone + ./install.sh now work correctly. - onboard-project.sh: new script that bootstraps automaton in a project — creates .automaton/ skeleton, detects models, writes config.md, inits git, installs hooks, adds .gitignore entries. - README.md: fix install flow docs (curl|bash + clone-then-run), add onboard-project.sh as Option A for project setup
This commit is contained in:
+34
-28
@@ -3,27 +3,39 @@ set -e
|
||||
|
||||
FRAMEWORK_DIR="$HOME/.automaton"
|
||||
|
||||
if [ -d "$FRAMEWORK_DIR" ]; then
|
||||
echo "automaton already installed at $FRAMEWORK_DIR"
|
||||
echo "Run './update.sh' to update."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
GIT_URL="${1:-}"
|
||||
if [ -z "$GIT_URL" ]; then
|
||||
echo "ERROR: Git URL required."
|
||||
echo "Usage: ./install.sh <git-url>"
|
||||
echo "Example: ./install.sh https://github.com/user/automaton.git"
|
||||
|
||||
if [ ! -d "$FRAMEWORK_DIR" ]; then
|
||||
# Fresh install — need a Git URL to clone
|
||||
if [ -z "$GIT_URL" ]; then
|
||||
echo "ERROR: Git URL required for fresh install."
|
||||
echo ""
|
||||
echo "Usage:"
|
||||
echo " curl -fsSL https://raw.githubusercontent.com/<user>/automaton/main/scripts/install.sh | bash -s -- <git-url>"
|
||||
echo ""
|
||||
echo " --- or ---"
|
||||
echo ""
|
||||
echo " git clone <git-url> ~/.automaton"
|
||||
echo " bash ~/.automaton/scripts/install.sh"
|
||||
echo ""
|
||||
echo "The framework is cloned to ~/.automaton. Choose your URL carefully"
|
||||
echo "as it cannot be changed later without reinstalling."
|
||||
exit 1
|
||||
fi
|
||||
echo "Cloning automaton from $GIT_URL to $FRAMEWORK_DIR..."
|
||||
git clone "$GIT_URL" "$FRAMEWORK_DIR"
|
||||
echo ""
|
||||
else
|
||||
echo "automaton already installed at $FRAMEWORK_DIR — running setup steps..."
|
||||
if [ -n "$GIT_URL" ]; then
|
||||
echo "Note: Git URL argument ignored because ~/.automaton already exists."
|
||||
echo "To update, run: cd ~/.automaton && ./update.sh"
|
||||
fi
|
||||
echo ""
|
||||
echo "The framework is cloned to ~/.automaton. Choose your URL carefully"
|
||||
echo "as it cannot be changed later without reinstalling."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Cloning automaton from $GIT_URL to $FRAMEWORK_DIR..."
|
||||
git clone "$GIT_URL" "$FRAMEWORK_DIR"
|
||||
# --- Everything below is idempotent and runs on both fresh and existing installs ---
|
||||
|
||||
echo ""
|
||||
echo "=== VRAM / Context Detection ==="
|
||||
echo "Detecting your system's VRAM to recommend task decomposition settings..."
|
||||
echo ""
|
||||
@@ -31,7 +43,7 @@ echo ""
|
||||
# Run VRAM detection script if it exists
|
||||
if [ -f "$FRAMEWORK_DIR/scripts/vram_detect.py" ]; then
|
||||
# Run in project-dir context so it can read framework overhead
|
||||
detection_output=$(cd "$FRAMEWORK_DIR" && python3 "$FRAMEWORK_DIR/scripts/vram_detect.py" 2>&1)
|
||||
detection_output=$(cd "$FRAMEWORK_DIR" && python3 "$FRAMEWORK_DIR/scripts/vram_detect.py" 2>&1 || true)
|
||||
|
||||
# Extract JSON output (the block after "=== JSON Output ===")
|
||||
json_output=$(echo "$detection_output" | sed -n '/=== JSON Output ===/,$p' | tail -n +2)
|
||||
@@ -40,12 +52,9 @@ if [ -f "$FRAMEWORK_DIR/scripts/vram_detect.py" ]; then
|
||||
echo "$detection_output"
|
||||
|
||||
# Extract key values from JSON using Python
|
||||
recommended_k=$(echo "$json_output" | python3 -c 'import json,sys; print(json.load(sys.stdin)["recommended_k"])')
|
||||
max_peak_kb=$(echo "$json_output" | python3 -c 'import json,sys; print(json.load(sys.stdin)["max_peak_context_kb"])')
|
||||
headroom=$(echo "$json_output" | python3 -c 'import json,sys; print(json.load(sys.stdin)["headroom"])')
|
||||
gpu_vram=$(echo "$json_output" | python3 -c 'import json,sys; print(json.load(sys.stdin)["gpu_vram_gb"])')
|
||||
ram_gb=$(echo "$json_output" | python3 -c 'import json,sys; print(json.load(sys.stdin)["ram_gb"])')
|
||||
model_context=$(echo "$json_output" | python3 -c 'import json,sys; print(json.load(sys.stdin)["model_context_kb"])')
|
||||
recommended_k=$(echo "$json_output" | python3 -c 'import json,sys; print(json.load(sys.stdin)["recommended_k"])' 2>/dev/null || echo "?")
|
||||
max_peak_kb=$(echo "$json_output" | python3 -c 'import json,sys; print(json.load(sys.stdin)["max_peak_context_kb"])' 2>/dev/null || echo "?")
|
||||
headroom=$(echo "$json_output" | python3 -c 'import json,sys; print(json.load(sys.stdin)["headroom"])' 2>/dev/null || echo "?")
|
||||
|
||||
echo ""
|
||||
echo "=== Recommended VRAM Configuration ==="
|
||||
@@ -72,11 +81,8 @@ echo ""
|
||||
echo "Installation complete."
|
||||
echo ""
|
||||
echo "Next steps:"
|
||||
echo " 1. cd into a project and run the onboarding prompt"
|
||||
echo " 2. In each project that uses git, install the automaton hooks:"
|
||||
echo " bash ~/.automaton/scripts/install-hooks.sh /path/to/project"
|
||||
echo ""
|
||||
echo "These hooks block commits and pushes when no task is in an edit-allowed phase."
|
||||
echo " 1. Onboard a project: bash ~/.automaton/scripts/onboard-project.sh /path/to/project"
|
||||
echo " 2. Or tell your agent: 'Onboard this project into automaton'"
|
||||
echo ""
|
||||
|
||||
# Register pre-edit guards for detected harnesses
|
||||
|
||||
Reference in New Issue
Block a user