name: Codewhale description: Review pull requests automatically or on an authorized @codewhale review request, using your chosen model. branding: icon: code color: blue inputs: version: description: Exact released CLI tag (vX.Y.Z). Must support review --json. required: true provider: description: Explicit BYOK provider (orcarouter, deepseek, anthropic, openrouter, zai, modelstudio-token-plan), or codewhale for a separately verified account machine key. required: true model: description: Exact model ID. Account mode requires provider/model from the account catalog. required: true reasoning-effort: description: Optional Engine reasoning setting (auto, off, low, medium, high, max). github-token: description: GitHub token with contents read and pull-requests read; legacy post:true also requires pull-requests write. default: ${{ github.token }} pr-number: description: PR number for workflow_dispatch; pull_request events use the event snapshot. trigger-phrase: description: Bot mention used for a standalone @name review line in a new PR comment. default: '@codewhale' allow-forks: description: Allow inert fork review only on a write-authorized issue_comment or manual run from the default branch. default: 'false' max-chars: description: Maximum diff characters per complete pass. default: '200000' max-passes: description: Maximum number of complete review passes. default: '1' max-output-tokens: description: Optional per-pass output ceiling; at least 8192. timeout-seconds: description: Model and publication deadline, in seconds (30–1200). default: '600' post: description: Legacy direct COMMENT publication. Set false to export findings for a separate publisher job. default: 'true' outputs: outcome: description: reviewed_clean, reviewed_with_findings, incomplete, superseded, not_eligible, configuration_missing, failed, or publication_uncertain. value: ${{ steps.review.outputs.outcome }} receipt: description: Absolute path to the sanitized JSON execution receipt (also written on failures). value: ${{ steps.review.outputs.receipt }} findings: description: Absolute path to validated findings JSON for a complete post:false review; contains repository-sensitive review text. value: ${{ steps.review.outputs.findings }} pr-url: description: URL of the pull request, when resolved. value: ${{ steps.review.outputs.pr-url }} runs: using: composite steps: - id: review shell: bash env: CW_ACTION_PATH: ${{ github.action_path }} CW_VERSION: ${{ inputs.version }} CW_PROVIDER: ${{ inputs.provider }} CW_MODEL: ${{ inputs.model }} CW_REASONING_EFFORT: ${{ inputs.reasoning-effort }} CW_PR_NUMBER: ${{ inputs.pr-number }} CW_TRIGGER_PHRASE: ${{ inputs.trigger-phrase }} CW_ALLOW_FORKS: ${{ inputs.allow-forks }} CW_MAX_CHARS: ${{ inputs.max-chars }} CW_MAX_PASSES: ${{ inputs.max-passes }} CW_MAX_OUTPUT_TOKENS: ${{ inputs.max-output-tokens }} CW_TIMEOUT_SECONDS: ${{ inputs.timeout-seconds }} CW_POST: ${{ inputs.post }} GH_TOKEN: ${{ inputs.github-token }} run: node "$CW_ACTION_PATH/scripts/github-action/review.mjs"