diff --git a/.devcontainer/AI_SETUP.md b/.devcontainer/AI_SETUP.md new file mode 100644 index 0000000..1f83ff4 --- /dev/null +++ b/.devcontainer/AI_SETUP.md @@ -0,0 +1,305 @@ +# AI Coding Assistant Setup for DevContainers + +This guide explains how to configure your devcontainer to automatically authenticate with AI coding assistants (OpenAI Codex, Anthropic Claude Code, and Google Gemini). + +## Overview + +When working in a devcontainer, AI coding assistant extensions need access to your authentication credentials. This is accomplished by mounting your local authentication directories into the container. + +## Supported AI Assistants + +- **OpenAI Codex** - VS Code extension for ChatGPT/GPT-4 code assistance +- **Anthropic Claude Code** - Claude AI integration for VS Code +- **Google Gemini** - Google's Gemini AI coding assistant + +## Quick Setup + +### 1. Check if You Have Authentication Files + +First, verify that you have authenticated with the AI tools on your host machine: + +```bash +# Check for Codex authentication +ls ~/.codex/ + +# Check for Claude authentication +ls ~/.claude/ + +# Check for Gemini authentication +ls ~/.gemini/ +``` + +If these directories don't exist, you need to authenticate on your host machine first (see "Initial Authentication" section below). + +### 2. Create Override File + +Copy the example override file to create your personal configuration: + +```bash +cd .devcontainer +cp docker-compose.override.example.yml docker-compose.override.yml +``` + +**Important:** The `docker-compose.override.yml` file is automatically gitignored and will not be committed to the repository. + +### 3. Edit Override File + +Open `docker-compose.override.yml` and uncomment the volume mounts for the AI tools you use: + +```yaml +services: + app: # Replace 'app' with your actual service name + volumes: + # Uncomment the lines you need: + - ~/.codex:/home/${USER:-vscode}/.codex:cached + - ~/.claude:/home/${USER:-vscode}/.claude:cached + - ~/.gemini:/home/${USER:-vscode}/.gemini:cached +``` + +**Note:** Make sure to replace `app` with your actual service name from `docker-compose.yml` (e.g., `gateway`, `web`, `dev`, etc.). + +### 4. Rebuild Devcontainer + +After editing the override file: + +1. In VS Code, press `Ctrl+Shift+P` (or `Cmd+Shift+P` on Mac) +2. Select: **Dev Containers: Rebuild Container** +3. Wait for the container to rebuild + +### 5. Verify Setup + +Once the container is running: + +1. Open a terminal in VS Code +2. Check that the directories are mounted: + +```bash +ls ~/.codex/ +ls ~/.claude/ +ls ~/.gemini/ +``` + +3. Try using an AI coding assistant extension - it should now work without requiring login + +## Initial Authentication + +If you haven't authenticated with the AI tools on your host machine yet, follow these steps: + +### OpenAI Codex Setup + +1. Install the OpenAI Codex CLI on your host: + ```bash + npm install -g @openai/codex + ``` + +2. Authenticate: + ```bash + codex login + ``` + +3. Follow the browser authentication flow + +### Claude Code Setup + +1. Install Claude Code CLI on your host: + ```bash + npm install -g @anthropic-ai/claude-code + ``` + +2. Authenticate: + ```bash + claude login + ``` + +3. Enter your API key when prompted + +### Gemini Setup + +1. Install Gemini CLI on your host: + ```bash + # Installation method varies - check Google's documentation + ``` + +2. Authenticate: + ```bash + gemini auth login + ``` + +3. Follow the authentication flow + +## Troubleshooting + +### AI Assistant Still Asks for Login + +**Problem:** The AI extension is still prompting for authentication inside the container. + +**Solutions:** + +1. **Check service name:** Ensure you replaced `app` with your actual service name in the override file + ```bash + # Check your service name in docker-compose.yml + grep "services:" -A 2 .devcontainer/docker-compose.yml + ``` + +2. **Verify mounts:** Inside the container, check if directories are mounted: + ```bash + ls -la ~/.codex ~/.claude ~/.gemini + ``` + +3. **Check permissions:** Ensure directories are readable: + ```bash + # On host machine + ls -la ~/.codex ~/.claude ~/.gemini + ``` + +4. **Rebuild container:** Sometimes changes require a full rebuild: + ``` + Ctrl+Shift+P → Dev Containers: Rebuild Container Without Cache + ``` + +### Permission Denied Errors + +**Problem:** Container can't read the authentication files. + +**Solution:** + +The files should be readable. If not, fix permissions on your host: + +```bash +chmod -R u+r ~/.codex ~/.claude ~/.gemini +``` + +### Wrong User Path + +**Problem:** Mounts are going to `/root/` instead of `/home/youruser/` + +**Solution:** + +Check that your devcontainer is running as the correct user: + +```bash +# Inside container +echo $USER +id +``` + +If running as root, update your devcontainer configuration to use the correct user. Check `devcontainer.json`: + +```json +{ + "remoteUser": "${localEnv:USER:vscode}" +} +``` + +### Container Name Mismatch + +**Problem:** Override file references wrong service name. + +**Solution:** + +Find your actual service name: + +```bash +# Look at docker-compose.yml +cat .devcontainer/docker-compose.yml | grep "services:" -A 5 +``` + +Common service names: `app`, `web`, `dev`, `service`, `gateway`, `backend` + +Update `docker-compose.override.yml` to use the correct service name. + +## Security Considerations + +### What Gets Mounted + +When you mount these directories, you're providing the container with: + +- **API Keys:** Authentication tokens for AI services +- **Session Data:** Cached responses and user preferences +- **Configuration:** Settings for the AI tools + +### Security Best Practices + +1. **Never commit override files:** The `.gitignore` should include: + ``` + docker-compose.override.yml + ``` + +2. **Read-only mounts (optional):** If you want extra security, use `:ro` flag: + ```yaml + - ~/.codex:/home/${USER}/.codex:ro + ``` + +3. **Revoke access:** If compromised, revoke API keys from the provider's dashboard + +4. **Separate development keys:** Consider using separate API keys for devcontainers vs production + +## Advanced Configuration + +### Multiple Projects, Same Overrides + +If you want the same AI setup across all projects, you can: + +1. Create a template override file +2. Copy it to each project's `.devcontainer/` folder +3. Adjust the service name as needed + +### Custom Mount Locations + +If your AI tools store credentials elsewhere: + +```yaml +services: + app: + volumes: + - ~/custom/path/to/codex:/home/${USER}/.codex:cached +``` + +### Team Best Practices + +For teams: + +1. **Commit the example:** Always commit `docker-compose.override.example.yml` +2. **Document in README:** Add a note about AI setup to your project README +3. **Add to gitignore:** Ensure override files are ignored: + ``` + .devcontainer/docker-compose.override.yml + ``` + +4. **Share setup docs:** Keep this `AI_SETUP.md` updated and committed + +## FAQ + +**Q: Will this work for all AI coding assistants?** +A: This pattern works for any AI tool that stores credentials in your home directory. + +**Q: Do I need all three (Codex, Claude, Gemini)?** +A: No, only uncomment the ones you actually use. + +**Q: Can I add other personal mounts?** +A: Yes! The override file is for your personal customizations. Add whatever you need. + +**Q: What if I don't want to use override files?** +A: You can mount these in `devcontainer.json` using the `mounts` property, but the override pattern is cleaner for team projects. + +**Q: Does this affect performance?** +A: No, the `:cached` flag ensures good performance. The mounted directories are small. + +## Support + +If you encounter issues: + +1. Check this documentation +2. Verify your setup using the troubleshooting section +3. Check the AI assistant's official documentation +4. Ask your team members who have it working + +## File Checklist + +After setup, you should have: + +- ✅ `.devcontainer/docker-compose.yml` - Base configuration (committed) +- ✅ `.devcontainer/docker-compose.override.example.yml` - Template (committed) +- ✅ `.devcontainer/docker-compose.override.yml` - Your config (gitignored) +- ✅ `.devcontainer/AI_SETUP.md` - This documentation (committed) +- ✅ `.gitignore` - Contains `docker-compose.override.yml` diff --git a/.devcontainer/BUILD_FIXES.md b/.devcontainer/BUILD_FIXES.md index c84f171..64ff34f 100755 --- a/.devcontainer/BUILD_FIXES.md +++ b/.devcontainer/BUILD_FIXES.md @@ -1,4 +1,6 @@ -# C++ Development Environment - Build Fixes and Troubleshooting +# C++ Development Environment - Build Fixes and Troubleshooting (Legacy) + +This document applies to the **legacy monolithic .devcontainer** build and is deprecated. The current standard is the layered image system (`workbench-base` → `devbench-base` → `cpp-bench`). Keep this for historical reference only. This document contains common build issues and their solutions for the C++ Heavy Development Environment. @@ -246,4 +248,4 @@ readelf -h your_binary # Check ELF header htop # System resource monitor valgrind --tool=massif # Memory profiler gprof # Performance profiler -``` \ No newline at end of file +``` diff --git a/.devcontainer/docker-compose.override.example.yml b/.devcontainer/docker-compose.override.example.yml new file mode 100644 index 0000000..da484a1 --- /dev/null +++ b/.devcontainer/docker-compose.override.example.yml @@ -0,0 +1,77 @@ +# Docker Compose Override File Example +# =========================================== +# This file enables AI coding assistants (Codex, Claude Code, Gemini) to authenticate +# automatically inside your devcontainer. +# +# SETUP INSTRUCTIONS: +# 1. Copy this file to: docker-compose.override.yml +# cp docker-compose.override.example.yml docker-compose.override.yml +# +# 2. The docker-compose.override.yml file is gitignored and will not be committed +# +# 3. Uncomment the volume mounts below for the AI tools you use +# +# 4. Restart your devcontainer for changes to take effect +# +# For detailed setup instructions, see: AI_SETUP.md + +services: + # Note: Replace 'app' with your actual service name from docker-compose.yml + # Common service names: app, web, dev, service, etc. + cppbench: + volumes: + # ======================================== + # AI Coding Assistant Configurations + # ======================================== + # Uncomment the lines below to enable auto-login for AI assistants + + # OpenAI Codex CLI Authentication + # Required for: VS Code Codex extension, OpenAI CLI tools + # Location: ~/.codex/ contains authentication tokens + # - ~/.codex:/home/${USER:-vscode}/.codex:cached + + # Anthropic Claude Code CLI Authentication + # Required for: VS Code Claude Code extension, Claude CLI tools + # Location: ~/.claude/ contains API keys and session data + # - ~/.claude:/home/${USER:-vscode}/.claude:cached + + # Google Gemini CLI Authentication + # Required for: VS Code Gemini extension, Gemini CLI tools + # Location: ~/.gemini/ contains authentication credentials + # - ~/.gemini:/home/${USER:-vscode}/.gemini:cached + + # ======================================== + # Shell & Terminal Configurations (Optional) + # ======================================== + # Uncomment to use your personal shell config inside the container + + # Zsh configuration + # - ~/.zshrc:/home/${USER:-vscode}/.zshrc:ro + # - ~/.oh-my-zsh:/home/${USER:-vscode}/.oh-my-zsh:ro + # - ~/.p10k.zsh:/home/${USER:-vscode}/.p10k.zsh:ro + + # Bash configuration + # - ~/.bashrc:/home/${USER:-vscode}/.bashrc:ro + + # ======================================== + # SSH Keys & Configuration (Optional) + # ======================================== + # Uncomment the SSH keys you have configured + + # - ~/.ssh/config:/home/${USER:-vscode}/.ssh/config:ro + # - ~/.ssh/id_ed25519:/home/${USER:-vscode}/.ssh/id_ed25519:ro + # - ~/.ssh/id_ed25519.pub:/home/${USER:-vscode}/.ssh/id_ed25519.pub:ro + # - ~/.ssh/id_rsa_ado:/home/${USER:-vscode}/.ssh/id_rsa_ado:ro + # - ~/.ssh/id_rsa_ado.pub:/home/${USER:-vscode}/.ssh/id_rsa_ado.pub:ro + # - ~/.ssh/known_hosts:/home/${USER:-vscode}/.ssh/known_hosts:ro + + # ======================================== + # Additional Personal Configurations (Optional) + # ======================================== + # You can add other personal mounts here as needed + + # Example: Additional SSH keys + # - ~/.ssh/id_custom:/home/${USER:-vscode}/.ssh/id_custom:ro + + # Example: Custom shell aliases + # - ~/.bash_aliases:/home/${USER:-vscode}/.bash_aliases:ro diff --git a/README.md b/README.md old mode 100644 new mode 100755 index 52de547..3c377d1 --- a/README.md +++ b/README.md @@ -2,6 +2,16 @@ A comprehensive, containerized C++ development environment designed for serious C++ development with modern toolchains, package managers, and debugging tools. +## 🧱 Container Architecture (Layered) + +cppBench follows the layered workBenches model: +- **Layer 0**: `workbench-base:{user}` +- **Layer 1a**: `devbench-base:{user}` +- **Layer 2**: `cpp-bench:{user}` (bench-specific tools) + +### Legacy Note +The `.devcontainer/` directory in this repo is a **legacy monolithic setup** and is deprecated. The layered images are the source of truth going forward. + ## 🚀 Features ### Compilers & Standards @@ -49,17 +59,18 @@ A comprehensive, containerized C++ development environment designed for serious ``` cppBench/ -├── .devcontainer/ # Development container configuration -│ ├── Dockerfile # Container definition with all tools +├── .devcontainer/ # Legacy monolithic devcontainer (deprecated) +│ ├── Dockerfile # Legacy container definition │ ├── devcontainer.json # VS Code devcontainer settings │ ├── docker-compose.yml # Multi-container orchestration │ ├── post-create.sh # Post-creation setup script │ ├── BUILD_FIXES.md # Troubleshooting guide │ ├── .env # Environment variables │ └── .env.example # Environment template -├── launch-devbench.sh # Quick VS Code launcher (Linux/macOS) -├── start-monster.ps1 # PowerShell launcher (Windows) -├── start-monster.sh # Advanced shell launcher +├── scripts/ +│ ├── launch-devbench.sh # Quick VS Code launcher (Linux/macOS) +│ ├── start-monster.ps1 # PowerShell launcher (Windows) +│ └── start-monster.sh # Advanced shell launcher ├── .gitignore # Comprehensive C++ gitignore └── README.md # This file ``` @@ -79,30 +90,30 @@ cppBench/ # Clone and launch git clone cd cppBench -./launch-devbench.sh +./scripts/launch-devbench.sh ``` #### Option 2: Shell Access ```bash # Launch with direct shell access -./start-monster.sh --shell +./scripts/start-monster.sh --shell # Or rebuild and launch -./start-monster.sh --rebuild --shell +./scripts/start-monster.sh --rebuild --shell ``` #### Option 3: Windows PowerShell ```powershell # Launch from PowerShell -.\start-monster.ps1 +.\scripts\start-monster.ps1 # Rebuild and launch -.\start-monster.ps1 -Rebuild +.\scripts\start-monster.ps1 -Rebuild ``` ### First Run -1. **Container Build** - First launch will build the container (~10-15 minutes) +1. **Image Build** - Build the layered images if they are missing 2. **VS Code Integration** - Extensions will install automatically 3. **Sample Project** - Ready-to-use C++20 sample project included 4. **Environment Setup** - All tools pre-configured and ready @@ -358,4 +369,4 @@ This development environment configuration is provided as-is for development use --- -**Ready for heavy C++ development!** 🛠️⚡🚀 \ No newline at end of file +**Ready for heavy C++ development!** 🛠️⚡🚀 diff --git a/launch-devbench.sh b/scripts/launch-devbench.sh similarity index 95% rename from launch-devbench.sh rename to scripts/launch-devbench.sh index c545c07..16ab851 100755 --- a/launch-devbench.sh +++ b/scripts/launch-devbench.sh @@ -50,8 +50,9 @@ SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" print_info "🚀 Launching C++ Heavy Development Environment..." print_info "This will build and start the devcontainer if needed." -# Change to the script directory -cd "$SCRIPT_DIR" +# Change to the bench directory (parent of scripts) +BENCH_DIR="$(dirname "$SCRIPT_DIR")" +cd "$BENCH_DIR" # Launch VS Code with devcontainer print_info "Opening VS Code devcontainer..." diff --git a/scripts/new-cpp-project.sh b/scripts/new-cpp-project.sh new file mode 100755 index 0000000..6c06414 --- /dev/null +++ b/scripts/new-cpp-project.sh @@ -0,0 +1,365 @@ +#!/bin/bash + +# C++ DevContainer Project Creation Script +# Creates a new C++ project with development container setup + +set -e + +PROJECT_NAME=$1 +TARGET_DIR=$2 + +# Validate project name is provided +if [ -z "$PROJECT_NAME" ]; then + echo "Usage: ./new-cpp-project.sh [target-directory]" + echo "Examples:" + echo " ./new-cpp-project.sh myapp # Creates ~/projects/myapp" + echo " ./new-cpp-project.sh myapp ../../MyProjects # Creates ../../MyProjects/myapp" + echo "" + echo "This script will:" + echo " 1. Create a new C++ project with CMake" + echo " 2. Copy DevContainer and VS Code configurations" + echo " 3. Set up build system and dependencies" + echo " 4. Configure Docker for development" + echo "" + exit 1 +fi + +# If no target directory specified, default to ~/projects/ +if [ -z "$TARGET_DIR" ]; then + TARGET_DIR="$HOME/projects" + PROJECT_PATH="$TARGET_DIR/$PROJECT_NAME" + + # Check if project already exists + if [ -d "$PROJECT_PATH" ]; then + echo "❌ Error: Project already exists at $PROJECT_PATH" + echo "Please choose a different project name or remove the existing project." + exit 1 + fi + + # Create the target directory if it doesn't exist + if [ ! -d "$TARGET_DIR" ]; then + echo "📁 Creating projects directory: $TARGET_DIR" + mkdir -p "$TARGET_DIR" + fi +else + PROJECT_PATH="$TARGET_DIR/$PROJECT_NAME" + + # Check if project already exists in specified directory + if [ -d "$PROJECT_PATH" ]; then + echo "❌ Error: Project already exists at $PROJECT_PATH" + echo "Please choose a different project name or remove the existing project." + exit 1 + fi +fi + +echo "⚡ Creating C++ project: $PROJECT_NAME" +echo "📍 Project path: $PROJECT_PATH" + +# Create project directory +mkdir -p "$PROJECT_PATH" +cd "$PROJECT_PATH" + +# Create C++ project structure +echo "📋 Creating C++ project structure..." +mkdir -p src include tests build docs + +# Create CMakeLists.txt +cat > CMakeLists.txt << EOF +cmake_minimum_required(VERSION 3.20) + +project($PROJECT_NAME VERSION 1.0.0 LANGUAGES CXX) + +# Set C++ standard +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + +# Set compiler flags +if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") + add_compile_options(-Wall -Wextra -Wpedantic) +endif() + +# Set build type +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release) +endif() + +# Include directories +include_directories(include) + +# Add executable +add_executable(\${PROJECT_NAME} src/main.cpp) + +# Optional: Add library if you have multiple source files +# add_library(\${PROJECT_NAME}_lib src/example.cpp) +# target_link_libraries(\${PROJECT_NAME} \${PROJECT_NAME}_lib) + +# Optional: Enable testing +# enable_testing() +# add_subdirectory(tests) + +# Installation +install(TARGETS \${PROJECT_NAME} DESTINATION bin) +EOF + +# Create main.cpp +cat > src/main.cpp << EOF +#include +#include + +int main() { + std::string projectName = "$PROJECT_NAME"; + std::cout << "Hello from " << projectName << "!" << std::endl; + std::cout << "Welcome to C++ development!" << std::endl; + return 0; +} +EOF + +# Create example header +cat > include/example.h << EOF +#ifndef EXAMPLE_H +#define EXAMPLE_H + +#include + +namespace $PROJECT_NAME { + class Example { + public: + Example(); + std::string getMessage() const; + + private: + std::string message_; + }; +} + +#endif // EXAMPLE_H +EOF + +# Create example implementation +cat > src/example.cpp << EOF +#include "example.h" + +namespace $PROJECT_NAME { + Example::Example() : message_("Hello from Example class!") {} + + std::string Example::getMessage() const { + return message_; + } +} +EOF + +# Create basic test (if using Google Test) +cat > tests/test_example.cpp << EOF +// Uncomment and modify this if you add Google Test +/* +#include +#include "example.h" + +TEST(ExampleTest, GetMessage) { + $PROJECT_NAME::Example example; + EXPECT_EQ(example.getMessage(), "Hello from Example class!"); +} + +int main(int argc, char **argv) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} +*/ + +// Simple test without Google Test framework +#include +#include + +int main() { + std::cout << "Running basic tests..." << std::endl; + + // Add your tests here + assert(true); // Example assertion + + std::cout << "All tests passed!" << std::endl; + return 0; +} +EOF + +# Create build script +cat > build.sh << EOF +#!/bin/bash +set -e + +BUILD_TYPE=\${1:-Release} +BUILD_DIR="build/\$BUILD_TYPE" + +echo "Building $PROJECT_NAME in \$BUILD_TYPE mode..." + +# Create build directory +mkdir -p "\$BUILD_DIR" + +# Configure with CMake +cd "\$BUILD_DIR" +cmake -DCMAKE_BUILD_TYPE=\$BUILD_TYPE ../../ + +# Build +make -j\$(nproc) + +echo "Build complete! Executable: \$BUILD_DIR/$PROJECT_NAME" +EOF + +chmod +x build.sh + +# Create README.md +cat > README.md << EOF +# $PROJECT_NAME + +A C++ project with development container setup. + +## Getting Started + +This project uses VS Code DevContainers for a consistent development environment. + +### Prerequisites + +- Docker Desktop +- VS Code with Remote-Containers extension + +### Development Setup + +1. Open this project in VS Code +2. When prompted, click "Reopen in Container" +3. Wait for the container to build (first time: ~5-10 minutes) +4. Start developing! + +### Project Structure + +\`\`\` +├── src/ # Source files +│ ├── main.cpp +│ └── example.cpp +├── include/ # Header files +│ └── example.h +├── tests/ # Test files +│ └── test_example.cpp +├── build/ # Build artifacts (generated) +├── docs/ # Documentation +├── CMakeLists.txt # CMake configuration +├── build.sh # Build script +└── README.md # This file +\`\`\` + +### Building the Project + +#### Using the build script (recommended): +\`\`\`bash +./build.sh # Release build +./build.sh Debug # Debug build +\`\`\` + +#### Manual CMake build: +\`\`\`bash +mkdir -p build/Release +cd build/Release +cmake -DCMAKE_BUILD_TYPE=Release ../../ +make -j\$(nproc) +\`\`\` + +### Running the Project + +After building: +\`\`\`bash +./build/Release/$PROJECT_NAME +\`\`\` + +### Available Commands + +- \`./build.sh\` - Build the project (Release mode) +- \`./build.sh Debug\` - Build in debug mode +- \`make clean\` - Clean build artifacts (from build directory) + +### Development Features + +This project includes: + +- C++20 standard +- CMake build system +- Proper project structure +- Example class and header +- Basic testing setup +- Compiler warnings enabled +- Cross-platform compatibility + +## Adding Dependencies + +To add external libraries, modify \`CMakeLists.txt\`: + +\`\`\`cmake +# Example: Adding a library +find_package(SomeLibrary REQUIRED) +target_link_libraries(\${PROJECT_NAME} SomeLibrary::SomeLibrary) +\`\`\` + +## License + +This project is licensed under the MIT License. +EOF + +# Create basic .gitignore +cat > .gitignore << EOF +# Build artifacts +build/ +*.o +*.a +*.so +*.exe + +# CMake +CMakeCache.txt +CMakeFiles/ +cmake_install.cmake +Makefile +*.cmake +!CMakeLists.txt + +# IDE files +.vscode/settings.json +.idea/ +*.swp +*.swo + +# OS generated files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# DevContainer +.devcontainer/docker-compose.override.yml +EOF + +echo "" +echo "✅ C++ project created successfully: $PROJECT_PATH" +echo "" +echo "📝 Next steps:" +echo " 1. cd $PROJECT_PATH" +echo " 2. code ." +echo " 3. When prompted, click 'Reopen in Container'" +echo " 4. Wait for container build (first time: ~5-10 minutes)" +echo " 5. Container will automatically:" +echo " - Install C++ compiler (GCC/Clang)" +echo " - Install CMake and build tools" +echo " - Set up development environment" +echo "" +echo "⚡ Development commands:" +echo " - ./build.sh : Build project (Release)" +echo " - ./build.sh Debug : Build project (Debug)" +echo " - ./build/Release/$PROJECT_NAME : Run application" +echo "" +echo "🛠️ Project features:" +echo " - C++20 standard" +echo " - CMake build system" +echo " - Example class structure" +echo " - Basic testing setup" +echo "" +echo "🎯 Happy C++ Development with Spec-Driven Development!" \ No newline at end of file diff --git a/start-monster.ps1 b/scripts/start-monster.ps1 similarity index 100% rename from start-monster.ps1 rename to scripts/start-monster.ps1 diff --git a/start-monster.sh b/scripts/start-monster.sh similarity index 100% rename from start-monster.sh rename to scripts/start-monster.sh