Skip to content

Add Pullfrog AI Review + Continue Agent Config - #3

Closed
spivanatalie64 wants to merge 3 commits into
mainfrom
add-pullfrog
Closed

Add Pullfrog AI Review + Continue Agent Config#3
spivanatalie64 wants to merge 3 commits into
mainfrom
add-pullfrog

Conversation

@spivanatalie64

@spivanatalie64 spivanatalie64 commented Jun 2, 2026

Copy link
Copy Markdown
Owner

This PR adds:\n- Pullfrog AI automated code review workflow\n- Continue.dev agent configuration (.continue/agents/new-config.yaml)\n- README documentation\n\nSet DEEPINFRA_API_KEY and DEEPSEEK_API_KEY as local environment variables for Continue.dev to function.

Summary by CodeRabbit

  • New Features

    • Added automated pull request reviews powered by AI.
    • Integrated support for multiple AI models including Qwen3-235B and DeepSeek V4 Flash.
    • Enabled context providers for enhanced code analysis capabilities.
  • Documentation

    • Updated README with information about the automated review feature.

@vercel

vercel Bot commented Jun 2, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
spivanatalie64-github-io Canceled Canceled Jun 2, 2026 6:52am

@coderabbitai

coderabbitai Bot commented Jun 2, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This PR adds AI-assisted development tooling: a Continue agent configuration for local code completion and editing using DeepInfra and DeepSeek models, and a Pullfrog GitHub Actions workflow for automated pull request reviews powered by OpenRouter, with supporting documentation.

Changes

Continue Agent Configuration

Layer / File(s) Summary
Agent models and context providers
​.continue/agents/new-config.yaml
Budget-Config agent routes two models—Qwen3-235B (DeepInfra) for chat and edit roles, DeepSeek V4 Flash for chat—with configurable context length, plus a DeepSeek-based autocomplete model. Context providers include file, code, terminal, and diff.

Pullfrog AI Review Automation

Layer / File(s) Summary
Workflow and documentation
​.github/workflows/pullfrog.yml, README.md
Pullfrog workflow runs on pull request open/sync and issue comment events, conditionally executing when triggered by pull request context or @pullfrog mention, using GITHUB_TOKEN and OPENROUTER_API_KEY secrets. README documents the feature's scope (code quality, security, performance, best practices) and manual invocation method.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Poem

🐰 With whiskers twitching at the code,
Two AI helpers find their abode:
One guides the pen through edits swift,
One reviews the pull with careful drift.
Now developers code with whimsy light!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Add Pullfrog AI Review + Continue Agent Config' directly summarizes the two main additions in the changeset: the Pullfrog AI workflow and the Continue agent configuration file.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch add-pullfrog

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.continue/agents/new-config.yaml:
- Around line 25-32: The config still has a top-level tabAutocompleteModel; move
it into the existing models array instead: locate the tabAutocompleteModel block
and either add "autocomplete" to the roles array on the existing model entry for
"DeepSeek V4 Flash" (which already uses apiBase: "https://api.deepseek.com/v1"
and has contextLength) or create a new models entry with the same
provider/name/model/apiBase/contextLength and roles: [autocomplete], then remove
the top-level tabAutocompleteModel entry so all model definitions live under
models.

