feat: enhance UI with commit pulsing animation and improved copy icon

Co-Authored-By: sketch <hello@sketch.dev>
Change-ID: s80fdaac660ea645ek
diff --git a/loop/agent.go b/loop/agent.go
index cb22b84..909700e 100644
--- a/loop/agent.go
+++ b/loop/agent.go
@@ -105,7 +105,7 @@
 	SessionID() string
 
 	// DetectGitChanges checks for new git commits and pushes them if found
-	DetectGitChanges(ctx context.Context)
+	DetectGitChanges(ctx context.Context) error
 
 	// OutstandingLLMCallCount returns the number of outstanding LLM calls.
 	OutstandingLLMCallCount() int
@@ -1421,13 +1421,14 @@
 }
 
 // DetectGitChanges checks for new git commits and pushes them if found
-func (a *Agent) DetectGitChanges(ctx context.Context) {
+func (a *Agent) DetectGitChanges(ctx context.Context) error {
 	// Check for git commits
 	_, err := a.handleGitCommits(ctx)
 	if err != nil {
-		// Just log the error, don't stop execution
 		slog.WarnContext(ctx, "Failed to check for new git commits", "error", err)
+		return fmt.Errorf("failed to check for new git commits: %w", err)
 	}
+	return nil
 }
 
 // processGitChanges checks for new git commits, runs autoformatters if needed, and returns any messages generated