diff --git a/panel/src/app/(dashboard)/prompter/page.tsx b/panel/src/app/(dashboard)/prompter/page.tsx
index 8f451c02..83abf9b2 100644
--- a/panel/src/app/(dashboard)/prompter/page.tsx
+++ b/panel/src/app/(dashboard)/prompter/page.tsx
@@ -3,6 +3,7 @@
import { useEffect, useRef } from "react";
import { Loader2, Sparkles, X } from "lucide-react";
import { Button } from "@/components/ui/button";
+import { HelpTip } from "@/components/ui/help-tip";
import { usePrompter } from "@/hooks/use-prompter";
import { Team } from "@/types";
import {
@@ -77,16 +78,25 @@ export default function PrompterPage() {
{/* End chat — reap the agent and return to the form (any chat state) */}
{!showForm && state !== "success" && (
-
+
+ {/* disabled sets pointer-events:none on the Button, which would
+ swallow hover — the tip sits on a wrapping span instead. */}
+
+
+
+
)}
diff --git a/panel/src/app/(dashboard)/tasks/[taskId]/page.tsx b/panel/src/app/(dashboard)/tasks/[taskId]/page.tsx
index 0cd333f9..667ed112 100644
--- a/panel/src/app/(dashboard)/tasks/[taskId]/page.tsx
+++ b/panel/src/app/(dashboard)/tasks/[taskId]/page.tsx
@@ -29,6 +29,7 @@ import { AlertTriangle, ArrowLeft } from "lucide-react";
import Link from "next/link";
import { useRouter } from "next/navigation";
import { toast } from "sonner";
+import { HelpTip } from "@/components/ui/help-tip";
interface TaskDetailPageProps {
params: Promise<{ taskId: string }>;
@@ -415,12 +416,14 @@ export default function TaskDetailPage({ params }: TaskDetailPageProps) {
if (error || !task) {
return (
-
-
-
+
+
+
+
+
@@ -432,9 +435,11 @@ export default function TaskDetailPage({ params }: TaskDetailPageProps) {
"The task you're looking for doesn't exist or has been deleted."}
-
-
-
+
+
+
+
+
@@ -474,12 +479,14 @@ export default function TaskDetailPage({ params }: TaskDetailPageProps) {
task.team !== Team.MAIN_PM && (
{task.team === Team.BOARD && (
-
+
+
+
)}
diff --git a/panel/src/app/(dashboard)/tasks/page.tsx b/panel/src/app/(dashboard)/tasks/page.tsx
index 4fc229eb..5ce971eb 100644
--- a/panel/src/app/(dashboard)/tasks/page.tsx
+++ b/panel/src/app/(dashboard)/tasks/page.tsx
@@ -18,6 +18,7 @@ import type { TaskFilters as TaskApiFilters } from "@/lib/api/tasks";
import { Skeleton } from "@/components/ui/skeleton";
import { usePageRefresh } from "@/hooks";
import { useScrollRestorationStore } from "@/lib/stores";
+import { HelpTip } from "@/components/ui/help-tip";
function TasksPageContent() {
const router = useRouter();
@@ -304,9 +305,11 @@ function TasksPageContent() {
Tasks
-
- Manage and track all tasks across teams
-
+
+
+ Manage and track all tasks across teams
+
+
diff --git a/panel/src/components/git/__tests__/code-snippet.test.tsx b/panel/src/components/git/__tests__/code-snippet.test.tsx
index c6a48e5f..b77393bb 100644
--- a/panel/src/components/git/__tests__/code-snippet.test.tsx
+++ b/panel/src/components/git/__tests__/code-snippet.test.tsx
@@ -71,6 +71,9 @@ describe("CodeSnippet", () => {
// The active line's content is "b"; its row carries the highlight class.
const row = screen.getByText("b").parentElement;
expect(row?.className).toContain("bg-blue-500/15");
+ // The active line's number is now a real HelpTip trigger (Radix injects
+ // data-state via asChild), not a bare span.
+ expect(screen.getByText("2").getAttribute("data-state")).toBe("closed");
});
it("renders the fail-open hint on an error", () => {
diff --git a/panel/src/components/git/code-snippet.tsx b/panel/src/components/git/code-snippet.tsx
index cbe64ca4..56339931 100644
--- a/panel/src/components/git/code-snippet.tsx
+++ b/panel/src/components/git/code-snippet.tsx
@@ -4,6 +4,7 @@ import { useGitFile } from "@/hooks/use-git";
import { Skeleton } from "@/components/ui/skeleton";
import { ScrollArea } from "@/components/ui/scroll-area";
import { cn } from "@/lib/utils";
+import { HelpTip } from "@/components/ui/help-tip";
interface CodeSnippetProps {
branch: string | null | undefined;
@@ -64,9 +65,11 @@ export function CodeSnippet({
"bg-blue-500/15 ring-1 ring-inset ring-blue-500/30",
)}
>
-
- {lineNo}
-
+
+
+ {lineNo}
+
+
{text || " "}
);
@@ -74,10 +77,12 @@ export function CodeSnippet({
{data.truncated && (
-
- showing lines {data.start_line}–{data.start_line + lines.length - 1}{" "}
- of {data.total_lines}
-
+
+
+ showing lines {data.start_line}–
+ {data.start_line + lines.length - 1} of {data.total_lines}
+
+
)}
);
diff --git a/panel/src/components/git/git-actions-panel.tsx b/panel/src/components/git/git-actions-panel.tsx
index 769faaec..f24f99ca 100644
--- a/panel/src/components/git/git-actions-panel.tsx
+++ b/panel/src/components/git/git-actions-panel.tsx
@@ -150,28 +150,51 @@ export function GitActionsPanel({
open={showCommitDialog}
onOpenChange={handleCommitDialogOpenChange}
>
-
-
-
+
+
+
+
+
Commit Changes
-
+
+
+