Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e65ac772f6 | |||
| 7182a6f8f4 |
@@ -13,17 +13,15 @@ response ends, so background monitors, scheduled wake-ups, and queued tasks
|
|||||||
never resume. Never promise future action and never claim to be waiting on a
|
never resume. Never promise future action and never claim to be waiting on a
|
||||||
notification.
|
notification.
|
||||||
|
|
||||||
For a `pull_request` event, review the PR without changing code, using the
|
For a `pull_request` event, review the PR without changing code. Your final
|
||||||
`requesting-code-review` skill from superpowers: run its code reviewer template
|
response is posted as a pull request review from the bot account: it requests
|
||||||
against the PR's base and head, and make its complete output your final response
|
changes when it mentions `@bot` and approves otherwise. So include `@bot` with
|
||||||
instead of the short comment style above. Check the whole repository against the
|
instructions to fix the findings exactly when changes are needed, and never
|
||||||
code rules at the end of this prompt, not only the diff; a violation is at least
|
mention `@bot` when the PR is ready. For UI changes, check that the result is
|
||||||
Important even when the diff did not cause it. Your final response is posted as
|
aligned, clean, and pixel-perfect, and that included screenshots prove the
|
||||||
a pull request review from the bot account: it requests changes when it mentions
|
intended result was achieved. Also check the whole repository, not only the
|
||||||
`@bot` and approves otherwise, so the assessment instructs `@bot` to make the
|
diff, against the code rules at the end of this prompt, and request changes for
|
||||||
fixes exactly when it is not `Yes`, and Minor issues alone never block. For UI
|
every violation you find even when the diff did not cause it.
|
||||||
changes, check that the result is aligned, clean, and pixel-perfect, and that
|
|
||||||
included screenshots prove the intended result was achieved.
|
|
||||||
|
|
||||||
For an `issue_comment` or `pull_request_review_comment` event, treat the `body`
|
For an `issue_comment` or `pull_request_review_comment` event, treat the `body`
|
||||||
in the triggering comment payload below as the user's exact instruction.
|
in the triggering comment payload below as the user's exact instruction.
|
||||||
|
|||||||
@@ -68,32 +68,16 @@ async function postResult(body: string): Promise<void> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async function run(command: string, args: string[]): Promise<void> {
|
|
||||||
const { success, code } = await new Deno.Command(command, { args }).output();
|
|
||||||
if (!success) throw new Error(`${command} ${args[0]} exited with ${code}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Commits belong to the same account as the pull request they end up in.
|
// Commits belong to the same account as the pull request they end up in.
|
||||||
async function configureGitAuthor(): Promise<void> {
|
async function configureGitAuthor(): Promise<void> {
|
||||||
const user: GiteaUser = await (await gitea(AUTHOR_TOKEN, "user")).json();
|
const user: GiteaUser = await (await gitea(AUTHOR_TOKEN, "user")).json();
|
||||||
for (const [key, value] of [["name", user.login], ["email", user.email]]) {
|
for (const [key, value] of [["name", user.login], ["email", user.email]]) {
|
||||||
await run("git", ["config", "--global", `user.${key}`, value]);
|
await new Deno.Command("git", {
|
||||||
|
args: ["config", "--global", `user.${key}`, value],
|
||||||
|
}).output();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// The superpowers plugin gives the agent its skills, including the code review
|
|
||||||
// one that the prompt asks for. Both installs are idempotent on the persisted
|
|
||||||
// home.
|
|
||||||
async function installSuperpowers(bot: string): Promise<void> {
|
|
||||||
const commands = bot === "claude"
|
|
||||||
? [
|
|
||||||
["plugin", "marketplace", "add", "obra/superpowers-marketplace"],
|
|
||||||
["plugin", "install", "-y", "superpowers@superpowers-marketplace"],
|
|
||||||
]
|
|
||||||
: [["plugin", "add", "superpowers@openai-curated-remote"]];
|
|
||||||
for (const args of commands) await run(bot, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function renderPrompt(): Promise<string> {
|
async function renderPrompt(): Promise<string> {
|
||||||
const comments: GiteaComment[] = await (await gitea(
|
const comments: GiteaComment[] = await (await gitea(
|
||||||
REVIEWER_TOKEN,
|
REVIEWER_TOKEN,
|
||||||
@@ -127,7 +111,6 @@ async function runClaude(prompt: string): Promise<string> {
|
|||||||
);
|
);
|
||||||
Deno.exit(1);
|
Deno.exit(1);
|
||||||
}
|
}
|
||||||
await installSuperpowers("claude");
|
|
||||||
const claude = new Deno.Command("claude", {
|
const claude = new Deno.Command("claude", {
|
||||||
args: [
|
args: [
|
||||||
"--print",
|
"--print",
|
||||||
@@ -191,7 +174,6 @@ async function runCodex(prompt: string): Promise<string> {
|
|||||||
})
|
})
|
||||||
.output();
|
.output();
|
||||||
if (!loggedIn.success) await codexDeviceLogin();
|
if (!loggedIn.success) await codexDeviceLogin();
|
||||||
await installSuperpowers("codex");
|
|
||||||
const file = await Deno.makeTempFile();
|
const file = await Deno.makeTempFile();
|
||||||
const status = await new Deno.Command("codex", {
|
const status = await new Deno.Command("codex", {
|
||||||
args: [
|
args: [
|
||||||
|
|||||||
Reference in New Issue
Block a user