1 Commits
4 changed files with 31 additions and 11 deletions
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "ai-commit-ext",
"version": "1.0.0",
"version": "1.3.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "ai-commit-ext",
"version": "1.0.0",
"version": "1.3.0",
"devDependencies": {
"@types/node": "^25.5.2",
"@types/vscode": "^1.110.0",
+1 -1
View File
@@ -2,7 +2,7 @@
"name": "ai-commit-ext",
"displayName": "AI Commit Ext",
"description": "Generate commit messages using OpenCode AI",
"version": "1.2.3",
"version": "1.3.0",
"publisher": "local",
"engines": {
"vscode": "^1.110.0"
+3 -3
View File
@@ -101,11 +101,11 @@ async function handleGenerateCommitMessage(): Promise<void> {
const commitMessage = await vscode.window.withProgress(
{
location: vscode.ProgressLocation.Notification,
cancellable: false,
cancellable: true,
title: userSuggestion ? "Improving commit message..." : "Generating commit message...",
},
async () => {
return await generateCommitMessage({ userSuggestion: userSuggestion || undefined });
async (_progress, token) => {
return await generateCommitMessage({ userSuggestion: userSuggestion || undefined, cancellationToken: token });
},
);
+25 -5
View File
@@ -6,6 +6,7 @@ import { output } from "./extension";
export interface GenerateOptions {
model?: string;
userSuggestion?: string;
cancellationToken?: vscode.CancellationToken;
}
let opencodePathCache: string | null = null;
@@ -115,6 +116,21 @@ Generate a concise Conventional Commit message for these changes:`;
},
});
let settled = false;
const timeout = setTimeout(() => {
proc.kill();
reject(new Error("OpenCode timed out"));
}, 120000);
const cancelDisposable = options.cancellationToken?.onCancellationRequested(() => {
if (!settled) {
settled = true;
clearTimeout(timeout);
proc.kill();
reject(new Error("Cancelled"));
}
});
let stdout = "";
let stderr = "";
@@ -133,6 +149,11 @@ Generate a concise Conventional Commit message for these changes:`;
});
proc.on("close", (code: number | null) => {
if (settled) return;
settled = true;
clearTimeout(timeout);
cancelDisposable?.dispose();
if (code !== 0) {
reject(
new Error(`OpenCode exited with code ${code}: ${stderr}`),
@@ -146,13 +167,12 @@ Generate a concise Conventional Commit message for these changes:`;
});
proc.on("error", (err: Error) => {
if (settled) return;
settled = true;
clearTimeout(timeout);
cancelDisposable?.dispose();
reject(new Error(`Failed to run opencode: ${err.message}`));
});
setTimeout(() => {
proc.kill();
reject(new Error("OpenCode timed out"));
}, 120000);
});
}