spec-cat 0.1.60 → 0.1.62

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/2zamijve.js +1 -0
  3. package/.output/public/_nuxt/{hL590mW_.js → BEjIzkrM.js} +54 -54
  4. package/.output/public/_nuxt/{0b9erTT7.js → BaSsfm-t.js} +1 -1
  5. package/.output/public/_nuxt/BjdLSVUw.js +1 -0
  6. package/.output/public/_nuxt/{fOeB-VHQ.js → Bz2rU2zs.js} +1 -1
  7. package/.output/public/_nuxt/{oZWZjCpV.js → D4LyIv_t.js} +1 -1
  8. package/.output/public/_nuxt/{CeUwIKdG.js → DIOhMCOf.js} +2 -2
  9. package/.output/public/_nuxt/{PyyEm6pa.js → DPOGSCeV.js} +1 -1
  10. package/.output/public/_nuxt/{BBjCHYA6.js → DeqM2TrP.js} +1 -1
  11. package/.output/public/_nuxt/{C7bEjS62.js → DwpuOtAP.js} +1 -1
  12. package/.output/public/_nuxt/{soqWbP5S.js → FfyCVKRU.js} +1 -1
  13. package/.output/public/_nuxt/{Ritd1ZTh.js → Su-Cl_JF.js} +1 -1
  14. package/.output/public/_nuxt/builds/latest.json +1 -1
  15. package/.output/public/_nuxt/builds/meta/df07a2f8-c6d6-420d-a863-ac6e0e7673e0.json +1 -0
  16. package/.output/public/_nuxt/{CtkWRKR5.js → zrVRZSxq.js} +1 -1
  17. package/.output/server/chunks/_/asyncLock.mjs +17 -0
  18. package/.output/server/chunks/_/asyncLock.mjs.map +1 -0
  19. package/.output/server/chunks/_/chatGit.mjs +19 -0
  20. package/.output/server/chunks/_/chatGit.mjs.map +1 -0
  21. package/.output/server/chunks/_/claude.mjs +2 -1
  22. package/.output/server/chunks/_/claude.mjs.map +1 -1
  23. package/.output/server/chunks/_/claudeProvider.mjs +2 -1
  24. package/.output/server/chunks/_/claudeProvider.mjs.map +1 -1
  25. package/.output/server/chunks/_/codexProvider.mjs +14 -2
  26. package/.output/server/chunks/_/codexProvider.mjs.map +1 -1
  27. package/.output/server/chunks/_/conversationStore.mjs.map +1 -1
  28. package/.output/server/chunks/_/jobQueue.mjs +1 -1
  29. package/.output/server/chunks/_/validateWorktree.mjs +1 -1
  30. package/.output/server/chunks/_/worktreePaths.mjs +1 -1
  31. package/.output/server/chunks/build/client.precomputed.mjs +1 -1
  32. package/.output/server/chunks/build/client.precomputed.mjs.map +1 -1
  33. package/.output/server/chunks/nitro/nitro.mjs +558 -558
  34. package/.output/server/chunks/routes/_ws.mjs +7 -6
  35. package/.output/server/chunks/routes/_ws.mjs.map +1 -1
  36. package/.output/server/chunks/routes/api/chat/compare.get.mjs +5 -0
  37. package/.output/server/chunks/routes/api/chat/compare.get.mjs.map +1 -1
  38. package/.output/server/chunks/routes/api/chat/finalize.post.mjs +94 -93
  39. package/.output/server/chunks/routes/api/chat/finalize.post.mjs.map +1 -1
  40. package/.output/server/chunks/routes/api/chat/generate-commit-message.post.mjs +2 -0
  41. package/.output/server/chunks/routes/api/chat/generate-commit-message.post.mjs.map +1 -1
  42. package/.output/server/chunks/routes/api/chat/preview-sync.post.mjs +28 -22
  43. package/.output/server/chunks/routes/api/chat/preview-sync.post.mjs.map +1 -1
  44. package/.output/server/chunks/routes/api/chat/preview.delete.mjs +24 -23
  45. package/.output/server/chunks/routes/api/chat/preview.delete.mjs.map +1 -1
  46. package/.output/server/chunks/routes/api/chat/preview.post.mjs +53 -48
  47. package/.output/server/chunks/routes/api/chat/preview.post.mjs.map +1 -1
  48. package/.output/server/chunks/routes/api/chat/rebase.post.mjs +39 -41
  49. package/.output/server/chunks/routes/api/chat/rebase.post.mjs.map +1 -1
  50. package/.output/server/chunks/routes/api/chat/worktree-commit.post.mjs +56 -46
  51. package/.output/server/chunks/routes/api/chat/worktree-commit.post.mjs.map +1 -1
  52. package/.output/server/chunks/routes/api/chat/worktree.delete.mjs +38 -30
  53. package/.output/server/chunks/routes/api/chat/worktree.delete.mjs.map +1 -1
  54. package/.output/server/chunks/routes/api/chat/worktree.post.mjs +73 -65
  55. package/.output/server/chunks/routes/api/chat/worktree.post.mjs.map +1 -1
  56. package/.output/server/chunks/routes/api/chat.post.mjs +16 -3
  57. package/.output/server/chunks/routes/api/chat.post.mjs.map +1 -1
  58. package/.output/server/package.json +1 -1
  59. package/package.json +1 -1
  60. package/.output/public/_nuxt/Bq8BNs4s.js +0 -1
  61. package/.output/public/_nuxt/CvPsR12A.js +0 -1
  62. package/.output/public/_nuxt/builds/meta/9d41800a-a604-4f15-8938-30e3b775a2dc.json +0 -1
