docs: update TODO and ROADMAP for 2026-04-29 session
Mark completed: email_send + allowlist UI, model inline edit, cross-session search. Remove completed items from active lists (distill review, model edit, session search). Update ROADMAP Phase 3 tool suite line and last-updated date. Remove resolved Unsloth entry from Deferred. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# Cortex — Roadmap
|
||||
|
||||
> Phases and priorities. For active tasks see `TODO__Agents.md`.
|
||||
> Last updated: 2026-04-03
|
||||
> Last updated: 2026-04-29
|
||||
|
||||
---
|
||||
|
||||
@@ -32,9 +32,9 @@
|
||||
|
||||
## Phase 3 — Intelligence Layer (In Progress)
|
||||
- ✅ Gemini API orchestrator (tool loop → Claude responder)
|
||||
- ✅ Tool suite: web search, AE Journal read/write, tasks, scratch, reminders, cron, system
|
||||
- ✅ Agent mode in UI (async job, poll for result)
|
||||
- ✅ Local LLM backend (Open WebUI/Ollama, per-user multi-model config)
|
||||
- ✅ Tool suite: web search, AE Journal read/write, tasks, scratch, reminders, cron, system, email_send (+ per-user allowlist), nc_talk_send
|
||||
- ✅ Agent mode in UI (async job, poll for result); role-based tool access + confirmation gate
|
||||
- ✅ Local LLM backend (Open WebUI/Ollama, per-user multi-model config); inline model edit in registry UI
|
||||
- ✅ Proactive cron (`message` / `brief` job types → NC Talk)
|
||||
- ✅ Session search (full-text across past session logs)
|
||||
- ✅ Distill notifications (NC Talk after mid/long runs)
|
||||
@@ -64,7 +64,6 @@
|
||||
---
|
||||
|
||||
## Deferred / Watching
|
||||
- **Unsloth Gemma 4 GGUFs** — blocked on Ollama v0.20.1 (llama.cpp GGUF metadata issue); switch `agent-support-gemma-*` aliases to Unsloth Q4_K_M when ready
|
||||
- **Speculative decoding** — llama.cpp supports it (E4B + E2B draft ≈ 2x speed); Ollama does not yet
|
||||
- **RAG via Open WebUI** — feed Nextcloud docs into local knowledge collections; possible complement to AE Journals search
|
||||
- **Multi-host local models** — per-user config already supports multiple hosts; routing logic TBD
|
||||
|
||||
@@ -38,7 +38,7 @@ New tools for `cortex/tools/` — higher-value additions that fill obvious gaps.
|
||||
- [x] **`file_list`** — directory listing with size, dirs first, 200 entry cap, admin-only — 2026-04-29
|
||||
- [x] **`file_write`** — overwrite/append to home_root paths, admin-only, confirm-required — 2026-04-29
|
||||
- [x] **`nc_talk_send`** — outbound NC Talk message via notification.py, admin-only — 2026-04-29
|
||||
- [ ] **`email_send`** — send email via existing `email_utils.py` SMTP helper
|
||||
- [x] **`email_send`** — SMTP via email_utils, per-user regex allowlist in `home/{user}/email_allowlist.json`, managed via Settings UI textarea + Files panel raw editor — 2026-04-29
|
||||
- [ ] **`web_push`** — send a browser push notification (requires push subscription stored
|
||||
per-user; pairs well with the PWA service worker already in place)
|
||||
|
||||
@@ -63,14 +63,6 @@ Upload an image or document inline and have it flow into context. Natural workfl
|
||||
- Local (Open WebUI): `content` array with image_url items
|
||||
- [ ] UI: show thumbnail/filename above the sent message
|
||||
|
||||
### [Models] Edit existing model entries
|
||||
Currently models can only be removed and re-added. Add an edit flow so fields
|
||||
(display name, model ID, context size, tags, notes) can be updated in-place.
|
||||
- [ ] Add "Edit" button next to each model row in `local_llm.html` (alongside Remove)
|
||||
- [ ] Populate the Add Model form with the model's current values when edit is clicked
|
||||
- [ ] On save, `PATCH` or delete+recreate via `user_settings.py`
|
||||
- [ ] Applies to both local and (future) cloud model entries
|
||||
|
||||
### [Auth] Encrypted sessions
|
||||
Allow users to opt-in to per-session encryption so session logs on disk cannot be
|
||||
read without the user's key.
|
||||
@@ -101,11 +93,6 @@ See `ARCH__Intelligence_Layer.md` for full design.
|
||||
- [ ] Target: markdown files from `~/DgrZone_Nextcloud/` and `~/OSIT_Nextcloud/`
|
||||
- [ ] Tag strategy: source path, date, topic tags from frontmatter or filename
|
||||
|
||||
### [Distill] Review first auto_distill_long output — 2026-04-01
|
||||
- Ran April 1 at 04:00 as scheduled
|
||||
- Manually review `inara/MEMORY_LONG.md` — confirm quality before fully trusting
|
||||
- Adjust distill prompts in `cortex/memory_distiller.py` if needed
|
||||
|
||||
---
|
||||
|
||||
## 🟢 Lower Priority / Future
|
||||
@@ -126,13 +113,6 @@ Read before finalising either design.
|
||||
- Nested agent delegation with dependency-aware batching
|
||||
- Plugin/manifest-based tool registration — worth considering before tool suite grows
|
||||
|
||||
### [Sessions] Cross-session search
|
||||
The file browser has per-file session search, but no way to query across all sessions
|
||||
for a persona. A unified search would make the session archive useful as a knowledge source.
|
||||
- [ ] `POST /sessions/search?q=...` — walks `home/{user}/persona/{name}/sessions/*.md`, returns matching excerpts with date + line context
|
||||
- [ ] UI: search input in file browser sidebar already present — wire to new endpoint
|
||||
- [ ] Consider: index on startup vs. live grep (live grep is fine at typical session volume)
|
||||
|
||||
### [Backend] API usage / cost tracking
|
||||
Multi-user setup with real Gemini/Claude API costs. Track per-user token consumption
|
||||
so Scott can see who's spending what.
|
||||
@@ -202,6 +182,27 @@ other based on resources and specialisation. No central coordinator required.
|
||||
|
||||
## ✅ Completed
|
||||
|
||||
### [Tools] email_send tool + per-user email allowlist — 2026-04-29
|
||||
- `email_send(to, subject, body)` in `cortex/tools/notify.py` — SMTP via `email_utils.py`
|
||||
- Per-user regex allowlist at `home/{user}/email_allowlist.json` (JSON array of patterns)
|
||||
- `re.fullmatch(..., re.IGNORECASE)` — supports wildcards like `.*@oneskyit\\.com`
|
||||
- Blocked by default (no allowlist = no sends); non-matching addresses silently blocked
|
||||
- Registered as admin-only tool in `TOOL_ROLES`
|
||||
- **Settings UI**: `POST /settings/email-allowlist` — textarea in Account Settings, one pattern per line
|
||||
- **Files panel**: `email_allowlist.json` added to `USER_FILES` in `files.py`; served from `home/{user}/`; appears in new "Settings" group in sidebar
|
||||
|
||||
### [Models] Edit existing model entries — 2026-04-29
|
||||
- Inline edit form per model row in `local_llm.html` (`.model-row-header` + hidden `.model-edit-form`)
|
||||
- "Edit" toggle shows pre-populated form; "Cancel" collapses it
|
||||
- "Fetch models" button in edit form — same live-fetch flow as Add Model
|
||||
- `POST /settings/local/models/{model_id}/edit` route in `local_llm.py` dispatches to `save_model` / `save_cloud_model` (upsert via `model_id`)
|
||||
- Works for both `local_openai` and cloud model types
|
||||
|
||||
### [Sessions] Cross-session search — 2026-04-29
|
||||
- `GET /sessions/search?q=&user=&persona=&limit=` in `files.py` — full-text grep across `sessions/*.md`, newest first
|
||||
- Returns up to `limit` matches with 120-char excerpt and date; `total_files_searched` count
|
||||
- UI: search input + results panel below Files sidebar; `Ctrl+F` / search icon shortcut; `marked.parse` highlights matches
|
||||
|
||||
### [Tools] Role-based access control + confirmation gate — 2026-04-29
|
||||
- `TOOL_ROLES` dict maps tool names to minimum required role (`admin`/`user`)
|
||||
- `CONFIRM_REQUIRED` set blocks destructive tools; orchestrator injects confirmation prompt instead
|
||||
|
||||
Reference in New Issue
Block a user