mirror of
https://github.com/open-jarvis/OpenJarvis.git
synced 2026-07-31 03:12:16 +00:00
init commit
This commit is contained in:
Executable
+56
@@ -0,0 +1,56 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Bump the desktop app version across all 3 config files.
|
||||
# Usage: ./scripts/bump-desktop-version.sh <semver>
|
||||
# Example: ./scripts/bump-desktop-version.sh 1.0.1
|
||||
|
||||
if [ $# -ne 1 ]; then
|
||||
echo "Usage: $0 <version>"
|
||||
echo "Example: $0 1.0.1"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
VERSION="$1"
|
||||
|
||||
# Validate semver (major.minor.patch, optional pre-release)
|
||||
if ! echo "$VERSION" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.]+)?$'; then
|
||||
echo "Error: '$VERSION' is not a valid semver (expected X.Y.Z or X.Y.Z-pre)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
DESKTOP_DIR="$(cd "$(dirname "$0")/../desktop" && pwd)"
|
||||
|
||||
# 1. package.json
|
||||
node -e "
|
||||
const fs = require('fs');
|
||||
const path = '${DESKTOP_DIR}/package.json';
|
||||
const pkg = JSON.parse(fs.readFileSync(path, 'utf8'));
|
||||
pkg.version = '${VERSION}';
|
||||
fs.writeFileSync(path, JSON.stringify(pkg, null, 2) + '\n');
|
||||
"
|
||||
echo "Updated desktop/package.json -> ${VERSION}"
|
||||
|
||||
# 2. tauri.conf.json
|
||||
node -e "
|
||||
const fs = require('fs');
|
||||
const path = '${DESKTOP_DIR}/src-tauri/tauri.conf.json';
|
||||
const conf = JSON.parse(fs.readFileSync(path, 'utf8'));
|
||||
conf.version = '${VERSION}';
|
||||
fs.writeFileSync(path, JSON.stringify(conf, null, 2) + '\n');
|
||||
"
|
||||
echo "Updated desktop/src-tauri/tauri.conf.json -> ${VERSION}"
|
||||
|
||||
# 3. Cargo.toml
|
||||
sed -i.bak "s/^version = \".*\"/version = \"${VERSION}\"/" "${DESKTOP_DIR}/src-tauri/Cargo.toml"
|
||||
rm -f "${DESKTOP_DIR}/src-tauri/Cargo.toml.bak"
|
||||
echo "Updated desktop/src-tauri/Cargo.toml -> ${VERSION}"
|
||||
|
||||
echo ""
|
||||
echo "Version bumped to ${VERSION} in all 3 files."
|
||||
echo ""
|
||||
echo "Next steps:"
|
||||
echo " git add desktop/package.json desktop/src-tauri/tauri.conf.json desktop/src-tauri/Cargo.toml"
|
||||
echo " git commit -m \"chore(desktop): bump version to ${VERSION}\""
|
||||
echo " git tag desktop-v${VERSION}"
|
||||
echo " git push origin main --tags"
|
||||
Executable
+192
@@ -0,0 +1,192 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# ── OpenJarvis Quickstart ─────────────────────────────────────────────
|
||||
# One-command setup: installs deps, starts Ollama + model, launches
|
||||
# the backend API server and frontend, then opens the browser.
|
||||
#
|
||||
# Usage:
|
||||
# git clone https://github.com/open-jarvis/OpenJarvis.git
|
||||
# cd OpenJarvis
|
||||
# ./scripts/quickstart.sh
|
||||
# ──────────────────────────────────────────────────────────────────────
|
||||
|
||||
BLUE='\033[0;34m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
RED='\033[0;31m'
|
||||
NC='\033[0m'
|
||||
BOLD='\033[1m'
|
||||
|
||||
info() { echo -e "${BLUE}[info]${NC} $*"; }
|
||||
ok() { echo -e "${GREEN}[ok]${NC} $*"; }
|
||||
warn() { echo -e "${YELLOW}[warn]${NC} $*"; }
|
||||
fail() { echo -e "${RED}[fail]${NC} $*"; exit 1; }
|
||||
|
||||
CLEANUP_PIDS=()
|
||||
cleanup() {
|
||||
echo ""
|
||||
info "Shutting down..."
|
||||
for pid in "${CLEANUP_PIDS[@]}"; do
|
||||
kill "$pid" 2>/dev/null || true
|
||||
done
|
||||
wait 2>/dev/null || true
|
||||
ok "Done."
|
||||
}
|
||||
trap cleanup EXIT INT TERM
|
||||
|
||||
# ── Navigate to repo root ────────────────────────────────────────────
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
cd "$REPO_ROOT"
|
||||
|
||||
echo -e "${BOLD}"
|
||||
echo " ┌──────────────────────────────────┐"
|
||||
echo " │ OpenJarvis Quickstart │"
|
||||
echo " └──────────────────────────────────┘"
|
||||
echo -e "${NC}"
|
||||
|
||||
# ── 1. Check Python ──────────────────────────────────────────────────
|
||||
info "Checking Python..."
|
||||
if command -v python3 &>/dev/null; then
|
||||
PY_VERSION=$(python3 -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')")
|
||||
PY_MAJOR=$(echo "$PY_VERSION" | cut -d. -f1)
|
||||
PY_MINOR=$(echo "$PY_VERSION" | cut -d. -f2)
|
||||
if [ "$PY_MAJOR" -ge 3 ] && [ "$PY_MINOR" -ge 10 ]; then
|
||||
ok "Python $PY_VERSION"
|
||||
else
|
||||
fail "Python 3.10+ required (found $PY_VERSION)"
|
||||
fi
|
||||
else
|
||||
fail "Python 3 not found. Install from https://python.org"
|
||||
fi
|
||||
|
||||
# ── 2. Check / install uv ───────────────────────────────────────────
|
||||
info "Checking uv..."
|
||||
if command -v uv &>/dev/null; then
|
||||
ok "uv $(uv --version 2>/dev/null | head -1)"
|
||||
else
|
||||
warn "uv not found — installing..."
|
||||
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
export PATH="$HOME/.local/bin:$PATH"
|
||||
ok "uv installed"
|
||||
fi
|
||||
|
||||
# ── 3. Check Node.js ────────────────────────────────────────────────
|
||||
info "Checking Node.js..."
|
||||
if command -v node &>/dev/null; then
|
||||
NODE_VERSION=$(node --version)
|
||||
NODE_MAJOR=$(echo "$NODE_VERSION" | sed 's/v//' | cut -d. -f1)
|
||||
if [ "$NODE_MAJOR" -ge 18 ]; then
|
||||
ok "Node.js $NODE_VERSION"
|
||||
else
|
||||
fail "Node.js 18+ required (found $NODE_VERSION). Install from https://nodejs.org"
|
||||
fi
|
||||
else
|
||||
fail "Node.js not found. Install from https://nodejs.org"
|
||||
fi
|
||||
|
||||
# ── 4. Check / install Ollama ────────────────────────────────────────
|
||||
info "Checking Ollama..."
|
||||
if command -v ollama &>/dev/null; then
|
||||
ok "Ollama found"
|
||||
else
|
||||
warn "Ollama not found — installing..."
|
||||
case "$(uname -s)" in
|
||||
Darwin)
|
||||
if command -v brew &>/dev/null; then
|
||||
brew install ollama
|
||||
else
|
||||
echo " Download Ollama from https://ollama.com/download"
|
||||
echo " Then re-run this script."
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
Linux)
|
||||
curl -fsSL https://ollama.com/install.sh | sh
|
||||
;;
|
||||
*)
|
||||
echo " Download Ollama from https://ollama.com/download"
|
||||
echo " Then re-run this script."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
ok "Ollama installed"
|
||||
fi
|
||||
|
||||
# ── 5. Start Ollama if not running ───────────────────────────────────
|
||||
info "Checking if Ollama is running..."
|
||||
if curl -sf http://localhost:11434/api/tags &>/dev/null; then
|
||||
ok "Ollama is running"
|
||||
else
|
||||
info "Starting Ollama..."
|
||||
ollama serve &>/dev/null &
|
||||
CLEANUP_PIDS+=($!)
|
||||
sleep 3
|
||||
if curl -sf http://localhost:11434/api/tags &>/dev/null; then
|
||||
ok "Ollama started"
|
||||
else
|
||||
fail "Could not start Ollama. Try running 'ollama serve' manually."
|
||||
fi
|
||||
fi
|
||||
|
||||
# ── 6. Pull a starter model ─────────────────────────────────────────
|
||||
MODEL="${OPENJARVIS_MODEL:-qwen3:0.6b}"
|
||||
info "Ensuring model '$MODEL' is available..."
|
||||
if ollama list 2>/dev/null | grep -q "$MODEL"; then
|
||||
ok "Model '$MODEL' already pulled"
|
||||
else
|
||||
info "Pulling '$MODEL' (this may take a minute)..."
|
||||
ollama pull "$MODEL"
|
||||
ok "Model '$MODEL' ready"
|
||||
fi
|
||||
|
||||
# ── 7. Install Python dependencies ──────────────────────────────────
|
||||
info "Installing Python dependencies..."
|
||||
uv sync --extra server --quiet 2>/dev/null || uv sync --extra server
|
||||
ok "Python dependencies installed"
|
||||
|
||||
# ── 8. Install frontend dependencies ────────────────────────────────
|
||||
info "Installing frontend dependencies..."
|
||||
(cd frontend && npm install --silent 2>/dev/null || npm install)
|
||||
ok "Frontend dependencies installed"
|
||||
|
||||
# ── 9. Start backend ────────────────────────────────────────────────
|
||||
info "Starting backend API server on port 8000..."
|
||||
uv run jarvis serve --port 8000 &>/dev/null &
|
||||
CLEANUP_PIDS+=($!)
|
||||
sleep 3
|
||||
|
||||
if curl -sf http://localhost:8000/health &>/dev/null; then
|
||||
ok "Backend running at http://localhost:8000"
|
||||
else
|
||||
warn "Backend may still be starting..."
|
||||
fi
|
||||
|
||||
# ── 10. Start frontend ──────────────────────────────────────────────
|
||||
info "Starting frontend dev server on port 5173..."
|
||||
(cd frontend && npm run dev) &>/dev/null &
|
||||
CLEANUP_PIDS+=($!)
|
||||
sleep 3
|
||||
ok "Frontend running at http://localhost:5173"
|
||||
|
||||
# ── 11. Open browser ────────────────────────────────────────────────
|
||||
URL="http://localhost:5173"
|
||||
info "Opening $URL ..."
|
||||
case "$(uname -s)" in
|
||||
Darwin) open "$URL" ;;
|
||||
Linux) xdg-open "$URL" 2>/dev/null || true ;;
|
||||
*) true ;;
|
||||
esac
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}${BOLD} OpenJarvis is running!${NC}"
|
||||
echo ""
|
||||
echo " Chat UI: http://localhost:5173"
|
||||
echo " API: http://localhost:8000"
|
||||
echo " Model: $MODEL"
|
||||
echo ""
|
||||
echo " Press Ctrl+C to stop all services."
|
||||
echo ""
|
||||
|
||||
wait
|
||||
Reference in New Issue
Block a user