Backend - dev-api.py: Q&A suggest endpoint, Log Contact, cf-orch node detection in wizard hardware step, canonical search_profiles format (profiles:[...]), connections settings endpoints, Resume Library endpoints - db_migrate.py: migrations 002/003/004 — ATS columns, resume review, final resume struct - discover.py: _normalize_profiles() for legacy wizard YAML format compat - resume_optimizer.py: section-by-section resume parsing + scoring - task_runner.py: Q&A and contact-log task types - company_research.py: accessibility brief column wiring - generate_cover_letter.py: restore _candidate module-level binding Frontend - InterviewPrepView.vue: Q&A chat tab, Log Contact form, MarkdownView rendering - InterviewCard.vue: new reusable card component for interviews kanban - InterviewsView.vue: rejected analytics section with stage breakdown chips - ResumeProfileView.vue: sync with new resume store shape - SearchPrefsView.vue: cf-orch toggle, profile format migration - SystemSettingsView.vue: connections settings wiring - ConnectionsSettingsView.vue: new view for integration connections - MarkdownView.vue: new component for safe markdown rendering - ApplyWorkspace.vue: a11y — h1→h2 demotion, aria-expanded on Q&A toggle, confirmation dialog on Reject action (#98 #99 #100) - peregrine.css: explicit [data-theme="dark"] token block for light-OS users (#101), :focus-visible outline (#97) - wizard.css: cf-orch hardware step styles - WizardHardwareStep.vue: cf-orch node display, profile selection with orch option - WizardLayout.vue: hardware step wiring Infra - compose.yml / compose.cloud.yml: cf-orch agent sidecar, llm.cloud.yaml mount - Dockerfile.cfcore: cf-core editable install in image build - HANDOFF-xanderland.md: Podman/systemd setup guide for beta tester - podman-standalone.sh: standalone Podman run script Tests - test_dev_api_settings.py: remove stale worktree path bootstrap (credential_store now in main repo); fix job_boards fixture to use non-empty list - test_wizard_api.py: update profiles assertion to superset check (cf-orch added); update step6 assertion to canonical profiles[].titles format
92 lines
4.3 KiB
Bash
Executable file
92 lines
4.3 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# podman-standalone.sh — Peregrine rootful Podman setup (no Compose)
|
|
#
|
|
# For beta testers running system Podman (non-rootless) with systemd.
|
|
# Mirrors the manage.sh "remote" profile: app + SearXNG only.
|
|
# Ollama/vLLM/vision are expected as host services if needed.
|
|
#
|
|
# ── Prerequisites ────────────────────────────────────────────────────────────
|
|
# 1. Clone the repo:
|
|
# sudo git clone <repo-url> /opt/peregrine
|
|
#
|
|
# 2. Build the app image:
|
|
# cd /opt/peregrine && sudo podman build -t localhost/peregrine:latest .
|
|
#
|
|
# 3. Create a config directory and copy the example configs:
|
|
# sudo mkdir -p /opt/peregrine/{config,data}
|
|
# sudo cp /opt/peregrine/config/*.example /opt/peregrine/config/
|
|
# # Edit /opt/peregrine/config/llm.yaml, notion.yaml, etc. as needed
|
|
#
|
|
# 4. Run this script:
|
|
# sudo bash /opt/peregrine/podman-standalone.sh
|
|
#
|
|
# ── After setup — generate systemd unit files ────────────────────────────────
|
|
# sudo podman generate systemd --new --name peregrine-searxng \
|
|
# | sudo tee /etc/systemd/system/peregrine-searxng.service
|
|
# sudo podman generate systemd --new --name peregrine \
|
|
# | sudo tee /etc/systemd/system/peregrine.service
|
|
# sudo systemctl daemon-reload
|
|
# sudo systemctl enable --now peregrine-searxng peregrine
|
|
#
|
|
# ── SearXNG ──────────────────────────────────────────────────────────────────
|
|
# Peregrine expects a SearXNG instance with JSON format enabled.
|
|
# If you already run one, skip the SearXNG container and set the URL in
|
|
# config/llm.yaml (searxng_url key). The default is http://localhost:8888.
|
|
#
|
|
# ── Ports ────────────────────────────────────────────────────────────────────
|
|
# Peregrine UI → http://localhost:8501
|
|
#
|
|
# ── To use a different Streamlit port ────────────────────────────────────────
|
|
# Uncomment the CMD override at the bottom of the peregrine run block and
|
|
# set PORT= to your desired port. The Dockerfile default is 8501.
|
|
#
|
|
set -euo pipefail
|
|
|
|
REPO_DIR=/opt/peregrine
|
|
DATA_DIR=/opt/peregrine/data
|
|
DOCS_DIR=/Library/Documents/JobSearch # ← adjust to your docs path
|
|
TZ=America/Los_Angeles
|
|
|
|
# ── Peregrine App ─────────────────────────────────────────────────────────────
|
|
# Image is built locally — no registry auto-update label.
|
|
# To update: sudo podman build -t localhost/peregrine:latest /opt/peregrine
|
|
# sudo podman restart peregrine
|
|
#
|
|
# Env vars: ANTHROPIC_API_KEY, OPENAI_COMPAT_URL, OPENAI_COMPAT_KEY are
|
|
# optional — only needed if you're using those backends in config/llm.yaml.
|
|
#
|
|
sudo podman run -d \
|
|
--name=peregrine \
|
|
--restart=unless-stopped \
|
|
--net=host \
|
|
-v ${REPO_DIR}/config:/app/config:Z \
|
|
-v ${DATA_DIR}:/app/data:Z \
|
|
-v ${DOCS_DIR}:/docs:z \
|
|
-e STAGING_DB=/app/data/staging.db \
|
|
-e DOCS_DIR=/docs \
|
|
-e PYTHONUNBUFFERED=1 \
|
|
-e PYTHONLOGGING=WARNING \
|
|
-e TZ=${TZ} \
|
|
--health-cmd="curl -f http://localhost:8501/_stcore/health || exit 1" \
|
|
--health-interval=30s \
|
|
--health-timeout=10s \
|
|
--health-start-period=60s \
|
|
--health-retries=3 \
|
|
localhost/peregrine:latest
|
|
# To override the default port (8501), uncomment and edit the line below,
|
|
# then remove the image name above and place it at the end of the CMD:
|
|
# streamlit run app/app.py --server.port=8501 --server.headless=true --server.fileWatcherType=none
|
|
|
|
echo ""
|
|
echo "Peregrine is starting up."
|
|
echo " App: http://localhost:8501"
|
|
echo ""
|
|
echo "Check container health with:"
|
|
echo " sudo podman ps"
|
|
echo " sudo podman logs peregrine"
|
|
echo ""
|
|
echo "To register as a systemd service:"
|
|
echo " sudo podman generate systemd --new --name peregrine \\"
|
|
echo " | sudo tee /etc/systemd/system/peregrine.service"
|
|
echo " sudo systemctl daemon-reload"
|
|
echo " sudo systemctl enable --now peregrine"
|