In @.github/workflows/pullfrog.yml:
- Around line 18-22: The workflow step "Run Pullfrog Agent" currently uses the
mutable ref pullfrog/pullfrog-action@main; change it to a pinned full commit SHA
instead (replace the `@main` ref in the uses field for the
pullfrog/pullfrog-action step with the action repository's specific commit SHA)
so the action cannot change unexpectedly; keep the existing env entries
(GITHUB_TOKEN and OPENROUTER_API_KEY) as-is and ensure you copy the exact full
commit SHA from the pullfrog/pullfrog-action repo when updating the uses line.
- Around line 13-16: The checkout step ("Checkout Code") currently uses
actions/checkout@v4 and leaves credentials persisted; update the step to set
persist-credentials: false to prevent GITHUB_TOKEN from being written to
.git/config (replace or add the input key persist-credentials: false under the
actions/checkout@v4 step) and optionally pin the action to a specific commit SHA
instead of the tag to comply with unpinned-action policy (change uses:
actions/checkout@v4 to uses: actions/checkout@<commit-sha>).
- Line 11: The current if condition uses github.event.issue.pull_request which
is truthy for any PR comment and short-circuits the mention check; replace the
logic so PR comment events are gated by the mention: require
contains(github.event.comment.body, '`@pullfrog`') when
github.event.issue.pull_request is present, while still allowing normal
pull_request events (github.event_name == 'pull_request'). Update the
conditional that references github.event.issue.pull_request, github.event_name,
and github.event.comment.body so it only triggers on PR comments when the
comment body contains '`@pullfrog`' and continues to trigger for direct
pull_request events.
- Around line 9-12: The pullfrog_run job lacks an explicit least-privilege
job-level permissions block required by pullfrog/pullfrog-action; add a
permissions section to the pullfrog_run job with id-token set to write and
contents set to read (only add additional scopes like pull-requests: write or
issues: write if another step actually needs them) so OIDC minting and repo read
access are granted for the job.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 2eb1688f-14d5-4721-b49f-cb94623d50ad

📥 Commits

Reviewing files that changed from the base of the PR and between 4468a9a and 6101c2f.

📒 Files selected for processing (3)
  • .continue/agents/new-config.yaml
  • .github/workflows/pullfrog.yml
  • README.md

Comment on lines +25 to +32
tabAutocompleteModel:
name: "DeepSeek Flash Auto"
provider: "openai"
model: "deepseek-v4-flash"
apiBase: "https://api.deepseek.com/v1"
apiKey: "${env:DEEPSEEK_API_KEY}"
roles:
- autocomplete

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🌐 Web query:

Continue YAML migration tabAutocompleteModel models roles autocomplete

💡 Result:

To migrate your Continue configuration to the new YAML schema, you must move your models, including those previously defined under tabAutocompleteModel, into the models section of your config.yaml file [1][2]. 1. Model Roles: In the YAML format, Continue uses the roles field to define model capabilities [1][3]. Assign the autocomplete role to any model intended for tab autocomplete by adding it to the roles list [1][2][4]. Example configuration: models: - name: My Autocomplete Model provider: ollama model: qwen2.5-coder:1.5b roles: - autocomplete 2. Configuring Autocomplete Options: The YAML schema allows you to configure autocomplete options on a per-model basis using the autocompleteOptions field within the model definition [5][2]. This replaces the older, global tabAutocompleteOptions used in config.json [2]. Example configuration: models: - name: My Autocomplete Model provider: ollama model: qwen2.5-coder:1.5b roles: - autocomplete autocompleteOptions: maxPromptTokens: 1024 debounceDelay: 250 If you are using prompt templating for your autocomplete model, you can define it using the promptTemplates.autocomplete property [3]. Ensure you are using the correct FIM (fill-in-the-middle) template for your specific model [6][3]. For further guidance, consult the official Continue documentation on YAML migration and autocomplete configuration [1][2][3].

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

FILE=".continue/agents/new-config.yaml"
echo "== File: $FILE =="
if [ -f "$FILE" ]; then
  nl -ba "$FILE" | sed -n '1,120p'
else
  echo "File not found: $FILE"
  exit 1
fi

Repository: spivanatalie64/spivanatalie64.github.io

Length of output: 189


🏁 Script executed:

#!/bin/bash
set -euo pipefail

FILE=".continue/agents/new-config.yaml"
echo "== Grep checks =="
if [ -f "$FILE" ]; then
  echo "-- occurrences --"
  rg -n "tabAutocompleteModel:|^models:|autocomplete" "$FILE" || true

  echo
  echo "== File with line numbers (1-120) =="
  awk '{printf "%6d %s\n", NR, $0}' "$FILE" | sed -n '1,120p'
else
  echo "File not found: $FILE"
  exit 1
fi

Repository: spivanatalie64/spivanatalie64.github.io

Length of output: 1317


🏁 Script executed:

#!/bin/bash
set -euo pipefail
FILE=".continue/agents/new-config.yaml"
echo "== defaultCompletionOptions occurrences =="
rg -n "defaultCompletionOptions" "$FILE" || true
echo
echo "== contextLength occurrences =="
rg -n "contextLength" "$FILE" || true

Repository: spivanatalie64/spivanatalie64.github.io

Length of output: 218


Move tabAutocompleteModel into models with roles: [autocomplete]

.continue/agents/new-config.yaml still defines a top-level tabAutocompleteModel block, which Continue’s YAML migration expects to be represented inside the models array via the autocomplete role. Since models already includes "DeepSeek V4 Flash" (with apiBase: "https://api.deepseek.com/v1" and contextLength), either add autocomplete to that model’s roles or add a new models entry for the same provider/model—then remove the top-level tabAutocompleteModel.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.continue/agents/new-config.yaml around lines 25 - 32, The config still has
a top-level tabAutocompleteModel; move it into the existing models array
instead: locate the tabAutocompleteModel block and either add "autocomplete" to
the roles array on the existing model entry for "DeepSeek V4 Flash" (which
already uses apiBase: "https://api.deepseek.com/v1" and has contextLength) or
create a new models entry with the same
provider/name/model/apiBase/contextLength and roles: [autocomplete], then remove
the top-level tabAutocompleteModel entry so all model definitions live under
models.

Comment on lines +9 to +12
pullfrog_run:
runs-on: ubuntu-latest
if: github.event.issue.pull_request || github.event_name == 'pull_request' || contains(github.event.comment.body, '@pullfrog')
steps:

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🌐 Web query:

pullfrog/pullfrog-action GitHub Action required permissions GITHUB_TOKEN

💡 Result:

The Pullfrog GitHub Action does not actually use the workflow's GITHUB_TOKEN to perform its core operations like pushing branches, posting pull request comments, creating reviews, or updating issues [1]. Instead, it mints its own short-lived installation tokens via OIDC (OpenID Connect) for these API calls [1]. Because of this design, the only permissions you must explicitly grant in your workflow for the Pullfrog action to function correctly are [1]: - id-token: write (Required to mint the OIDC-based installation tokens) [1] - contents: read (Required for the actions/checkout step to clone the repository) [1] While some example configurations for Pullfrog may show broader permissions (such as contents: write or pull-requests: write), these are generally not required by the Pullfrog action itself [1]. If you include broader permissions in your workflow configuration, they are applied to the GITHUB_TOKEN, which other steps in the same job might use, but the Pullfrog action remains independent of them [1]. It is recommended to scope these permissions at the job level rather than the workflow level to follow the principle of least privilege [1].

Citations:


Add an explicit least-privilege permissions block for the pullfrog_run job.

File: .github/workflows/pullfrog.yml (lines 9-12)
pullfrog/pullfrog-action requires job-level permissions for OIDC minting and repo read access: id-token: write and contents: read. The suggested pull-requests: write / issues: write scopes aren’t needed by Pullfrog itself (only add them if another step uses GITHUB_TOKEN for those operations).

🔒 Proposed permissions scope
permissions:
  id-token: write
  contents: read
🧰 Tools
🪛 zizmor (1.25.2)

[warning] 9-23: overly broad permissions (excessive-permissions): default permissions used due to no permissions: block

(excessive-permissions)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/pullfrog.yml around lines 9 - 12, The pullfrog_run job
lacks an explicit least-privilege job-level permissions block required by
pullfrog/pullfrog-action; add a permissions section to the pullfrog_run job with
id-token set to write and contents set to read (only add additional scopes like
pull-requests: write or issues: write if another step actually needs them) so
OIDC minting and repo read access are granted for the job.

jobs:
pullfrog_run:
runs-on: ubuntu-latest
if: github.event.issue.pull_request || github.event_name == 'pull_request' || contains(github.event.comment.body, '@pullfrog')

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Trigger condition runs the agent on every PR comment, not just @pullfrog.

github.event.issue.pull_request is truthy for any comment on a pull request, so this short-circuits before the @pullfrog check. Combined with the ||, the job runs on every PR comment regardless of body, which contradicts the README ("Trigger manually by commenting @pullfrog") and wastes review/API spend.

🛠️ Proposed fix to gate comment triggers on the mention
-    if: github.event.issue.pull_request || github.event_name == 'pull_request' || contains(github.event.comment.body, '`@pullfrog`')
+    if: >-
+      github.event_name == 'pull_request' ||
+      (github.event.issue.pull_request && contains(github.event.comment.body, '`@pullfrog`'))
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/pullfrog.yml at line 11, The current if condition uses
github.event.issue.pull_request which is truthy for any PR comment and
short-circuits the mention check; replace the logic so PR comment events are
gated by the mention: require contains(github.event.comment.body, '`@pullfrog`')
when github.event.issue.pull_request is present, while still allowing normal
pull_request events (github.event_name == 'pull_request'). Update the
conditional that references github.event.issue.pull_request, github.event_name,
and github.event.comment.body so it only triggers on PR comments when the
comment body contains '`@pullfrog`' and continues to trigger for direct
pull_request events.

Comment on lines +13 to +16
- name: Checkout Code
uses: actions/checkout@v4
with:
fetch-depth: 0

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Disable credential persistence on checkout.

actions/checkout persists the GITHUB_TOKEN in .git/config by default; since a third-party action runs afterward in the same workspace, set persist-credentials: false to avoid leaking the token. Also consider pinning actions/checkout to a commit SHA per the unpinned-action policy.

🛡️ Proposed fix
       - name: Checkout Code
         uses: actions/checkout@v4
         with:
           fetch-depth: 0
+          persist-credentials: false
🧰 Tools
🪛 zizmor (1.25.2)

[warning] 13-16: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false

(artipacked)


[error] 14-14: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)

