plan-approve-once policy + cooler empty states + remove graph header
Some checks failed
ci / build-test (push) Has been cancelled
ci / docker-build (push) Has been cancelled
Desktop App / Build Linux (amd64) (push) Has been cancelled
Desktop App / Attach to Release (push) Has been cancelled

Backend:
- proposePlan sets plan window in autonomy_settings (nomos:plan:<session>)
- run handler checks plan window — auto-executes config_mutation commands
  within plan without per-action approval
- planWindowActive function in server.go
- Plan window cleaned up on completeTask (already covered by LIKE '%:' || )

Frontend:
- Removed 'Session graph' header bar
- Cooler empty states: Plan shows animated dots + 'Awaiting plan…',
  Activity shows pulsing dots + 'Waiting for activity…'
This commit is contained in:
2026-07-14 13:04:51 +02:00
parent 2ed169d239
commit b423cf4dea
6 changed files with 59 additions and 11 deletions

View File

@@ -43,8 +43,13 @@
<div class="flex h-full flex-col">
<div class="flex-1 overflow-y-auto">
{#if $activityLog.length === 0}
<div class="px-3 py-6 text-center text-xs text-muted-foreground">
Waiting for agent activity…
<div class="flex flex-col items-center gap-2 px-3 py-6 text-center">
<div class="flex items-center gap-0.5">
<div class="size-1 rounded-full bg-muted-foreground/20 animate-pulse" style="animation-delay:0s" />
<div class="size-1 rounded-full bg-muted-foreground/30 animate-pulse" style="animation-delay:0.15s" />
<div class="size-1 rounded-full bg-muted-foreground/20 animate-pulse" style="animation-delay:0.3s" />
</div>
<p class="text-xs text-muted-foreground">Waiting for activity…</p>
</div>
{:else}
<div class="flex flex-col py-1">

View File

@@ -300,12 +300,6 @@
</script>
<aside class="flex h-full min-h-0 flex-col bg-card/40">
<div class="flex shrink-0 items-center justify-between border-b px-3 py-2">
<p class="text-[11px] font-semibold uppercase tracking-wider text-muted-foreground">Session graph</p>
{#if nodes.length}
<span class="text-[11px] text-muted-foreground">{nodes.length} {nodes.length === 1 ? 'entity' : 'entities'}</span>
{/if}
</div>
{#if nowTouching}
<div class="flex shrink-0 items-center gap-1.5 border-b bg-primary/5 px-3 py-1.5 text-[11px] text-primary">
<span class="size-1.5 animate-pulse rounded-full bg-primary"></span>

View File

@@ -144,8 +144,13 @@
{/each}
</ol>
{:else}
<div class="px-3 py-3 text-center text-xs text-muted-foreground">
No plan yet
<div class="flex flex-col items-center gap-2 px-3 py-6 text-center">
<div class="flex gap-1">
<div class="size-1.5 rounded-full bg-muted-foreground/20" />
<div class="size-1.5 rounded-full bg-muted-foreground/30" />
<div class="size-1.5 rounded-full bg-muted-foreground/20" />
</div>
<p class="text-xs text-muted-foreground">Awaiting plan…</p>
</div>
{/if}
</div>