mirror of
https://github.com/MervinPraison/PraisonAIUI.git
synced 2026-11-07 05:56:17 -10:00
- claude.yml: add issues:[opened,labeled,assigned] + pull_request_review_comment triggers
- claude.yml: add issue-triage job (welcome comment on new issues)
- claude.yml: expand direct_prompt with PraisonAIUI-specific routing (STEP 0-6):
- architecture routing (core / features / UI builders / frontend / tests / docs)
- external-repo routing (PraisonAI / PraisonAI-Tools / PraisonAIDocs)
- conceptual checks (no duplicate exports, no class-first Ask*Message, lazy
optional deps, real DeprecationWarning on deprecations)
- import-time < 200ms + no heavy-dep leak invariant
- PR body template (Summary, Before/After, SHA-cited checklist, test evidence,
import-time proof)
- STEP 6 reviewer-loop instructions (respond to CodeRabbit/Copilot/human
review comments, push to same branch)
- auto-issue-comment.yml: optional workflow to escalate an issue to Claude by
adding the 'claude' label (workflow_dispatch-only; issues:opened trigger
commented out by default)
CodeRabbit + Copilot: no workflow file needed — both are GitHub Apps that
react to PRs automatically. The chain (CodeRabbit → Copilot → Claude) is
already orchestrated by auto-pr-comment.yml.
87 lines
3.2 KiB
YAML
87 lines
3.2 KiB
YAML
name: Auto Issue Comment
|
|
|
|
# Optional: automatically escalate every new issue to Claude for a full
|
|
# investigation + draft fix. Disabled by default (only workflow_dispatch).
|
|
# To enable auto-triage on every new issue, uncomment the `issues:` trigger.
|
|
#
|
|
# Note: `@claude` mentions only trigger claude.yml when the commenter is a
|
|
# HUMAN user (or github-actions[bot] via PAT). This workflow posts the
|
|
# comment as github-actions[bot], so claude.yml must allow that bot.
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
issue_number:
|
|
description: "Issue number to triage with Claude"
|
|
required: true
|
|
type: number
|
|
# issues:
|
|
# types: [opened]
|
|
|
|
jobs:
|
|
# Escalate an issue to full Claude implementation by adding the `claude`
|
|
# label. claude.yml listens on `issues:labeled` + label=='claude' and
|
|
# triggers Job 2 (claude-response) which does the actual work.
|
|
trigger-claude:
|
|
if: |
|
|
github.event_name == 'workflow_dispatch' ||
|
|
(github.event_name == 'issues' && !contains(toJSON(github.event.issue.labels), 'claude'))
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
issues: write
|
|
steps:
|
|
- name: Resolve issue number
|
|
id: resolve
|
|
run: |
|
|
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
|
|
echo "number=${{ inputs.issue_number }}" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "number=${{ github.event.issue.number }}" >> "$GITHUB_OUTPUT"
|
|
fi
|
|
|
|
- name: Add claude label + post instructions
|
|
uses: actions/github-script@v7
|
|
with:
|
|
github-token: ${{ secrets.GH_TOKEN || secrets.GITHUB_TOKEN }}
|
|
script: |
|
|
const issueNumber = Number('${{ steps.resolve.outputs.number }}');
|
|
const { data: issue } = await github.rest.issues.get({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
issue_number: issueNumber,
|
|
});
|
|
|
|
const labels = (issue.labels || []).map(l => typeof l === 'string' ? l : l.name);
|
|
if (labels.includes('claude')) {
|
|
console.log(`Issue #${issueNumber} already has 'claude' label — skipping.`);
|
|
return;
|
|
}
|
|
|
|
await github.rest.issues.addLabels({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
issue_number: issueNumber,
|
|
labels: ['claude'],
|
|
});
|
|
|
|
const body = [
|
|
'🤖 Auto-triaging with Claude.',
|
|
'',
|
|
'Claude will:',
|
|
'',
|
|
'1. Read this issue and all comments.',
|
|
'2. Classify and route to the right area (`src/praisonaiui/`, `src/frontend/`, `docs/`, or external repo).',
|
|
'3. Implement a minimal fix per `AGENTS.md`.',
|
|
'4. Run `pytest` + the import-time invariant locally.',
|
|
'5. Open a draft PR linked to this issue.',
|
|
'',
|
|
'Follow-ups in this thread with `@claude` will re-trigger the loop.'
|
|
].join('\n');
|
|
|
|
await github.rest.issues.createComment({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
issue_number: issueNumber,
|
|
body,
|
|
});
|