(unpinned-uses)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/pullfrog.yml around lines 13 - 16, The checkout step
("Checkout Code") currently uses actions/checkout@v4 and leaves credentials
persisted; update the step to set persist-credentials: false to prevent
GITHUB_TOKEN from being written to .git/config (replace or add the input key
persist-credentials: false under the actions/checkout@v4 step) and optionally
pin the action to a specific commit SHA instead of the tag to comply with
unpinned-action policy (change uses: actions/checkout@v4 to uses:
actions/checkout@<commit-sha>).

Comment on lines +18 to +22
- name: Run Pullfrog Agent
uses: pullfrog/pullfrog-action@main
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
OPENROUTER_API_KEY: ${{ secrets.ORGANIZATION_OPENROUTER_KEY }}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🌐 Web query:

pullfrog/pullfrog-action inputs OPENROUTER_API_KEY env or with usage

💡 Result:

To use an OpenRouter API key with the pullfrog/pullfrog GitHub Action, you must map the OPENROUTER_API_KEY secret into the env block of the action step within your pullfrog.yml workflow file [1][2][3]. ### Implementation Add the OPENROUTER_API_KEY to your repository or organization secrets in GitHub [4]. Then, configure your .github/workflows/pullfrog.yml file to include the environment variable mapping [1][4]: yaml jobs: pullfrog: runs-on: ubuntu-latest steps: - name: Run agent uses: pullfrog/pullfrog@v0 with: prompt: ${{ inputs.prompt }} # Optional: Specify a model via OpenRouter model: openrouter/anthropic/claude-sonnet-4.6 env: OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }} ### Key Considerations * Environment Mapping: The Pullfrog action only has access to secrets explicitly mapped in the env: block of the workflow step [4]. * Precedence: If you have configured keys via the Pullfrog console's Bring-Your-Own-Key (BYOK) settings, a key set directly in the workflow env: block will take precedence, allowing for per-workflow overrides [4]. * Model Selection: When using OpenRouter, you can let Pullfrog auto-select models or pin a specific model version using the model input as shown above [2]. Ensure the secret name used in your workflow matches OPENROUTER_API_KEY exactly [4].

