| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415 |
- #!/bin/bash
- # OpenCode Repository Demo
- # Shows repository structure and prompt library system
- #
- # Usage:
- # ./scripts/development/demo.sh # Interactive mode
- # ./scripts/development/demo.sh --quick # Quick tour (non-interactive)
- # ./scripts/development/demo.sh --full # Full demo (non-interactive)
- set -e
- # Colors
- RED='\033[0;31m'
- GREEN='\033[0;32m'
- YELLOW='\033[1;33m'
- BLUE='\033[0;34m'
- PURPLE='\033[0;35m'
- CYAN='\033[0;36m'
- NC='\033[0m' # No Color
- # Helper functions
- print_header() {
- echo ""
- echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
- echo -e "${CYAN} $1${NC}"
- echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
- echo ""
- }
- print_section() {
- echo ""
- echo -e "${BLUE}▶ $1${NC}"
- echo ""
- }
- print_success() {
- echo -e "${GREEN}✓${NC} $1"
- }
- print_info() {
- echo -e "${YELLOW}ℹ${NC} $1"
- }
- pause() {
- if [ "$NON_INTERACTIVE" != "true" ]; then
- echo ""
- read -p "Press Enter to continue..."
- else
- echo ""
- fi
- }
- # Main demo functions
- show_welcome() {
- clear
- print_header "Welcome to OpenCode Agents"
-
- cat << EOF
- OpenCode is a context-aware agent system for AI-powered development.
- This demo will show you:
- 1. Repository structure
- 2. Agent system architecture
- 3. Prompt library system
- 4. Testing framework
- 5. How to contribute
- Choose a mode:
- [1] Quick Tour (2-3 minutes)
- [2] Full Demo (10-15 minutes)
- [3] Interactive Explorer
- [q] Quit
- EOF
-
- read -p "Your choice: " choice
- echo "$choice"
- }
- show_repo_structure() {
- print_header "Repository Structure"
-
- print_section "Main Directories"
-
- cat << EOF
- ${GREEN}.opencode/${NC}
- ├── agent/ ${YELLOW}# Agents${NC}
- │ ├── openagent.md ${YELLOW}# Main orchestrator${NC}
- │ ├── opencoder.md ${YELLOW}# Development specialist${NC}
- │ └── subagents/ ${YELLOW}# Specialized subagents${NC}
- ├── prompts/ ${YELLOW}# Prompt library (variants)${NC}
- ├── command/ ${YELLOW}# Slash commands${NC}
- ├── tool/ ${YELLOW}# Utility tools${NC}
- └── context/ ${YELLOW}# Context files${NC}
- ${GREEN}evals/${NC}
- ├── agents/ ${YELLOW}# Agent test suites${NC}
- ├── framework/ ${YELLOW}# Testing framework${NC}
- └── results/ ${YELLOW}# Test results${NC}
- ${GREEN}scripts/${NC}
- ├── prompts/ ${YELLOW}# Prompt management${NC}
- └── tests/ ${YELLOW}# Test utilities${NC}
- ${GREEN}docs/${NC}
- ├── agents/ ${YELLOW}# Agent documentation${NC}
- ├── contributing/ ${YELLOW}# Contribution guides${NC}
- └── guides/ ${YELLOW}# User guides${NC}
- EOF
-
- pause
- }
- show_agent_system() {
- print_header "Agent System"
-
- print_section "Main Agents"
-
- if [ -f ".opencode/agent/openagent.md" ]; then
- print_success "openagent.md - Main orchestrator agent"
- echo " Handles planning, delegation, and workflow management"
- fi
-
- if [ -f ".opencode/agent/opencoder.md" ]; then
- print_success "opencoder.md - Development specialist"
- echo " Focused on writing clean, maintainable code"
- fi
-
- print_section "Subagents"
-
- if [ -d ".opencode/agent/subagents" ]; then
- subagent_count=$(find .opencode/agent/subagents -name "*.md" -type f | wc -l | tr -d ' ')
- echo "Found $subagent_count specialized subagents:"
- echo ""
-
- # Show subagent categories
- for category in .opencode/agent/subagents/*/; do
- if [ -d "$category" ]; then
- category_name=$(basename "$category")
- agent_count=$(find "$category" -name "*.md" -type f | wc -l | tr -d ' ')
- echo -e "${GREEN}$category_name/${NC} ($agent_count agents)"
- fi
- done
- fi
-
- pause
- }
- show_prompt_library() {
- print_header "Prompt Library System"
-
- print_section "How It Works"
-
- cat << EOF
- The prompt library allows different AI models to use optimized prompts:
- ${GREEN}.opencode/agent/${NC}
- └── openagent.md ${YELLOW}# Canonical default (Claude-optimized)${NC}
- ${GREEN}.opencode/prompts/openagent/${NC}
- ├── gpt.md ${YELLOW}# GPT-4 optimized${NC}
- ├── gemini.md ${YELLOW}# Gemini optimized${NC}
- ├── grok.md ${YELLOW}# Grok optimized${NC}
- ├── llama.md ${YELLOW}# Llama/OSS optimized${NC}
- ├── TEMPLATE.md ${YELLOW}# Template for new variants${NC}
- └── results/ ${YELLOW}# Test results (all variants)${NC}
- ${BLUE}Key Principles:${NC}
- • Agent files are canonical defaults (source of truth)
- • Variants are model-specific optimizations
- • All variants tested and documented
- • Users can choose the best prompt for their model
- • Contributors can add optimized variants
- EOF
-
- pause
-
- print_section "Available Variants"
-
- if [ -d ".opencode/prompts" ]; then
- for agent_dir in .opencode/prompts/*/; do
- if [ -d "$agent_dir" ]; then
- agent=$(basename "$agent_dir")
- echo -e "${GREEN}$agent:${NC}"
-
- variant_count=0
- for variant in "$agent_dir"*.md; do
- if [ -f "$variant" ]; then
- variant_name=$(basename "$variant" .md)
- if [ "$variant_name" != "README" ] && [ "$variant_name" != "TEMPLATE" ]; then
- variant_count=$((variant_count + 1))
- # Check if results exist
- results_file="$agent_dir/results/$variant_name-results.json"
- if [ -f "$results_file" ]; then
- passed=$(jq -r '.passed // 0' "$results_file" 2>/dev/null || echo "?")
- total=$(jq -r '.total // 0' "$results_file" 2>/dev/null || echo "?")
- echo " ✓ $variant_name ($passed/$total tests passing)"
- else
- echo " • $variant_name (not tested)"
- fi
- fi
- fi
- done
-
- if [ $variant_count -eq 0 ]; then
- echo " ${YELLOW}No variants yet - coming soon!${NC}"
- fi
- echo ""
- fi
- done
- else
- echo "${YELLOW}Prompt library not yet set up - coming soon!${NC}"
- fi
-
- pause
- }
- show_testing_framework() {
- print_header "Testing Framework"
-
- print_section "Test Structure"
-
- cat << EOF
- ${GREEN}evals/agents/openagent/tests/${NC}
- ├── 01-critical-rules/ ${YELLOW}# Core behavior tests${NC}
- ├── 02-workflow-stages/ ${YELLOW}# Workflow validation${NC}
- ├── 03-delegation/ ${YELLOW}# Delegation logic${NC}
- └── ...
- Each test validates specific agent behaviors.
- EOF
-
- if [ -d "evals/agents/openagent/tests" ]; then
- test_count=$(find evals/agents/openagent/tests -name "*.json" -type f | wc -l | tr -d ' ')
- echo "Total tests: $test_count"
- echo ""
- fi
-
- print_section "Running Tests"
-
- cat << EOF
- ${BLUE}Test a prompt variant:${NC}
- ./scripts/prompts/test-prompt.sh openagent sonnet-4
- ${BLUE}Validate PR:${NC}
- ./scripts/prompts/validate-pr.sh
- ${BLUE}Use a variant:${NC}
- ./scripts/prompts/use-prompt.sh openagent sonnet-4
- EOF
-
- pause
- }
- show_contributing() {
- print_header "Contributing"
-
- print_section "How to Contribute"
-
- cat << EOF
- ${BLUE}1. Create a prompt variant:${NC}
- cp .opencode/prompts/openagent/TEMPLATE.md .opencode/prompts/openagent/my-variant.md
- ${BLUE}2. Edit your variant:${NC}
- # Optimize for your target model
- vim .opencode/prompts/openagent/my-variant.md
- ${BLUE}3. Test it:${NC}
- ./scripts/prompts/test-prompt.sh openagent my-variant
- ${BLUE}4. Document results:${NC}
- # Update .opencode/prompts/openagent/README.md with test results
- ${BLUE}5. Submit PR:${NC}
- # Include your variant and results
- # Do NOT change the default prompt
- ${YELLOW}Important:${NC} All PRs must use default prompts (CI enforces this)
- EOF
-
- print_section "Other Ways to Contribute"
-
- cat << EOF
- • Add new agents or subagents
- • Improve documentation
- • Add test cases
- • Fix bugs
- • Enhance the testing framework
- See ${BLUE}docs/contributing/CONTRIBUTING.md${NC} for details.
- EOF
-
- pause
- }
- interactive_mode() {
- while true; do
- clear
- print_header "Interactive Explorer"
-
- cat << EOF
- Choose a section to explore:
- [1] Repository Structure
- [2] Agent System
- [3] Prompt Library
- [4] Testing Framework
- [5] Contributing Guide
- [b] Back to main menu
- [q] Quit
- EOF
-
- read -p "Your choice: " choice
-
- case $choice in
- 1) show_repo_structure ;;
- 2) show_agent_system ;;
- 3) show_prompt_library ;;
- 4) show_testing_framework ;;
- 5) show_contributing ;;
- b) return ;;
- q) exit 0 ;;
- *) echo "Invalid choice" ;;
- esac
- done
- }
- quick_tour() {
- show_repo_structure
- show_agent_system
- show_prompt_library
-
- print_header "Quick Tour Complete!"
-
- cat << EOF
- ${GREEN}Next Steps:${NC}
- • Read the docs: ${BLUE}docs/README.md${NC}
- • Try the agents: ${BLUE}.opencode/agent/${NC}
- • Run tests: ${BLUE}./scripts/prompts/test-prompt.sh${NC}
- • Contribute: ${BLUE}docs/contributing/CONTRIBUTING.md${NC}
- ${YELLOW}For more details, run:${NC}
- ./scripts/development/demo.sh
- EOF
- }
- full_demo() {
- show_repo_structure
- show_agent_system
- show_prompt_library
- show_testing_framework
- show_contributing
-
- print_header "Demo Complete!"
-
- cat << EOF
- ${GREEN}You've seen:${NC}
- ✓ Repository structure
- ✓ Agent system architecture
- ✓ Prompt library system
- ✓ Testing framework
- ✓ How to contribute
- ${YELLOW}Ready to get started?${NC}
- • Read: ${BLUE}docs/getting-started/installation.md${NC}
- • Explore: ${BLUE}.opencode/prompts/${NC}
- • Test: ${BLUE}./scripts/prompts/test-prompt.sh${NC}
- EOF
- }
- # Main
- main() {
- # Check for command line arguments
- if [ "$1" = "--quick" ]; then
- NON_INTERACTIVE=true
- quick_tour
- exit 0
- elif [ "$1" = "--full" ]; then
- NON_INTERACTIVE=true
- full_demo
- exit 0
- elif [ "$1" = "--help" ] || [ "$1" = "-h" ]; then
- cat << EOF
- OpenCode Repository Demo
- Usage:
- ./scripts/development/demo.sh Interactive mode with menu
- ./scripts/development/demo.sh --quick Quick tour (non-interactive)
- ./scripts/development/demo.sh --full Full demo (non-interactive)
- ./scripts/development/demo.sh --help Show this help
- EOF
- exit 0
- fi
-
- # Interactive mode
- choice=$(show_welcome)
-
- case $choice in
- 1) quick_tour ;;
- 2) full_demo ;;
- 3) interactive_mode ;;
- q) exit 0 ;;
- *) echo "Invalid choice"; exit 1 ;;
- esac
- }
- main "$@"
|