feat: get_categories tool, author resolution in get_activities, update CLAUDE.md (v0.4.8)

- get_categories(list_id): new tool filtering taskcategorysync by
  sortingIndexByTaskList, returns {id, name, emoji} ordered by sort index
- get_activities: author IDs now resolved to display names (firstName) via
  famlistfamily members; raw author_id preserved as separate field; member
  lookup is non-fatal (falls back to raw ID on error)
- CLAUDE.md: tools table updated to reflect all implemented tools (v0.4.8)
- SPEC.md: full accgetallfamily response structure documented including
  categories[] on tasks and category parameter investigation findings
- Category assignment in create/update task: all tested parameter names
  ignored by API; still to verify (Service Worker blocks web inspection)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-15 17:04:35 +02:00
parent 70b1f73079
commit ffb8b062c8
5 changed files with 118 additions and 19 deletions
+30 -10
View File
@@ -133,18 +133,38 @@ Hinweis: `a03call=tasklistsync` ist **kein gültiger Endpoint** — API antworte
**Response-Struktur (verifiziert):**
```
a00 → famlistfamily-Daten (Kreise) Nebeneffekt, nicht verwendet
a01.r.r.updatedCreated[] → taskcategorysync (Einkaufskategorien/Abteilungen)
.sortingIndexByTaskList → dict, Keys = Listen-IDs (z.B. "taskList/23431854_29740942")
Quelle der Listen-IDs (Namen/Zähler noch unbekannt)
a02.r.r.updatedCreated[] → tasksync (Tasks)
.metaId → eindeutige Task-ID
.text Aufgabentext
.description → optionale Beschreibung
.taskListId → Zugehörigkeit zur Liste (= Listen-ID aus sortingIndexByTaskList)
.complete"true" / "false" (String, nicht Boolean!)
a00 → famlistfamily-Daten (Kreise inkl. members[]) Nebeneffekt
a01.r.r.updatedCreated[] → taskcategorysync (Kategorien/Abteilungen pro Liste)
.metaId → Kategorie-ID (Format taskCategory/<familyId>_<sysId>)
.nameKategoriename (sprachabhängig, z.B. "Beverages")
.emoji → Emoji-Symbol der Kategorie
.systemCategoryId → numerische System-ID (sprach-unabhängig)
.taskListTypeListentyp (z.B. "SHOPPING_LIST", "TODO")
.sortingIndexByTaskList → dict: Listen-ID → Sortierposition
Keys = Listen-IDs der zugeordneten Listen
.locale Sprache des Namens (z.B. "de", "en", "ru")
.hiddenByTaskList → Liste von Listen-IDs, in denen die Kat. versteckt ist
a02.r.r.updatedCreated[] → tasksync (Tasks)
.metaId → eindeutige Task-ID
.taskId → identisch zu metaId (zweiter Alias)
.text → Aufgabentext
.description → optionale Beschreibung
.taskListId → Zugehörigkeit zur Liste
.complete → "true" / "false" (String, nicht Boolean!)
.categories[] → zugewiesene Kategorien des Tasks
.system → "true" wenn System-Kategorie, "false" wenn custom
.name → Kategoriename (z.B. "SYS-CAT-TODOS", "Beverages")
.assignee / .assigneeIds → zugewiesene Mitglieder
.reminder → Erinnerungsdatum (ISO 8601, optional)
.recurrency → Wiederholungsregel (optional)
.sortingIndex → Anzeigereihenfolge
```
**Kategorie-Zuweisung bei taskcreate2 / taskupdate2:** Parameter-Name noch unbekannt.
Getestete Varianten (`taskCategoryId`, `categoryId`, `category`, `categoryMetaId`) werden
serverseitig ignoriert — die Task bekommt stets die Default-Systemkategorie der Liste.
Service Worker in der Web-App verhindert Inspektion des echten Requests. Noch zu verifizieren.
## Systembezeichnungen für Listen-Namen
Bekannte Systembezeichnungen werden deutsch übersetzt: