diff --git a/CLAUDE.md b/CLAUDE.md index c374b11..b26157d 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -237,7 +237,7 @@ clearly asked for a directory to be unblocked. --- -## Current State (2026-05-06) +## Current State (2026-05-08) Cortex is running and stable. All channels are live: @@ -252,6 +252,7 @@ Cortex is running and stable. All channels are live: | Tool audit log | ✅ Live | Every tool call logged to `home/{user}/tool_audit/YYYY-MM-DD.jsonl` | | Token usage tracking | ✅ Live | Per-user `home/{user}/usage.json`; summary in Settings | | Web push | ✅ Live | VAPID push notifications; `web_push` tool; subscribe via ☰ menu | +| Proactive notifications | ✅ Live | Daily reminder check (09:00); distill/cron completions; `GET /settings/notifications` dedicated page | Active users: scott (inara), holly (tina), brian (wintermute) diff --git a/cortex/static/HELP.md b/cortex/static/HELP.md index a7dc99e..95f8c28 100644 --- a/cortex/static/HELP.md +++ b/cortex/static/HELP.md @@ -6,7 +6,7 @@ and are appended automatically by help.html when present. --> -*Last updated: 2026-05-08* +*Last updated: 2026-05-09* --- @@ -176,7 +176,7 @@ Each response shows a **model tag** (bottom-right of message) with the model lab | **Account** | View your username, role badge (Admin / User), rename your username | | **Connected Accounts** | See which Google account is linked for OAuth sign-in | | **Email Allowlist** | Regex patterns controlling which addresses the `email_send` tool can reach | -| **Notifications** | Set which channel (NC Talk, Google Chat, email) Inara uses for proactive messages | +| **Notifications** | Dedicated page — set channel (Browser Push, NC Talk, Google Chat, email) for proactive messages; test buttons for instant verification | | **Tool Permissions** | Allow or block specific orchestrator tools for your account | | **Usage** | Token consumption by model — see below | | **Browser Cache** | Clear UI preferences stored locally (theme, font size, session ID, etc.) | @@ -337,6 +337,8 @@ Cortex can send browser push notifications — even when the tab is closed. - Click again to disable. Subscriptions are stored per-device. - The orchestrator's `web_push` tool lets Inara send you a push proactively (e.g. when a long task completes). +**Notification channel settings:** ☰ → **Account** → **Notification settings →** — choose Browser Push, Email, Nextcloud Talk, or Google Chat as the channel Inara uses for scheduled reminders, cron job completions, and memory digests. Use the **Send Test Notification** button to verify your setup, or **Check Reminders Now** to trigger the reminder check immediately. + --- ## Context & Memory ( ⚙ panel ) @@ -424,6 +426,8 @@ For direct access or scripting: | `GET` | `/api/push/vapid-key` | VAPID public key (for push subscription) | | `POST` | `/api/push/subscribe` | Register a push subscription | | `DELETE` | `/api/push/subscribe` | Remove a push subscription | +| `POST` | `/api/push/test` | Send a test notification via configured channel | +| `POST` | `/api/push/reminders/check` | Run reminder check immediately; returns `{"reminders_found": n}` | | `GET` | `/api/audit/files` | List available audit log dates (own data) | | `GET` | `/api/audit/day?date=` | Tool call entries for a specific date (own data) | | `GET` | `/api/audit/recent` | Recent tool calls across days (admin) | diff --git a/documentation/TODO__Agents.md b/documentation/TODO__Agents.md index 5d6b62f..d8fd6d8 100644 --- a/documentation/TODO__Agents.md +++ b/documentation/TODO__Agents.md @@ -108,6 +108,9 @@ Inara reaches out on her own initiative via NC Talk, Google Chat, email, or brow - [x] `scheduler.py` — distill_mid and distill_long already call `notify()` on completion - [x] Settings UI — "Browser Push Notification" option added to Notification Channel selector - [x] `notification_channel` accepts `"web_push"` in `routers/settings.py` +- [x] `GET /settings/notifications` — dedicated Notifications page (channel form + test buttons); Settings page now shows a link card +- [x] `POST /api/push/test` + `POST /api/push/reminders/check` — on-demand test endpoints +- [x] `push_utils.py` — fixed `pywebpush` 2.x key deserialisation (use `Vapid.from_pem()` instead of passing PEM string) ### [UI] File attachments in chat Upload an image or document inline and have it flow into context. Natural workflow