Implement tracking of outstanding LLM and Tool calls

This commit implements a listener pattern between ant.convo and the Agent for tracking outstanding calls.

* Added fields to the Agent struct to track outstanding LLM calls and Tool calls
* Implemented the listener methods to properly track and update these fields
* Added methods to retrieve the counts and names
* Updated the State struct in loophttp.go to expose this information
* Added a unit test to verify the tracking functionality
* Created UI components with lightbulb and wrench icons to display call status
* Added numerical indicators that always show when there are active calls

Co-Authored-By: sketch <hello@sketch.dev>
diff --git a/webui/src/web-components/sketch-app-shell.ts b/webui/src/web-components/sketch-app-shell.ts
index 41be24a..40e5512 100644
--- a/webui/src/web-components/sketch-app-shell.ts
+++ b/webui/src/web-components/sketch-app-shell.ts
@@ -9,6 +9,7 @@
 import "./sketch-diff-view";
 import { SketchDiffView } from "./sketch-diff-view";
 import "./sketch-network-status";
+import "./sketch-call-status";
 import "./sketch-terminal";
 import "./sketch-timeline";
 import "./sketch-view-mode-select";
@@ -210,6 +211,8 @@
     hostname: "",
     working_dir: "",
     initial_commit: "",
+    outstanding_llm_calls: 0,
+    outstanding_tool_calls: [],
   };
 
   // Mutation observer to detect when new messages are added
@@ -569,6 +572,11 @@
             connection=${this.connectionStatus}
             error=${this.connectionErrorMessage}
           ></sketch-network-status>
+
+          <sketch-call-status
+            .llmCalls=${this.containerState?.outstanding_llm_calls || 0}
+            .toolCalls=${this.containerState?.outstanding_tool_calls || []}
+          ></sketch-call-status>
         </div>
       </div>