Files
2026-05-28 19:49:29 +00:00

100 lines
3.1 KiB
Go

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()
}