mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-22 13:26:42 +02:00
feat(notes): list + update + append + add_tag tools for the AI
Makes the "read all notes and tag them #Natur/#Technologie/…" use case fully functional. Four new ModuleTool entries in notes/tools.ts: - list_notes(limit?, query?, includeArchived?) — auto, read-only. Returns id + title + excerpt so the planner can reference concrete notes without dumping full bodies. - update_note(noteId, title?, content?) — proposable. Destructive full overwrite. Docstring nudges toward append_to_note when applicable. - append_to_note(noteId, content) — proposable, non-destructive. Handles the trailing-newline separator so markdown stays clean. - add_tag_to_note(noteId, tag) — proposable, idempotent, case-insensitive. Strips leading #, replaces spaces with _, skips if already present. Exactly the categorization primitive the user asked for. All three writes are added to AI_PROPOSABLE_TOOL_NAMES so both the webapp policy and mana-ai's boot-time drift guard agree (now 11 tools). Mirrored in services/mana-ai/src/planner/tools.ts. AiProposalInbox mounted on /notes so approvals land inline in the notes module too (already appears in the mission-detail cross-module inbox via the earlier commit). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
fdc1c0023a
commit
4d9b16a683
4 changed files with 252 additions and 0 deletions
|
|
@ -104,6 +104,48 @@ export const AI_AVAILABLE_TOOLS: readonly AvailableTool[] = [
|
|||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'update_note',
|
||||
module: 'notes',
|
||||
description:
|
||||
'Überschreibt Titel und/oder Inhalt einer bestehenden Notiz. Destruktiv — bevorzuge append_to_note oder add_tag_to_note wenn du nur ergänzen willst.',
|
||||
parameters: [
|
||||
{ name: 'noteId', type: 'string', description: 'ID der Notiz', required: true },
|
||||
{ name: 'title', type: 'string', description: 'Neuer Titel', required: false },
|
||||
{
|
||||
name: 'content',
|
||||
type: 'string',
|
||||
description: 'Neuer Inhalt (überschreibt vollständig)',
|
||||
required: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'append_to_note',
|
||||
module: 'notes',
|
||||
description:
|
||||
'Hängt Text ans Ende des Inhalts einer bestehenden Notiz an (neue Zeile getrennt). Nicht-destruktiv.',
|
||||
parameters: [
|
||||
{ name: 'noteId', type: 'string', description: 'ID der Notiz', required: true },
|
||||
{ name: 'content', type: 'string', description: 'Text zum Anhängen', required: true },
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'add_tag_to_note',
|
||||
module: 'notes',
|
||||
description:
|
||||
'Fügt einen Hashtag (z.B. "#Natur") an eine bestehende Notiz an. Idempotent — wenn der Tag schon vorhanden ist, passiert nichts.',
|
||||
parameters: [
|
||||
{ name: 'noteId', type: 'string', description: 'ID der Notiz', required: true },
|
||||
{
|
||||
name: 'tag',
|
||||
type: 'string',
|
||||
description:
|
||||
'Tag-Name (ohne #; z.B. "Natur", "Arbeit"). Leerzeichen werden durch _ ersetzt.',
|
||||
required: true,
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
export const AI_AVAILABLE_TOOL_NAMES = new Set<string>(AI_AVAILABLE_TOOLS.map((t) => t.name));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue