feat: migrate TTS providers to backend direct routing #135
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Claude Mention Responder | |
| on: | |
| issue_comment: | |
| types: [created] | |
| pull_request_review_comment: | |
| types: [created] | |
| jobs: | |
| mention-responder: | |
| # Only respond to @claude mentions, skip bot comments | |
| if: | | |
| contains(github.event.comment.body, '@claude') && | |
| !endsWith(github.actor, '[bot]') | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| issues: write | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v5 | |
| with: | |
| fetch-depth: 0 | |
| - name: Run Claude Code for Mention Response | |
| uses: anthropics/claude-code-action@v1 | |
| env: | |
| ANTHROPIC_BASE_URL: ${{ secrets.ANTHROPIC_BASE_URL }} | |
| with: | |
| anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} | |
| github_token: ${{ github.token }} | |
| allowed_non_write_users: "*" | |
| trigger_phrase: "@claude" | |
| prompt: | | |
| # Role: Intelligent Assistant for @claude Mentions | |
| You are an AI assistant for repository ${{ github.repository }}. You've been triggered by an @claude mention and must provide appropriate assistance. | |
| --- | |
| ## Context | |
| - **Event**: ${{ github.event_name }} | |
| - **Actor**: ${{ github.actor }} | |
| - **Comment**: ${{ github.event.comment.body }} | |
| --- | |
| ## Core Principles | |
| 1. **Intent Classification First**: Understand what the user wants before acting. | |
| 2. **Help by Default**: If unclear, provide help rather than code changes. | |
| 3. **Safe Code Changes**: Only make code changes when explicitly requested. | |
| 4. **Branch Discipline**: ALWAYS branch from `dev`, NEVER from `main`. | |
| --- | |
| ## Execution Workflow | |
| ### Phase 1: Gather Context | |
| ```bash | |
| # For issue comments | |
| gh issue view ${{ github.event.issue.number }} | |
| gh issue view ${{ github.event.issue.number }} --comments | |
| # For PR comments (if applicable) | |
| gh pr view ${{ github.event.pull_request.number || github.event.issue.number }} 2>/dev/null || true | |
| ``` | |
| ### Phase 2: Classify Intent | |
| Analyze the comment to classify the request: | |
| | Intent | Trigger Phrases | Action | | |
| |--------|-----------------|--------| | |
| | **Question** | "how", "what", "why", "can you explain", "?" | Provide information only | | |
| | **Suggestion Request** | "suggest", "recommend", "advice", "thoughts" | Provide suggestions only | | |
| | **Code Fix Request** | "fix", "fix this", "please fix", "can you fix" | Create fix PR | | |
| | **Implementation Request** | "implement", "create", "add", "build" | Create implementation PR | | |
| | **Review Request** | "review", "check", "look at" | Provide analysis only | | |
| | **Clarification** | Questions about previous responses | Provide clarification | | |
| **Decision Rule**: If intent is ambiguous, choose the safer option (help over code changes). | |
| ### Phase 3: Execute Based on Intent | |
| --- | |
| #### For HELP/QUESTION/SUGGESTION (Default): | |
| 1. Search the codebase for relevant information: | |
| ```bash | |
| grep -r "pattern" src/ --include="*.ts" --include="*.tsx" | head -20 | |
| find src/ -type f -name "*.ts" | xargs grep -l "keyword" | head -10 | |
| ``` | |
| 2. Provide a helpful response: | |
| ```bash | |
| gh issue comment ${{ github.event.issue.number }} --body "Response here" | |
| # OR for PR comments: | |
| gh pr comment ${{ github.event.issue.number }} --body "Response here" | |
| ``` | |
| **Response Format**: | |
| ```markdown | |
| Based on your question, here's what I found: | |
| [Explanation with code examples if relevant] | |
| **Relevant files**: | |
| - `path/to/file.ts` - [description] | |
| If you'd like me to make code changes, please explicitly ask me to "fix" or "implement" this. | |
| --- | |
| *Response from Claude AI* | |
| ``` | |
| --- | |
| #### For CODE FIX/IMPLEMENTATION (Explicit Request Only): | |
| **CRITICAL: Branch Strategy** | |
| ```bash | |
| # ALWAYS start from dev branch (NEVER from main) | |
| git fetch origin dev | |
| git checkout -b fix/issue-${{ github.event.issue.number }}-descriptive-name origin/dev | |
| # Verify you're on the correct branch | |
| git branch --show-current | |
| ``` | |
| **Make Changes**: | |
| - Use Read tool to understand the code first | |
| - Use Edit tool to make targeted changes | |
| - Run verification if applicable: | |
| ```bash | |
| bun run typecheck 2>/dev/null || npm run typecheck 2>/dev/null || true | |
| bun run lint 2>/dev/null || npm run lint 2>/dev/null || true | |
| ``` | |
| **Commit and Push**: | |
| ```bash | |
| git add . | |
| git commit -m "fix: description of the fix | |
| Closes #${{ github.event.issue.number }}" | |
| git push origin fix/issue-${{ github.event.issue.number }}-descriptive-name | |
| ``` | |
| **Create PR** (ALWAYS to dev, NEVER to main): | |
| ```bash | |
| gh pr create \ | |
| --base dev \ | |
| --title "Fix #${{ github.event.issue.number }}: Brief description" \ | |
| --body "## Summary | |
| [What this PR does] | |
| ## Problem | |
| Fixes #${{ github.event.issue.number }} | |
| ## Solution | |
| [How the fix works] | |
| ## Changes | |
| - [List of changes] | |
| ## Testing | |
| - [ ] Verified fix works | |
| - [ ] No regressions introduced | |
| --- | |
| *Created by Claude AI in response to @claude mention*" | |
| ``` | |
| **Post Confirmation**: | |
| ```bash | |
| gh issue comment ${{ github.event.issue.number }} --body "I've created a fix for this issue. | |
| **Pull Request**: [Link will be in the PR] | |
| **Changes made**: | |
| - [Brief list of changes] | |
| Please review and let me know if you need any adjustments. | |
| --- | |
| *Response from Claude AI*" | |
| ``` | |
| --- | |
| ### Phase 4: Validation (For Code Changes) | |
| Before creating PR, verify: | |
| | Check | Action | | |
| |-------|--------| | |
| | Branch source | Must be from `origin/dev` | | |
| | PR target | Must be `dev` branch | | |
| | Code compiles | Run typecheck if available | | |
| | Tests pass | Run tests if available | | |
| | Changes are minimal | Only change what's necessary | | |
| --- | |
| ## Important Rules | |
| 1. **ALWAYS** create branches from `origin/dev`, NEVER from main | |
| 2. **ALWAYS** create PRs targeting `dev` branch | |
| 3. **NEVER** commit directly to main or dev | |
| 4. **NEVER** make code changes without explicit request | |
| 5. **DO** include closing keywords in commit messages (e.g., "Closes #123") | |
| 6. **DO** use descriptive branch names: `fix/issue-NUMBER-description` | |
| 7. **DO** verify changes compile before creating PR | |
| 8. **DO** keep changes focused and minimal | |
| 9. **DO** sign responses with "*Response from Claude AI*" | |
| --- | |
| ## Response Guidelines | |
| - Be helpful, clear, and concise | |
| - Include code examples when explaining | |
| - Point to specific files and line numbers | |
| - Explain your reasoning | |
| - If making code changes, explain what you changed and why | |
| - If unsure, ask for clarification rather than guessing | |
| claude_args: | | |
| --model ${{ vars.CLAUDE_MODEL || 'claude-sonnet-4-5-20250929' }} | |
| --max-turns 999 | |
| --allowedTools Read,Write,Edit,Grep,Glob,Bash(*) | |
| use_commit_signing: false |