managarten/packages/shared-ai/src
Till JS 75832faef7 feat(broadcast): enhanced ListView + dashboard widget + AI tools
Closes the M7/M9/M10 plan items in one pass since they share patterns.

ListView (M7)
- 4 stats cards at the top: versendet YTD, Ø Öffnungsrate, Ø Klickrate,
  Entwürfe. Same layout pattern as invoices for consistency.
- Status filter chips with live counts per status.
- Search across name + subject.
- Row now shows open-rate per-campaign when available.
- Settings gear in the header matches the invoices polish.

Dashboard widget (M10)
- BroadcastsWidget.svelte: 2x stats (sent YTD + avg open rate), next
  scheduled link, last sent link with open-rate badge. Empty state
  nudges toward creating a first campaign.
- Registered as 'broadcasts' in WIDGET_REGISTRY and the component map.
- Medium default size, no requiredBackend (reads from Dexie only;
  stats are mirrored from the last DetailView poll so no server
  round-trip for the widget).

AI tools (M9)
- 3 tools added to @mana/shared-ai's AI_TOOL_CATALOG:
  - create_campaign_draft (propose) — generates HTML body from a
    topic, lands as a draft; user picks audience + sends via UI
  - list_campaigns (auto) — id/name/subject/status/recipients
  - get_campaign_stats (auto) — rates as 0..1 floats
- broadcast/tools.ts: execute handlers with an HTML→CampaignContent
  shim (stores both html and a minimal Tiptap JSON placeholder so
  ListView renders without the editor having to remount). stripHtml
  helper derives plaintext.
- Registered in data/tools/init.ts after library.

Suggest-style tools (suggest_subject_lines) deliberately omitted —
they're pure generative and don't need an executor. The LLM can
produce subject ideas without a tool call.

Verified:
- pnpm check: 0 broadcast errors (4 pre-existing errors in articles
  module from parallel work, not mine)
- shared-ai test suite: 44/44 green (function-schema roundtrips the
  expanded catalog cleanly)
- mana-ai drift guard: 41/41 green

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 15:27:59 +02:00
..
agents chore: clear svelte-check errors + document scene-scope pattern 2026-04-18 17:24:52 +02:00
guardrails feat(ai): guardrail layer — pre/post-plan + pre-execute checks 2026-04-16 15:11:34 +02:00
missions feat(agents): Agent CRUD + default bootstrap + Mission.agentId (Phase 2) 2026-04-15 20:35:49 +02:00
planner feat(ai): thread TokenUsage through runPlannerLoop → mana-ai budget 2026-04-20 18:21:34 +02:00
policy refactor(ai): dynamic tool registry — single-source catalog in shared-ai 2026-04-16 13:06:07 +02:00
tools feat(broadcast): enhanced ListView + dashboard widget + AI tools 2026-04-21 15:27:59 +02:00
actor.test.ts refactor(actor): identity-aware Actor for Multi-Agent Workbench (Phase 1) 2026-04-15 20:13:57 +02:00
actor.ts refactor(actor): identity-aware Actor for Multi-Agent Workbench (Phase 1) 2026-04-15 20:13:57 +02:00
index.ts feat(ai): thread TokenUsage through runPlannerLoop → mana-ai budget 2026-04-20 18:21:34 +02:00