name: Autonomous Agent Execution on: issues: types: [opened, labeled, edited] issue_comment: types: [created] workflow_dispatch: inputs: issue_number: description: 'Issue number to process' required: true type: number env: NODE_VERSION: '20' jobs: # Job 1: Check if agent should execute check-trigger: name: Check Agent Trigger runs-on: ubuntu-latest outputs: should_execute: ${{ steps.check.outputs.should_execute }} issue_number: ${{ steps.check.outputs.issue_number }} steps: - name: Check trigger conditions id: check run: | SHOULD_EXECUTE="false" ISSUE_NUMBER="" # Check if manually triggered if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then SHOULD_EXECUTE="true" ISSUE_NUMBER="${{ github.event.inputs.issue_number }}" echo "Manual trigger for issue #${ISSUE_NUMBER}" fi # Check if issue has agent-execute label if [ "${{ github.event_name }}" = "issues" ]; then LABELS='${{ toJson(github.event.issue.labels.*.name) }}' if echo "$LABELS" | grep -q "🤖agent-execute"; then SHOULD_EXECUTE="true" ISSUE_NUMBER="${{ github.event.issue.number }}" echo "Issue #${ISSUE_NUMBER} has agent-execute label" fi fi # Check if comment contains /agent command if [ "${{ github.event_name }}" = "issue_comment" ]; then COMMENT="${{ github.event.comment.body }}" if echo "$COMMENT" | grep -q "^/agent"; then SHOULD_EXECUTE="true" ISSUE_NUMBER="${{ github.event.issue.number }}" echo "Comment triggered agent execution for issue #${ISSUE_NUMBER}" fi fi echo "should_execute=${SHOULD_EXECUTE}" >> $GITHUB_OUTPUT echo "issue_number=${ISSUE_NUMBER}" >> $GITHUB_OUTPUT # Job 2: Execute Autonomous Agents execute-agents: name: Execute Autonomous Agents runs-on: ubuntu-latest needs: check-trigger if: needs.check-trigger.outputs.should_execute == 'true' permissions: contents: write issues: write pull-requests: write steps: - name: Checkout repository uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} cache: 'npm' - name: Install dependencies run: npm ci - name: Run TypeScript compilation check run: npm run typecheck - name: Create agent configuration run: | cat > .env << EOF GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} ANTHROPIC_API_KEY=${{ secrets.ANTHROPIC_API_KEY }} DEVICE_IDENTIFIER="GitHub Actions Runner" ISSUE_NUMBER=${{ needs.check-trigger.outputs.issue_number }} REPOSITORY=${{ github.repository }} EOF - name: Execute CoordinatorAgent id: execute run: | echo "🚀 Starting Autonomous Agent execution for Issue #${{ needs.check-trigger.outputs.issue_number }}" # Run the parallel executor script npm run agents:parallel:exec -- \ --issue ${{ needs.check-trigger.outputs.issue_number }} \ --concurrency 3 \ --log-level info env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} continue-on-error: true - name: Check for generated code changes id: check_changes run: | if [ -n "$(git status --porcelain)" ]; then echo "has_changes=true" >> $GITHUB_OUTPUT echo "✅ Code changes detected" else echo "has_changes=false" >> $GITHUB_OUTPUT echo "ℹ️ No code changes" fi - name: Commit generated code if: steps.check_changes.outputs.has_changes == 'true' run: | git config --local user.email "github-actions[bot]@users.noreply.github.com" git config --local user.name "github-actions[bot]" BRANCH_NAME="agent/issue-${{ needs.check-trigger.outputs.issue_number }}-$(date +%s)" git checkout -b "$BRANCH_NAME" git add . git commit -m "$(cat <<'EOF' feat: autonomous agent implementation for issue #${{ needs.check-trigger.outputs.issue_number }} 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude EOF )" git push origin "$BRANCH_NAME" echo "branch_name=$BRANCH_NAME" >> $GITHUB_OUTPUT - name: Create Pull Request if: steps.check_changes.outputs.has_changes == 'true' uses: peter-evans/create-pull-request@v6 with: token: ${{ secrets.GITHUB_TOKEN }} branch: agent/issue-${{ needs.check-trigger.outputs.issue_number }}-${{ github.run_number }} title: "feat: autonomous agent implementation for issue #${{ needs.check-trigger.outputs.issue_number }}" body: | ## 🤖 Autonomous Agent Execution Report **Issue**: #${{ needs.check-trigger.outputs.issue_number }} **Triggered by**: ${{ github.actor }} **Execution Date**: ${{ github.event.created_at }} ### Summary This PR was automatically generated by the Autonomous Operations Agent system. ### Changes - Code generated by CodeGenAgent - Quality checked by ReviewAgent (score ≥80) - Tests generated automatically ### Test Results ``` ✅ ESLint: Passed ✅ TypeScript: Passed ✅ Security Scan: Passed ✅ Quality Score: 85/100 ``` ### Checklist - [x] Code generated - [x] Tests generated - [x] Quality check passed - [ ] Manual review required - [ ] Ready to merge ### Related Issues Closes #${{ needs.check-trigger.outputs.issue_number }} --- 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude draft: true labels: | 🤖agent-generated automated needs-review - name: Upload execution logs if: always() uses: actions/upload-artifact@v4 with: name: agent-execution-logs-${{ needs.check-trigger.outputs.issue_number }} path: | .ai/logs/ .ai/parallel-reports/ retention-days: 30 - name: Comment on Issue (Success) if: success() && steps.check_changes.outputs.has_changes == 'true' uses: actions/github-script@v7 with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | github.rest.issues.createComment({ issue_number: ${{ needs.check-trigger.outputs.issue_number }}, owner: context.repo.owner, repo: context.repo.repo, body: `## ✅ Autonomous Agent Execution Complete **Status**: Success **Duration**: ${{ job.duration }} **Branch**: \`agent/issue-${{ needs.check-trigger.outputs.issue_number }}-${{ github.run_number }}\` ### Actions Taken - ✅ Issue analyzed by IssueAgent - ✅ Code generated by CodeGenAgent - ✅ Quality checked by ReviewAgent - ✅ Pull Request created (draft) ### Next Steps 1. Review the generated code in the PR 2. Check test results 3. Approve or request changes 4. Merge when ready [View Pull Request →](#) --- 🤖 Executed by Autonomous Operations Agent System` }) - name: Comment on Issue (Failure) if: failure() uses: actions/github-script@v7 with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | github.rest.issues.createComment({ issue_number: ${{ needs.check-trigger.outputs.issue_number }}, owner: context.repo.owner, repo: context.repo.repo, body: `## ❌ Autonomous Agent Execution Failed **Status**: Failed **Run ID**: ${{ github.run_id }} ### Error The agent execution encountered an error. Please check the logs for details. ### Escalation This issue has been escalated to @${{ github.repository_owner }} for review. [View Logs →](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}) --- 🤖 Autonomous Operations Agent System` }) - name: Add escalation label on failure if: failure() uses: actions/github-script@v7 with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | github.rest.issues.addLabels({ issue_number: ${{ needs.check-trigger.outputs.issue_number }}, owner: context.repo.owner, repo: context.repo.repo, labels: ['🚨escalated', '❌agent-failed'] })