feat(apps): register agents + timeline as MANA_APPS + broadcast URL fix + members page chrome

Three modules move from "dedicated route only" to "first-class
apps in the launcher". After this they show up in the AppDrawer
pill, can be pinned to workbench scenes, and get a direct URL from
the app switcher.

MANA_APPS entries added:
- agents  (/agents)    — AI agent management. Icon: smiling robot head
                         with antenna dot. violet→fuchsia gradient, status
                         beta, requiredTier beta.
- timeline (/timeline) — Chronological view across modules. Icon: vertical
                         event dots with connecting axis. amber→orange,
                         status beta, requiredTier beta.

Plus: broadcast's MANA_APPS entry already existed but had no URL
override, so the auto-derived /broadcast didn't match the real route
at /broadcasts. Added an APP_URL_OVERRIDES entry mapping
id='broadcast' → '/broadcasts' so the app switcher lands the user on
the right page. Icon + module.config stay singular.

Route wiring:
- /agents previously only had /agents/templates/ as a subroute. Added
  /agents/+page.svelte that renders the existing ai-agents ListView
  (at $lib/modules/ai-agents/), so the top-level URL works from the
  AppDrawer.
- /timeline already had a root +page.svelte — no work there.
- /broadcasts already had a root +page.svelte — no work there.

/spaces/members page chrome:
- Swapped the hand-rolled header for @mana/shared-ui PageHeader with
  backHref="/", breadcrumb "Workbench › Mitglieder verwalten", and the
  space name + type as the description. Feels like a native Mana page
  now instead of an orphaned admin route.
- Dropped the ~60 lines of unused .type-chip CSS (moved the chip info
  into the PageHeader description string).
- Container bumped to 720px max-width to match other admin pages.

0 errors across 7236 files.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-04-21 16:32:41 +02:00
parent 1861e89d45
commit 9d6a5a53a8
4 changed files with 81 additions and 88 deletions

View file

@ -0,0 +1,14 @@
<script lang="ts">
/**
* /agents — AI Agents top-level route.
*
* Renders the existing workbench-card ListView from
* `$lib/modules/ai-agents/`. The module folder is named `ai-agents`
* for internal clarity, but the user-facing MANA_APPS id + route is
* plain `agents` so the URL stays short.
*/
import ListView from '$lib/modules/ai-agents/ListView.svelte';
</script>
<ListView />

View file

@ -12,6 +12,7 @@
*/
import { onMount } from 'svelte';
import { PageHeader } from '@mana/shared-ui';
import { getActiveSpace, authFetch } from '$lib/data/scope';
import { SPACE_TYPE_LABELS } from '@mana/shared-branding';
@ -143,17 +144,18 @@
</script>
<div class="container">
<header class="page-head">
<h1>Mitglieder</h1>
{#if activeSpace}
<p class="subtitle">
<strong>{activeSpace.name}</strong>
<span class="type-chip" data-type={activeSpace.type}
>{SPACE_TYPE_LABELS.de[activeSpace.type]}</span
>
</p>
{/if}
</header>
<PageHeader
title="Mitglieder"
description={activeSpace
? `${activeSpace.name} · ${SPACE_TYPE_LABELS.de[activeSpace.type]}`
: undefined}
backHref="/"
size="lg"
>
{#snippet breadcrumb()}
<a href="/">Workbench</a> <span class="crumb-sep"></span> Mitglieder verwalten
{/snippet}
</PageHeader>
{#if !activeSpace}
<p class="empty">Lade aktiven Space …</p>
@ -263,87 +265,15 @@
instead of falling back to hardcoded white. */
.container {
max-width: 640px;
max-width: 720px;
margin: 0 auto;
padding: 1.5rem 1rem 4rem;
padding: 0 1rem 4rem;
color: hsl(var(--color-foreground));
}
.page-head {
margin-bottom: 1.5rem;
}
.page-head h1 {
font-size: 1.5rem;
font-weight: 600;
margin: 0 0 0.25rem;
color: hsl(var(--color-foreground));
}
.subtitle {
display: flex;
align-items: center;
gap: 0.5rem;
margin: 0;
color: hsl(var(--color-muted-foreground, 0 0% 55%));
font-size: 0.875rem;
}
.type-chip {
font-size: 0.6875rem;
padding: 0.125rem 0.5rem;
border-radius: 9999px;
background: hsl(var(--color-muted, 0 0% 94%));
color: hsl(var(--color-muted-foreground, 0 0% 45%));
text-transform: uppercase;
letter-spacing: 0.02em;
font-weight: 500;
}
.type-chip[data-type='brand'] {
background: hsl(260 60% 95%);
color: hsl(260 55% 35%);
}
.type-chip[data-type='club'] {
background: hsl(160 45% 93%);
color: hsl(160 55% 28%);
}
.type-chip[data-type='family'] {
background: hsl(30 70% 93%);
color: hsl(30 55% 35%);
}
.type-chip[data-type='team'] {
background: hsl(210 55% 93%);
color: hsl(210 55% 32%);
}
.type-chip[data-type='practice'] {
background: hsl(340 50% 94%);
color: hsl(340 50% 38%);
}
:global(.dark) .type-chip {
background: hsl(var(--color-muted, 0 0% 20%));
color: hsl(var(--color-muted-foreground, 0 0% 75%));
}
:global(.dark) .type-chip[data-type='brand'] {
background: hsl(260 40% 25%);
color: hsl(260 80% 85%);
}
:global(.dark) .type-chip[data-type='club'] {
background: hsl(160 35% 20%);
color: hsl(160 70% 80%);
}
:global(.dark) .type-chip[data-type='family'] {
background: hsl(30 40% 22%);
color: hsl(30 80% 82%);
}
:global(.dark) .type-chip[data-type='team'] {
background: hsl(210 40% 22%);
color: hsl(210 70% 82%);
}
:global(.dark) .type-chip[data-type='practice'] {
background: hsl(340 35% 23%);
color: hsl(340 65% 82%);
.crumb-sep {
margin: 0 0.25rem;
opacity: 0.5;
}
.hint-card {