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/__snapshots__/web-components/sketch-app-shell.test.ts-snapshots/sketch-app-shell-basic.aria.yml b/webui/__snapshots__/web-components/sketch-app-shell.test.ts-snapshots/sketch-app-shell-basic.aria.yml
index 2c109f0..4fd2d4a 100644
--- a/webui/__snapshots__/web-components/sketch-app-shell.test.ts-snapshots/sketch-app-shell-basic.aria.yml
+++ b/webui/__snapshots__/web-components/sketch-app-shell.test.ts-snapshots/sketch-app-shell-basic.aria.yml
@@ -2,46 +2,46 @@
 - heading "Add a line to dummy.txt and commit the change" [level=2]
 - link "Logs"
 - link "Download"
-- text: "/MacBook-Pro-9\\.local \\/Users\\/pokey\\/src\\/spaghetti Origin: git@github\\.com:pokey\\/spaghetti\\.git Commit: a6c5a08a Msgs: \\d+ Input tokens: \\d+(,\\d+)* Output tokens: \\d+(,\\d+)* Cost: \\$\\d+\\.\\d+/"
+- text: "/MacBook-Pro-9\\.local \\/Users\\/pokey\\/src\\/spaghetti Origin: git@github\\.com:pokey\\/spaghetti\\.git Commit: a6c5a08a Msgs: \\d+ Input tokens: \\d+,\\d+ Output tokens: \\d+,\\d+ Cost: \\$\\d+\\.\\d+/"
 - button "💬"
 - button "±"
 - button "📈"
 - button "💻"
 - button "Stop"
 - checkbox "Poll" [checked]
-- text: /Poll Invalid response from server - not connected U user Apr \d+, \d+, \d+:\d+:\d+ AM/
+- text: /Poll Invalid response from server - not connected 💡 🔧 U user Apr \d+, \d+, 2:\d+:\d+ AM/
 - button "Copy"
 - paragraph: add a line to dummy.txt. Doesn't matter what it is and don't bother running tests it's just a dummy repo. Please commit afterward
-- text: "/A agent Apr \\d+, \\d+, \\d+:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+(,\\d+)* Out: \\d+(,\\d+)* \\(\\$\\d+\\.\\d+\\)/"
+- text: "/A agent Apr \\d+, \\d+, 2:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+,\\d+ Out: \\d+ \\(\\$\\d+\\.\\d+\\)/"
 - button "Copy"
 - paragraph: I'll help you add a line to dummy.txt and commit the change. Let me first check if this file exists and create it if needed.
-- text: "/I've set the title of this sketch to \"Add a line to dummy\\.txt and commit the change\" agent Apr \\d+, \\d+, \\d+:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+(,\\d+)* Out: \\d+(,\\d+)* \\(\\$\\d+\\.\\d+\\)/"
+- text: "/I've set the title of this sketch to \"Add a line to dummy\\.txt and commit the change\" agent Apr \\d+, \\d+, 2:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+,\\d+ Out: \\d+ \\(\\$\\d+\\.\\d+\\)/"
 - button "Copy"
 - group: /\+ bash 🖥️ ls -la [\d,.]+[hmsp]+ elapsed/
-- text: "/agent Apr \\d+, \\d+, \\d+:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+(,\\d+)* Out: \\d+(,\\d+)* \\(\\$\\d+\\.\\d+\\)/"
+- text: "/agent Apr \\d+, \\d+, 2:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+,\\d+ Out: \\d+ \\(\\$\\d+\\.\\d+\\)/"
 - button "Copy"
 - paragraph: I see that dummy.txt already exists. Let me add a new line to it.
 - group: "/\\+ patch \\/Users\\/pokey\\/src\\/spaghetti\\/dummy\\.txt: 1 edit [\\d,.]+[hmsp]+ elapsed/"
