feat: add PR walkthrough generation workflow (#2933)
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
import path from "path"
|
||||
|
||||
export default tool({
|
||||
description:
|
||||
"Read one regular UTF-8 file from the immutable pull request head. Use this instead of repository read tools for PR-head contents.",
|
||||
args: {
|
||||
path: tool.schema
|
||||
.string()
|
||||
.max(4096)
|
||||
.describe("Strict repository-relative path at the pull request head"),
|
||||
},
|
||||
async execute(args, context) {
|
||||
const helper = path.join(context.worktree, ".opencode-walkthrough", "read-file")
|
||||
const sourceEnv = globalThis.process.env
|
||||
const headSha = sourceEnv.HEAD_SHA ?? ""
|
||||
const childEnv = Object.fromEntries(
|
||||
["PATH"]
|
||||
.filter((name) => sourceEnv[name] !== undefined)
|
||||
.map((name) => [name, sourceEnv[name] as string]),
|
||||
)
|
||||
const child = Bun.spawn(
|
||||
["python3", helper, "--repo", context.worktree, "--head-sha", headSha, "--path", args.path],
|
||||
{
|
||||
cwd: context.worktree,
|
||||
env: childEnv,
|
||||
stdout: "pipe",
|
||||
stderr: "pipe",
|
||||
},
|
||||
)
|
||||
const [status, stdout, stderr] = await Promise.all([
|
||||
child.exited,
|
||||
new Response(child.stdout).text(),
|
||||
new Response(child.stderr).text(),
|
||||
])
|
||||
if (status !== 0) {
|
||||
return `PR file read rejected. Choose a regular UTF-8 file from the changed-file list.\n${stderr || stdout}`
|
||||
}
|
||||
return stdout
|
||||
},
|
||||
})
|
||||
Reference in New Issue
Block a user