Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions .cursor/environment.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"name": "JARVIS / Friday Voice Assistant",
"user": "ubuntu",
"install": "bash .cursor/install.sh",
"terminals": [
Comment on lines +1 to +5
{
"name": "backend",
"command": "source .venv/bin/activate && python server.py --port 8340",
"description": "FastAPI + WebSocket voice server (HTTPS on port 8340, uses cert.pem/key.pem)."
},
{
"name": "frontend",
"command": "cd frontend && npm run dev -- --host",
"description": "Vite dev server for the Three.js orb UI on port 5173; proxies /api and /ws to the backend."
}
],
"ports": [
{ "name": "frontend", "port": 5173 },
{ "name": "backend", "port": 8340 }
]
}
56 changes: 56 additions & 0 deletions .cursor/install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
#!/usr/bin/env bash
#
# Idempotent install script for the JARVIS / Friday voice assistant.
# Prepares the Python backend, the Vite/Three.js frontend, Playwright's
# Chromium (used by the web-browsing / research actions), and local TLS
# certificates for the HTTPS backend + secure WebSocket.
#
# NOTE: The macOS AppleScript integrations (Calendar, Mail, Notes, Terminal)
# only run on macOS. On a Linux Cloud Agent the backend and frontend run and
# the full voice-loop transport works; those macOS features degrade gracefully.
set -euo pipefail

# Always operate from the repository root (parent of the .cursor directory).
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$REPO_ROOT"

# ---------------------------------------------------------------------------
# System package: the default image's python3 lacks the venv/ensurepip module.
# ---------------------------------------------------------------------------
if ! python3 -c "import ensurepip" >/dev/null 2>&1; then
sudo apt-get update -qq
sudo apt-get install -y -qq python3-venv
fi
Comment on lines +20 to +23

# ---------------------------------------------------------------------------
# Python backend dependencies (isolated in a virtualenv; .venv is gitignored).
# pytest / pytest-asyncio are required to run the repo's test suite.
# ---------------------------------------------------------------------------
if [ ! -x .venv/bin/python ]; then
python3 -m venv .venv
fi
# shellcheck disable=SC1091
source .venv/bin/activate
python -m pip install --upgrade pip
pip install -r requirements.txt pytest pytest-asyncio

# ---------------------------------------------------------------------------
# Playwright Chromium (+ system deps) for browser.py web browsing / research.
# ---------------------------------------------------------------------------
playwright install --with-deps chromium

# ---------------------------------------------------------------------------
# Frontend dependencies.
# ---------------------------------------------------------------------------
( cd frontend && npm ci )

# ---------------------------------------------------------------------------
# Local TLS certificates for the HTTPS backend and secure WebSocket.
# Generated once; both files are gitignored.
# ---------------------------------------------------------------------------
if [ ! -f cert.pem ] || [ ! -f key.pem ]; then
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem \
-days 365 -nodes -subj '/CN=localhost'
fi

echo "JARVIS environment ready."
34 changes: 34 additions & 0 deletions .github/workflows/python-package-conda.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: Python Package using Conda

on: [push]

jobs:
build-linux:
runs-on: ubuntu-latest
strategy:
max-parallel: 5

steps:
- uses: actions/checkout@v4
- name: Set up Python 3.10
uses: actions/setup-python@v3
with:
python-version: '3.10'
- name: Add conda to system path
run: |
# $CONDA is an environment variable pointing to the root of the miniconda directory
echo $CONDA/bin >> $GITHUB_PATH
- name: Install dependencies
run: |
conda env update --file environment.yml --name base
- name: Lint with flake8
run: |
conda install flake8
# stop the build if there are Python syntax errors or undefined names
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
- name: Test with pytest
run: |
conda install pytest
pytest
Comment on lines +11 to +34
151 changes: 151 additions & 0 deletions .snapshots/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
{
"excluded_patterns": [
".git",
".gitignore",
"gradle",
"gradlew",
"gradlew.*",
"node_modules",
".snapshots",
".idea",
".vscode",
"*.log",
"*.tmp",
"target",
"dist",
"build",
".DS_Store",
"*.bak",
"*.swp",
"*.swo",
"*.lock",
"*.iml",
"coverage",
"*.min.js",
"*.min.css",
"__pycache__",
".marketing",
".env",
".env.*",
"*.jpg",
"*.jpeg",
"*.png",
"*.gif",
"*.bmp",
"*.tiff",
"*.ico",
"*.svg",
"*.webp",
"*.psd",
"*.ai",
"*.eps",
"*.indd",
"*.raw",
"*.cr2",
"*.nef",
"*.mp4",
"*.mov",
"*.avi",
"*.wmv",
"*.flv",
"*.mkv",
"*.webm",
"*.m4v",
"*.wfp",
"*.prproj",
"*.aep",
"*.psb",
"*.xcf",
"*.sketch",
"*.fig",
"*.xd",
"*.db",
"*.sqlite",
"*.sqlite3",
"*.mdb",
"*.accdb",
"*.frm",
"*.myd",
"*.myi",
"*.ibd",
"*.dbf",
"*.rdb",
"*.aof",
"*.pdb",
"*.sdb",
"*.s3db",
"*.ddb",
"*.db-shm",
"*.db-wal",
"*.sqlitedb",
"*.sql.gz",
"*.bak.sql",
"dump.sql",
"dump.rdb",
"*.vsix",
"*.jar",
"*.war",
"*.ear",
"*.zip",
"*.tar",
"*.tar.gz",
"*.tgz",
"*.rar",
"*.7z",
"*.exe",
"*.dll",
"*.so",
"*.dylib",
"*.app",
"*.dmg",
"*.iso",
"*.msi",
"*.deb",
"*.rpm",
"*.apk",
"*.aab",
"*.ipa",
"*.pkg",
"*.nupkg",
"*.snap",
"*.whl",
"*.gem",
"*.pyc",
"*.pyo",
"*.pyd",
"*.class",
"*.o",
"*.obj",
"*.lib",
"*.a",
"*.map",
".npmrc"
],
"default": {
"default_prompt": "Enter your prompt here",
"default_include_all_files": false,
"default_include_entire_project_structure": true
},
"included_patterns": [
"build.gradle",
"settings.gradle",
"gradle.properties",
"pom.xml",
"Makefile",
"CMakeLists.txt",
"package.json",
"requirements.txt",
"Pipfile",
"Gemfile",
"composer.json",
".editorconfig",
".eslintrc.json",
".eslintrc.js",
".prettierrc",
".babelrc",
".dockerignore",
".gitattributes",
".stylelintrc",
".npmrc"
Comment on lines +118 to +149
]
}