-- text: "/agent Apr \\d+, \\d+, \\d+:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+(,\\d+)* Out: \\d+(,\\d+)* \\(\\$\\d+\\.\\d+\\)/"
+- text: "/agent Apr \\d+, \\d+, 2:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+,\\d+ Out: \\d+ \\(\\$\\d+\\.\\d+\\)/"
 - button "Copy"
 - paragraph: "Now let me commit this change:"
 - group: "/\\+ bash 🖥️ GIT_AUTHOR_NAME=\"Pokey Rule\" GIT_AUTHOR_EMAIL=\"\\d+\\+pokey@users\\.noreply\\.github\\.com\" git add dummy\\.txt && git commit -m \"Add a new line to dummy\\.txt\" -m \"Co-Authored-By: sketch\" -m \"Add a line to dummy\\.txt\\. Doesn't matter what it is and don't bother running tests it's just a dummy repo\\.\" [\\d,.]+[hmsp]+ elapsed/"
-- text: /C commit Apr \d+, \d+, \d+:\d+:\d+ AM/
+- text: /C commit Apr \d+, \d+, 2:\d+:\d+ AM/
 - button "Copy"
 - text: 1 new commit detected 898178a0 Add a new line to dummy.txt
 - button "View Diff"
-- text: "/A agent Apr \\d+, \\d+, \\d+:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+(,\\d+)* Out: \\d+(,\\d+)* \\(\\$\\d+\\.\\d+\\)/"
+- text: "/A agent Apr \\d+, \\d+, 2:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+,\\d+ Out: \\d+ \\(\\$\\d+\\.\\d+\\)/"
 - button "Copy"
 - group: /\+ done ❌ codereview tool has not been run for commit 898178a0c6681ce2b641cbe8994c22ed8bbb7dd7 [\d,.]+[hmsp]+ elapsed/
-- text: "/agent Apr \\d+, \\d+, \\d+:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+(,\\d+)* Out: \\d+(,\\d+)* \\(\\$\\d+\\.\\d+\\)/"
+- text: "/agent Apr \\d+, \\d+, 2:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+,\\d+ Out: \\d+ \\(\\$\\d+\\.\\d+\\)/"
 - button "Copy"
 - paragraph: "Let me run a code review as required:"
 - group: /\+ codereview ✔️ [\d,.]+[hmsp]+ elapsed/
-- text: "/agent Apr \\d+, \\d+, \\d+:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+(,\\d+)* Out: \\d+(,\\d+)* \\(\\$\\d+\\.\\d+\\)/"
+- text: "/agent Apr \\d+, \\d+, 2:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+,\\d+ Out: \\d+ \\(\\$\\d+\\.\\d+\\)/"
 - button "Copy"
 - paragraph: "Now let me try the done call again:"
 - group: /\+ done [\d,.]+[hmsp]+ elapsed/
-- text: "/agent Apr \\d+, \\d+, \\d+:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+(,\\d+)* Out: \\d+(,\\d+)* \\(\\$\\d+\\.\\d+\\)/"
+- text: "/agent Apr \\d+, \\d+, 2:\\d+:\\d+ AM \\([\\d,.]+[hmsp]+\\) In: \\d+,\\d+ Out: \\d+ \\(\\$\\d+\\.\\d+\\)/"
 - button "Copy"
 - paragraph: "I've completed your request:"
 - list:
diff --git a/webui/__snapshots__/web-components/sketch-app-shell.test.ts-snapshots/sketch-app-shell-empty.aria.yml b/webui/__snapshots__/web-components/sketch-app-shell.test.ts-snapshots/sketch-app-shell-empty.aria.yml
index 474e5a3..6a62053 100644
--- a/webui/__snapshots__/web-components/sketch-app-shell.test.ts-snapshots/sketch-app-shell-empty.aria.yml
+++ b/webui/__snapshots__/web-components/sketch-app-shell.test.ts-snapshots/sketch-app-shell-empty.aria.yml
@@ -9,6 +9,6 @@
 - button "💻"
 - button "Stop"
 - checkbox "Poll" [checked]
-- text: Poll Invalid response from server - not connected
+- text: Poll Invalid response from server - not connected 💡 🔧
 - textbox "Type your message here and press Enter to send..."
 - button "Send"