From 493f765538e2e66980302acae07e9ccc87588088 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 6 Jan 2026 04:36:18 +0000 Subject: [PATCH 01/16] Initial plan From c2a2e1fc861a7093d19bf448f1db59d56d16bb85 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 6 Jan 2026 04:42:36 +0000 Subject: [PATCH 02/16] Add MCP configuration, dev environment, and enhance Copilot instructions Co-authored-by: d-morrison <2474437+d-morrison@users.noreply.github.com> --- .Rbuildignore | 2 + .devcontainer/README.md | 155 ++++++++++++++++++++++++++++++ .devcontainer/devcontainer.json | 55 +++++++++++ .devcontainer/setup.sh | 63 ++++++++++++ .github/copilot-instructions.md | 62 ++++++++++++ .github/mcp/README.md | 117 +++++++++++++++++++++++ .github/mcp/mcp-config.json | 60 ++++++++++++ .vscode/extensions.json | 18 ++++ .vscode/settings.json | 103 ++++++++++++++++++++ .vscode/tasks.json | 164 ++++++++++++++++++++++++++++++++ 10 files changed, 799 insertions(+) create mode 100644 .devcontainer/README.md create mode 100644 .devcontainer/devcontainer.json create mode 100755 .devcontainer/setup.sh create mode 100644 .github/mcp/README.md create mode 100644 .github/mcp/mcp-config.json create mode 100644 .vscode/extensions.json create mode 100644 .vscode/settings.json create mode 100644 .vscode/tasks.json diff --git a/.Rbuildignore b/.Rbuildignore index 9c3b8ba1..1839a28a 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -28,3 +28,5 @@ ^_quarto\.yml$ ^\.quarto$ +^\.vscode$ +^\.devcontainer$ diff --git a/.devcontainer/README.md b/.devcontainer/README.md new file mode 100644 index 00000000..b50b546e --- /dev/null +++ b/.devcontainer/README.md @@ -0,0 +1,155 @@ +# Development Container Configuration + +This directory contains the configuration for a containerized development environment for the serodynamics R package. + +## What is a Dev Container? + +Dev Containers allow you to use a Docker container as a full-featured development environment. This ensures that all developers work in a consistent environment with the same dependencies, tools, and configurations. + +## Features + +The serodynamics dev container includes: + +- **R Environment**: Based on `rocker/tidyverse:latest` with R and tidyverse packages +- **JAGS**: Pre-installed JAGS 4.3.1 for Bayesian MCMC modeling +- **System Dependencies**: All required system libraries for R package development +- **R Development Tools**: devtools, roxygen2, testthat, lintr, spelling, covr +- **Quarto**: For rendering vignettes and documentation +- **VS Code Extensions**: R debugger, language support, GitHub Copilot, and more +- **Git & GitHub CLI**: For version control and GitHub integration +- **Node.js**: For MCP server support + +## Quick Start + +### Prerequisites + +1. **Docker Desktop**: Install from https://www.docker.com/products/docker-desktop +2. **VS Code**: Install from https://code.visualstudio.com/ +3. **Dev Containers Extension**: Install from VS Code marketplace + +### Opening the Dev Container + +1. Open the serodynamics repository in VS Code +2. Press `F1` or `Ctrl+Shift+P` (Cmd+Shift+P on macOS) +3. Select "Dev Containers: Reopen in Container" +4. Wait for the container to build (first time may take 5-10 minutes) +5. Once ready, you'll have a fully configured development environment + +### Using the Dev Container + +After opening in the container: + +```r +# Load the package in development mode +devtools::load_all() + +# Run tests +devtools::test() + +# Check the package +devtools::check() + +# Generate documentation +devtools::document() + +# Lint the code +lintr::lint_package() +``` + +You can also use VS Code tasks (Ctrl+Shift+P -> "Tasks: Run Task") to run common operations. + +## Container Configuration + +### devcontainer.json + +The main configuration file that defines: +- Base Docker image +- VS Code extensions to install +- VS Code settings +- Port forwarding (8787 for RStudio Server) +- Environment variables +- Post-create commands + +### setup.sh + +Runs after the container is created to: +- Install JAGS +- Install system dependencies +- Install Quarto +- Install R development packages +- Install package dependencies +- Verify JAGS installation + +## RStudio Server Access + +The container includes RStudio Server running on port 8787. To access it: + +1. After the container starts, open http://localhost:8787 in your browser +2. Login with: + - Username: `rstudio` + - Password: `rstudio` (default) + +## Customization + +### Adding R Packages + +Edit `setup.sh` to add more R packages to the base installation. + +### Adding VS Code Extensions + +Edit the `extensions` array in `devcontainer.json`. + +### Adding System Dependencies + +Edit the `apt-get install` command in `setup.sh`. + +## Troubleshooting + +### Container fails to build + +1. Ensure Docker Desktop is running +2. Check that you have sufficient disk space (container is ~2-3 GB) +3. Try rebuilding: "Dev Containers: Rebuild Container" + +### JAGS not found + +The setup script should install JAGS automatically. If it fails: + +1. Rebuild the container +2. Check the setup.sh logs for errors +3. Manually install JAGS in the container terminal + +### R packages not installing + +1. Check internet connection +2. Try installing manually: `Rscript -e "devtools::install_dev_deps()"` +3. Check for system dependency errors in the logs + +### Performance issues + +1. Allocate more resources to Docker Desktop (Settings -> Resources) +2. Close other containers and applications +3. Use a local R installation for better performance on simple tasks + +## Benefits of Using Dev Containers + +1. **Consistency**: Everyone works in the same environment +2. **Isolation**: Development environment is separate from your system +3. **Reproducibility**: Easy to share and recreate the environment +4. **Onboarding**: New contributors can start immediately +5. **Clean System**: No need to install R, JAGS, or dependencies on your system + +## Alternative: Codespaces + +This dev container configuration also works with GitHub Codespaces: + +1. Navigate to the repository on GitHub +2. Click "Code" -> "Codespaces" -> "Create codespace on main" +3. Wait for the environment to set up +4. Start coding in your browser or connect from VS Code + +## References + +- [Dev Containers Documentation](https://code.visualstudio.com/docs/devcontainers/containers) +- [Rocker Project](https://rocker-project.org/) +- [GitHub Codespaces](https://github.com/features/codespaces) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000..ff414f19 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,55 @@ +{ + "name": "serodynamics R Package Development", + "image": "rocker/tidyverse:latest", + + "features": { + "ghcr.io/devcontainers/features/git:1": {}, + "ghcr.io/devcontainers/features/github-cli:1": {}, + "ghcr.io/devcontainers/features/node:1": { + "version": "lts" + } + }, + + "customizations": { + "vscode": { + "settings": { + "r.rterm.linux": "/usr/local/bin/R", + "r.rpath.linux": "/usr/local/bin/R", + "terminal.integrated.defaultProfile.linux": "bash" + }, + "extensions": [ + "rdebugger.r-debugger", + "reditorsupport.r", + "github.copilot", + "github.copilot-chat", + "quarto.quarto", + "redhat.vscode-yaml", + "yzhang.markdown-all-in-one", + "streetsidesoftware.code-spell-checker", + "eamodio.gitlens" + ] + } + }, + + "postCreateCommand": "bash .devcontainer/setup.sh", + + "remoteUser": "rstudio", + + "forwardPorts": [8787], + + "portsAttributes": { + "8787": { + "label": "RStudio Server", + "onAutoForward": "notify" + } + }, + + "mounts": [ + "source=${localWorkspaceFolder}/.Rprofile,target=/home/rstudio/.Rprofile,type=bind,consistency=cached" + ], + + "containerEnv": { + "GITHUB_TOKEN": "${localEnv:GITHUB_TOKEN}", + "TZ": "UTC" + } +} diff --git a/.devcontainer/setup.sh b/.devcontainer/setup.sh new file mode 100755 index 00000000..00ab904f --- /dev/null +++ b/.devcontainer/setup.sh @@ -0,0 +1,63 @@ +#!/bin/bash +set -e + +echo "Setting up serodynamics development environment..." + +# Update package list +echo "Updating package list..." +apt-get update + +# Install JAGS (required for serodynamics) +echo "Installing JAGS..." +apt-get install -y jags + +# Install system dependencies for R packages +echo "Installing system dependencies..." +apt-get install -y \ + libcurl4-openssl-dev \ + libssl-dev \ + libxml2-dev \ + libfontconfig1-dev \ + libharfbuzz-dev \ + libfribidi-dev \ + libfreetype6-dev \ + libpng-dev \ + libtiff5-dev \ + libjpeg-dev \ + libgit2-dev + +# Install Quarto +echo "Installing Quarto..." +QUARTO_VERSION="1.4.550" +wget -q https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-amd64.deb +dpkg -i quarto-${QUARTO_VERSION}-linux-amd64.deb +rm quarto-${QUARTO_VERSION}-linux-amd64.deb + +# Install R packages needed for development +echo "Installing R development packages..." +Rscript -e "install.packages(c('devtools', 'roxygen2', 'testthat', 'lintr', 'spelling', 'covr', 'rcmdcheck', 'pak'), repos = 'https://cloud.r-project.org')" + +# Install rjags from source (required for JAGS interface) +echo "Installing rjags..." +Rscript -e "install.packages('rjags', repos = 'https://cloud.r-project.org', type = 'source')" + +# Install package dependencies +echo "Installing package dependencies..." +Rscript -e "if (!requireNamespace('pak', quietly = TRUE)) install.packages('pak', repos = 'https://cloud.r-project.org'); pak::local_install_dev_deps(dependencies = TRUE)" + +# Verify JAGS installation +echo "Verifying JAGS installation..." +Rscript -e "library(rjags); library(runjags); runjags::testjags()" + +# Clean up +echo "Cleaning up..." +apt-get clean +rm -rf /var/lib/apt/lists/* + +echo "Development environment setup complete!" +echo "" +echo "You can now:" +echo " - Run 'devtools::load_all()' to load the package" +echo " - Run 'devtools::test()' to run tests" +echo " - Run 'devtools::check()' to check the package" +echo " - Use VS Code tasks (Ctrl+Shift+P -> Tasks: Run Task)" diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 7fe875b1..df07fed9 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -10,6 +10,53 @@ - **Key Dependencies**: runjags, rjags, JAGS 4.3.1, serocalculator, ggmcmc, dplyr, ggplot2 - **Lifecycle**: Experimental (under active development) +## Development Environment Options + +The repository provides multiple ways to set up your development environment: + +### Option 1: Dev Container (Recommended for consistency) + +Use the preconfigured development container for a fully automated setup: + +1. Install Docker Desktop and VS Code with Dev Containers extension +2. Open the repository in VS Code +3. Click "Reopen in Container" when prompted +4. All dependencies (R, JAGS, system libraries) are installed automatically + +See `.devcontainer/README.md` for details. + +### Option 2: Local Installation (Traditional) + +Install R, JAGS, and dependencies directly on your system (see Critical Setup Requirements below). + +### Option 3: GitHub Codespaces + +Use the dev container configuration in a cloud environment: +1. Go to the repository on GitHub +2. Click "Code" β†’ "Codespaces" β†’ "Create codespace" +3. Development environment is ready in your browser + +## Model Context Protocol (MCP) Integration + +The repository includes MCP server configurations in `.github/mcp/mcp-config.json` for enhanced AI-assisted development: + +- **Filesystem Server**: Navigate and edit repository files +- **GitHub Server**: Check CI/CD status, review PRs, manage issues +- **Git Server**: Version control operations (status, diff, commit, branch) +- **Brave Search Server**: Look up R documentation and CRAN resources + +These servers enhance GitHub Copilot and other AI assistants with context-aware capabilities. See `.github/mcp/README.md` for setup instructions. + +## VS Code Configuration + +The `.vscode/` directory contains optimized settings for R package development: + +- **settings.json**: R-specific editor settings, file associations, and Copilot configuration +- **extensions.json**: Recommended VS Code extensions for R development +- **tasks.json**: Quick tasks for common operations (document, test, check, lint) + +Use tasks via `Ctrl+Shift+P` β†’ "Tasks: Run Task" or the Command Palette. + ## Critical Setup Requirements ### R Installation and Development Dependencies (REQUIRED) @@ -290,6 +337,21 @@ Team members can trigger actions by commenting on PRs: - **pkgdown/**: pkgdown website configuration - `_pkgdown.yml`: Site structure, reference organization +- **.github/**: GitHub configuration and workflows + - `.github/workflows/`: CI/CD workflow definitions + - `.github/mcp/`: Model Context Protocol server configurations + - `.github/copilot-instructions.md`: Custom instructions for GitHub Copilot + +- **.vscode/**: VS Code workspace configuration + - `settings.json`: Editor settings for R development + - `extensions.json`: Recommended VS Code extensions + - `tasks.json`: Quick tasks for common R package operations + +- **.devcontainer/**: Development container configuration + - `devcontainer.json`: Container specification and VS Code integration + - `setup.sh`: Automated environment setup script + - `README.md`: Dev container usage documentation + ### Configuration Files - **DESCRIPTION**: Package metadata, dependencies, version (0.0.0.9044) diff --git a/.github/mcp/README.md b/.github/mcp/README.md new file mode 100644 index 00000000..1f1bfe3c --- /dev/null +++ b/.github/mcp/README.md @@ -0,0 +1,117 @@ +# Model Context Protocol (MCP) Configuration + +This directory contains the MCP server configuration for the serodynamics R package development environment. + +## What is MCP? + +Model Context Protocol (MCP) is an open protocol that enables seamless integration between AI assistants and development tools. It allows AI assistants to interact with your development environment through standardized servers. + +## Configured MCP Servers + +The `mcp-config.json` file configures the following MCP servers: + +### 1. Filesystem Server +- **Purpose**: Provides file system access to the repository +- **Use cases**: Reading/writing files, searching code, managing project structure +- **Scope**: `/home/runner/work/serodynamics/serodynamics` + +### 2. GitHub Server +- **Purpose**: Integrates with GitHub for repository operations +- **Use cases**: Issue tracking, pull requests, workflow management, CI/CD status +- **Authentication**: Uses `GITHUB_TOKEN` environment variable + +### 3. Git Server +- **Purpose**: Provides Git version control operations +- **Use cases**: Status checks, diff viewing, log inspection, commits, branch management +- **Scope**: Repository at `/home/runner/work/serodynamics/serodynamics` + +### 4. Brave Search Server +- **Purpose**: Enables web search capabilities +- **Use cases**: Finding R package documentation, CRAN resources, troubleshooting +- **Authentication**: Uses `BRAVE_API_KEY` environment variable (optional) + +## Setup Instructions + +### Prerequisites + +1. **Node.js**: Required to run the MCP servers via `npx` + ```bash + # Check if Node.js is installed + node --version + npm --version + ``` + +2. **Environment Variables**: + - `GITHUB_TOKEN`: GitHub Personal Access Token (required for GitHub server) + - `BRAVE_API_KEY`: Brave Search API key (optional, for web search) + +### Using with GitHub Copilot + +1. **In VS Code**: + - Install the latest GitHub Copilot extension + - The MCP configuration will be automatically detected from `.github/mcp/mcp-config.json` + - Copilot will use these servers to enhance code suggestions and operations + +2. **In JetBrains IDEs**: + - Install GitHub Copilot plugin + - Configure MCP servers through the Copilot settings + - Point to this `mcp-config.json` file + +### Using with Claude Desktop + +If you want to use these MCP servers with Claude Desktop: + +1. Copy the `mcpServers` section from `mcp-config.json` +2. Add it to your Claude Desktop configuration: + - **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json` + - **Windows**: `%APPDATA%\Claude\claude_desktop_config.json` + - **Linux**: `~/.config/Claude/claude_desktop_config.json` + +3. Update the repository path in the configuration to your local clone path + +## Development Workflow Integration + +The MCP servers are particularly useful for: + +1. **Code Navigation**: Quickly finding and reading R source files +2. **Testing**: Checking test results and coverage +3. **CI/CD**: Monitoring workflow status and debugging failures +4. **Documentation**: Finding R package documentation and CRAN resources +5. **Version Control**: Managing commits, branches, and reviewing changes + +## Best Practices + +1. **Always check Git status** before making commits using the Git MCP server +2. **Use the GitHub server** to monitor CI/CD workflows and PR status +3. **Leverage filesystem search** to find similar code patterns in the repository +4. **Search the web** for R package documentation when implementing new features + +## Troubleshooting + +### MCP servers not starting + +1. Ensure Node.js is installed and `npx` is available +2. Check that environment variables are set correctly +3. Verify repository paths are correct for your system + +### GitHub authentication issues + +1. Ensure `GITHUB_TOKEN` is set with appropriate scopes: + - `repo` (full control of private repositories) + - `workflow` (update GitHub Action workflows) + - `read:org` (read org and team membership) + +2. Generate a new token at: https://github.com/settings/tokens + +### Permission issues + +1. Ensure the filesystem server has read/write access to the repository +2. Check that you have the necessary GitHub repository permissions + +## References + +- [MCP Specification](https://modelcontextprotocol.io/) +- [MCP Filesystem Server](https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem) +- [MCP GitHub Server](https://github.com/modelcontextprotocol/servers/tree/main/src/github) +- [MCP Git Server](https://github.com/modelcontextprotocol/servers/tree/main/src/git) +- [GitHub Copilot Documentation](https://docs.github.com/en/copilot) diff --git a/.github/mcp/mcp-config.json b/.github/mcp/mcp-config.json new file mode 100644 index 00000000..064ea219 --- /dev/null +++ b/.github/mcp/mcp-config.json @@ -0,0 +1,60 @@ +{ + "mcpServers": { + "filesystem": { + "command": "npx", + "args": [ + "-y", + "@modelcontextprotocol/server-filesystem", + "/home/runner/work/serodynamics/serodynamics" + ], + "description": "Provides file system access to the serodynamics repository for reading and writing files, searching code, and managing the project structure" + }, + "github": { + "command": "npx", + "args": [ + "-y", + "@modelcontextprotocol/server-github" + ], + "env": { + "GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}" + }, + "description": "Integrates with GitHub for repository operations, issue tracking, pull requests, and workflow management" + }, + "git": { + "command": "npx", + "args": [ + "-y", + "@modelcontextprotocol/server-git", + "--repository", + "/home/runner/work/serodynamics/serodynamics" + ], + "description": "Provides Git version control operations including status, diff, log, commit, and branch management" + }, + "brave-search": { + "command": "npx", + "args": [ + "-y", + "@modelcontextprotocol/server-brave-search" + ], + "env": { + "BRAVE_API_KEY": "${BRAVE_API_KEY}" + }, + "description": "Enables web search capabilities for finding R package documentation, CRAN resources, and troubleshooting information" + } + }, + "globalShortcut": "CommandOrControl+Shift+.", + "hints": { + "development": [ + "Use the filesystem server to navigate R source files in the R/ directory", + "Use the github server to check CI/CD workflow status and review pull requests", + "Use the git server to check repository status before making commits", + "Use brave-search to look up R package documentation or CRAN resources when needed" + ], + "r-package-workflow": [ + "Always run devtools::document() after modifying roxygen2 comments", + "Use devtools::test() to run tests before committing", + "Check linting with lintr::lint_package() before pushing", + "Ensure JAGS is installed before running tests or examples" + ] + } +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 00000000..2c01c021 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,18 @@ +{ + "recommendations": [ + "rdebugger.r-debugger", + "reditorsupport.r", + "github.copilot", + "github.copilot-chat", + "quarto.quarto", + "redhat.vscode-yaml", + "yzhang.markdown-all-in-one", + "streetsidesoftware.code-spell-checker", + "eamodio.gitlens", + "ms-vscode.live-server", + "tamasfe.even-better-toml" + ], + "unwantedRecommendations": [ + "ms-python.python" + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..30397b69 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,103 @@ +{ + "r.rterm.linux": "/usr/bin/R", + "r.rterm.mac": "/usr/local/bin/R", + "r.rterm.windows": "C:\\Program Files\\R\\R-4.1.0\\bin\\R.exe", + "r.rpath.linux": "/usr/bin/R", + "r.rpath.mac": "/usr/local/bin/R", + "r.rpath.windows": "C:\\Program Files\\R\\R-4.1.0\\bin\\R.exe", + "r.alwaysUseActiveTerminal": true, + "r.bracketedPaste": true, + "r.sessionWatcher": true, + "r.rtermSendDelay": 0, + + "[r]": { + "editor.tabSize": 2, + "editor.insertSpaces": true, + "editor.formatOnSave": false, + "editor.wordWrap": "on", + "editor.rulers": [80, 100], + "files.trimTrailingWhitespace": true, + "files.insertFinalNewline": true, + "files.trimFinalNewlines": true + }, + + "[rmd]": { + "editor.tabSize": 2, + "editor.insertSpaces": true, + "editor.wordWrap": "on", + "files.trimTrailingWhitespace": true, + "files.insertFinalNewline": true + }, + + "files.associations": { + "*.Rmd": "rmd", + "*.rmd": "rmd", + "*.R": "r", + "*.r": "r", + ".Rprofile": "r", + ".Renviron": "properties" + }, + + "files.exclude": { + "**/.Rproj.user": true, + "**/.Rhistory": true, + "**/.RData": true, + "**/.Ruserdata": true, + "**/serodynamics.Rcheck": true, + "**/*.tar.gz": true, + "**/*.tgz": true + }, + + "search.exclude": { + "**/node_modules": true, + "**/.Rproj.user": true, + "**/serodynamics.Rcheck": true, + "**/docs": true, + "**/*.tar.gz": true + }, + + "editor.formatOnSave": false, + "editor.codeActionsOnSave": { + "source.fixAll": "never" + }, + + "github.copilot.enable": { + "*": true, + "r": true, + "rmd": true, + "markdown": true, + "yaml": true + }, + + "terminal.integrated.env.linux": { + "R_LIBS_USER": "${workspaceFolder}/renv/library" + }, + + "terminal.integrated.env.osx": { + "R_LIBS_USER": "${workspaceFolder}/renv/library" + }, + + "terminal.integrated.cwd": "${workspaceFolder}", + + "git.ignoreLimitWarning": true, + + "files.watcherExclude": { + "**/.Rproj.user/**": true, + "**/serodynamics.Rcheck/**": true, + "**/docs/**": true + }, + + "yaml.schemas": { + "https://json.schemastore.org/github-workflow.json": ".github/workflows/*.{yml,yaml}" + }, + + "editor.defaultFormatter": null, + + "R.lsp.debug": false, + "r.lsp.diagnostics": true, + "r.lsp.lang": "en", + + "task.autoDetect": "off", + + "testing.automaticallyOpenPeekView": "never" +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 00000000..5e91b10f --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,164 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "R: Load Package", + "type": "shell", + "command": "Rscript", + "args": [ + "-e", + "devtools::load_all()" + ], + "group": "build", + "presentation": { + "echo": true, + "reveal": "always", + "focus": false, + "panel": "shared" + }, + "problemMatcher": [] + }, + { + "label": "R: Document Package", + "type": "shell", + "command": "Rscript", + "args": [ + "-e", + "devtools::document()" + ], + "group": "build", + "presentation": { + "echo": true, + "reveal": "always", + "focus": false, + "panel": "shared" + }, + "problemMatcher": [] + }, + { + "label": "R: Run Tests", + "type": "shell", + "command": "Rscript", + "args": [ + "-e", + "devtools::test()" + ], + "group": { + "kind": "test", + "isDefault": true + }, + "presentation": { + "echo": true, + "reveal": "always", + "focus": false, + "panel": "shared" + }, + "problemMatcher": [] + }, + { + "label": "R: Check Package", + "type": "shell", + "command": "Rscript", + "args": [ + "-e", + "devtools::check()" + ], + "group": "build", + "presentation": { + "echo": true, + "reveal": "always", + "focus": true, + "panel": "shared" + }, + "problemMatcher": [] + }, + { + "label": "R: Lint Package", + "type": "shell", + "command": "Rscript", + "args": [ + "-e", + "lintr::lint_package()" + ], + "group": "test", + "presentation": { + "echo": true, + "reveal": "always", + "focus": false, + "panel": "shared" + }, + "problemMatcher": [] + }, + { + "label": "R: Spell Check", + "type": "shell", + "command": "Rscript", + "args": [ + "-e", + "spelling::spell_check_package()" + ], + "group": "test", + "presentation": { + "echo": true, + "reveal": "always", + "focus": false, + "panel": "shared" + }, + "problemMatcher": [] + }, + { + "label": "R: Build README", + "type": "shell", + "command": "Rscript", + "args": [ + "-e", + "rmarkdown::render('README.Rmd')" + ], + "group": "build", + "presentation": { + "echo": true, + "reveal": "always", + "focus": false, + "panel": "shared" + }, + "problemMatcher": [] + }, + { + "label": "R: Install Dependencies", + "type": "shell", + "command": "Rscript", + "args": [ + "-e", + "devtools::install_dev_deps(dependencies = TRUE)" + ], + "group": "build", + "presentation": { + "echo": true, + "reveal": "always", + "focus": true, + "panel": "shared" + }, + "problemMatcher": [] + }, + { + "label": "R: Build Package", + "type": "shell", + "command": "Rscript", + "args": [ + "-e", + "devtools::build()" + ], + "group": { + "kind": "build", + "isDefault": true + }, + "presentation": { + "echo": true, + "reveal": "always", + "focus": false, + "panel": "shared" + }, + "problemMatcher": [] + } + ] +} From ed3b35f8d82b201c373372adc4ae513f671f0fdc Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 6 Jan 2026 04:44:51 +0000 Subject: [PATCH 03/16] Add DEVELOPMENT.md guide and MCP verification script Co-authored-by: d-morrison <2474437+d-morrison@users.noreply.github.com> --- .Rbuildignore | 1 + .github/mcp/verify-mcp.sh | 97 +++++++++ DEVELOPMENT.md | 429 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 527 insertions(+) create mode 100755 .github/mcp/verify-mcp.sh create mode 100644 DEVELOPMENT.md diff --git a/.Rbuildignore b/.Rbuildignore index 1839a28a..aa8dcd8b 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -30,3 +30,4 @@ ^\.quarto$ ^\.vscode$ ^\.devcontainer$ +^DEVELOPMENT\.md$ diff --git a/.github/mcp/verify-mcp.sh b/.github/mcp/verify-mcp.sh new file mode 100755 index 00000000..d79e3d76 --- /dev/null +++ b/.github/mcp/verify-mcp.sh @@ -0,0 +1,97 @@ +#!/bin/bash +# Test script to verify MCP configuration + +echo "πŸ” Verifying MCP Configuration..." +echo "" + +# Check if Node.js is installed +echo "1. Checking Node.js installation..." +if command -v node &> /dev/null; then + echo " βœ… Node.js found: $(node --version)" + echo " βœ… npm found: $(npm --version)" +else + echo " ❌ Node.js not found. Please install Node.js to use MCP servers." + exit 1 +fi + +# Check if MCP config file exists +echo "" +echo "2. Checking MCP configuration file..." +if [ -f ".github/mcp/mcp-config.json" ]; then + echo " βœ… MCP config file found" + + # Validate JSON syntax + if python3 -m json.tool .github/mcp/mcp-config.json > /dev/null 2>&1; then + echo " βœ… MCP config JSON is valid" + else + echo " ❌ MCP config JSON is invalid" + exit 1 + fi +else + echo " ❌ MCP config file not found" + exit 1 +fi + +# Check environment variables +echo "" +echo "3. Checking environment variables..." +if [ -n "$GITHUB_TOKEN" ]; then + echo " βœ… GITHUB_TOKEN is set" +else + echo " ⚠️ GITHUB_TOKEN is not set (optional for some MCP features)" +fi + +if [ -n "$BRAVE_API_KEY" ]; then + echo " βœ… BRAVE_API_KEY is set" +else + echo " ⚠️ BRAVE_API_KEY is not set (optional for web search)" +fi + +# Test if we can install MCP servers (dry run) +echo "" +echo "4. Testing MCP server availability..." + +servers=( + "@modelcontextprotocol/server-filesystem" + "@modelcontextprotocol/server-github" + "@modelcontextprotocol/server-git" +) + +for server in "${servers[@]}"; do + echo -n " Testing $server... " + if npm view "$server" version &> /dev/null; then + echo "βœ…" + else + echo "❌ (not available or network issue)" + fi +done + +echo "" +echo "5. Checking development environment files..." + +files=( + ".vscode/settings.json" + ".vscode/extensions.json" + ".vscode/tasks.json" + ".devcontainer/devcontainer.json" + ".devcontainer/setup.sh" +) + +for file in "${files[@]}"; do + if [ -f "$file" ]; then + echo " βœ… $file found" + else + echo " ❌ $file not found" + fi +done + +echo "" +echo "✨ MCP configuration verification complete!" +echo "" +echo "To use MCP servers:" +echo " 1. Ensure Node.js is installed" +echo " 2. Set GITHUB_TOKEN environment variable for GitHub integration" +echo " 3. Open repository in VS Code with GitHub Copilot extension" +echo " 4. MCP servers will be automatically available to Copilot" +echo "" +echo "See .github/mcp/README.md for detailed setup instructions." diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md new file mode 100644 index 00000000..45485878 --- /dev/null +++ b/DEVELOPMENT.md @@ -0,0 +1,429 @@ +# Development Guide for serodynamics + +This guide provides comprehensive information on setting up your development environment and contributing to the serodynamics R package. + +## Table of Contents + +1. [Quick Start](#quick-start) +2. [Development Environment Setup](#development-environment-setup) +3. [Model Context Protocol (MCP)](#model-context-protocol-mcp) +4. [Development Workflow](#development-workflow) +5. [Testing and Quality Assurance](#testing-and-quality-assurance) +6. [Contributing](#contributing) + +## Quick Start + +### Option 1: Dev Container (Recommended) + +The fastest way to get started with a fully configured environment: + +```bash +# Prerequisites: Docker Desktop and VS Code with Dev Containers extension +# 1. Open this repository in VS Code +# 2. Click "Reopen in Container" when prompted +# 3. Wait for the container to build (~5-10 minutes first time) +# 4. Start developing! +``` + +See [.devcontainer/README.md](.devcontainer/README.md) for details. + +### Option 2: Local Setup + +If you prefer to install dependencies locally, follow the [Critical Setup Requirements](#critical-setup-requirements) section. + +## Development Environment Setup + +### Prerequisites + +- **R** (>= 4.1.0) - Statistical computing language +- **JAGS** (>= 4.3.1) - Just Another Gibbs Sampler for Bayesian MCMC +- **Git** - Version control +- **Node.js** (optional) - For MCP server support +- **RStudio** or **VS Code** - Recommended IDEs + +### Critical Setup Requirements + +#### 1. Install R + +**Ubuntu/Linux:** +```bash +sudo apt-get update +sudo apt-get install -y software-properties-common dirmngr +wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/maruti.asc | sudo tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc +sudo add-apt-repository "deb https://cloud.r-project.org/bin/linux/ubuntu $(lsb_release -cs)-cran40/" +sudo apt-get update +sudo apt-get install -y r-base r-base-dev +``` + +**macOS:** +```bash +brew install r +``` + +**Windows:** +Download from https://cran.r-project.org/bin/windows/base/ + +#### 2. Install JAGS + +**Ubuntu/Linux:** +```bash +sudo apt-get update && sudo apt-get install -y jags +``` + +**macOS:** +Download from https://sourceforge.net/projects/mcmc-jags/files/JAGS/4.x/Mac%20OS%20X/JAGS-4.3.1.pkg + +**Windows:** +Download from https://sourceforge.net/projects/mcmc-jags/files/JAGS/4.x/Windows/JAGS-4.3.1.exe + +#### 3. Install System Dependencies (Linux/macOS) + +**Ubuntu/Linux:** +```bash +sudo apt-get install -y \ + libcurl4-openssl-dev \ + libssl-dev \ + libxml2-dev \ + libfontconfig1-dev \ + libharfbuzz-dev \ + libfribidi-dev \ + libfreetype6-dev \ + libpng-dev \ + libtiff5-dev \ + libjpeg-dev +``` + +**macOS:** +```bash +brew install pkg-config cairo +``` + +#### 4. Install R Development Packages + +```r +# Install devtools +install.packages("devtools", repos = "https://cloud.r-project.org") + +# Install all package dependencies +devtools::install_dev_deps(dependencies = TRUE) + +# Install rjags from source +install.packages("rjags", repos = "https://cloud.r-project.org", type = "source") +``` + +#### 5. Verify Installation + +```r +library(rjags) +library(runjags) +runjags::testjags() # Should show JAGS is working +``` + +### VS Code Configuration + +The repository includes pre-configured VS Code settings in `.vscode/`: + +- **settings.json** - R-specific editor settings, file associations +- **extensions.json** - Recommended extensions for R development +- **tasks.json** - Quick tasks for common operations + +#### Recommended Extensions + +Open VS Code and install the recommended extensions: +- R Debugger (`rdebugger.r-debugger`) +- R Language Support (`reditorsupport.r`) +- GitHub Copilot (`github.copilot`) +- GitHub Copilot Chat (`github.copilot-chat`) +- Quarto (`quarto.quarto`) +- YAML (`redhat.vscode-yaml`) +- Markdown All in One (`yzhang.markdown-all-in-one`) +- Code Spell Checker (`streetsidesoftware.code-spell-checker`) +- GitLens (`eamodio.gitlens`) + +#### Using VS Code Tasks + +Press `Ctrl+Shift+P` (or `Cmd+Shift+P` on macOS) and select "Tasks: Run Task": + +- **R: Load Package** - Load package in development mode +- **R: Document Package** - Generate documentation from roxygen2 comments +- **R: Run Tests** - Execute all tests +- **R: Check Package** - Run R CMD check +- **R: Lint Package** - Check code style +- **R: Spell Check** - Check spelling +- **R: Build README** - Render README.Rmd +- **R: Install Dependencies** - Install all package dependencies + +## Model Context Protocol (MCP) + +The repository includes MCP server configurations in `.github/mcp/mcp-config.json` that enhance AI-assisted development. + +### Configured MCP Servers + +1. **Filesystem Server** - Read/write repository files, search code +2. **GitHub Server** - Check CI/CD status, manage PRs and issues +3. **Git Server** - Version control operations (status, diff, commit) +4. **Brave Search Server** - Look up R documentation and CRAN resources + +### Setup MCP + +#### Prerequisites +```bash +# Ensure Node.js is installed +node --version # Should be >= 18.x +npm --version +``` + +#### Environment Variables + +Set these environment variables for MCP servers: + +```bash +# GitHub token (required for GitHub MCP server) +export GITHUB_TOKEN="your_github_personal_access_token" + +# Brave API key (optional, for web search) +export BRAVE_API_KEY="your_brave_api_key" +``` + +#### Using MCP with GitHub Copilot + +MCP is automatically detected by GitHub Copilot in VS Code when the configuration file is present in `.github/mcp/mcp-config.json`. + +See [.github/mcp/README.md](.github/mcp/README.md) for detailed setup instructions. + +## Development Workflow + +### 1. Load the Package + +```r +devtools::load_all() +``` + +This loads the package in development mode, making all functions available for testing. + +### 2. Make Code Changes + +Edit R source files in the `R/` directory. Follow the [code style guidelines](#code-style-guidelines). + +### 3. Document Your Changes + +After modifying roxygen2 comments: + +```r +devtools::document() +``` + +**Important:** Never edit files in `man/` or `NAMESPACE` directly. They are auto-generated. + +### 4. Test Your Changes + +```r +# Run all tests +devtools::test() + +# Run specific test file +testthat::test_file("tests/testthat/test-your-feature.R") +``` + +### 5. Check Code Quality + +```r +# Lint your code +lintr::lint_package() + +# Spell check +spelling::spell_check_package() +``` + +### 6. Run R CMD Check + +Before committing: + +```r +devtools::check() +``` + +This runs the full package validation suite (takes 5-10 minutes). + +### 7. Update Documentation + +If you edited `README.Rmd`: + +```r +rmarkdown::render("README.Rmd") +``` + +### 8. Commit Your Changes + +```bash +git add . +git commit -m "Your descriptive commit message" +git push +``` + +## Testing and Quality Assurance + +### Test Structure + +Tests are in `tests/testthat/` and use testthat 3.0+ with snapshot testing. + +### Writing Tests + +```r +test_that("your feature works correctly", { + # Use seed for reproducible tests + withr::local_seed(123) + + # Your test code + result <- your_function(input) + + # Assertions + expect_equal(result, expected_value) +}) +``` + +### Snapshot Testing + +For MCMC output validation: + +```r +test_that("JAGS output is consistent", { + withr::local_seed(123) + + output <- run_jags_model(...) + + # Create snapshot + expect_snapshot_value(output, style = "json2") +}) +``` + +### Platform-Specific Tests + +Use `variant` for platform-specific snapshots: + +```r +expect_snapshot_value( + platform_dependent_output, + variant = Sys.info()[["sysname"]] +) +``` + +### Continuous Integration + +All PRs must pass these checks: + +- βœ… R CMD check (Ubuntu, macOS, Windows) +- βœ… Linting (changed files only) +- βœ… Test coverage +- βœ… Spelling +- βœ… Documentation sync +- βœ… NEWS.md updated +- βœ… Version incremented + +## Code Style Guidelines + +### General Principles + +- Follow the [tidyverse style guide](https://style.tidyverse.org) +- Use native pipe `|>` (not `%>%`) +- Use snake_case for naming (acronyms may be uppercase, e.g., `prep_IDs`) +- Two spaces for indentation (no tabs) +- Maximum line length: 80 characters (soft), 100 characters (hard) + +### Function Documentation + +Use roxygen2 for all exported functions: + +```r +#' Brief function description +#' +#' Detailed description of what the function does. +#' +#' @param x Description of parameter x +#' @param y Description of parameter y +#' +#' @returns Description of return value +#' +#' @examples +#' your_function(1, 2) +#' +#' @export +your_function <- function(x, y) { + # Function body +} +``` + +### User-Facing Messages + +Use `cli` package functions: + +```r +# Information +cli::cli_inform("Operation completed") + +# Warning +cli::cli_warn("Potential issue detected") + +# Error +cli::cli_abort("Operation failed") +``` + +**Never use** `message()`, `warning()`, or `stop()` in package code. + +### Dependencies + +- Use `::` to call functions from other packages +- Don't use `library()` or `require()` in package code +- Add dependencies to DESCRIPTION (Imports or Suggests) + +### Avoid Code Duplication + +Don't copy-paste code. Instead, create helper functions: + +```r +# Bad - duplicated code +result1 <- transform_data(data1, param = "A") +result2 <- transform_data(data2, param = "A") + +# Good - extract common pattern +process_with_param_a <- function(data) { + transform_data(data, param = "A") +} +result1 <- process_with_param_a(data1) +result2 <- process_with_param_a(data2) +``` + +## Contributing + +### Pull Request Checklist + +Before submitting a PR, ensure: + +- [ ] Tests pass locally (`devtools::test()`) +- [ ] R CMD check passes (`devtools::check()`) +- [ ] Code is linted (`lintr::lint_package()`) +- [ ] Spelling is correct (`spelling::spell_check_package()`) +- [ ] Documentation is up to date (`devtools::document()`) +- [ ] README.md is updated (if you edited README.Rmd) +- [ ] NEWS.md has an entry for your changes +- [ ] DESCRIPTION version is incremented (`usethis::use_version()`) + +### Getting Help + +- πŸ“– See `.github/copilot-instructions.md` for comprehensive repository guidance +- πŸ› Report bugs via GitHub Issues +- πŸ’¬ Ask questions in GitHub Discussions +- πŸ“§ Contact maintainers (see DESCRIPTION file) + +## Resources + +- [R Packages Book](https://r-pkgs.org/) - Comprehensive guide to R package development +- [tidyverse Style Guide](https://style.tidyverse.org) - R code style conventions +- [testthat Documentation](https://testthat.r-lib.org/) - Testing framework +- [roxygen2 Documentation](https://roxygen2.r-lib.org/) - Documentation generation +- [devtools Documentation](https://devtools.r-lib.org/) - Package development tools +- [JAGS Documentation](https://mcmc-jags.sourceforge.io/) - Bayesian MCMC with JAGS + +## License + +See [LICENSE.md](LICENSE.md) for license information. From 2d5dde2583b50182f3d9d83f8b1dded94b2e0304 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 6 Jan 2026 04:47:33 +0000 Subject: [PATCH 04/16] Add comprehensive MCP and dev environment documentation Co-authored-by: d-morrison <2474437+d-morrison@users.noreply.github.com> --- .github/mcp/STRUCTURE.md | 265 +++++++++++++++++++++++++++++++++++++++ .github/mcp/SUMMARY.md | 137 ++++++++++++++++++++ 2 files changed, 402 insertions(+) create mode 100644 .github/mcp/STRUCTURE.md create mode 100644 .github/mcp/SUMMARY.md diff --git a/.github/mcp/STRUCTURE.md b/.github/mcp/STRUCTURE.md new file mode 100644 index 00000000..776d2de5 --- /dev/null +++ b/.github/mcp/STRUCTURE.md @@ -0,0 +1,265 @@ +# Development Environment Structure + +This document provides a visual overview of the development environment configurations added to the repository. + +## Directory Structure + +``` +serodynamics/ +β”œβ”€β”€ .github/ +β”‚ β”œβ”€β”€ copilot-instructions.md # Enhanced with MCP and dev env sections +β”‚ β”œβ”€β”€ mcp/ +β”‚ β”‚ β”œβ”€β”€ mcp-config.json # MCP server configuration +β”‚ β”‚ β”œβ”€β”€ README.md # MCP setup guide +β”‚ β”‚ β”œβ”€β”€ SUMMARY.md # Overview of additions +β”‚ β”‚ β”œβ”€β”€ STRUCTURE.md # This file +β”‚ β”‚ └── verify-mcp.sh # Configuration verification script +β”‚ └── workflows/ # CI/CD workflows (existing) +β”‚ +β”œβ”€β”€ .vscode/ +β”‚ β”œβ”€β”€ settings.json # R-specific VS Code settings +β”‚ β”œβ”€β”€ extensions.json # Recommended extensions +β”‚ └── tasks.json # Quick tasks for R package ops +β”‚ +β”œβ”€β”€ .devcontainer/ +β”‚ β”œβ”€β”€ devcontainer.json # Container specification +β”‚ β”œβ”€β”€ setup.sh # Automated environment setup +β”‚ └── README.md # Dev container guide +β”‚ +β”œβ”€β”€ DEVELOPMENT.md # Comprehensive development guide +β”œβ”€β”€ .Rbuildignore # Updated to exclude new configs +└── ... (other repository files) +``` + +## Configuration Flow + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Development Environment β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ β”‚ β”‚ + β–Ό β–Ό β–Ό + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ MCP Servers β”‚ β”‚ VS Code β”‚ β”‚ Dev Containerβ”‚ + β”‚ (.github/mcp)β”‚ β”‚ (.vscode) β”‚ β”‚(.devcontainer)β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ β”‚ β”‚ + β”‚ β”‚ β”‚ + β–Ό β–Ό β–Ό + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ AI-Enhanced β”‚ β”‚ Editor β”‚ β”‚ Containerizedβ”‚ + β”‚ Development β”‚ β”‚ Optimization β”‚ β”‚ Environment β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +## MCP Server Architecture + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ GitHub Copilot β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β”‚ Uses MCP Protocol + β–Ό +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ MCP Configuration β”‚ +β”‚ (.github/mcp/mcp-config.json) β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ β”‚ β”‚ β”‚ + β–Ό β–Ό β–Ό β–Ό + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ Filesystem β”‚ β”‚ GitHub β”‚ β”‚ Git β”‚ β”‚ Brave Search β”‚ + β”‚ Server β”‚ β”‚ Server β”‚ β”‚ Server β”‚ β”‚ Server β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ β”‚ β”‚ β”‚ + β–Ό β–Ό β–Ό β–Ό + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ File I/O β”‚ β”‚ PR/Issues β”‚ β”‚ Version β”‚ β”‚ Web Search β”‚ + β”‚ Code Search β”‚ β”‚ CI/CD Status β”‚ β”‚ Control β”‚ β”‚ CRAN Docs β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +## VS Code Integration + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ VS Code Editor β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ β”‚ β”‚ + β–Ό β–Ό β–Ό + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ settings β”‚ β”‚ extensions β”‚ β”‚ tasks β”‚ + β”‚ .json β”‚ β”‚ .json β”‚ β”‚ .json β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ β”‚ β”‚ + β–Ό β–Ό β–Ό + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ R Config β”‚ β”‚ R Extension β”‚ β”‚ Quick Tasks β”‚ + β”‚ Formatting β”‚ β”‚ GitHub β”‚ β”‚ - Document β”‚ + β”‚ File Assoc β”‚ β”‚ Copilot β”‚ β”‚ - Test β”‚ + β”‚ Copilot β”‚ β”‚ Quarto β”‚ β”‚ - Check β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +## Dev Container Workflow + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ User Opens Repo in VS Code β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β–Ό +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ VS Code Detects .devcontainer/devcontainer.json β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β–Ό +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Prompt: "Reopen in Container" β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β–Ό + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ β”‚ + β–Ό β–Ό + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ Pull Base β”‚ β”‚ User Says β”‚ + β”‚ Image β”‚ β”‚ "Yes" β”‚ + β”‚ rocker/ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ tidyverse β”‚ β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ + β”‚ β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β–Ό +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Run .devcontainer/setup.sh β”‚ +β”‚ - Install JAGS β”‚ +β”‚ - Install system dependencies β”‚ +β”‚ - Install Quarto β”‚ +β”‚ - Install R packages β”‚ +β”‚ - Verify installation β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β–Ό +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ VS Code Opens in Container Environment β”‚ +β”‚ - All dependencies ready β”‚ +β”‚ - Extensions installed β”‚ +β”‚ - Settings applied β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +## Development Workflow + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Developer Starts Work β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ β”‚ β”‚ + β–Ό β–Ό β–Ό + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ Dev Containerβ”‚ β”‚ Local Setup β”‚ β”‚ Codespaces β”‚ + β”‚ (Recommended)β”‚ β”‚ (Traditional)β”‚ β”‚ (Cloud) β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ β”‚ β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β–Ό +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Development Environment Ready β”‚ +β”‚ - R >= 4.1.0 installed β”‚ +β”‚ - JAGS 4.3.1 installed β”‚ +β”‚ - All dependencies available β”‚ +β”‚ - VS Code configured β”‚ +β”‚ - MCP servers available (with Copilot) β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β–Ό + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ β”‚ β”‚ β”‚ + β–Ό β–Ό β–Ό β–Ό + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ Code with β”‚ β”‚ Use VS Code β”‚ β”‚ Use MCP for β”‚ β”‚ Run Tests β”‚ + β”‚ AI Assist β”‚ β”‚ Tasks β”‚ β”‚ Context β”‚ β”‚ via Tasks β”‚ + β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ + β–Ό +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Commit & Push (Standard Git Flow) β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +## Configuration Files Relationship + +``` +DEVELOPMENT.md ─────────┐ + β”‚ +.github/ β”‚ + copilot-instructions.md ──┐ + mcp/ β”‚ β”‚ + mcp-config.json ────┼───┼─── Used by GitHub Copilot + README.md ─────────── β”‚ + verify-mcp.sh β”€β”€β”€β”€β”€β”€β”˜ β”‚ + β”‚ +.vscode/ β”‚ + settings.json ────────────┼─── Used by VS Code + extensions.json ──────────┼─── Suggests extensions + tasks.json ───────────────┼─── Quick operations + β”‚ +.devcontainer/ β”‚ + devcontainer.json ────────┼─── Used by VS Code + Docker + setup.sh ─────────────────┼─── Runs in container + README.md β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +## Key Integration Points + +1. **GitHub Copilot + MCP**: Copilot reads `.github/mcp/mcp-config.json` and uses configured servers +2. **VS Code + Dev Container**: VS Code reads `.devcontainer/devcontainer.json` and builds container +3. **VS Code + Settings**: VS Code applies `.vscode/settings.json` for R-optimized editing +4. **VS Code + Tasks**: Tasks in `.vscode/tasks.json` provide quick access to R package operations +5. **Container + Setup**: `.devcontainer/setup.sh` runs on container creation to install dependencies +6. **Documentation + Files**: All READMEs and DEVELOPMENT.md guide users to appropriate configurations + +## File Dependencies + +``` +devcontainer.json + β”œβ”€β”€ Requires: Docker, VS Code with Dev Containers extension + β”œβ”€β”€ Uses: setup.sh (postCreateCommand) + └── Installs: Extensions from extensions.json + +mcp-config.json + β”œβ”€β”€ Requires: Node.js, npx + β”œβ”€β”€ Optional: GITHUB_TOKEN, BRAVE_API_KEY + └── Used by: GitHub Copilot, Claude Desktop + +settings.json + β”œβ”€β”€ Requires: VS Code + └── Enhances: R development experience + +tasks.json + β”œβ”€β”€ Requires: VS Code, R installation + └── Provides: Quick access to devtools functions + +setup.sh + β”œβ”€β”€ Requires: apt, wget, Rscript + └── Installs: JAGS, Quarto, R packages, dependencies +``` + +## Notes + +- All JSON files are validated and properly formatted +- Shell scripts are executable and syntax-checked +- Configurations are platform-aware (Linux/macOS/Windows) +- MCP servers require Node.js but are optional +- Dev container is self-contained and reproducible +- VS Code settings work with or without container diff --git a/.github/mcp/SUMMARY.md b/.github/mcp/SUMMARY.md new file mode 100644 index 00000000..d6174485 --- /dev/null +++ b/.github/mcp/SUMMARY.md @@ -0,0 +1,137 @@ +# Summary of MCP and Development Environment Additions + +This document summarizes the Model Context Protocol (MCP) and development environment configurations added to the serodynamics repository. + +## Files Added + +### MCP Configuration (`.github/mcp/`) +- **mcp-config.json** - MCP server configuration with 4 servers: + - Filesystem server for repository access + - GitHub server for repository operations + - Git server for version control + - Brave Search server for documentation lookup +- **README.md** - Complete MCP setup and usage guide +- **verify-mcp.sh** - Verification script to test MCP setup +- **SUMMARY.md** - This file + +### VS Code Configuration (`.vscode/`) +- **settings.json** - R-specific editor settings, file associations, Copilot integration +- **extensions.json** - Recommended VS Code extensions for R development +- **tasks.json** - 9 quick tasks for common R package operations + +### Dev Container (`.devcontainer/`) +- **devcontainer.json** - Container specification based on rocker/tidyverse +- **setup.sh** - Automated setup script that installs: + - JAGS 4.3.1 + - System dependencies + - Quarto + - R development packages + - Package dependencies +- **README.md** - Dev container usage guide + +### Documentation +- **DEVELOPMENT.md** (root) - Comprehensive development guide with: + - Quick start instructions + - Environment setup guide + - MCP integration details + - Development workflow + - Testing guidelines + - Code style guide + - Contributing checklist + +### Updated Files +- **.Rbuildignore** - Excluded `.vscode`, `.devcontainer`, and `DEVELOPMENT.md` from package builds +- **.github/copilot-instructions.md** - Added sections on: + - Development environment options + - MCP integration + - VS Code configuration + - Updated repository structure + +## Features Provided + +### 1. MCP Integration +- **AI-Enhanced Development**: GitHub Copilot can access repository context, CI/CD status, and version control +- **Smart Code Suggestions**: MCP servers provide real-time repository information +- **Web Search Integration**: Look up R documentation and CRAN resources without leaving the IDE + +### 2. Dev Container +- **Instant Setup**: One-click containerized development environment +- **Consistency**: All developers work in identical environments +- **Complete**: Pre-installed with R, JAGS, all dependencies, and tools +- **Codespaces Ready**: Works with GitHub Codespaces for cloud development + +### 3. VS Code Optimizations +- **R-Optimized Settings**: Proper indentation, formatting, file associations +- **Quick Tasks**: Run common operations with keyboard shortcuts +- **Extensions**: Curated list of helpful extensions for R development +- **Copilot Integration**: Enhanced with R-specific context + +### 4. Documentation +- **DEVELOPMENT.md**: Single source of truth for development setup +- **READMEs**: Specific guides for MCP and devcontainer +- **Enhanced Copilot Instructions**: Comprehensive repository guidance + +## Usage + +### For New Contributors +1. Clone the repository +2. Choose your setup method: + - **Dev Container**: Open in VS Code β†’ "Reopen in Container" + - **Local**: Follow DEVELOPMENT.md β†’ "Critical Setup Requirements" + - **Codespaces**: GitHub β†’ Code β†’ Codespaces β†’ Create + +### For Existing Contributors +- Review DEVELOPMENT.md for updated workflows +- Install recommended VS Code extensions +- Optionally set up MCP for enhanced AI assistance + +### For Maintainers +- Use verify-mcp.sh to validate MCP configuration +- Update mcp-config.json if adding new MCP servers +- Keep DEVELOPMENT.md synchronized with repository changes + +## Benefits + +1. **Reduced Onboarding Time**: New contributors can start in minutes instead of hours +2. **Consistency**: Everyone uses the same tools and configurations +3. **Enhanced Productivity**: Quick tasks, AI assistance, and proper tooling +4. **Better Code Quality**: Integrated linting, testing, and documentation generation +5. **Modern Workflow**: Leverages latest development tools (MCP, Copilot, containers) + +## Maintenance + +### Updating MCP Configuration +Edit `.github/mcp/mcp-config.json` to add/modify MCP servers. + +### Updating Dev Container +Edit `.devcontainer/devcontainer.json` and `.devcontainer/setup.sh` to change container configuration or dependencies. + +### Updating VS Code Settings +Edit files in `.vscode/` to change editor settings, tasks, or recommended extensions. + +### Updating Documentation +- Update `DEVELOPMENT.md` for workflow changes +- Update `.github/copilot-instructions.md` for repository-wide guidance +- Update specific READMEs for component-specific changes + +## Testing + +Run the verification script: +```bash +.github/mcp/verify-mcp.sh +``` + +This checks: +- Node.js installation +- MCP config validity +- Environment variables +- MCP server availability +- Development environment files + +## References + +- [Model Context Protocol Specification](https://modelcontextprotocol.io/) +- [Dev Containers Documentation](https://code.visualstudio.com/docs/devcontainers/containers) +- [GitHub Copilot Documentation](https://docs.github.com/en/copilot) +- [VS Code for R](https://code.visualstudio.com/docs/languages/r) +- [serodynamics Repository](https://github.com/UCD-SERG/serodynamics) From 23438e10cadde13536d4a2c2491eee40e723d0f8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 6 Jan 2026 04:50:10 +0000 Subject: [PATCH 05/16] Fix code review issues: correct URLs, improve error handling, update Quarto version Co-authored-by: d-morrison <2474437+d-morrison@users.noreply.github.com> --- .devcontainer/setup.sh | 2 +- .github/copilot-instructions.md | 2 +- .github/mcp/verify-mcp.sh | 7 +++++-- DEVELOPMENT.md | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.devcontainer/setup.sh b/.devcontainer/setup.sh index 00ab904f..f64ac790 100755 --- a/.devcontainer/setup.sh +++ b/.devcontainer/setup.sh @@ -28,7 +28,7 @@ apt-get install -y \ # Install Quarto echo "Installing Quarto..." -QUARTO_VERSION="1.4.550" +QUARTO_VERSION="1.6.40" # Updated to latest stable version (January 2026) wget -q https://github.com/quarto-dev/quarto-cli/releases/download/v${QUARTO_VERSION}/quarto-${QUARTO_VERSION}-linux-amd64.deb dpkg -i quarto-${QUARTO_VERSION}-linux-amd64.deb rm quarto-${QUARTO_VERSION}-linux-amd64.deb diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index df07fed9..ca25260d 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -72,7 +72,7 @@ The package requires R version 4.1.0 or higher. Install R for your platform: # Add CRAN repository for latest R version sudo apt-get update sudo apt-get install -y software-properties-common dirmngr - wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/maruti.asc | sudo tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc + wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter.asc | sudo tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc sudo add-apt-repository "deb https://cloud.r-project.org/bin/linux/ubuntu $(lsb_release -cs)-cran40/" sudo apt-get update sudo apt-get install -y r-base r-base-dev diff --git a/.github/mcp/verify-mcp.sh b/.github/mcp/verify-mcp.sh index d79e3d76..7e10accb 100755 --- a/.github/mcp/verify-mcp.sh +++ b/.github/mcp/verify-mcp.sh @@ -1,5 +1,8 @@ #!/bin/bash # Test script to verify MCP configuration +set -e +set -u +set -o pipefail echo "πŸ” Verifying MCP Configuration..." echo "" @@ -35,13 +38,13 @@ fi # Check environment variables echo "" echo "3. Checking environment variables..." -if [ -n "$GITHUB_TOKEN" ]; then +if [ -n "${GITHUB_TOKEN:-}" ]; then echo " βœ… GITHUB_TOKEN is set" else echo " ⚠️ GITHUB_TOKEN is not set (optional for some MCP features)" fi -if [ -n "$BRAVE_API_KEY" ]; then +if [ -n "${BRAVE_API_KEY:-}" ]; then echo " βœ… BRAVE_API_KEY is set" else echo " ⚠️ BRAVE_API_KEY is not set (optional for web search)" diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 45485878..ec770820 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -49,7 +49,7 @@ If you prefer to install dependencies locally, follow the [Critical Setup Requir ```bash sudo apt-get update sudo apt-get install -y software-properties-common dirmngr -wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/maruti.asc | sudo tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc +wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter.asc | sudo tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc sudo add-apt-repository "deb https://cloud.r-project.org/bin/linux/ubuntu $(lsb_release -cs)-cran40/" sudo apt-get update sudo apt-get install -y r-base r-base-dev From c46866fbdf757ed80c636eceb3871b6b66592fce Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 7 Jan 2026 07:22:02 +0000 Subject: [PATCH 06/16] Initial plan From e1d7822f65f2f47ab04205128ddbf19187587969 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 7 Jan 2026 07:57:54 +0000 Subject: [PATCH 07/16] Initial plan From 8c4bec550ec6bee3ee09982a613e27ac92d72df0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 7 Jan 2026 08:14:24 +0000 Subject: [PATCH 08/16] Fix pkgdown workflow: correct file paths and update deprecated actions Co-authored-by: d-morrison <2474437+d-morrison@users.noreply.github.com> --- .github/workflows/pkgdown.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/pkgdown.yaml b/.github/workflows/pkgdown.yaml index 8eae438e..f2bb1d05 100644 --- a/.github/workflows/pkgdown.yaml +++ b/.github/workflows/pkgdown.yaml @@ -19,8 +19,8 @@ on: - 'vignettes/**' - '_quarto.yml' - '.github/workflows/pkgdown.yaml' - - 'Readme.md' - - 'Contributing.md' + - 'README.md' + - '.github/CONTRIBUTING.md' push: tags: - 'v[0-9]+.[0-9]+.[0-9]+' # build on version tags @@ -46,7 +46,7 @@ jobs: env: GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Configure git run: | @@ -138,7 +138,7 @@ jobs: env: GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 with: ref: "gh-pages" From 6ff113f8683238d3fec9f59b5798d273db2b1f5e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 7 Jan 2026 08:21:43 +0000 Subject: [PATCH 09/16] Optimize JAGS dependencies: remove unused platform steps from test-coverage, add to pkgdown Co-authored-by: d-morrison <2474437+d-morrison@users.noreply.github.com> --- .github/workflows/pkgdown.yaml | 18 ++++++++++++++++++ .github/workflows/test-coverage.yaml | 18 +----------------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/.github/workflows/pkgdown.yaml b/.github/workflows/pkgdown.yaml index 8eae438e..35d8b214 100644 --- a/.github/workflows/pkgdown.yaml +++ b/.github/workflows/pkgdown.yaml @@ -67,6 +67,11 @@ jobs: with: tinytex: true + - name: Install JAGS + run: | + sudo apt-get update + sudo apt-get install -y jags + - uses: r-lib/actions/setup-r@v2 with: use-public-rspm: true @@ -79,6 +84,19 @@ jobs: extra-packages: | local::. r-lib/pkgdown + + - name: Install rjags + run: | + install.packages("rjags", + repos = "https://cloud.r-project.org", + type = "source", + verbose = TRUE) + withr::local_options(warn = 2) + library(rjags) + library(runjags) + runjags::findJAGS() + runjags::testjags() + shell: Rscript {0} # If events is a PR, set subdir to 'preview/pr' - name: "[PR] Set documentation subdirectory" diff --git a/.github/workflows/test-coverage.yaml b/.github/workflows/test-coverage.yaml index 70242556..3cc6393e 100644 --- a/.github/workflows/test-coverage.yaml +++ b/.github/workflows/test-coverage.yaml @@ -16,23 +16,7 @@ jobs: GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} steps: - - name: Install JAGS (Windows) - if: runner.os == 'Windows' - run: | - curl.exe -o wjags.exe -L0 -k --url https://downloads.sourceforge.net/project/mcmc-jags/JAGS/4.x/Windows/JAGS-4.3.1.exe - wjags.exe /S - del wjags.exe - shell: cmd - - # from https://github.com/ku-awdc/runjags/issues/2: - - name: Install JAGS (macOS) - if: runner.os == 'macOS' - run: | - sudo curl --location https://sourceforge.net/projects/mcmc-jags/files/JAGS/4.x/Mac%20OS%20X/JAGS-4.3.1.pkg -o /usr/local/JAGS-4.3.1.pkg - sudo installer -pkg /usr/local/JAGS-4.3.1.pkg -target /usr/local/bin/ - - - name: Install JAGS (Ubuntu) - if: runner.os == 'Linux' + - name: Install JAGS run: | sudo apt-get update sudo apt-get install -y jags From d62b98d469887d05794a4697a73fdf889b79f13d Mon Sep 17 00:00:00 2001 From: Douglas Ezra Morrison Date: Wed, 7 Jan 2026 01:10:20 -0800 Subject: [PATCH 10/16] Update pkgdown.yaml --- .github/workflows/pkgdown.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/pkgdown.yaml b/.github/workflows/pkgdown.yaml index f2bb1d05..b38e5c42 100644 --- a/.github/workflows/pkgdown.yaml +++ b/.github/workflows/pkgdown.yaml @@ -6,8 +6,6 @@ # more info: https://github.com/rstudio/education-workflows/tree/main/examples#deploy-pkgdown-to-github-pages-with-pr-previews-and-tagged-versions on: pull_request: - branches: - - main types: - opened - reopened From 7d022a17a734235ad84256ee58ff44947f8a2f60 Mon Sep 17 00:00:00 2001 From: Douglas Ezra Morrison Date: Wed, 7 Jan 2026 15:03:43 -0800 Subject: [PATCH 11/16] ignore pdfs --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index b331e85e..4da27838 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,4 @@ docs/ /.quarto/ **/*.quarto_ipynb +*.pdf From 969b20ae5603e7031b4ed9b05800383a4aac5e5a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 8 Jan 2026 02:26:50 +0000 Subject: [PATCH 12/16] Fix getting-started.qmd: correct data variable references and remove redundant postprocess_jags_output call Co-authored-by: d-morrison <2474437+d-morrison@users.noreply.github.com> --- Rplots.pdf | Bin 0 -> 8186 bytes vignettes/articles/getting-started.qmd | 9 +++------ 2 files changed, 3 insertions(+), 6 deletions(-) create mode 100644 Rplots.pdf diff --git a/Rplots.pdf b/Rplots.pdf new file mode 100644 index 0000000000000000000000000000000000000000..14ab69f1b8ac1fc41e1750b9e82c5eb1b6395444 GIT binary patch literal 8186 zcmZ{Jc|4Ts|Go$%WM4vt2w}#IeG6H$X5VFup~*7L5~(4{SW^;02-yiqcG+cL#u_4I zm+Z3jo9Ud+IiGWW-{lOlr1{h&6URVs#?FI_zjD^8bq+KbXG!R0>e&s@vAQ76YS83p$&ZH_Je^mnj zncek*13>Cf4AdRz3IN@Jy28-_Nuq%X;BN=n|2UBBNY*I0C+1IckUG*6LtLT(a=+X` zCU7(oi-Hm3N&PDx$>4W8^x>Yam|FlT2?+@RNDJYPA)WxFV~9QT zpz(d#lBD;G#e2PK?~tkxUfcWE<#jmXBxauAan~tCSnAzD_nO!4Lulw)Btn(Iq zR)+t8D(tSWJJjM1_G(k3jCem2mdD<}<|P+0cKoyMyo2<{@lI_Av2S)&KZpH1nW6sh zG}&y@)Yu1nAi+`e}SQ#3jTRPxWC@Z?S{5W5epq{ zIaT4pR$Y4Fm#cWm?y|_21aY@&aT;#}`J2b?Xj}8m_j#5BIJSd;9rZ4M|a(oU~=r`?So+&77@9uQ`y(xo16Yj8a*@l2h0k zy;EMbZR+BEZoU*TJJyr(M65S{i(jtC7OeCw~@Los1F6u!Cmd&0sVexrg zW~ymw!L9^l{l+psL^yOtI4d9&7 z1*&gc3#Z>?E4dJXU4@4aE8T4*Dk(RNm&H(B#8xKnnrgtt>>Rn?eKTj z*|Br1q*L&`W!n7IxX`}aj?n;ut&?2_PR!#?D;I-eYRLRgzifgx}BvceW3ZiGGi z`W%}P3uhMMSl}DEZ?TrTihHXrALN~g^6+Ex+%|cR;|`}RW#o(f`7sg3h28p^>sJpR zj>8(CmNzR~@}D4ZbzXG{=l10~KsR)>zI|dIO?Y+O;b0V*$1W|{&@*MB{NdrMsHeux z?NOF0_cZ;qar%!-b=fmyQJ5%OMyhCSDt#X#(eXB(4gW6x1A4$;tchR3^m{26CF(EB7u?G z#mpg|Ar~0AI`6y!g?LXc;3zhnrIojX`4UB+t-q{$({w|hqqLy-OuxOm^x!t+Mw{K> zW*+~$*Nb7?;l&aB)K+F1;8WEpMhy+ErolQ4roy)|JUJOxoX`|FJ~B-M;HeFVvWj#o z>f-#b!kgu$*lWe#%gYs5G?lCi>2Q)M1+BvmScPrzBC0+SFKo1Ka`≷Y9?xbm$6m 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 literal 0 HcmV?d00001 diff --git a/vignettes/articles/getting-started.qmd b/vignettes/articles/getting-started.qmd index 1d5621e7..75a55253 100644 --- a/vignettes/articles/getting-started.qmd +++ b/vignettes/articles/getting-started.qmd @@ -172,8 +172,8 @@ Plot the predicted antibody curves with credible intervals: #| label: plot-curves plot_predicted_curve( fitted_model, - id = serocalculator::ids(case_data)[1], - antigen_iso = case_data$antigen_iso[1] + ids = serocalculator::ids(simulated_data)[1], + antigen_iso = simulated_data$antigen_iso[1] ) ``` @@ -183,11 +183,8 @@ Extract and summarize the posterior estimates: ```{r} #| label: postprocess -# Process JAGS output -processed_output <- postprocess_jags_output(fitted_model) - # Summarize parameter estimates -summary_stats <- post_summ(processed_output) +summary_stats <- post_summ(fitted_model) print(summary_stats) ``` From e79c669923e9b86275d0be91b753a79f8d182f93 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 8 Jan 2026 02:27:49 +0000 Subject: [PATCH 13/16] Remove Rplots.pdf and add to .gitignore Co-authored-by: d-morrison <2474437+d-morrison@users.noreply.github.com> --- .gitignore | 1 + Rplots.pdf | Bin 8186 -> 0 bytes 2 files changed, 1 insertion(+) delete mode 100644 Rplots.pdf diff --git a/.gitignore b/.gitignore index b331e85e..f458cdc1 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,4 @@ docs/ /.quarto/ **/*.quarto_ipynb +Rplots.pdf diff --git a/Rplots.pdf b/Rplots.pdf deleted file mode 100644 index 14ab69f1b8ac1fc41e1750b9e82c5eb1b6395444..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8186 zcmZ{Jc|4Ts|Go$%WM4vt2w}#IeG6H$X5VFup~*7L5~(4{SW^;02-yiqcG+cL#u_4I zm+Z3jo9Ud+IiGWW-{lOlr1{h&6URVs#?FI_zjD^8bq+KbXG!R0>e&s@vAQ76YS83p$&ZH_Je^mnj zncek*13>Cf4AdRz3IN@Jy28-_Nuq%X;BN=n|2UBBNY*I0C+1IckUG*6LtLT(a=+X` zCU7(oi-Hm3N&PDx$>4W8^x>Yam|FlT2?+@RNDJYPA)WxFV~9QT zpz(d#lBD;G#e2PK?~tkxUfcWE<#jmXBxauAan~tCSnAzD_nO!4Lulw)Btn(Iq zR)+t8D(tSWJJjM1_G(k3jCem2mdD<}<|P+0cKoyMyo2<{@lI_Av2S)&KZpH1nW6sh zG}&y@)Yu1nAi+`e}SQ#3jTRPxWC@Z?S{5W5epq{ zIaT4pR$Y4Fm#cWm?y|_21aY@&aT;#}`J2b?Xj}8m_j#5BIJSd;9rZ4M|a(oU~=r`?So+&77@9uQ`y(xo16Yj8a*@l2h0k zy;EMbZR+BEZoU*TJJyr(M65S{i(jtC7OeCw~@Los1F6u!Cmd&0sVexrg zW~ymw!L9^l{l+psL^yOtI4d9&7 z1*&gc3#Z>?E4dJXU4@4aE8T4*Dk(RNm&H(B#8xKnnrgtt>>Rn?eKTj z*|Br1q*L&`W!n7IxX`}aj?n;ut&?2_PR!#?D;I-eYRLRgzifgx}BvceW3ZiGGi z`W%}P3uhMMSl}DEZ?TrTihHXrALN~g^6+Ex+%|cR;|`}RW#o(f`7sg3h28p^>sJpR zj>8(CmNzR~@}D4ZbzXG{=l10~KsR)>zI|dIO?Y+O;b0V*$1W|{&@*MB{NdrMsHeux z?NOF0_cZ;qar%!-b=fmyQJ5%OMyhCSDt#X#(eXB(4gW6x1A4$;tchR3^m{26CF(EB7u?G z#mpg|Ar~0AI`6y!g?LXc;3zhnrIojX`4UB+t-q{$({w|hqqLy-OuxOm^x!t+Mw{K> zW*+~$*Nb7?;l&aB)K+F1;8WEpMhy+ErolQ4roy)|JUJOxoX`|FJ~B-M;HeFVvWj#o z>f-#b!kgu$*lWe#%gYs5G?lCi>2Q)M1+BvmScPrzBC0+SFKo1Ka`≷Y9?xbm$6m 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 From a6c08a0b2555a16a143d4f02a5956357266bff5e Mon Sep 17 00:00:00 2001 From: Douglas Ezra Morrison Date: Wed, 7 Jan 2026 18:39:00 -0800 Subject: [PATCH 14/16] Update pkgdown.yaml --- .github/workflows/pkgdown.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/pkgdown.yaml b/.github/workflows/pkgdown.yaml index 35d8b214..92ac05bc 100644 --- a/.github/workflows/pkgdown.yaml +++ b/.github/workflows/pkgdown.yaml @@ -6,8 +6,6 @@ # more info: https://github.com/rstudio/education-workflows/tree/main/examples#deploy-pkgdown-to-github-pages-with-pr-previews-and-tagged-versions on: pull_request: - branches: - - main types: - opened - reopened From fe57e7d3d261a8cc9ee2dff055c7eaeb6a48ceb0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 8 Jan 2026 05:57:34 +0000 Subject: [PATCH 15/16] Initial plan From 0b13d9ff86fd8557d0b04fa2db2a2f417f955366 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 8 Jan 2026 06:03:20 +0000 Subject: [PATCH 16/16] Address PR review comments: fix indentation, update paths, use official Brave Search server Co-authored-by: d-morrison <2474437+d-morrison@users.noreply.github.com> --- .devcontainer/setup.sh | 2 +- .github/mcp/README.md | 17 ++++++++++++++--- .github/mcp/mcp-config.json | 4 +++- .github/workflows/pkgdown.yaml | 10 +++++----- .vscode/settings.json | 6 ++++-- 5 files changed, 27 insertions(+), 12 deletions(-) diff --git a/.devcontainer/setup.sh b/.devcontainer/setup.sh index f64ac790..fa7081be 100755 --- a/.devcontainer/setup.sh +++ b/.devcontainer/setup.sh @@ -43,7 +43,7 @@ Rscript -e "install.packages('rjags', repos = 'https://cloud.r-project.org', typ # Install package dependencies echo "Installing package dependencies..." -Rscript -e "if (!requireNamespace('pak', quietly = TRUE)) install.packages('pak', repos = 'https://cloud.r-project.org'); pak::local_install_dev_deps(dependencies = TRUE)" +Rscript -e "pak::local_install_dev_deps(dependencies = TRUE)" # Verify JAGS installation echo "Verifying JAGS installation..." diff --git a/.github/mcp/README.md b/.github/mcp/README.md index 1f1bfe3c..bd76e141 100644 --- a/.github/mcp/README.md +++ b/.github/mcp/README.md @@ -32,6 +32,18 @@ The `mcp-config.json` file configures the following MCP servers: ## Setup Instructions +### Important: Update Repository Paths + +**Before using this configuration**, you must update the hardcoded repository paths in `mcp-config.json` to match your local clone location: + +1. Open `.github/mcp/mcp-config.json` +2. Find all instances of `/home/runner/work/serodynamics/serodynamics` +3. Replace with your local repository path, for example: + - macOS/Linux: `/Users/yourname/projects/serodynamics` or `/home/yourname/serodynamics` + - Windows: `C:\\Users\\yourname\\projects\\serodynamics` + +The default paths are specific to GitHub Actions CI environment and will not work for local development. + ### Prerequisites 1. **Node.js**: Required to run the MCP servers via `npx` @@ -62,13 +74,12 @@ The `mcp-config.json` file configures the following MCP servers: If you want to use these MCP servers with Claude Desktop: 1. Copy the `mcpServers` section from `mcp-config.json` -2. Add it to your Claude Desktop configuration: +2. **Update the repository paths** (`/home/runner/work/serodynamics/serodynamics`) to your local clone path +3. Add the modified configuration to your Claude Desktop configuration file: - **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json` - **Windows**: `%APPDATA%\Claude\claude_desktop_config.json` - **Linux**: `~/.config/Claude/claude_desktop_config.json` -3. Update the repository path in the configuration to your local clone path - ## Development Workflow Integration The MCP servers are particularly useful for: diff --git a/.github/mcp/mcp-config.json b/.github/mcp/mcp-config.json index 064ea219..7ea02102 100644 --- a/.github/mcp/mcp-config.json +++ b/.github/mcp/mcp-config.json @@ -1,4 +1,6 @@ { + "$schema": "https://github.com/modelcontextprotocol/specification/blob/main/schema/mcp-config-schema.json", + "$comment": "NOTE: Update the repository paths ('/home/runner/work/serodynamics/serodynamics') to match your local clone location before using this configuration. The current paths are specific to GitHub Actions CI environment.", "mcpServers": { "filesystem": { "command": "npx", @@ -34,7 +36,7 @@ "command": "npx", "args": [ "-y", - "@modelcontextprotocol/server-brave-search" + "@brave/brave-search-mcp-server" ], "env": { "BRAVE_API_KEY": "${BRAVE_API_KEY}" diff --git a/.github/workflows/pkgdown.yaml b/.github/workflows/pkgdown.yaml index 0dfaaaa3..310d6689 100644 --- a/.github/workflows/pkgdown.yaml +++ b/.github/workflows/pkgdown.yaml @@ -89,11 +89,11 @@ jobs: repos = "https://cloud.r-project.org", type = "source", verbose = TRUE) - withr::local_options(warn = 2) - library(rjags) - library(runjags) - runjags::findJAGS() - runjags::testjags() + withr::local_options(warn = 2) + library(rjags) + library(runjags) + runjags::findJAGS() + runjags::testjags() shell: Rscript {0} # If events is a PR, set subdir to 'preview/pr' diff --git a/.vscode/settings.json b/.vscode/settings.json index 30397b69..15078771 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,10 +1,12 @@ { "r.rterm.linux": "/usr/bin/R", "r.rterm.mac": "/usr/local/bin/R", - "r.rterm.windows": "C:\\Program Files\\R\\R-4.1.0\\bin\\R.exe", + // Update this path to match your installed R version on Windows, e.g. R-4.4.0 + "r.rterm.windows": "C:\\Program Files\\R\\R-x.y.z\\bin\\R.exe", "r.rpath.linux": "/usr/bin/R", "r.rpath.mac": "/usr/local/bin/R", - "r.rpath.windows": "C:\\Program Files\\R\\R-4.1.0\\bin\\R.exe", + // Update this path to match your installed R version on Windows, e.g. R-4.4.0 + "r.rpath.windows": "C:\\Program Files\\R\\R-x.y.z\\bin\\R.exe", "r.alwaysUseActiveTerminal": true, "r.bracketedPaste": true, "r.sessionWatcher": true,