Core:
- ModelCatalog: periodic background sync of provider models + fuzzy resolve.
Misspelled model ids map to the nearest match (cheapest on ties); no match
raises ModelResolutionError with cheapest-first suggestions for the agent.
mcp-server:
- nexus_stt now writes the transcript to a Markdown file in the media dir so it
appears in the gallery and is readable in the modal.
- media handler resolves model via catalog before generating; returns a note
when substituting, or a BAD_REQUEST with available models when nothing fits.
- context wires a ModelCatalog per media provider with auto-sync.
admin:
- /media serves correct Content-Type (incl. text/markdown for transcripts).
- Gallery: audio play button on cards, dedicated audio player in modal,
text/transcript tiles that fetch and render the .md in the modal.
- Header: auto-refresh toggle (5/10/30s) that refreshes the active tab
without a full page reload; pauses while a modal is open.
- New tool nexus_vision: describe an image via a vision chat model
(default google/gemini-3.1-flash-lite) and record result in journal.
- NordRouter /media/upload now detects MIME from file extension so
data: URLs use the correct type (fixes HTTP 415 for images/audio/video).
- HttpClient supports FormData bodies (undici) for future multipart use.
STT does not produce a local media file, so journal.filePath should be
null. Otherwise admin gallery tries to serve the source file from outside
the media dir and gets a broken link.
AES-256-GCM encryption (KeyCipher) with master key from NEXUS_MASTER_KEY,
never persisted. ProvidersStore in SQLite: CRUD, enable/disable, default,
encrypted api keys, masked views for UI. KeyResolver applies env>DB precedence
and supports multiple providers. context.ts registers providers dynamically
from resolved config; backward compatible with env-only setups.
Monorepo-lite with shared @nexusai/core and @nexusai/mcp-server (stdio).
Provider-agnostic tools with explicit provider selection; NordRouter adapter
(media generate/poll/download, estimate, upload, models) and search via
perplexity/sonar. Local STT via faster-whisper uv sidecar. SQLite journal of
every generation for usage stats and future admin. 10 MCP tools.