@@ -8,20 +8,17 @@ This project automates the **Issue -> Label -> Pull Request** flow: an `ai-pr-*`
88
99It avoids vendor lock-in with 3 built-in providers:
1010
11- | Label | Provider | Backend |
12- | -------| ----------| ---------|
13- | ` ai-pr-claude ` | Claude Code | Anthropic |
14- | ` ai-pr-codex ` | Codex | OpenAI |
15- | ` ai-pr-aider ` | Aider | OpenRouter (extensible) |
11+ | Label | Provider | Backend |
12+ | -------------- | ----------- | ----------------------- |
13+ | ` ai-pr-claude ` | Claude Code | Anthropic |
14+ | ` ai-pr-codex ` | Codex | OpenAI |
15+ | ` ai-pr-aider ` | Aider | OpenRouter (extensible) |
1616
1717The architecture is designed to easily add more providers (see ` CONTRIBUTING.md ` ).
1818
1919Tested on: VPS / 8 GB RAM / 4 vCPU / k3s single-node.
2020
21- > [ !IMPORTANT]
22- > ** This repo is a POC and a serious working base.**
23- > It demonstrates a fully functional flow, but is not production-ready without hardening.
24- > See the [ Security] ( #security ) section and ` SECURITY.md ` for details.
21+ > [ !IMPORTANT] ** This repo is a POC and a serious working base.** It demonstrates a fully functional flow, but is not production-ready without hardening. See the [ Security] ( #security ) section and ` SECURITY.md ` for details.
2522
2623---
2724
@@ -151,8 +148,8 @@ Add a label `ai-pr-claude`, `ai-pr-codex`, or `ai-pr-aider` to a GitHub issue. T
151148### Kubernetes Secrets
152149
153150| Secret | Keys | Used by |
154- | -------- | ------ | --------- |
155- | ` github-app ` | ` GITHUB_APP_ID ` , ` GITHUB_PRIVATE_KEY ` | orchestrator |
151+ | --- | --- | --- |
152+ | ` github-app ` | ` GITHUB_APP_ID ` , ` GITHUB_PRIVATE_KEY ` | orchestrator |
156153| ` github-webhook-secret ` | ` WEBHOOK_SECRET ` | orchestrator |
157154| ` orchestrator-config ` | ` JOB_TTL_SECONDS ` , ` ADMIN_TOKEN ` | orchestrator |
158155| ` anthropic-api-key ` | ` ANTHROPIC_API_KEY ` | worker-claude |
@@ -175,12 +172,12 @@ kubectl -n ai-bot get secret anthropic-api-key -o jsonpath='{.data.ANTHROPIC_API
175172
176173### Docker Images
177174
178- | Image | Dockerfile |
179- | -------| -----------|
180- | ` ghcr.io/<your-org> /orchestrator:latest ` | ` images/orchestrator/Dockerfile ` |
181- | ` worker-claude:latest ` | ` images/worker-claude/Dockerfile ` |
182- | ` worker-codex:latest ` | ` images/worker-codex/Dockerfile ` |
183- | ` worker-aider:latest ` | ` images/worker-aider/Dockerfile ` |
175+ | Image | Dockerfile |
176+ | ---------------------------------------- | --------------------------------- |
177+ | ` ghcr.io/hey-intent /orchestrator:latest ` | ` images/orchestrator/Dockerfile ` |
178+ | ` worker-claude:latest ` | ` images/worker-claude/Dockerfile ` |
179+ | ` worker-codex:latest ` | ` images/worker-codex/Dockerfile ` |
180+ | ` worker-aider:latest ` | ` images/worker-aider/Dockerfile ` |
184181
185182Rebuild and reimport after changes:
186183
@@ -249,7 +246,7 @@ curl -s -X POST http://127.0.0.1:8080/jobs/run -H "Authorization: Bearer <ADMIN_
249246### Threat Model
250247
251248| Surface | Risk | Mitigation |
252- | --------- | ------ | ------------ |
249+ | --- | --- | --- |
253250| ** Incoming webhook** | Fake webhook to trigger a job | HMAC-SHA256 signature (` WEBHOOK_SECRET ` ) verified on every request |
254251| ** Admin endpoints** | Unauthorized access | Bearer token (` ADMIN_TOKEN ` ), not exposed via Ingress |
255252| ** GitHub App private key** | Theft = full access | PEM in orchestrator pod only, workers receive an ephemeral token (1h) |
@@ -272,7 +269,7 @@ curl -s -X POST http://127.0.0.1:8080/jobs/run -H "Authorization: Bearer <ADMIN_
272269## Troubleshooting
273270
274271| Symptom | Diagnostic |
275- | --------- | ----------- |
272+ | --- | --- |
276273| ` ErrImageNeverPull ` | Image not imported into k3s (` docker save ... \| sudo k3s ctr images import - ` ) |
277274| ` CrashLoopBackOff ` | ` kubectl logs pod/<pod> --previous ` |
278275| ` Not logged in ` | Missing API secret (depends on provider) |
0 commit comments