@@ -220,7 +220,7 @@ const _ws = defineWebSocketHandler({
220
220
  return;
221
221
  }
222
222
  if (msg.type === "abort") {
223
- handleAbort(peer);
223
+ handleAbort(peer, msg);
224
224
  return;
225
225
  }
226
226
  if (msg.type === "reset_context") {
@@ -315,12 +315,13 @@ function handlePermissionResponse(peer, msg) {
315
315
  console.log("[WS] Permission response:", { allow: msg.allow, conversationId: conn.conversationId });
316
316
  jobQueue.respondToPermission(conn.conversationId, msg.allow);
317
317
  }
318
- function handleAbort(peer) {
318
+ function handleAbort(peer, msg) {
319
319
  const conn = getPeerConnection(peer.id);
320
- console.log("[WS] Abort requested for peer:", peer.id, "conversationId:", conn.conversationId);
321
- if (conn.conversationId) {
322
- jobQueue.abort(conn.conversationId);
323
- console.log("[WS] jobQueue.abort() called for conversation:", conn.conversationId);
320
+ const conversationId = msg.conversationId || conn.conversationId;
321
+ console.log("[WS] Abort requested for peer:", peer.id, "conversationId:", conversationId);
322
+ if (conversationId) {
323
+ jobQueue.abort(conversationId);
324
+ console.log("[WS] jobQueue.abort() called for conversation:", conversationId);
324
325
  } else {
325
326
  console.warn("[WS] Abort skipped \u2014 no conversationId bound to this peer!");
326
327
  }
@@ -1 +1 @@
1
- {"version":3,"file":"_ws.mjs","sources":["../../../../server/utils/worktreeSetup.ts","../../../../server/routes/_ws.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"_ws.mjs","sources":["../../../../server/utils/worktreeSetup.ts","../../../../server/routes/_ws.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  import { d as defineEventHandler, f as getQuery, c as createError, l as logger } from '../../../nitro/nitro.mjs';
2
2
  import { i as isGitRepositorySync } from '../../../_/git.mjs';
3
3
  import { e as execGitArgs } from '../../../_/gitExec.mjs';
4
+ import { v as validateWorktreePath } from '../../../_/validateWorktree.mjs';
5
+ import { a as assertSafeBranchName } from '../../../_/chatGit.mjs';
4
6
  import 'node:http';
5
7
  import 'node:https';
6
8
  import 'node:crypto';
@@ -24,6 +26,7 @@ import 'node:fs/promises';
24
26
  import 'node:url';
25
27
  import 'child_process';
26
28
  import 'util';
29
+ import '../../../_/worktreePaths.mjs';
27
30
 
28
31
  const compare_get = defineEventHandler(async (event) => {
29
32
  try {
@@ -36,6 +39,8 @@ const compare_get = defineEventHandler(async (event) => {
36
39
  statusMessage: "worktreePath and baseBranch are required"
37
40
  });
38
41
  }
42
+ validateWorktreePath(worktreePath);
43
+ assertSafeBranchName(baseBranch, "base branch");
39
44
  if (!isGitRepositorySync(worktreePath)) {
40
45
  throw createError({
41
46
  statusCode: 400,
@@ -1 +1 @@
1
- {"version":3,"file":"compare.get.mjs","sources":["../../../../../../server/api/chat/compare.get.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,oBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,IAAA;AACA,IAAA,MAAA,KAAA,GAAA,SAAA,KAAA,CAAA;AACA,IAAA,MAAA,eAAA,KAAA,CAAA,YAAA;AACA,IAAA,MAAA,aAAA,KAAA,CAAA,UAAA;AAEA,IAAA,IAAA,CAAA,YAAA,IAAA,CAAA,UAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,aAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AAEA,IAAA,IAAA,CAAA,mBAAA,CAAA,YAAA,CAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,aAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AAEA,IAAA,MAAA,MAAA,GAAA,YAAA,YAAA,EAAA;AAAA,MACA,UAAA;AAAA,MACA,cAAA;AAAA,MACA,SAAA;AAAA,MACA,GAAA,UAAA,CAAA,OAAA;AAAA,KACA,CAAA;AAEA,IAAA,MAAA,CAAA,WAAA,QAAA,CAAA,GAAA,OAAA,IAAA,EAAA,CAAA,MAAA,KAAA,CAAA;AACA,IAAA,MAAA,SAAA,MAAA,CAAA,QAAA,CAAA,SAAA,IAAA,GAAA,EAAA,EAAA,CAAA,IAAA,CAAA;AACA,IAAA,MAAA,QAAA,MAAA,CAAA,QAAA,CAAA,QAAA,IAAA,GAAA,EAAA,EAAA,CAAA,IAAA,CAAA;AAEA,IAAA,OAAA,EAAA,OAAA,MAAA,EAAA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,IAAA,KAAA,IAAA,OAAA,KAAA,KAAA,QAAA,IAAA,gBAAA,KAAA,EAAA;AACA,MAAA,MAAA,KAAA;AAAA,IACA;AAEA,IAAA,MAAA,CAAA,GAAA,CAAA,KAAA,CAAA,uCAAA,EAAA,EAAA,OAAA,CAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AACA,CAAA,CAAA;;;;"}
1
+ {"version":3,"file":"compare.get.mjs","sources":["../../../../../../server/api/chat/compare.get.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,oBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,IAAA;AACA,IAAA,MAAA,KAAA,GAAA,SAAA,KAAA,CAAA;AACA,IAAA,MAAA,eAAA,KAAA,CAAA,YAAA;AACA,IAAA,MAAA,aAAA,KAAA,CAAA,UAAA;AAEA,IAAA,IAAA,CAAA,YAAA,IAAA,CAAA,UAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,aAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AAEA,IAAA,oBAAA,CAAA,YAAA,CAAA;AACA,IAAA,oBAAA,CAAA,YAAA,aAAA,CAAA;AAEA,IAAA,IAAA,CAAA,mBAAA,CAAA,YAAA,CAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,aAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AAEA,IAAA,MAAA,MAAA,GAAA,YAAA,YAAA,EAAA;AAAA,MACA,UAAA;AAAA,MACA,cAAA;AAAA,MACA,SAAA;AAAA,MACA,GAAA,UAAA,CAAA,OAAA;AAAA,KACA,CAAA;AAEA,IAAA,MAAA,CAAA,WAAA,QAAA,CAAA,GAAA,OAAA,IAAA,EAAA,CAAA,MAAA,KAAA,CAAA;AACA,IAAA,MAAA,SAAA,MAAA,CAAA,QAAA,CAAA,SAAA,IAAA,GAAA,EAAA,EAAA,CAAA,IAAA,CAAA;AACA,IAAA,MAAA,QAAA,MAAA,CAAA,QAAA,CAAA,QAAA,IAAA,GAAA,EAAA,EAAA,CAAA,IAAA,CAAA;AAEA,IAAA,OAAA,EAAA,OAAA,MAAA,EAAA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,IAAA,KAAA,IAAA,OAAA,KAAA,KAAA,QAAA,IAAA,gBAAA,KAAA,EAAA;AACA,MAAA,MAAA,KAAA;AAAA,IACA;AAEA,IAAA,MAAA,CAAA,GAAA,CAAA,KAAA,CAAA,uCAAA,EAAA,EAAA,OAAA,CAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AACA,CAAA,CAAA;;;;"}
@@ -1,11 +1,14 @@
1
1
  import { d as defineEventHandler, b as readBody, c as createError, e as getProjectDir, l as logger } from '../../../nitro/nitro.mjs';
2
- import { execSync, exec } from 'node:child_process';
3
- import { promisify } from 'node:util';
2
+ import { execSync } from 'node:child_process';
4
3
  import { existsSync } from 'node:fs';
5
4
  import { rm } from 'node:fs/promises';
6
5
  import { r as resolveExistingBaseBranch } from '../../../_/baseBranch.mjs';
7
6
  import { b as guardServerProviderCapability } from '../../../_/aiProviderSelection.mjs';
8
7
  import { g as getChatWorktreePath } from '../../../_/worktreePaths.mjs';
8
+ import { v as validateWorktreePath } from '../../../_/validateWorktree.mjs';
9
+ import { a as assertSafeBranchName, g as git } from '../../../_/chatGit.mjs';
10
+ import { a as autoCommitChanges } from '../../../_/claudeService.mjs';
11
+ import { w as withLock } from '../../../_/asyncLock.mjs';
9
12
  import 'node:http';
10
13
  import 'node:https';
11
14
  import 'node:crypto';
@@ -29,18 +32,21 @@ import '../../../_/gitExec.mjs';
29
32
  import 'child_process';
30
33
  import 'util';
31
34
  import '../../../_/aiProviderRegistry.mjs';
35
+ import '../../../_/claude.mjs';
32
36
 
33
- const execAsync = promisify(exec);
34
- async function git(cwd, cmd) {
35
- const { stdout } = await execAsync(`git ${cmd}`, { cwd });
36
- return stdout.trim();
37
- }
38
- async function autoCommitChanges(worktreePath) {
39
- const status = await git(worktreePath, "status --porcelain");
40
- if (!status) return false;
41
- await git(worktreePath, "add -A");
42
- execSync("git commit -F -", { cwd: worktreePath, input: "auto-commit uncommitted changes", encoding: "utf-8" });
43
- return true;
37
+ async function collectConflictFiles(worktreePath) {
38
+ try {
39
+ const diffOutput = await git(worktreePath, ["diff", "--name-only", "--diff-filter=U"]);
40
+ const files = diffOutput.split("\n").filter(Boolean);
41
+ if (files.length > 0) return files;
42
+ } catch {
43
+ }
44
+ try {
45
+ const statusOutput = await git(worktreePath, ["status", "--porcelain"]);
46
+ return statusOutput.split("\n").filter((line) => /^(UU|AA|DU|UD|UA|AU|DD)\s/.test(line)).map((line) => line.substring(3).trim());
47
+ } catch {
48
+ return [];
49
+ }
44
50
  }
45
51
  const finalize_post = defineEventHandler(async (event) => {
46
52
  const body = await readBody(event);
@@ -59,8 +65,12 @@ const finalize_post = defineEventHandler(async (event) => {
59
65
  return providerGuard.failure;
60
66
  }
61
67
  const projectDir = getProjectDir();
62
- const branchName = body.worktreeBranch || `sc/${conversationId}`;
68
+ const branchName = assertSafeBranchName(body.worktreeBranch || `sc/${conversationId}`, "branch");
63
69
  const worktreePath = body.worktreePath || getChatWorktreePath(conversationId);
70
+ const previewBranch = body.previewBranch ? assertSafeBranchName(body.previewBranch, "preview branch") : void 0;
71
+ if (existsSync(worktreePath)) {
72
+ validateWorktreePath(worktreePath);
73
+ }
64
74
  logger.chat.info("Finalizing conversation", { conversationId, branchName });
65
75
  const baseBranch = await resolveExistingBaseBranch({
66
76
  cwd: projectDir,
@@ -70,98 +80,89 @@ const finalize_post = defineEventHandler(async (event) => {
70
80
  if (!baseBranch) {
71
81
  return { success: false, error: "Unable to resolve a valid base branch for this worktree." };
72
82
  }
73
- try {
74
- if (!existsSync(worktreePath)) {
75
- return { success: false, error: "Worktree directory not found. It may have been cleaned up." };
76
- }
77
- await autoCommitChanges(worktreePath);
78
- let commitCount;
79
- try {
80
- const countStr = await git(worktreePath, `rev-list --count ${baseBranch}..HEAD`);
81
- commitCount = parseInt(countStr, 10);
82
- } catch {
83
- return { success: false, error: `Cannot compare with base branch "${baseBranch}". It may not exist.` };
84
- }
85
- if (commitCount === 0) {
86
- return { success: false, error: "No commits to finalize." };
87
- }
88
- const mergeBase = await git(worktreePath, `merge-base ${baseBranch} HEAD`);
89
- await git(worktreePath, `reset --soft ${mergeBase}`);
90
- execSync("git commit -F -", { cwd: worktreePath, input: commitMessage, encoding: "utf-8" });
83
+ assertSafeBranchName(baseBranch, "base branch");
84
+ return withLock(projectDir, async () => {
91
85
  try {
92
- await git(worktreePath, `rebase ${baseBranch}`);
93
- } catch (rebaseError) {
94
- logger.chat.warn("Rebase conflict during finalize", { conversationId });
95
- let conflictFiles = [];
86
+ if (!existsSync(worktreePath)) {
87
+ return { success: false, error: "Worktree directory not found. It may have been cleaned up." };
88
+ }
89
+ await autoCommitChanges(worktreePath);
90
+ let commitCount;
96
91
  try {
97
- const diffOutput = await git(worktreePath, "diff --name-only --diff-filter=U");
98
- conflictFiles = diffOutput.split("\n").filter(Boolean);
92
+ const countStr = await git(worktreePath, ["rev-list", "--count", `${baseBranch}..HEAD`]);
93
+ commitCount = parseInt(countStr, 10);
99
94
  } catch {
100
- try {
101
- const statusOutput = await git(worktreePath, "status --porcelain");
102
- conflictFiles = statusOutput.split("\n").filter((line) => /^(UU|AA|DU|UD|UA|AU|DD)\s/.test(line)).map((line) => line.substring(3).trim());
103
- } catch {
104
- }
95
+ return { success: false, error: `Cannot compare with base branch "${baseBranch}". It may not exist.` };
105
96
  }
106
- return {
107
- success: false,
108
- error: `Rebase conflict with "${baseBranch}". Resolve conflicts to continue.`,
109
- conflictFiles,
110
- rebaseInProgress: true
111
- };
112
- }
113
- const previewBranch = body.previewBranch;
114
- try {
115
- const currentBranch = await git(projectDir, "rev-parse --abbrev-ref HEAD");
116
- if (currentBranch !== baseBranch) {
117
- await git(projectDir, `checkout "${baseBranch}"`);
97
+ if (commitCount === 0) {
98
+ return { success: false, error: "No commits to finalize." };
118
99
  }
119
- } catch {
120
- }
121
- const newHead = await git(worktreePath, "rev-parse HEAD");
122
- await git(projectDir, `update-ref refs/heads/${baseBranch} ${newHead}`);
123
- try {
124
- const mainBranch = await git(projectDir, "rev-parse --abbrev-ref HEAD");
125
- if (mainBranch === baseBranch) {
126
- await git(projectDir, "reset --hard HEAD");
100
+ try {
101
+ await git(worktreePath, ["rebase", baseBranch]);
102
+ } catch {
103
+ logger.chat.warn("Rebase conflict during finalize", { conversationId });
104
+ const conflictFiles = await collectConflictFiles(worktreePath);
105
+ return {
106
+ success: false,
107
+ error: `Rebase conflict with "${baseBranch}". Resolve conflicts to continue.`,
108
+ conflictFiles,
109
+ rebaseInProgress: true
110
+ };
127
111
  }
128
- } catch {
129
- }
130
- logger.chat.info("Base branch updated", { baseBranch, newHead });
131
- try {
132
- await execAsync(`git worktree remove "${worktreePath}" --force`, { cwd: projectDir });
133
- } catch {
112
+ await git(worktreePath, ["reset", "--soft", baseBranch]);
113
+ execSync("git commit -F -", { cwd: worktreePath, input: commitMessage, encoding: "utf-8" });
134
114
  try {
135
- await rm(worktreePath, { recursive: true, force: true });
115
+ const currentBranch = await git(projectDir, ["rev-parse", "--abbrev-ref", "HEAD"]);
116
+ if (currentBranch !== baseBranch) {
117
+ await git(projectDir, ["checkout", baseBranch]);
118
+ }
136
119
  } catch {
137
120
  }
138
- }
139
- await execAsync("git worktree prune", { cwd: projectDir }).catch(() => {
140
- });
141
- try {
142
- await git(projectDir, `branch -D "${branchName}"`);
143
- } catch {
144
- logger.chat.warn("Failed to delete temp branch", { branchName });
145
- }
146
- if (previewBranch) {
121
+ const newHead = await git(worktreePath, ["rev-parse", "HEAD"]);
122
+ await git(projectDir, ["update-ref", `refs/heads/${baseBranch}`, newHead]);
123
+ try {
124
+ const mainBranch = await git(projectDir, ["rev-parse", "--abbrev-ref", "HEAD"]);
125
+ if (mainBranch === baseBranch) {
126
+ await git(projectDir, ["reset", "--hard", "HEAD"]);
127
+ }
128
+ } catch {
129
+ }
130
+ logger.chat.info("Base branch updated", { baseBranch, newHead });
131
+ try {
132
+ await git(projectDir, ["worktree", "remove", worktreePath, "--force"]);
133
+ } catch {
134
+ try {
135
+ await rm(worktreePath, { recursive: true, force: true });
136
+ } catch {
137
+ }
138
+ }
139
+ await git(projectDir, ["worktree", "prune"]).catch(() => {
140
+ });
147
141
  try {
148
- await git(projectDir, `branch -D "${previewBranch}"`);
142
+ await git(projectDir, ["branch", "-D", branchName]);
149
143
  } catch {
144
+ logger.chat.warn("Failed to delete temp branch", { branchName });
150
145
  }
146
+ if (previewBranch) {
147
+ try {
148
+ await git(projectDir, ["branch", "-D", previewBranch]);
149
+ } catch {
150
+ }
151
+ }
152
+ logger.chat.info("Conversation finalized", { conversationId, newCommit: newHead });
153
+ return {
154
+ success: true,
155
+ newCommit: newHead
156
+ };
157
+ } catch (error) {
158
+ const errorMessage = error instanceof Error ? error.message : String(error);
159
+ logger.chat.error("Finalize failed", { conversationId, error: errorMessage });
160
+ return {
161
+ success: false,
162
+ error: errorMessage
163
+ };
151
164
  }
152
- logger.chat.info("Conversation finalized", { conversationId, newCommit: newHead });
153
- return {
154
- success: true,
155
- newCommit: newHead
156
- };
157
- } catch (error) {
158
- const errorMessage = error instanceof Error ? error.message : String(error);
159
- logger.chat.error("Finalize failed", { conversationId, error: errorMessage });
160
- return {
161
- success: false,
162
- error: errorMessage
163
- };
164
- }
165
+ });
165
166
  });
166
167
 
167
168
  export { finalize_post as default };
@@ -1 +1 @@
1
- {"version":3,"file":"finalize.post.mjs","sources":["../../../../../../server/api/chat/finalize.post.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"finalize.post.mjs","sources":["../../../../../../server/api/chat/finalize.post.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ import { s as sendMessage } from '../../../_/claudeService.mjs';
6
6
  import { b as guardServerProviderCapability } from '../../../_/aiProviderSelection.mjs';
7
7
  import { r as resolveExistingBaseBranch } from '../../../_/baseBranch.mjs';
8
8
  import { g as getChatWorktreePath } from '../../../_/worktreePaths.mjs';
9
+ import { v as validateWorktreePath } from '../../../_/validateWorktree.mjs';
9
10
  import 'node:http';
10
11
  import 'node:https';
11
12
  import 'node:crypto';
@@ -53,6 +54,7 @@ const generateCommitMessage_post = defineEventHandler(async (event) => {
53
54
  if (!existsSync(worktreePath)) {
54
55
  throw createError({ statusCode: 404, message: "Worktree not found" });
55
56
  }
57
+ validateWorktreePath(worktreePath);
56
58
  const providerGuard = await guardServerProviderCapability(
57
59
  "autoCommit",
58
60
  "Switch to a provider with auto-commit support or disable AI-generated commit messages."
@@ -1 +1 @@
1
- {"version":3,"file":"generate-commit-message.post.mjs","sources":["../../../../../../server/api/chat/generate-commit-message.post.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate-commit-message.post.mjs","sources":["../../../../../../server/api/chat/generate-commit-message.post.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  import { d as defineEventHandler, b as readBody, c as createError, e as getProjectDir, l as logger } from '../../../nitro/nitro.mjs';
2
- import { exec } from 'node:child_process';
3
- import { promisify } from 'node:util';
2
+ import { existsSync } from 'node:fs';
3
+ import { v as validateWorktreePath } from '../../../_/validateWorktree.mjs';
4
+ import { a as assertSafeBranchName, g as git } from '../../../_/chatGit.mjs';
5
+ import { w as withLock } from '../../../_/asyncLock.mjs';
4
6
  import 'node:http';
5
7
  import 'node:https';
6
8
  import 'node:crypto';
@@ -16,18 +18,16 @@ import 'tls';
16
18
  import 'url';
17
19
  import 'node:events';
18
20
  import 'node:buffer';
19
- import 'node:fs';
20
21
  import 'node:path';
21
22
  import 'node:os';
22
23
  import 'node:module';
23
24
  import 'node:fs/promises';
24
25
  import 'node:url';
26
+ import '../../../_/worktreePaths.mjs';
27
+ import '../../../_/gitExec.mjs';
28
+ import 'child_process';
29
+ import 'util';
25
30
 
26
- const execAsync = promisify(exec);
27
- async function git(cwd, cmd) {
28
- const { stdout } = await execAsync(`git ${cmd}`, { cwd });
29
- return stdout.trim();
30
- }
31
31
  const previewSync_post = defineEventHandler(async (event) => {
32
32
  const body = await readBody(event);
33
33
  if (!(body == null ? void 0 : body.previewBranch) || !(body == null ? void 0 : body.worktreePath)) {
@@ -36,22 +36,28 @@ const previewSync_post = defineEventHandler(async (event) => {
36
36
  message: "previewBranch and worktreePath are required"
37
37
  });
38
38
  }
39
- const { previewBranch, worktreePath } = body;
39
+ const { worktreePath } = body;
40
+ const previewBranch = assertSafeBranchName(body.previewBranch, "preview branch");
40
41
  const projectDir = getProjectDir();
41
- try {
42
- const worktreeHead = await git(worktreePath, "rev-parse HEAD");
43
- await git(projectDir, `update-ref refs/heads/${previewBranch} ${worktreeHead}`);
44
- const currentBranch = await git(projectDir, "rev-parse --abbrev-ref HEAD");
45
- if (currentBranch === previewBranch) {
46
- await git(projectDir, `reset --hard ${worktreeHead}`);
47
- }
48
- logger.chat.info("Preview synced", { previewBranch, commit: worktreeHead });
49
- return { success: true, commit: worktreeHead };
50
- } catch (error) {
51
- const errorMessage = error instanceof Error ? error.message : String(error);
52
- logger.chat.error("Preview sync failed", { previewBranch, error: errorMessage });
53
- return { success: false, error: errorMessage };
42
+ if (existsSync(worktreePath)) {
43
+ validateWorktreePath(worktreePath);
54
44
  }
45
+ return withLock(projectDir, async () => {
46
+ try {
47
+ const worktreeHead = await git(worktreePath, ["rev-parse", "HEAD"]);
48
+ await git(projectDir, ["update-ref", `refs/heads/${previewBranch}`, worktreeHead]);
49
+ const currentBranch = await git(projectDir, ["rev-parse", "--abbrev-ref", "HEAD"]);
50
+ if (currentBranch === previewBranch) {
51
+ await git(projectDir, ["reset", "--hard", worktreeHead]);
52
+ }
53
+ logger.chat.info("Preview synced", { previewBranch, commit: worktreeHead });
54
+ return { success: true, commit: worktreeHead };
55
+ } catch (error) {
56
+ const errorMessage = error instanceof Error ? error.message : String(error);
57
+ logger.chat.error("Preview sync failed", { previewBranch, error: errorMessage });
58
+ return { success: false, error: errorMessage };
59
+ }
60
+ });
55
61
  });
56
62
 
57
63
  export { previewSync_post as default };
@@ -1 +1 @@
1
- {"version":3,"file":"preview-sync.post.mjs","sources":["../../../../../../server/api/chat/preview-sync.post.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAgBA,MAAA,SAAA,GAAA,UAAA,IAAA,CAAA;AAEA,eAAA,GAAA,CAAA,KAAA,GAAA,EAAA;AACA,EAAA,MAAA,EAAA,MAAA,EAAA,GAAA,MAAA,SAAA,CAAA,OAAA,GAAA,CAAA,CAAA,EAAA,EAAA,GAAA,EAAA,CAAA;AACA,EAAA,OAAA,OAAA,IAAA,EAAA;AACA;AAEA,yBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,MAAA,IAAA,GAAA,MAAA,QAAA,CAGA,KAAA,CAAA;AAEA,EAAA,IAAA,EAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,aAAA,CAAA,IAAA,EAAA,6BAAA,YAAA,CAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,OAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,MAAA,EAAA,aAAA,EAAA,YAAA,EAAA,GAAA,IAAA;AACA,EAAA,MAAA,aAAA,aAAA,EAAA;AAEA,EAAA,IAAA;AAEA,IAAA,MAAA,YAAA,GAAA,MAAA,GAAA,CAAA,YAAA,EAAA,gBAAA,CAAA;AAGA,IAAA,MAAA,IAAA,UAAA,EAAA,CAAA,sBAAA,EAAA,aAAA,CAAA,CAAA,EAAA,YAAA,CAAA,CAAA,CAAA;AAGA,IAAA,MAAA,aAAA,GAAA,MAAA,GAAA,CAAA,UAAA,EAAA,6BAAA,CAAA;AACA,IAAA,IAAA,kBAAA,aAAA,EAAA;AACA,MAAA,MAAA,GAAA,CAAA,UAAA,EAAA,CAAA,aAAA,EAAA,YAAA,CAAA,CAAA,CAAA;AAAA,IACA;AAEA,IAAA,MAAA,CAAA,KAAA,IAAA,CAAA,gBAAA,EAAA,EAAA,aAAA,EAAA,MAAA,EAAA,cAAA,CAAA;AAEA,IAAA,OAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,MAAA,eAAA,KAAA,YAAA,KAAA,GAAA,KAAA,CAAA,OAAA,GAAA,OAAA,KAAA,CAAA;AACA,IAAA,MAAA,CAAA,KAAA,KAAA,CAAA,qBAAA,EAAA,EAAA,aAAA,EAAA,KAAA,EAAA,cAAA,CAAA;AAEA,IAAA,OAAA,EAAA,OAAA,EAAA,KAAA,EAAA,KAAA,EAAA,YAAA,EAAA;AAAA,EACA;AACA,CAAA,CAAA;;;;"}
1
+ {"version":3,"file":"preview-sync.post.mjs","sources":["../../../../../../server/api/chat/preview-sync.post.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,yBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,MAAA,IAAA,GAAA,MAAA,QAAA,CAGA,KAAA,CAAA;AAEA,EAAA,IAAA,EAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,aAAA,CAAA,IAAA,EAAA,6BAAA,YAAA,CAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,OAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,MAAA,EAAA,cAAA,GAAA,IAAA;AACA,EAAA,MAAA,aAAA,GAAA,oBAAA,CAAA,IAAA,CAAA,aAAA,EAAA,gBAAA,CAAA;AACA,EAAA,MAAA,aAAA,aAAA,EAAA;AAEA,EAAA,IAAA,UAAA,CAAA,YAAA,CAAA,EAAA;AACA,IAAA,oBAAA,CAAA,YAAA,CAAA;AAAA,EACA;AAEA,EAAA,OAAA,QAAA,CAAA,YAAA,YAAA;AACA,IAAA,IAAA;AAEA,MAAA,MAAA,eAAA,MAAA,GAAA,CAAA,cAAA,CAAA,WAAA,EAAA,MAAA,CAAA,CAAA;AAGA,MAAA,MAAA,GAAA,CAAA,YAAA,CAAA,YAAA,EAAA,cAAA,aAAA,CAAA,CAAA,EAAA,YAAA,CAAA,CAAA;AAGA,MAAA,MAAA,aAAA,GAAA,MAAA,GAAA,CAAA,UAAA,EAAA,CAAA,WAAA,EAAA,cAAA,EAAA,MAAA,CAAA,CAAA;AACA,MAAA,IAAA,kBAAA,aAAA,EAAA;AACA,QAAA,MAAA,IAAA,UAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,YAAA,CAAA,CAAA;AAAA,MACA;AAEA,MAAA,MAAA,CAAA,KAAA,IAAA,CAAA,gBAAA,EAAA,EAAA,aAAA,EAAA,MAAA,EAAA,cAAA,CAAA;AAEA,MAAA,OAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA;AAAA,IACA,SAAA,KAAA,EAAA;AACA,MAAA,MAAA,eAAA,KAAA,YAAA,KAAA,GAAA,KAAA,CAAA,OAAA,GAAA,OAAA,KAAA,CAAA;AACA,MAAA,MAAA,CAAA,KAAA,KAAA,CAAA,qBAAA,EAAA,EAAA,aAAA,EAAA,KAAA,EAAA,cAAA,CAAA;AAEA,MAAA,OAAA,EAAA,OAAA,EAAA,KAAA,EAAA,KAAA,EAAA,YAAA,EAAA;AAAA,IACA;AAAA,EACA,CAAA,CAAA;AACA,CAAA,CAAA;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { d as defineEventHandler, b as readBody, c as createError, e as getProjectDir, l as logger } from '../../../nitro/nitro.mjs';
2
- import { exec } from 'node:child_process';
3
- import { promisify } from 'node:util';
2
+ import { a as assertSafeBranchName, g as git } from '../../../_/chatGit.mjs';
3
+ import { w as withLock } from '../../../_/asyncLock.mjs';
4
4
  import 'node:http';
5
5
  import 'node:https';
6
6
  import 'node:crypto';
@@ -22,12 +22,10 @@ import 'node:os';
22
22
  import 'node:module';
23
23
  import 'node:fs/promises';
24
24
  import 'node:url';
25
+ import '../../../_/gitExec.mjs';
26
+ import 'child_process';
27
+ import 'util';
25
28
 
26
- const execAsync = promisify(exec);
27
- async function git(cwd, cmd) {
28
- const { stdout } = await execAsync(`git ${cmd}`, { cwd });
29
- return stdout.trim();
30
- }
31
29
  const preview_delete = defineEventHandler(async (event) => {
32
30
  const body = await readBody(event);
33
31
  if (!(body == null ? void 0 : body.previewBranch) || !(body == null ? void 0 : body.baseBranch)) {
@@ -36,26 +34,29 @@ const preview_delete = defineEventHandler(async (event) => {
36
34
  message: "previewBranch and baseBranch are required"
37
35
  });
38
36
  }
39
- const { previewBranch, baseBranch } = body;
37
+ const previewBranch = assertSafeBranchName(body.previewBranch, "preview branch");
38
+ const baseBranch = assertSafeBranchName(body.baseBranch, "base branch");
40
39
  const projectDir = getProjectDir();
41
40
  logger.chat.info("Ending preview", { previewBranch, baseBranch });
42
- try {
43
- await git(projectDir, `checkout "${baseBranch}"`);
41
+ return withLock(projectDir, async () => {
44
42
  try {
45
- await git(projectDir, `branch -D "${previewBranch}"`);
46
- } catch {
47
- logger.chat.warn("Failed to delete preview branch", { previewBranch });
43
+ await git(projectDir, ["checkout", baseBranch]);
44
+ try {
45
+ await git(projectDir, ["branch", "-D", previewBranch]);
46
+ } catch {
47
+ logger.chat.warn("Failed to delete preview branch", { previewBranch });
48
+ }
49
+ logger.chat.info("Preview ended", { previewBranch });
50
+ return { success: true };
51
+ } catch (error) {
52
+ const errorMessage = error instanceof Error ? error.message : String(error);
53
+ logger.chat.error("Failed to end preview", { error: errorMessage });
54
+ return {
55
+ success: false,
56
+ error: errorMessage
57
+ };
48
58
  }
49
- logger.chat.info("Preview ended", { previewBranch });
50
- return { success: true };
51
- } catch (error) {
52
- const errorMessage = error instanceof Error ? error.message : String(error);
53
- logger.chat.error("Failed to end preview", { error: errorMessage });
54
- return {
55
- success: false,
56
- error: errorMessage
57
- };
58
- }
59
+ });
59
60
  });
60
61
 
61
62
  export { preview_delete as default };
@@ -1 +1 @@
1
- {"version":3,"file":"preview.delete.mjs","sources":["../../../../../../server/api/chat/preview.delete.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAUA,MAAA,SAAA,GAAA,UAAA,IAAA,CAAA;AAEA,eAAA,GAAA,CAAA,KAAA,GAAA,EAAA;AACA,EAAA,MAAA,EAAA,MAAA,EAAA,GAAA,MAAA,SAAA,CAAA,OAAA,GAAA,CAAA,CAAA,EAAA,EAAA,GAAA,EAAA,CAAA;AACA,EAAA,OAAA,OAAA,IAAA,EAAA;AACA;AAEA,uBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,MAAA,IAAA,GAAA,MAAA,QAAA,CAGA,KAAA,CAAA;AAEA,EAAA,IAAA,EAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,aAAA,CAAA,IAAA,EAAA,6BAAA,UAAA,CAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,OAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,MAAA,EAAA,aAAA,EAAA,UAAA,EAAA,GAAA,IAAA;AACA,EAAA,MAAA,aAAA,aAAA,EAAA;AAEA,EAAA,MAAA,CAAA,KAAA,IAAA,CAAA,gBAAA,EAAA,EAAA,aAAA,EAAA,YAAA,CAAA;AAEA,EAAA,IAAA;AAEA,IAAA,MAAA,GAAA,CAAA,UAAA,EAAA,CAAA,UAAA,EAAA,UAAA,CAAA,CAAA,CAAA,CAAA;AAGA,IAAA,IAAA;AACA,MAAA,MAAA,GAAA,CAAA,UAAA,EAAA,CAAA,WAAA,EAAA,aAAA,CAAA,CAAA,CAAA,CAAA;AAAA,IACA,CAAA,CAAA,MAAA;AACA,MAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,iCAAA,EAAA,EAAA,eAAA,CAAA;AAAA,IACA;AAEA,IAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,eAAA,EAAA,EAAA,eAAA,CAAA;AAEA,IAAA,OAAA,EAAA,SAAA,IAAA,EAAA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,MAAA,eAAA,KAAA,YAAA,KAAA,GAAA,KAAA,CAAA,OAAA,GAAA,OAAA,KAAA,CAAA;AACA,IAAA,MAAA,CAAA,KAAA,KAAA,CAAA,uBAAA,EAAA,EAAA,KAAA,EAAA,cAAA,CAAA;AAEA,IAAA,OAAA;AAAA,MACA,OAAA,EAAA,KAAA;AAAA,MACA,KAAA,EAAA;AAAA,KACA;AAAA,EACA;AACA,CAAA,CAAA;;;;"}
1
+ {"version":3,"file":"preview.delete.mjs","sources":["../../../../../../server/api/chat/preview.delete.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA,uBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,MAAA,IAAA,GAAA,MAAA,QAAA,CAGA,KAAA,CAAA;AAEA,EAAA,IAAA,EAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,aAAA,CAAA,IAAA,EAAA,6BAAA,UAAA,CAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,OAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,MAAA,aAAA,GAAA,oBAAA,CAAA,IAAA,CAAA,aAAA,EAAA,gBAAA,CAAA;AACA,EAAA,MAAA,UAAA,GAAA,oBAAA,CAAA,IAAA,CAAA,UAAA,EAAA,aAAA,CAAA;AACA,EAAA,MAAA,aAAA,aAAA,EAAA;AAEA,EAAA,MAAA,CAAA,KAAA,IAAA,CAAA,gBAAA,EAAA,EAAA,aAAA,EAAA,YAAA,CAAA;AAEA,EAAA,OAAA,QAAA,CAAA,YAAA,YAAA;AACA,IAAA,IAAA;AAEA,MAAA,MAAA,GAAA,CAAA,UAAA,EAAA,CAAA,UAAA,EAAA,UAAA,CAAA,CAAA;AAGA,MAAA,IAAA;AACA,QAAA,MAAA,IAAA,UAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,aAAA,CAAA,CAAA;AAAA,MACA,CAAA,CAAA,MAAA;AACA,QAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,iCAAA,EAAA,EAAA,eAAA,CAAA;AAAA,MACA;AAEA,MAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,eAAA,EAAA,EAAA,eAAA,CAAA;AAEA,MAAA,OAAA,EAAA,SAAA,IAAA,EAAA;AAAA,IACA,SAAA,KAAA,EAAA;AACA,MAAA,MAAA,eAAA,KAAA,YAAA,KAAA,GAAA,KAAA,CAAA,OAAA,GAAA,OAAA,KAAA,CAAA;AACA,MAAA,MAAA,CAAA,KAAA,KAAA,CAAA,uBAAA,EAAA,EAAA,KAAA,EAAA,cAAA,CAAA;AAEA,MAAA,OAAA;AAAA,QACA,OAAA,EAAA,KAAA;AAAA,QACA,KAAA,EAAA;AAAA,OACA;AAAA,IACA;AAAA,EACA,CAAA,CAAA;AACA,CAAA,CAAA;;;;"}