feat(ai): RoomTheme + SnippetLibrary + ScheduledMessageStore (#62, #63, #67) #167

Closed
charles wants to merge 7 commits from feat/62-63-67-themes-snippets-scheduled into main
Owner

Résumé

Implémentation des trois issues dans la crate fractal-ai :

  • #62 — Thèmes visuels par salon : RoomTheme, hue_to_css_vars(), RoomThemeStore avec persistance TOML (themes.toml). La fonction CSS retourne --room-accent-color et --room-accent-bg avec luminosité 30 % (sombre) / 60 % (clair).
  • #63 — Bibliothèque de snippets : Snippet, expand_snippet() (substitution {{clé}}), SnippetLibrary avec chargement depuis un répertoire de fichiers .toml et sauvegarde par fichier <name>.toml.
  • #67 — Réponses programmées : ScheduledMessage, ScheduledStatus (Pending/Sent/Cancelled/LateDelivered), ScheduledMessageStore (SQLite via sqlx), next_due(). Schéma SQL conforme à la spec.

Fichiers modifiés

  • crates/fractal-ai/Cargo.toml — ajout de toml, sqlx, dirs
  • crates/fractal-ai/src/theme.rs — nouveau
  • crates/fractal-ai/src/snippet.rs — nouveau
  • crates/fractal-ai/src/scheduled.rs — nouveau
  • crates/fractal-ai/src/lib.rs — exports des trois nouveaux modules

Plan de test

  • cargo test -p fractal-ai — les tests unitaires de theme, snippet et scheduled passent
  • Vérifier la persistance TOML : RoomThemeStore::save puis load roundtrip
  • Vérifier expand_snippet avec toutes les variables ({{nom}}, {{date}}, {{heure}}, {{salon}})
  • Tester ScheduledMessageStore avec une base SQLite temporaire (create / list_pending / cancel / mark_sent)
  • Vérifier next_due ignore les messages passés et non-pending
## Résumé Implémentation des trois issues dans la crate `fractal-ai` : - **#62 — Thèmes visuels par salon** : `RoomTheme`, `hue_to_css_vars()`, `RoomThemeStore` avec persistance TOML (`themes.toml`). La fonction CSS retourne `--room-accent-color` et `--room-accent-bg` avec luminosité 30 % (sombre) / 60 % (clair). - **#63 — Bibliothèque de snippets** : `Snippet`, `expand_snippet()` (substitution `{{clé}}`), `SnippetLibrary` avec chargement depuis un répertoire de fichiers `.toml` et sauvegarde par fichier `<name>.toml`. - **#67 — Réponses programmées** : `ScheduledMessage`, `ScheduledStatus` (Pending/Sent/Cancelled/LateDelivered), `ScheduledMessageStore` (SQLite via sqlx), `next_due()`. Schéma SQL conforme à la spec. ## Fichiers modifiés - `crates/fractal-ai/Cargo.toml` — ajout de `toml`, `sqlx`, `dirs` - `crates/fractal-ai/src/theme.rs` — nouveau - `crates/fractal-ai/src/snippet.rs` — nouveau - `crates/fractal-ai/src/scheduled.rs` — nouveau - `crates/fractal-ai/src/lib.rs` — exports des trois nouveaux modules ## Plan de test - [ ] `cargo test -p fractal-ai` — les tests unitaires de `theme`, `snippet` et `scheduled` passent - [ ] Vérifier la persistance TOML : `RoomThemeStore::save` puis `load` roundtrip - [ ] Vérifier `expand_snippet` avec toutes les variables (`{{nom}}`, `{{date}}`, `{{heure}}`, `{{salon}}`) - [ ] Tester `ScheduledMessageStore` avec une base SQLite temporaire (create / list_pending / cancel / mark_sent) - [ ] Vérifier `next_due` ignore les messages passés et non-pending
charles closed this pull request 2026-04-06 02:36:11 +00:00
Some checks are pending
CI / cargo check (pull_request) Has been cancelled
CI / cargo test (pull_request) Has been cancelled
CI / clippy + rustfmt (pull_request) Has been cancelled
qa
Required

Pull request closed

Sign in to join this conversation.
No description provided.