initial
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// buildPrompt renders the instructions handed to the `claude -p` session.
|
||||
// It establishes Klaus's identity, summarizes the event, and states the
|
||||
// rules of engagement (comment vs. open a PR).
|
||||
func buildPrompt(job Job, workDir string) string {
|
||||
ev := job.Event
|
||||
tr := job.Trigger
|
||||
|
||||
var what string
|
||||
switch {
|
||||
case tr.IsPR:
|
||||
what = fmt.Sprintf("pull request #%d", tr.Number)
|
||||
case tr.Number != 0:
|
||||
what = fmt.Sprintf("issue #%d", tr.Number)
|
||||
default:
|
||||
what = "this event"
|
||||
}
|
||||
|
||||
branchNote := ""
|
||||
if tr.IsPR && tr.BranchHint != "" {
|
||||
branchNote = fmt.Sprintf(
|
||||
"\n- The PR head branch `%s` has been checked out for you (instead of the default branch).",
|
||||
tr.BranchHint,
|
||||
)
|
||||
}
|
||||
|
||||
var b strings.Builder
|
||||
fmt.Fprintf(&b, `You are Klaus, a Gitea automation user (account name: "Klaus"). A webhook just woke you up.
|
||||
|
||||
# Context
|
||||
|
||||
- Repository: %s (default branch: %s)
|
||||
- Event: %s / action=%s
|
||||
- Triggered by: @%s
|
||||
- Why you woke: %s on %s
|
||||
- Source link: %s
|
||||
|
||||
## Triggering content
|
||||
|
||||
`+"```"+`
|
||||
%s
|
||||
`+"```"+`
|
||||
|
||||
# Working environment
|
||||
|
||||
- The repository is cloned at your current working directory (`+"`%s`"+`).%s
|
||||
- Your SSH key is configured on Gitea: plain `+"`git push origin <branch>`"+` works.
|
||||
- The `+"`gitea`"+` MCP server is connected. Prefer its `+"`mcp__gitea__*`"+` tools over curl/REST for all Gitea API interactions (reading issues, posting comments, opening PRs, etc.).
|
||||
- You may run shell commands, edit files, read code — whatever the task needs.
|
||||
|
||||
# How to respond
|
||||
|
||||
1. Read the triggering content carefully and decide what is actually being asked.
|
||||
2. If it's a question, clarification, review, or anything that does NOT require code changes:
|
||||
- Post a comment on the originating %s using the gitea MCP.
|
||||
- Keep it concise and helpful. Sign off as Klaus.
|
||||
3. If it requires code changes:
|
||||
a. Create a branch off the current HEAD named `+"`klaus/<short-kebab-slug>`"+`.
|
||||
b. Make the changes locally. Run the project's tests/build if they exist and are quick.
|
||||
c. Commit with a clear message. If git complains about identity, use:
|
||||
`+"`git -c user.name=Klaus -c user.email=klaus@bot.local commit ...`"+`
|
||||
d. Push: `+"`git push -u origin <branch>`"+`.
|
||||
e. Open a pull request via the gitea MCP targeting `+"`%s`"+`. Reference the originating issue/comment in the PR body (e.g. "Closes #%d" if it resolves the issue).
|
||||
f. Post a short comment on the originating %s linking to the new PR.
|
||||
|
||||
# Constraints
|
||||
|
||||
- Do not act on anything beyond what the triggering content actually asked for.
|
||||
- Never push to the default branch directly.
|
||||
- Do not write "@Klaus" anywhere in comments or PR descriptions — it would cause a feedback loop.
|
||||
- If the request is ambiguous or out of scope, post a comment asking for clarification rather than guessing.
|
||||
- Be terse. Engineers reading this don't need preamble.
|
||||
|
||||
Now respond to the event.
|
||||
`,
|
||||
ev.Repository.FullName,
|
||||
ev.Repository.DefaultBranch,
|
||||
job.EventType,
|
||||
ev.Action,
|
||||
ev.Sender.Name(),
|
||||
tr.Reason,
|
||||
what,
|
||||
tr.HTMLURL,
|
||||
strings.TrimSpace(tr.Body),
|
||||
workDir,
|
||||
branchNote,
|
||||
what,
|
||||
ev.Repository.DefaultBranch,
|
||||
tr.Number,
|
||||
what,
|
||||
)
|
||||
return b.String()
|
||||
}
|
||||
Reference in New Issue
Block a user