feat(app-registry): new 'AI' category at top of the app picker

Groups the six AI-Workbench apps plus the Companion chat under a
dedicated category, moved to order 0 so they're the first thing a user
sees when adding a page. Brain icon.

- `categories.ts`
  - New `ai` type added to AppCategory union at order 0
  - Old 'companion' category stays for derived projections (myday,
    activity, goals) that aren't themselves AI-driven — renamed doc
    only, behavior unchanged
  - APP_CATEGORY_MAP reassigns: companion, ai-missions, ai-workbench,
    ai-rituals, ai-policy, ai-insights, ai-health → 'ai'
- `AppPagePicker.svelte` collapsed-state map gains `ai: false` so the
  new category is expanded by default (it's the user's new front door)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-04-15 13:34:07 +02:00
parent 37e39a5ddb
commit 9809b06adf
2 changed files with 24 additions and 11 deletions

View file

@ -2,8 +2,11 @@
* App Categories Groups apps in the workbench AppPagePicker so users
* can find pages by intent rather than scanning an alphabetical list.
*
* Five categories (Vorschlag C):
* - companion: Companion Brain pages (myday, activity, companion, goals)
* Six categories:
* - ai: AI Workbench Missions, Workbench timeline, Rituale,
* Policy, Insights, Health, Companion chat. Top of list.
* - companion: Brain projections (myday, activity, goals) derived
* dashboards that aren't themselves AI-driven
* - life: Personal / wellness / everyday-life tracking
* - work: Productivity & planning
* - creative: Creative, learning, generation
@ -15,9 +18,9 @@
*/
import type { Component } from 'svelte';
import { Robot, Heart, Briefcase, Sparkle, Gear } from '@mana/shared-icons';
import { Robot, Heart, Briefcase, Sparkle, Gear, Brain } from '@mana/shared-icons';
export type AppCategory = 'companion' | 'life' | 'work' | 'creative' | 'system';
export type AppCategory = 'ai' | 'companion' | 'life' | 'work' | 'creative' | 'system';
export interface CategoryMeta {
id: AppCategory;
@ -27,21 +30,30 @@ export interface CategoryMeta {
}
export const APP_CATEGORIES: CategoryMeta[] = [
{ id: 'companion', label: 'Companion', icon: Robot, order: 0 },
{ id: 'life', label: 'Leben', icon: Heart, order: 1 },
{ id: 'work', label: 'Arbeit', icon: Briefcase, order: 2 },
{ id: 'creative', label: 'Kreativ', icon: Sparkle, order: 3 },
{ id: 'system', label: 'System', icon: Gear, order: 4 },
{ id: 'ai', label: 'AI', icon: Brain, order: 0 },
{ id: 'companion', label: 'Companion', icon: Robot, order: 1 },
{ id: 'life', label: 'Leben', icon: Heart, order: 2 },
{ id: 'work', label: 'Arbeit', icon: Briefcase, order: 3 },
{ id: 'creative', label: 'Kreativ', icon: Sparkle, order: 4 },
{ id: 'system', label: 'System', icon: Gear, order: 5 },
];
/**
* appId AppCategory. Apps not listed here default to 'system'.
*/
export const APP_CATEGORY_MAP: Record<string, AppCategory> = {
// Companion Brain
// AI Workbench — the 6 new AI feature apps + companion chat
companion: 'ai',
'ai-missions': 'ai',
'ai-workbench': 'ai',
'ai-rituals': 'ai',
'ai-policy': 'ai',
'ai-insights': 'ai',
'ai-health': 'ai',
// Companion Brain — derived projections that aren't themselves AI
myday: 'companion',
activity: 'companion',
companion: 'companion',
goals: 'companion',
// Leben — personal, wellness, everyday

View file

@ -35,6 +35,7 @@
// Collapsed state per category — persist across openings in-session.
let collapsed = $state<Record<AppCategory, boolean>>({
ai: false,
companion: false,
life: false,
work: false,