Initial commit: AI overnight web app builder setup
This commit is contained in:
79
run-ai.sh
Executable file
79
run-ai.sh
Executable file
@ -0,0 +1,79 @@
|
||||
#!/bin/bash
|
||||
|
||||
# AI Overnight Web App Builder - Runner Script
|
||||
# Called by cron hourly during nighttime
|
||||
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
LOCK_FILE="$SCRIPT_DIR/.ai-builder.lock"
|
||||
LOG_FILE="$SCRIPT_DIR/ai-builder.log"
|
||||
|
||||
# Check if another instance is already running
|
||||
if [ -f "$LOCK_FILE" ]; then
|
||||
PID=$(cat "$LOCK_FILE")
|
||||
if kill -0 "$PID" 2>/dev/null; then
|
||||
echo "$(date): Another instance is running (PID $PID). Exiting." >> "$LOG_FILE"
|
||||
exit 0
|
||||
else
|
||||
echo "$(date): Stale lock file found (PID $PID). Removing." >> "$LOG_FILE"
|
||||
rm -f "$LOCK_FILE"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Acquire lock
|
||||
echo $$ > "$LOCK_FILE"
|
||||
trap 'rm -f "$LOCK_FILE"' EXIT
|
||||
|
||||
echo "$(date): Starting AI build session..." >> "$LOG_FILE"
|
||||
|
||||
# Read current context from worklog
|
||||
WORKLOG="$SCRIPT_DIR/WORKLOG.md"
|
||||
INSTRUCTIONS="$SCRIPT_DIR/ai-instructions.md"
|
||||
|
||||
if [ ! -f "$WORKLOG" ]; then
|
||||
echo "$(date): ERROR: WORKLOG.md not found" >> "$LOG_FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "$INSTRUCTIONS" ]; then
|
||||
echo "$(date): ERROR: ai-instructions.md not found" >> "$LOG_FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Build the task prompt for opencode
|
||||
TASK_PROMPT="You are an AI building a web application incrementally.
|
||||
|
||||
Read the following instructions first:
|
||||
$(cat "$INSTRUCTIONS")
|
||||
|
||||
---
|
||||
|
||||
Current worklog state:
|
||||
$(cat "$WORKLOG")
|
||||
|
||||
---
|
||||
|
||||
Your task: Continue building the web application. Read the current state from WORKLOG.md, make meaningful progress on the next item(s), then update WORKLOG.md with what you accomplished and what should happen next. Make a git commit with descriptive message."
|
||||
|
||||
# Run opencode with the task
|
||||
cd "$SCRIPT_DIR"
|
||||
opencode --prompt "$TASK_PROMPT" 2>&1 | tee -a "$LOG_FILE"
|
||||
EXIT_CODE=${PIPESTATUS[0]}
|
||||
|
||||
if [ $EXIT_CODE -eq 0 ]; then
|
||||
echo "$(date): AI build session completed successfully" >> "$LOG_FILE"
|
||||
|
||||
# Check if there are changes to commit
|
||||
if git diff --quiet && git diff --cached --quiet; then
|
||||
echo "$(date): No changes to commit" >> "$LOG_FILE"
|
||||
else
|
||||
git add -A
|
||||
git commit -m "AI: $(date '+%Y-%m-%d %H:%M') - incremental progress" >> "$LOG_FILE" 2>&1 || true
|
||||
echo "$(date): Changes committed" >> "$LOG_FILE"
|
||||
fi
|
||||
else
|
||||
echo "$(date): AI build session failed with exit code $EXIT_CODE" >> "$LOG_FILE"
|
||||
fi
|
||||
|
||||
echo "$(date): Session finished" >> "$LOG_FILE"
|
||||
Reference in New Issue
Block a user