mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-22 20:46:42 +02:00
First pass of the Multi-Agent discoverability UX. A new /agents/ templates route showcases pre-configured agents; clicking one creates agent + scene + starter mission(s) as a single bundle. Addresses the "blank form anxiety" + "user doesn't know what agents are for" observations from the UX brainstorm. Three templates for v1 (shared-ai/src/agents/templates/): - 🔍 Recherche-Agent — reads sources one by one, writes a note per source, summarizes into a report. Manual-cadence mission; all writes propose so user curates. - 🧭 Kontext-Agent — learns about the user via a weekly check-in. Reads kontext/notes/goals, asks 2-3 questions, proposes a diff- style context update. Weekly Sunday cadence. - 🌅 Today-Agent — researches "on this day" history each morning, writes a 4-8 line German poem, proposes a journal note. Daily 7am cadence. A "delight" agent, not a productive one. Each template packs (agent config, scene layout, starter mission): - AgentTemplate type lives in @mana/shared-ai — pure data, no runtime imports. Adding a new template = drop a file in templates/ and extend ALL_TEMPLATES. - Template-specific policies derive from the proposable-tool list so drift-guard catches divergence from the canonical set. - Starter missions default to startPaused=true — user sees the mission ready-to-go and hits Play when ready. Prevents surprise autonomous work on first apply. Applicator (data/ai/agents/apply-template.ts): - Creates agent → scene (if template defines one) → missions in order. Agent failure = abort; scene/mission failures surface as warnings in the result without blocking. - Duplicate-name handling: falls through to findByName, returns existing agent with wasExisting=true; scene is skipped in that case to avoid clone-proliferation. Gallery page /(app)/agents/templates/+page.svelte: - Three large cards side-by-side (stacks on mobile) with avatar / label / tagline / meta chips (Scene, N Missionen). - Click opens detail panel with full description, scene preview (app-ids + widths), mission preview (title / objective / cadence), and override checkboxes (create scene, create missions, start active vs paused). - Success panel shows what landed with warnings inline; CTA back to workbench. Discoverability in /ai-agents module: - Bar now has two buttons: "Aus Template" (primary, goto templates route) + "Eigener Agent" (secondary, opens the existing blank-form create mode). - When only the default "Mana" agent exists, render a dashed promo banner at the top linking to the template gallery. Disappears as soon as the user has a second agent. Tests: webapp svelte-check 0 errors, 0 warnings. shared-ai 26/26. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
95 lines
3.6 KiB
TypeScript
95 lines
3.6 KiB
TypeScript
import { AI_PROPOSABLE_TOOL_NAMES } from '../../policy/proposable-tools';
|
|
import type { AgentTemplate } from './types';
|
|
import type { AiPolicy } from '../../policy/types';
|
|
|
|
/**
|
|
* Context agent — tries to learn as much as possible about the user by
|
|
* asking questions + reading available context, then consolidates into
|
|
* the Kontext-document. Everything is propose so the user curates their
|
|
* own profile.
|
|
*/
|
|
|
|
const CONTEXT_POLICY: AiPolicy = {
|
|
tools: Object.fromEntries(AI_PROPOSABLE_TOOL_NAMES.map((n) => [n, 'propose'])),
|
|
defaultsByModule: {
|
|
kontext: 'propose',
|
|
notes: 'propose',
|
|
goals: 'auto',
|
|
},
|
|
defaultForAi: 'propose',
|
|
};
|
|
|
|
export const contextTemplate: AgentTemplate = {
|
|
id: 'context',
|
|
label: 'Kontext-Agent',
|
|
tagline: 'Lernt dich kennen, damit andere Agents besser arbeiten',
|
|
description: `Der Agent fragt dich gezielt Fragen und destilliert die Antworten
|
|
in dein Kontext-Dokument. Andere Agents (Recherche, Today, …) lesen dieses
|
|
Dokument als Prompt-Zusatz — je besser es gepflegt ist, desto relevanter werden
|
|
ihre Vorschläge.
|
|
|
|
Was er tut:
|
|
|
|
1. Liest was schon in deinem Kontext + Notizen + Goals steht
|
|
2. Stellt gezielt Fragen zu Lücken ("Was treibt dich aktuell um?", "Welche Projekte liegen an?")
|
|
3. Verdichtet deine Antworten zu einem strukturierten Kontext-Update (als Vorschlag)
|
|
|
|
Alles läuft als Vorschlag — du bestätigst welche Version deines Profils gespeichert wird.`,
|
|
category: 'context',
|
|
color: '#D946EF',
|
|
agent: {
|
|
name: 'Kontext-Agent',
|
|
avatar: '🧭',
|
|
role: 'Lernt dich kennen und pflegt dein Kontext-Dokument',
|
|
systemPrompt: `Du bist ein neugieriger aber respektvoller Kontext-Agent. Ziel: verdichte was der User von sich selbst preisgibt zu einem gut strukturierten Kontext-Dokument, das andere AI-Agents als Prompt-Input nutzen können.
|
|
|
|
Vorgehen:
|
|
1. Lies immer zuerst das existierende kontextDoc + die letzten 5 Notizen + Goals, bevor du Fragen stellst.
|
|
2. Frage pro Iteration höchstens 2-3 konkrete Fragen. Keine Massenbefragung.
|
|
3. Schlage beim Update des Kontext-Dokuments immer eine Diff-Ansicht vor — nie Full-Replace.
|
|
4. Respektiere Lücken: wenn der User etwas nicht teilen will, nimm das auf ("Thema nicht relevant für den Agent").
|
|
5. Schreibe das Kontext-Dokument auf Deutsch, in Ich-Form ("Ich bin…", "Mir ist wichtig…").
|
|
|
|
Struktur im Kontext-Dokument:
|
|
- # Wer ich bin (Rolle, Hintergrund)
|
|
- # Was mich umtreibt (aktuelle Projekte, Themen)
|
|
- # Wie ich arbeite (Arbeitsstil, Präferenzen)
|
|
- # Was ich lieber nicht teile (Opt-outs)`,
|
|
memory: `# Kontext-Ziele
|
|
|
|
(Hier kannst du festhalten welche Aspekte von dir der Agent priorisieren soll —
|
|
z.B. "fokus auf berufliche Projekte, privat ist mir egal" oder "frag mich zu
|
|
meinen Hobbys" etc.)
|
|
`,
|
|
policy: CONTEXT_POLICY,
|
|
maxConcurrentMissions: 1,
|
|
},
|
|
scene: {
|
|
name: 'Kontext',
|
|
description: 'Dein Profil für alle anderen Agents',
|
|
openApps: [
|
|
{ appId: 'kontext', widthPx: 720 },
|
|
{ appId: 'ai-missions', widthPx: 440 },
|
|
{ appId: 'ai-workbench', widthPx: 440 },
|
|
],
|
|
},
|
|
missions: [
|
|
{
|
|
title: 'Kontext verdichten',
|
|
objective:
|
|
'Lies was schon da ist, identifiziere Lücken, stelle 2-3 Fragen und schlage ein Kontext-Update vor.',
|
|
conceptMarkdown: `# Kontext-Erkundung
|
|
|
|
Der Agent tickt wöchentlich und macht einen "Kontext-Check":
|
|
|
|
1. Was hat sich seit dem letzten Update geändert?
|
|
2. Welche Lücken sind noch im Profil?
|
|
3. 2-3 neue Fragen die der User beantworten kann (via Proposal-Inbox)
|
|
|
|
**Tipp:** Beantworte die Fragen einfach als Note-Antwort — der Agent liest sie
|
|
beim nächsten Tick.`,
|
|
cadence: { kind: 'weekly', dayOfWeek: 0, atHour: 10 },
|
|
startPaused: true,
|
|
},
|
|
],
|
|
};
|