diff --git a/AI Driven Development Guide.md b/AI Driven Development Guide.md new file mode 100644 index 00000000..db0c261d --- /dev/null +++ b/AI Driven Development Guide.md @@ -0,0 +1,244 @@ +# AI-Driven Development Guide + +This guide covers the AI-driven feature development system for the Android Auth multi-repo project. It automates the full lifecycle: **Design → Plan → Backlog → Dispatch → Monitor**. + +## Quick Start + +### 1. Run the setup script + +```powershell +.\scripts\setup-ai-orchestrator.ps1 +``` + +This checks/installs all prerequisites, configures GitHub accounts, clones design-docs, and builds + installs the Feature Orchestrator VS Code extension. + +### 2. Reload VS Code + +After setup completes, press `Ctrl+Shift+P` → "Reload Window". + +### 3. Start a feature + +Either: +- Click the **+** button in the Feature Orchestrator sidebar (rocket icon in the activity bar) +- Type `/feature-design ` in Copilot Chat +- Switch to the **feature-orchestrator** agent in the agents dropdown and describe your feature + +--- + +## The Pipeline + +Every feature goes through these stages: + +``` +Design → Plan → Backlog → Dispatch → Monitor +``` + +| Stage | What happens | Who does the work | +|-------|-------------|-------------------| +| **Design** | Researches codebase, writes a design spec, opens ADO PR for review | AI (codebase-researcher + design-writer agents) | +| **Plan** | Decomposes the approved design into repo-targeted PBIs | AI (feature-planner agent) | +| **Backlog** | Creates PBIs as work items in Azure DevOps | AI (pbi-creator agent) + you (confirming area path, iteration, assignee) | +| **Dispatch** | Sends PBIs to GitHub Copilot coding agent for implementation | AI (agent-dispatcher) | +| **Monitor** | Tracks agent PRs, reviews code, iterates on feedback | You + AI | + +### Approval Gates + +The pipeline **stops between stages** and asks for your approval before proceeding. You stay in control — the AI proposes, you decide. + +--- + +## Prompt Commands + +Type these in Copilot Chat to invoke each stage: + +| Command | Purpose | +|---------|---------| +| `/feature-design ` | Start a new feature — research + design spec | +| `/feature-plan` | Decompose approved design into PBIs | +| `/feature-backlog` | Create PBIs in Azure DevOps | +| `/feature-dispatch` | Dispatch PBIs to Copilot coding agent | +| `/feature-status` | Check tracked PR statuses | +| `/feature-continue` | Resume from current pipeline step | +| `/feature-pr-iterate` | Review a PR, analyze comments, send feedback to `@copilot` | + +--- + +## The Dashboard + +The Feature Orchestrator sidebar shows: + +- **Metrics** — active/completed features, PBI count, PRs merged +- **Active Features** — cards with progress dots and action buttons +- **Completed Features** — archived features with all artifacts +- **My Open PRs** — your PRs + Copilot agent PRs across all repos + +Click any feature card to open the **Feature Detail Panel**. + +### Feature Detail Panel + +Shows everything about a feature in one place: + +- **Pipeline progress** — visual stage tracker +- **Phase durations** — how long each stage took +- **Design Spec** — link to doc + ADO PR +- **PBI table** — order, dependencies, status, dispatch button (🚀) +- **Agent PRs** — status, comments, iterate (💬) and checkout (📥) buttons +- **Manual entry** — add design specs, PBIs, or PRs via + buttons +- **Live refresh** — fetches latest PBI status from ADO and PR status from GitHub + +--- + +## Working with Agent PRs + +When the Copilot coding agent creates a PR: + +### Review + +1. Click **📥** (Checkout) in the detail panel to get the branch locally +2. Review the code in VS Code +3. Click **💬** (Iterate) to analyze reviewer comments and send feedback + +### Iterate + +The `/feature-pr-iterate` command: +1. Fetches the PR diff and all review comments +2. Presents options: delegate to `@copilot`, analyze first, or approve +3. If analyzing: shows each reviewer comment with a proposed resolution +4. Posts `@copilot` comments on the PR to trigger another round of agent coding + +### Auto-Completion + +When all PBIs for a feature are resolved/done: +- The feature automatically moves to "Complete" +- You get a notification: "🎉 Feature is complete!" + +--- + +## Manual Artifact Entry + +Not everything has to go through the AI pipeline. You can manually register: + +- **Design specs** — Browse for a local file or paste an ADO PR URL +- **PBIs** — Enter an AB# ID (auto-fetches title and status from ADO) +- **PRs** — Enter repo + PR number (auto-fetches from GitHub) + +Use the **+** buttons on each section header in the detail panel. + +--- + +## State Management + +Feature state is stored at `~/.android-auth-orchestrator/state.json` (not in the repo — each developer has their own state). + +### CLI Commands + +The AI agent calls these automatically during the pipeline — you don't need to run them +yourself. They're documented here for reference and manual troubleshooting. + +```powershell +# List all features +node .github/hooks/state-utils.js list-features + +# Get full feature details +node .github/hooks/state-utils.js get-feature "" + +# Update step +node .github/hooks/state-utils.js set-step "" + +# Add artifacts +node .github/hooks/state-utils.js set-design "" '{"docPath":"...","status":"approved"}' +node .github/hooks/state-utils.js add-pbi "" '{"adoId":123,"title":"...","module":"common","status":"Committed"}' +node .github/hooks/state-utils.js add-agent-pr "" '{"repo":"common","prNumber":123,"prUrl":"...","status":"open"}' +``` + +**Note**: Use single quotes for JSON args in PowerShell. + +--- + +## Prerequisites + +The setup script handles all of these, but for reference: + +| Requirement | Purpose | Required? | +|------------|---------|-----------| +| VS Code ≥ 1.109 | Agent mode, skills, prompt files, askQuestion | **Yes** | +| GitHub Copilot extension | Chat, agents | **Yes** | +| Node.js | Hooks, state management, extension build | **Yes** | +| GitHub CLI (`gh`) | Dispatch, PR status, checkout | **Yes** | +| Azure CLI (`az`) + devops extension | Live PBI status refresh | Optional | +| `design-docs/` repo | Design spec authoring + PR creation | Recommended | + +### GitHub Authentication + +You need two GitHub accounts authenticated via `gh`: +- **Public** (e.g., `johndoe`) — for AzureAD/* repos (common, msal, adal) +- **EMU** (e.g., `johndoe_microsoft`) — for identity-authnz-teams/* repos (broker) + +The setup script discovers logged-in accounts and saves them to `.github/developer-local.json`. + +--- + +## Works Without the Extension + +The entire pipeline works without the VS Code extension installed. Prompt files, agents, hooks, and state management are all independent. The extension only provides: +- Dashboard sidebar with metrics and feature cards +- Feature detail panel with artifact tracking +- Local design spec review (inline comments via gutter icons + the **design-reviewer** skill that reads and addresses your comments) +- Live refresh, auto-completion detection + +Without it, you use `/feature-design`, `/feature-plan`, etc. directly in chat. The AI agent manages state automatically via the CLI. + +--- + +## Troubleshooting + +| Issue | Solution | +|-------|---------| +| `/feature-design` not recognized | Ensure VS Code ≥ 1.109 and check `.github/prompts/` folder exists | +| Agent doesn't follow orchestrator instructions | Check `.github/agents/feature-orchestrator.agent.md` is present | +| State commands return "Feature not found" | Check feature name matches exactly (case-insensitive) | +| Dashboard shows wrong step | Click ↻ Refresh or check `~/.android-auth-orchestrator/state.json` | +| `gh agent-task create` fails | Verify `gh auth status` shows both accounts authenticated | +| PBI status not updating | Ensure `az` CLI is installed and authenticated (`az login`) | +| Extension not loading | Run `.\scripts\setup-ai-orchestrator.ps1` to rebuild | + +--- + +## Architecture Overview + +``` +┌──────────────────────────────────────────────────────────┐ +│ VS Code Extension │ +│ Dashboard │ Feature Detail │ Design Review │ State Mgmt │ +└──────────────────────┬───────────────────────────────────┘ + │ +┌──────────────────────┴───────────────────────────────────┐ +│ Prompt Files │ +│ /feature-design │ /feature-plan │ /feature-status │ ... │ +└──────────────────────┬───────────────────────────────────┘ + │ +┌──────────────────────┴──────────────────────────────────┐ +│ feature-orchestrator Agent │ +│ Conductor — delegates to subagents │ +└──────────────────────┬──────────────────────────────────┘ + │ + ┌──────────────┼──────────────┐ + │ │ │ + Researcher Design Writer Planner + │ │ │ + PBI Creator Dispatcher (skills) +``` + +### Key Files + +| Component | Location | +|-----------|----------| +| Setup script | `scripts/setup-ai-orchestrator.ps1` | +| Agents | `.github/agents/*.agent.md` | +| Skills | `.github/skills/*/SKILL.md` | +| Prompt files | `.github/prompts/*.prompt.md` | +| Hooks | `.github/hooks/orchestrator.json` | +| State CLI | `.github/hooks/state-utils.js` | +| Extension source | `extensions/feature-orchestrator/src/` | +| MCP config | `.vscode/mcp.json` | +| Project instructions | `.github/copilot-instructions.md` | diff --git a/README.md b/README.md index 25e4a5d6..fcec4d50 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,15 @@ This repository contains a build gradle and git alias commands for building ADAL, MSAL, Authentication Broker, Common and test apps. This project is intended for use by developers building and verifying integration primarily between ADAL, MSAL and the Android Authentication Broker. +## AI-Driven Feature Development + +This repo supports an AI-driven development pipeline powered by GitHub Copilot agents. Design, plan, create work items, dispatch to coding agents, and monitor PRs — all from VS Code. + +**Get started**: See the [AI Driven Development Guide](AI%20Driven%20Development%20Guide.md) for full instructions, or run: +```powershell +.\scripts\setup-ai-orchestrator.ps1 +``` + ## Pre-requisites The android related auth projects pull artifacts from public and private package repositories. The private artifacts are published using Azure DevOps. You will need to generate diff --git a/scripts/setup-ai-orchestrator.ps1 b/scripts/setup-ai-orchestrator.ps1 new file mode 100644 index 00000000..4064227c --- /dev/null +++ b/scripts/setup-ai-orchestrator.ps1 @@ -0,0 +1,383 @@ +#!/usr/bin/env pwsh +<# +.SYNOPSIS + Setup script for the AI-Driven Feature Orchestrator. + Ensures all prerequisites are installed, authenticated, and configured. + +.DESCRIPTION + Run this once to set up your environment for AI-driven feature development. + It checks/installs tools, authenticates GitHub accounts, clones design-docs, + and installs the Feature Orchestrator VS Code extension. + +.EXAMPLE + .\scripts\setup-ai-orchestrator.ps1 +#> + +$ErrorActionPreference = "Continue" +$repoRoot = Split-Path -Parent (Split-Path -Parent $PSScriptRoot) +if (-not (Test-Path (Join-Path $repoRoot ".github"))) { + $repoRoot = Split-Path -Parent $PSScriptRoot + if (-not (Test-Path (Join-Path $repoRoot ".github"))) { + $repoRoot = $PWD.Path + } +} + +Write-Host "" +Write-Host "========================================" -ForegroundColor Cyan +Write-Host " AI Feature Orchestrator Setup" -ForegroundColor Cyan +Write-Host "========================================" -ForegroundColor Cyan +Write-Host "" +Write-Host "Repo root: $repoRoot" +Write-Host "" + +$issues = @() +$warnings = @() + +# ============================================================ +# 0. Check VS Code & Copilot +# ============================================================ +Write-Host "[0/7] Checking VS Code & GitHub Copilot..." -ForegroundColor Yellow + +# Check VS Code +try { + $codeVersion = (code --version 2>&1 | Select-Object -First 1) + $versionParts = $codeVersion -split "\." + $major = [int]$versionParts[0] + $minor = [int]$versionParts[1] + if ($major -gt 1 -or ($major -eq 1 -and $minor -ge 109)) { + Write-Host " OK: VS Code $codeVersion" -ForegroundColor Green + } else { + Write-Host " WARNING: VS Code $codeVersion is too old. Requires >= 1.109 for agents, skills, prompt files, and askQuestion." -ForegroundColor Yellow + Write-Host " Update: Help > Check for Updates, or download from https://code.visualstudio.com" -ForegroundColor Yellow + Write-Host " (The rest of setup will continue — update VS Code afterward and you're good)" -ForegroundColor DarkGray + $warnings += "VS Code version $codeVersion is below 1.109. Update via Help > Check for Updates." + } +} catch { + Write-Host " MISSING: VS Code ('code' command not found)." -ForegroundColor Red + Write-Host " Install from https://code.visualstudio.com and ensure 'code' is in PATH." -ForegroundColor Red + exit 1 +} + +# Check GitHub Copilot extension +try { + $copilotExtensions = code --list-extensions 2>&1 | Select-String -Pattern "github\.copilot" + if ($copilotExtensions) { + Write-Host " OK: GitHub Copilot installed" -ForegroundColor Green + } else { + Write-Host " WARNING: GitHub Copilot extension not found." -ForegroundColor Yellow + Write-Host " Install from VS Code: Extensions > search 'GitHub Copilot' > Install" -ForegroundColor Yellow + Write-Host " (Requires a GitHub Copilot license. The rest of setup will continue)" -ForegroundColor DarkGray + $warnings += "GitHub Copilot extension is required for agents and prompt files." + } +} catch { + # Couldn't check — skip +} + +# ============================================================ +# 1. Check Node.js +# ============================================================ +Write-Host "[1/7] Checking Node.js..." -ForegroundColor Yellow +try { + $nodeVersion = (node --version 2>&1) + Write-Host " OK: Node.js $nodeVersion" -ForegroundColor Green +} catch { + Write-Host " MISSING: Node.js (required for hooks, state management, and extension build)" -ForegroundColor Red + $install = Read-Host " Install Node.js now? (Y/n)" + if ($install -ne "n") { + Write-Host " Installing via winget..." -ForegroundColor Cyan + winget install --id OpenJS.NodeJS.LTS -e --accept-source-agreements --accept-package-agreements + Write-Host " Installed. Please restart your terminal and re-run this script." -ForegroundColor Yellow + Write-Host " (Node.js won't be available until the terminal is restarted)" -ForegroundColor Yellow + exit 0 + } else { + Write-Host " Node.js is required. Install it and re-run this script." -ForegroundColor Red + exit 1 + } +} + +# ============================================================ +# 2. Check & install GitHub CLI +# ============================================================ +Write-Host "[2/7] Checking GitHub CLI (gh)..." -ForegroundColor Yellow +try { + $ghVersion = (gh --version 2>&1 | Select-Object -First 1) + Write-Host " OK: $ghVersion" -ForegroundColor Green +} catch { + Write-Host " MISSING: GitHub CLI" -ForegroundColor Red + $install = Read-Host " Install GitHub CLI now? (Y/n)" + if ($install -ne "n") { + Write-Host " Installing via winget..." -ForegroundColor Cyan + winget install --id GitHub.cli -e --accept-source-agreements --accept-package-agreements + Write-Host " Installed. You may need to restart your terminal." -ForegroundColor Green + } else { + $issues += "GitHub CLI (gh) is required for dispatching PBIs and checking PR status." + } +} + +# ============================================================ +# 3. Authenticate GitHub accounts +# ============================================================ +Write-Host "[3/7] Checking GitHub authentication..." -ForegroundColor Yellow + +$devLocalPath = Join-Path $repoRoot ".github" "developer-local.json" +$ghAccounts = @{} + +# Check if developer-local.json already exists +if (Test-Path $devLocalPath) { + try { + $config = Get-Content $devLocalPath -Raw | ConvertFrom-Json + $ghAccounts = @{ + "AzureAD" = $config.github_accounts.AzureAD + "identity-authnz-teams" = $config.github_accounts."identity-authnz-teams" + } + Write-Host " OK: developer-local.json exists" -ForegroundColor Green + Write-Host " AzureAD account: $($ghAccounts['AzureAD'])" -ForegroundColor DarkGray + Write-Host " EMU account: $($ghAccounts['identity-authnz-teams'])" -ForegroundColor DarkGray + } catch { + Write-Host " WARNING: developer-local.json exists but couldn't be parsed" -ForegroundColor Yellow + } +} + +if (-not $ghAccounts["AzureAD"] -or -not $ghAccounts["identity-authnz-teams"]) { + Write-Host " GitHub accounts not configured. Let's set them up." -ForegroundColor Yellow + Write-Host "" + + # Discover logged-in accounts from gh auth status + $loggedIn = @() + $discoveredPublic = "" + $discoveredEmu = "" + try { + $ghStatus = gh auth status 2>&1 + foreach ($line in $ghStatus) { + $match = [regex]::Match($line, "account\s+(\S+)") + if ($match.Success) { $loggedIn += $match.Groups[1].Value } + } + if ($loggedIn.Count -gt 0) { + Write-Host " Found logged-in GitHub accounts:" -ForegroundColor Green + foreach ($acct in $loggedIn) { + if ($acct -match "_") { + Write-Host " EMU: $acct" -ForegroundColor DarkGray + if (-not $discoveredEmu) { $discoveredEmu = $acct } + } else { + Write-Host " Public: $acct" -ForegroundColor DarkGray + if (-not $discoveredPublic) { $discoveredPublic = $acct } + } + } + } + } catch { + # gh not authenticated at all + } + + # Public account (AzureAD repos) + if (-not $ghAccounts["AzureAD"]) { + Write-Host "" + Write-Host " You need a PUBLIC GitHub account for AzureAD/* repos (common, msal, adal)." -ForegroundColor Cyan + if ($discoveredPublic) { + $confirm = Read-Host " Use discovered account '$discoveredPublic'? (Y/n)" + if ($confirm -ne "n") { + $publicUser = $discoveredPublic + } else { + $publicUser = Read-Host " Enter your public GitHub username" + } + } else { + $publicUser = Read-Host " Enter your public GitHub username (e.g., johndoe)" + } + if ($publicUser) { + $ghAccounts["AzureAD"] = $publicUser + $isLoggedIn = $loggedIn -contains $publicUser + if (-not $isLoggedIn) { + Write-Host " Authenticating $publicUser with GitHub..." -ForegroundColor Cyan + gh auth login --hostname github.com --git-protocol https --web + } + } + } + + # EMU account (identity-authnz-teams repos) + if (-not $ghAccounts["identity-authnz-teams"]) { + Write-Host "" + Write-Host " You need an EMU GitHub account for identity-authnz-teams/* repos (broker)." -ForegroundColor Cyan + if ($discoveredEmu) { + $confirm = Read-Host " Use discovered account '$discoveredEmu'? (Y/n)" + if ($confirm -ne "n") { + $emuUser = $discoveredEmu + } else { + $emuUser = Read-Host " Enter your EMU GitHub username" + } + } else { + $emuUser = Read-Host " Enter your EMU GitHub username (e.g., johndoe_microsoft)" + } + if ($emuUser) { + $ghAccounts["identity-authnz-teams"] = $emuUser + $isLoggedIn = $loggedIn -contains $emuUser + if (-not $isLoggedIn) { + Write-Host " Authenticating $emuUser with GitHub..." -ForegroundColor Cyan + gh auth login --hostname github.com --git-protocol https --web + } + } + } + + # Save developer-local.json + if ($ghAccounts["AzureAD"] -and $ghAccounts["identity-authnz-teams"]) { + $config = @{ + github_accounts = @{ + AzureAD = $ghAccounts["AzureAD"] + "identity-authnz-teams" = $ghAccounts["identity-authnz-teams"] + } + } + $configDir = Join-Path $repoRoot ".github" + if (-not (Test-Path $configDir)) { New-Item -ItemType Directory -Path $configDir -Force | Out-Null } + $config | ConvertTo-Json -Depth 3 | Set-Content $devLocalPath -Encoding UTF8 + Write-Host " Saved to .github/developer-local.json" -ForegroundColor Green + } else { + $warnings += "GitHub accounts not fully configured. Dispatch and PR monitoring may not work." + } +} + +# ============================================================ +# 4. Check Azure CLI + DevOps extension +# ============================================================ +Write-Host "[4/7] Checking Azure CLI (az)..." -ForegroundColor Yellow +try { + $azVersion = (az version -o tsv 2>&1 | Select-Object -First 1) + Write-Host " OK: Azure CLI installed" -ForegroundColor Green + + # Check azure-devops extension + $extensions = az extension list -o json 2>&1 | ConvertFrom-Json + $hasDevOps = $extensions | Where-Object { $_.name -eq "azure-devops" } + if ($hasDevOps) { + Write-Host " OK: azure-devops extension installed" -ForegroundColor Green + } else { + Write-Host " Installing azure-devops extension..." -ForegroundColor Cyan + az extension add --name azure-devops 2>&1 | Out-Null + Write-Host " Installed." -ForegroundColor Green + } + + # Check if logged in + try { + az account show --only-show-errors -o none 2>&1 | Out-Null + Write-Host " OK: Authenticated with Azure" -ForegroundColor Green + } catch { + Write-Host " Not authenticated. Running az login..." -ForegroundColor Yellow + az login --output none + } +} catch { + Write-Host " OPTIONAL: Azure CLI not installed" -ForegroundColor Yellow + Write-Host " (Needed for live PBI status refresh. Install: winget install Microsoft.AzureCLI)" -ForegroundColor DarkGray + $warnings += "Azure CLI not installed. PBI status refresh in the dashboard will be unavailable." +} + +# ============================================================ +# 5. Clone design-docs if missing +# ============================================================ +Write-Host "[5/7] Checking design-docs..." -ForegroundColor Yellow +$designDocsPath = Join-Path $repoRoot "design-docs" +if (Test-Path $designDocsPath) { + $isGitRepo = Test-Path (Join-Path $designDocsPath ".git") + if ($isGitRepo) { + Write-Host " OK: design-docs/ exists and is a git repo" -ForegroundColor Green + } else { + Write-Host " WARNING: design-docs/ exists but is not a git repo. Design PR creation may not work." -ForegroundColor Yellow + Write-Host " Consider deleting it and re-running this script to clone properly." -ForegroundColor Yellow + $warnings += "design-docs/ is not a git repo. Delete it and re-run setup to clone from ADO." + } +} else { + Write-Host " design-docs/ not found. Cloning from ADO..." -ForegroundColor Yellow + try { + git clone -b dev "https://dev.azure.com/IdentityDivision/DevEx/_git/AuthLibrariesApiReview" $designDocsPath 2>&1 | Out-Null + Write-Host " Cloned successfully." -ForegroundColor Green + } catch { + Write-Host " Failed to clone. You may need to run 'git droidSetup' or clone manually." -ForegroundColor Red + $warnings += "design-docs/ not available. Design authoring will be limited." + } +} + +# ============================================================ +# 6. Build & install the extension +# ============================================================ +Write-Host "[6/7] Building Feature Orchestrator extension..." -ForegroundColor Yellow +$extDir = Join-Path $repoRoot "extensions" "feature-orchestrator" + +if (Test-Path (Join-Path $extDir "package.json")) { + Push-Location $extDir + + # Install npm dependencies if needed + if (-not (Test-Path "node_modules")) { + Write-Host " Installing npm dependencies..." -ForegroundColor Cyan + npm install 2>&1 | Out-Null + } + + # Build + Write-Host " Compiling TypeScript..." -ForegroundColor Cyan + npm run compile 2>&1 | Out-Null + + # Package + Write-Host " Packaging VSIX..." -ForegroundColor Cyan + Write-Output "y" | npx @vscode/vsce package --no-dependencies --allow-missing-repository -o feature-orchestrator-latest.vsix 2>&1 | Out-Null + + if (Test-Path "feature-orchestrator-latest.vsix") { + Write-Host " Installing extension..." -ForegroundColor Cyan + code --install-extension feature-orchestrator-latest.vsix --force 2>&1 | Out-Null + Write-Host " OK: Extension installed" -ForegroundColor Green + } else { + $issues += "Failed to package the extension. Try running manually in extensions/feature-orchestrator/" + Write-Host " FAILED: Could not package extension" -ForegroundColor Red + } + + Pop-Location +} else { + $issues += "Extension source not found at extensions/feature-orchestrator/" + Write-Host " MISSING: Extension source not found" -ForegroundColor Red +} + +# ============================================================ +# 7. Create state directory +# ============================================================ +Write-Host "[7/7] Setting up state directory..." -ForegroundColor Yellow +$stateDir = Join-Path $env:USERPROFILE ".android-auth-orchestrator" +if (-not (Test-Path $stateDir)) { + New-Item -ItemType Directory -Path $stateDir -Force | Out-Null +} +Write-Host " OK: $stateDir" -ForegroundColor Green + +# ============================================================ +# Summary +# ============================================================ +Write-Host "" +Write-Host "========================================" -ForegroundColor Cyan +Write-Host " Setup Complete" -ForegroundColor Cyan +Write-Host "========================================" -ForegroundColor Cyan +Write-Host "" + +if ($issues.Count -gt 0) { + Write-Host "ISSUES (must fix):" -ForegroundColor Red + foreach ($issue in $issues) { + Write-Host " - $issue" -ForegroundColor Red + } + Write-Host "" +} + +if ($warnings.Count -gt 0) { + Write-Host "WARNINGS (optional):" -ForegroundColor Yellow + foreach ($warning in $warnings) { + Write-Host " - $warning" -ForegroundColor Yellow + } + Write-Host "" +} + +if ($issues.Count -eq 0) { + Write-Host "You're ready to go!" -ForegroundColor Green + Write-Host "" + Write-Host "Quick start:" -ForegroundColor Cyan + Write-Host " 1. Reload VS Code window (Ctrl+Shift+P > 'Reload Window')" -ForegroundColor White + Write-Host " 2. Open the Feature Orchestrator sidebar (rocket icon)" -ForegroundColor White + Write-Host " 3. Click '+' or type '/feature-design ' in chat" -ForegroundColor White + Write-Host "" + Write-Host "Available prompt commands:" -ForegroundColor Cyan + Write-Host " /feature-design Start a new feature" -ForegroundColor White + Write-Host " /feature-plan Decompose design into PBIs" -ForegroundColor White + Write-Host " /feature-backlog Create PBIs in Azure DevOps" -ForegroundColor White + Write-Host " /feature-dispatch Dispatch to Copilot coding agent" -ForegroundColor White + Write-Host " /feature-status Check PR status" -ForegroundColor White + Write-Host " /feature-continue Resume from current step" -ForegroundColor White + Write-Host "" +}