diff --git a/daemon/web/src/lib/action_errors.svelte.ts b/daemon/web/src/lib/action_errors.svelte.ts
new file mode 100644
index 0000000..0847135
--- /dev/null
+++ b/daemon/web/src/lib/action_errors.svelte.ts
@@ -0,0 +1,24 @@
+export class ActionError extends Error {
+ // The number of this an identical error has happened.
+ // This is shown as a number next to the error in the UI.
+ times = $state(1);
+
+ constructor(message: string, cause: Error) {
+ super(message);
+ this.cause = cause;
+ }
+}
+
+export const action_errors: ActionError[] = $state([]);
+
+export function add_error(e: Error, msg: string): void {
+ for (const existing of action_errors) {
+ if (existing.message === msg) {
+ existing.times += 1;
+ return;
+ }
+ }
+ const action_error = new ActionError(msg, e);
+ action_errors.unshift(action_error);
+ console.log(action_errors.length);
+}
diff --git a/daemon/web/src/lib/components/ActionErrors.svelte b/daemon/web/src/lib/components/ActionErrors.svelte
new file mode 100644
index 0000000..fb42a13
--- /dev/null
+++ b/daemon/web/src/lib/components/ActionErrors.svelte
@@ -0,0 +1,86 @@
+
+
+{#if action_errors.length > 0}
+
+
+
+
+ Error Completing Action {current_error.times > 1 ? `x${current_error.times}` : ''}
+
+
+
{pos + 1}/{action_errors.length}
+
+
+
+
+
+
{current_error.message}
+ {#if current_error.cause}
+
+ Details
+ {current_error.cause}
+
+ {/if}
+
+{/if}
diff --git a/daemon/web/src/lib/components/ApiRequestButton.svelte b/daemon/web/src/lib/components/ApiRequestButton.svelte
index a059d74..b43b60c 100644
--- a/daemon/web/src/lib/components/ApiRequestButton.svelte
+++ b/daemon/web/src/lib/components/ApiRequestButton.svelte
@@ -1,5 +1,5 @@
diff --git a/daemon/web/src/lib/components/ManifestCard.svelte b/daemon/web/src/lib/components/ManifestCard.svelte
index df9e0ff..002228f 100644
--- a/daemon/web/src/lib/components/ManifestCard.svelte
+++ b/daemon/web/src/lib/components/ManifestCard.svelte
@@ -91,6 +91,7 @@
{/if}
diff --git a/daemon/web/src/lib/components/ManifestTableRow.svelte b/daemon/web/src/lib/components/ManifestTableRow.svelte
index 211a7b2..d081577 100644
--- a/daemon/web/src/lib/components/ManifestTableRow.svelte
+++ b/daemon/web/src/lib/components/ManifestTableRow.svelte
@@ -60,6 +60,7 @@
{/if}
diff --git a/daemon/web/src/lib/components/ReAnalyzeButton.svelte b/daemon/web/src/lib/components/ReAnalyzeButton.svelte
index 002cb89..eda7def 100644
--- a/daemon/web/src/lib/components/ReAnalyzeButton.svelte
+++ b/daemon/web/src/lib/components/ReAnalyzeButton.svelte
@@ -35,6 +35,7 @@
variant="blue"
onclick={handleReAnalyze}
ariaLabel="re-analyze"
+ errorMessage="Error re-analyzing recoding"
>
{#snippet icon()}