Merge pull request #1 from ElmarKenguerli/PR_TestBranch

docs: add provider-agnostic push outputs and Slack relay usage

- Adds `push_outputs` with channels (stdout/file/webhook), disabled by default
- Integrates into review flow; 
- Includes optional Slack relay service
- Updates `README` with usage instructions. No changes to default behavior.
This commit is contained in:
Elmar Kenguerli 2025-09-26 15:43:39 +02:00 committed by GitHub
commit b57337f854
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 42 additions and 4 deletions

View file

@ -328,6 +328,33 @@ ___
</div> </div>
<hr> <hr>
## Provider-agnostic push outputs and Slack relay
PR-Agent can optionally emit review results to external sinks without calling git provider APIs.
This is disabled by default. To enable and forward to Slack via a lightweight relay:
1) Start the relay (in a separate shell):
- Set an Incoming Webhook URL for Slack:
- CMD: set SLACK_WEBHOOK_URL=https://hooks.slack.com/services/TXXXX/BXXXX/XXXXXXXX
- PS: $env:SLACK_WEBHOOK_URL="https://hooks.slack.com/services/TXXXX/BXXXX/XXXXXXXX"
- Run:
uvicorn pr_agent.servers.push_outputs_relay:app --host 0.0.0.0 --port 8000
2) In your repository, configure PR-Agent to emit to the relay by creating .pr_agent.toml:
```
[push_outputs]
enable = true
channels = ["webhook"]
webhook_url = "http://localhost:8000/relay"
presentation = "markdown"
```
Notes:
- This mechanism is provider-agnostic and uses minimal API calls.
- You can also use the "file" channel to append JSONL records locally.
- The relay transforms the generic payload into Slacks Incoming Webhook schema.
## Try It Now ## Try It Now
Try the GPT-5 powered PR-Agent instantly on _your public GitHub repository_. Just mention `@CodiumAI-Agent` and add the desired command in any PR comment. The agent will generate a response based on your command. Try the GPT-5 powered PR-Agent instantly on _your public GitHub repository_. Just mention `@CodiumAI-Agent` and add the desired command in any PR comment. The agent will generate a response based on your command.

View file

@ -70,6 +70,17 @@ async def relay(record: Dict[str, Any]):
text = _to_slack_text(record) text = _to_slack_text(record)
# If using a Slack Workflow "triggers" URL, the workflow expects top-level fields
# that match the configured variables in the Workflow (e.g., "markdown", "payload").
# Otherwise, for Incoming Webhooks ("services" URL), use the standard {text, mrkdwn}.
if "hooks.slack.com/triggers/" in slack_url:
body = {
# Map our computed text to the workflow variable named "markdown"
"markdown": text,
# Provide original payload if the workflow defines a variable for it
"payload": record.get("payload", {}),
}
else:
body = { body = {
"text": text, "text": text,
"mrkdwn": True, "mrkdwn": True,