feat(ai): roll out AiProposalInbox to calendar / places / drink / food

One-line drop-in per module page. Each module's proposals now render as
ghost cards inline wherever the user already expects to see that
module's content — no separate approvals inbox to hunt for.

Covers all four remaining modules with proposable tools in
AI_PROPOSABLE_TOOL_NAMES:
- calendar → create_event
- places → create_place, visit_place
- drink → undo_drink
- food → (auto-tools only today; the inbox is ready for future
  propose-class food tools)

Now the only modules with proposable tools NOT showing the inbox are
those that don't have their own /route (all covered by todo, calendar,
places, drink, food).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-04-15 00:54:59 +02:00
parent 4d6e6e61b4
commit 9bc44c075a
4 changed files with 15 additions and 0 deletions

View file

@ -23,6 +23,7 @@
import QuickEventPopover from '$lib/modules/calendar/components/QuickEventPopover.svelte';
import { ShareNetwork } from '@mana/shared-icons';
import AiProposalInbox from '$lib/components/ai/AiProposalInbox.svelte';
import { ShareModal } from '@mana/shared-uload';
const calendarsCtx: { readonly value: Calendar[] } = getContext('calendars');
@ -221,6 +222,9 @@
<!-- Header -->
<CalendarHeader onNewEvent={handleNewEvent} />
<!-- AI proposals awaiting approval -->
<AiProposalInbox module="calendar" />
<!-- Calendar view (full width) -->
<div class="calendar-content">
{#if calendarViewStore.viewType === 'week'}

View file

@ -1,9 +1,13 @@
<script lang="ts">
import ListView from '$lib/modules/drink/ListView.svelte';
import AiProposalInbox from '$lib/components/ai/AiProposalInbox.svelte';
</script>
<svelte:head>
<title>Drink - Mana</title>
</svelte:head>
<div class="px-4 pt-4">
<AiProposalInbox module="drink" />
</div>
<ListView />

View file

@ -8,6 +8,7 @@
import { MEAL_TYPE_LABELS, NUTRIENT_INFO, suggestMealType } from '$lib/modules/food/constants';
import type { MealWithNutrition, NutritionProgress } from '$lib/modules/food/types';
import { Plus, Clock, Fire } from '@mana/shared-icons';
import AiProposalInbox from '$lib/components/ai/AiProposalInbox.svelte';
const allMeals = useAllMeals();
const allGoals = useAllGoals();
@ -43,6 +44,8 @@
</svelte:head>
<div class="space-y-6">
<AiProposalInbox module="food" />
<!-- Header -->
<div class="flex items-center justify-between">
<div>

View file

@ -1,9 +1,13 @@
<script lang="ts">
import ListView from '$lib/modules/places/ListView.svelte';
import AiProposalInbox from '$lib/components/ai/AiProposalInbox.svelte';
</script>
<svelte:head>
<title>Places - Mana</title>
</svelte:head>
<div class="px-4 pt-4">
<AiProposalInbox module="places" />
</div>
<ListView navigate={() => {}} goBack={() => history.back()} params={{}} />