From 9ecaabd87c0e51b8a7408dabb0133a9344586859 Mon Sep 17 00:00:00 2001
From: Adam Malczewski <github@tradam.dev>
Date: Fri, 22 May 2026 15:24:13 +0900
Subject: feat: agent builder, CWD support, auto-save, UI polish, unavailable
 tool handling

- Agent Builder: full CRUD with card grid, drag-and-drop model reorder, edit/delete
- Auto-save on edit with 600ms debounce, AbortController for concurrency, fieldset disabled until name entered
- Agent definitions stored as TOML with cwd field, loaded from global/project dirs
- Working directory: per-tab CWD override in Chat Settings, agent default CWD, auto-create on first message
- CWD validation: check-dir endpoint with ~ expansion, real-time validity indicator
- Subagent CWD validated against parent's effective CWD using path.relative
- Unavailable tool calls: caught gracefully, shown as tool call with error badge, model retries
- UI: tab bar border radius, sidebar border removed, chat input ghost style, scroll-to-bottom rectangle
- Skills dir collapse uses CSS rotation, Model Choice renamed to Chat Settings, System Prompt view removed
- Reusable SkillsBrowser/ToolPermissions with external mode for Agent Builder
- ModelSelector: Agent/Manual toggle, agent list, Agent Settings link
- Page router, skills recursive scanning, bin/up gopass removed, docker volume mounts
---
 .../src/lib/components/HotReloadIndicator.svelte   | 38 +++++++++++-----------
 1 file changed, 19 insertions(+), 19 deletions(-)

(limited to 'packages/frontend/src/lib/components/HotReloadIndicator.svelte')

diff --git a/packages/frontend/src/lib/components/HotReloadIndicator.svelte b/packages/frontend/src/lib/components/HotReloadIndicator.svelte
index 3e34d3b..8d37578 100644
--- a/packages/frontend/src/lib/components/HotReloadIndicator.svelte
+++ b/packages/frontend/src/lib/components/HotReloadIndicator.svelte
@@ -1,26 +1,26 @@
 <script lang="ts">
-	const { active }: { active: boolean } = $props();
+const { active }: { active: boolean } = $props();
 
-	let visible = $state(false);
-	let timer: ReturnType<typeof setTimeout> | null = null;
+let visible = $state(false);
+let timer: ReturnType<typeof setTimeout> | null = null;
 
-	$effect(() => {
-		if (active) {
-			visible = true;
-			if (timer !== null) clearTimeout(timer);
-			timer = setTimeout(() => {
-				visible = false;
-				timer = null;
-			}, 2000);
-		}
-		return () => {
-			if (timer !== null) {
-				clearTimeout(timer);
-				timer = null;
-			}
+$effect(() => {
+	if (active) {
+		visible = true;
+		if (timer !== null) clearTimeout(timer);
+		timer = setTimeout(() => {
 			visible = false;
-		};
-	});
+			timer = null;
+		}, 2000);
+	}
+	return () => {
+		if (timer !== null) {
+			clearTimeout(timer);
+			timer = null;
+		}
+		visible = false;
+	};
+});
 </script>
 
 {#if visible}
-- 
cgit v1.2.3

