mirror of
https://github.com/backnotprop/plannotator.git
synced 2026-09-14 14:17:26 +08:00
7145f190ec
* Add feature plan for VS Code diff viewer button Scoping document for a new PlanDiffViewer button that opens the plan diff in VS Code's native diff viewer via `code --diff`. https://claude.ai/code/session_01FYcJkGsWfuiGy53x3pwCSW * feat: add "Open in VS Code" button to plan diff viewer Add a button in the PlanDiffViewer toolbar that opens the current plan diff in VS Code's native side-by-side diff viewer. The server writes both versions to temp files and spawns `code --diff`. - New POST /api/plan/vscode-diff endpoint in packages/server/index.ts - VS Code button with loading/error states in PlanDiffViewer.tsx - Wire currentPlan/basePlan/baseVersion props from App.tsx https://claude.ai/code/session_01FYcJkGsWfuiGy53x3pwCSW * chore: update bun.lock after install https://claude.ai/code/session_01FYcJkGsWfuiGy53x3pwCSW * refactor: server reads plan versions directly instead of receiving from client The server already has the current plan in its closure and can read any version from disk via getPlanVersion(). No need to send plan text from the UI — just send baseVersion. https://claude.ai/code/session_01FYcJkGsWfuiGy53x3pwCSW * chore: remove plan.md scoping document from repo Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor: extract editor diff logic into shared packages/server/editor.ts Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: use official VS Code SVG icon in plan diff viewer button Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor: use history file paths directly for VS Code diff instead of writing temp files Both plan versions already exist on disk in ~/.plannotator/history/. Eliminates redundant file writes, fixes UPLOAD_DIR semantic misuse, and corrects HTTP status codes for editor errors. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor: rename editor.ts to ide.ts to avoid confusion with plan editor UI Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: add ide.ts and vscode-diff endpoint to CLAUDE.md Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com>
44 lines
1.2 KiB
TypeScript
44 lines
1.2 KiB
TypeScript
/**
|
|
* IDE integration — opens plan diffs in external IDEs
|
|
*/
|
|
|
|
/**
|
|
* Open two files in VS Code's diff viewer.
|
|
*
|
|
* Returns `{ ok: true }` on success or `{ error: string }` on failure.
|
|
*/
|
|
export async function openEditorDiff(
|
|
oldPath: string,
|
|
newPath: string
|
|
): Promise<{ ok: true } | { error: string }> {
|
|
try {
|
|
const proc = Bun.spawn(["code", "--diff", oldPath, newPath], {
|
|
stdout: "ignore",
|
|
stderr: "pipe",
|
|
});
|
|
const exitCode = await proc.exited;
|
|
|
|
if (exitCode !== 0) {
|
|
const stderr = await new Response(proc.stderr).text();
|
|
if (stderr.includes("not found") || stderr.includes("ENOENT")) {
|
|
return {
|
|
error:
|
|
"VS Code CLI not found. Run 'Shell Command: Install code command in PATH' from the VS Code command palette.",
|
|
};
|
|
}
|
|
return { error: `code --diff exited with ${exitCode}: ${stderr}` };
|
|
}
|
|
|
|
return { ok: true };
|
|
} catch (err) {
|
|
const msg = err instanceof Error ? err.message : "Failed to open diff";
|
|
if (msg.includes("ENOENT") || msg.includes("not found")) {
|
|
return {
|
|
error:
|
|
"VS Code CLI not found. Run 'Shell Command: Install code command in PATH' from the VS Code command palette.",
|
|
};
|
|
}
|
|
return { error: msg };
|
|
}
|
|
}
|