mirror of
https://github.com/Z3Prover/z3
synced 2025-04-04 16:44:07 +00:00
76 lines
1.9 KiB
TypeScript
76 lines
1.9 KiB
TypeScript
/**
|
|
* git commit flow with auto-generated commit message
|
|
*/
|
|
script({
|
|
title: "git commit message",
|
|
description: "Generate a commit message for all staged changes",
|
|
})
|
|
|
|
// Check for staged changes and stage all changes if none are staged
|
|
const diff = await git.diff({
|
|
staged: true,
|
|
excludedPaths: "**/genaiscript.d.ts",
|
|
askStageOnEmpty: true,
|
|
})
|
|
if (!diff) cancel("no staged changes")
|
|
|
|
// show diff in the console
|
|
console.log(diff)
|
|
|
|
let choice
|
|
let message
|
|
do {
|
|
// Generate commit message
|
|
const res = await runPrompt(
|
|
(_) => {
|
|
_.def("GIT_DIFF", diff, { maxTokens: 20000 })
|
|
_.$`GIT_DIFF is a diff of all staged changes, coming from the command:
|
|
\`\`\`
|
|
git diff --cached
|
|
\`\`\`
|
|
Please generate a concise, one-line commit message for these changes.
|
|
- do NOT add quotes
|
|
` // TODO: add a better prompt
|
|
},
|
|
{ cache: false, temperature: 0.8 }
|
|
)
|
|
if (res.error) throw res.error
|
|
|
|
message = res.text
|
|
if (!message) {
|
|
console.log("No message generated, did you configure the LLM model?")
|
|
break
|
|
}
|
|
|
|
// Prompt user for commit message
|
|
choice = await host.select(message, [
|
|
{
|
|
value: "commit",
|
|
description: "accept message and commit",
|
|
},
|
|
{
|
|
value: "edit",
|
|
description: "edit message and commit",
|
|
},
|
|
{
|
|
value: "regenerate",
|
|
description: "regenerate message",
|
|
},
|
|
])
|
|
|
|
// Handle user choice
|
|
if (choice === "edit") {
|
|
message = await host.input("Edit commit message", {
|
|
required: true,
|
|
})
|
|
choice = "commit"
|
|
}
|
|
// Regenerate message
|
|
if (choice === "commit" && message) {
|
|
console.log(await git.exec(["commit", "-m", message]))
|
|
if (await host.confirm("Push changes?", { default: true }))
|
|
console.log(await git.exec("push"))
|
|
break
|
|
}
|
|
} while (choice !== "commit")
|