Citations:


Pin pullfrog/pullfrog-action to a commit SHA (supply-chain risk).

In .github/workflows/pullfrog.yml the step uses a mutable tag:

- name: Run Pullfrog Agent
  uses: pullfrog/pullfrog-action@main
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    OPENROUTER_API_KEY: ${{ secrets.ORGANIZATION_OPENROUTER_KEY }}

Pin pullfrog/pullfrog-action to a full commit SHA to prevent unexpected action changes from main.

The OpenRouter key is correctly provided via env (OPENROUTER_API_KEY), and the secret’s name can differ—as long as secrets.ORGANIZATION_OPENROUTER_KEY exists and contains the OpenRouter API key.

🧰 Tools
🪛 zizmor (1.25.2)

[error] 19-19: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)

(unpinned-uses)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/pullfrog.yml around lines 18 - 22, The workflow step "Run
Pullfrog Agent" currently uses the mutable ref pullfrog/pullfrog-action@main;
change it to a pinned full commit SHA instead (replace the `@main` ref in the uses
field for the pullfrog/pullfrog-action step with the action repository's
specific commit SHA) so the action cannot change unexpectedly; keep the existing
env entries (GITHUB_TOKEN and OPENROUTER_API_KEY) as-is and ensure you copy the
exact full commit SHA from the pullfrog/pullfrog-action repo when updating the
uses line.

@spivanatalie64

Copy link
Copy Markdown
Owner Author

Closing this unmerged PR as part of project cleanup (July 2026 audit). The config will be applied directly instead.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant