diff --git a/apps/backend/internal/agent/settings/store/sqlite.go b/apps/backend/internal/agent/settings/store/sqlite.go
index 7ebdf4ef69..d107159276 100644
--- a/apps/backend/internal/agent/settings/store/sqlite.go
+++ b/apps/backend/internal/agent/settings/store/sqlite.go
@@ -114,7 +114,7 @@ func (r *sqliteRepository) initSchema() error {
}
// migrateDropModelCheckConstraint recreates agent_profiles without the legacy
-// CHECK(model != '') constraint. Existing databases created before the ACP-first
+// CHECK(model != ”) constraint. Existing databases created before the ACP-first
// migration carry this constraint, which prevents empty model values. New
// databases (created by the CREATE TABLE IF NOT EXISTS above) never have it.
//
diff --git a/apps/web/components/task/chat/chat-input-container.tsx b/apps/web/components/task/chat/chat-input-container.tsx
index 3de2ee165e..a25f8212c7 100644
--- a/apps/web/components/task/chat/chat-input-container.tsx
+++ b/apps/web/components/task/chat/chat-input-container.tsx
@@ -3,7 +3,9 @@
import { forwardRef, useCallback, useState } from "react";
import { IconAlertTriangle, IconPlus, IconPlayerPlay } from "@tabler/icons-react";
import { Button } from "@kandev/ui/button";
+import { Tooltip, TooltipContent, TooltipTrigger } from "@kandev/ui/tooltip";
import { NewSessionDialog } from "@/components/task/new-session-dialog";
+import { useAppStore } from "@/components/state-provider";
import type { ContextFile } from "@/lib/state/context-files-store";
import type { Message } from "@/lib/types/http";
import type { DiffComment } from "@/lib/diff/types";
@@ -93,6 +95,15 @@ function FailedSessionBanner({
}) {
const [isResuming, setIsResuming] = useState(false);
+ const agentProfileId = useAppStore((s) =>
+ sessionId ? (s.taskSessions.items[sessionId]?.agent_profile_id ?? "") : "",
+ );
+ const profileExists = useAppStore(
+ (s) =>
+ agentProfileId !== "" &&
+ s.agentProfiles.items.some((p: { id: string }) => p.id === agentProfileId),
+ );
+
const handleResume = useCallback(async () => {
if (!sessionId || !taskId) return;
const client = getWebSocketClient();
@@ -119,16 +130,24 @@ function FailedSessionBanner({
{sessionId && taskId && (
-
+
+
+
+
+
+
+ {!profileExists && Agent profile no longer exists}
+
)}