feat(assistant): voice streaming, finance, construction, comms, file sandbox#508
Open
rposull wants to merge 3 commits into
Open
feat(assistant): voice streaming, finance, construction, comms, file sandbox#508rposull wants to merge 3 commits into
rposull wants to merge 3 commits into
Conversation
…sandbox Expand OpenJarvis into a full personal assistant across five workstreams. All new modules ship with tests (215 passing) and free, key-free data sources where possible; heavier deps are opt-in extras. - speech: streaming TTS end-to-end. Base synthesize_stream() with buffered default; EdgeTTSBackend streams MP3 incrementally; /v1/speech/synthesize returns StreamingResponse gated by speech.tts_stream; frontend plays via MediaSource with blob fallback. Edge mic capture + silence/hallucination filtering fixes. edge-tts added as optional `speech-tts` extra. - tools(file): opt-in sandbox + write confirmation resolved from arg -> OPENJARVIS_WORKSPACE -> [tools] config (file_allowed_dirs, file_write_confirm). Defaults unchanged so autonomous operators keep working; sensitive files remain blocked regardless. - tools(info): weather (Open-Meteo) and news (Google News RSS, optional NewsAPI) tools, no API key required. - connectors+tools(comms): GmailConnector.send_message and GCalendarConnector.create_event; email_send / calendar_create_event (requires_confirmation) plus read-only email_list / calendar_list_events. - finance: CoinGecko crypto + Yahoo stock prices, pure-Python SMA/EMA/RSI/ MACD indicators with trend bias, SQLite portfolio + paper-trading store, and 8 agent tools (crypto_price, stock_quote, technical_analysis, portfolio_*, paper_trade, paper_account). - construction: SQLite cost catalog + projects + document records, print-ready HTML quotes/contracts (native PDF via optional `construction` reportlab extra), and 7 agent tools (cost_*, project_*, quote_create, contract_create). - chore: graceful lifespan shutdown, helper PowerShell scripts, example jarvis-assistant.toml, and AGENTS.md specialist personas.
Pin the new optional extras (edge-tts, reportlab) in the universal lock and realign it with pyproject. The previous lock was stale (pinned the package at 1.0.2 vs the current 0.1.1) and carried duplicate version forks. Verified the regenerated lock is universal and retains all GPU/platform deps: vllm, torch, transformers, faiss-cpu, nvidia-ml-py, pynvml, mlx-lm, playwright remain present with linux/darwin/win32 markers intact. `ray` drops out because the resolution collapses to vllm 0.19.1, which no longer depends on it (nothing else references ray). `uv lock --check` and `uv sync --locked` both pass; full touched-module test suite green (215 passed).
Add a dependency-light outbound alert subsystem distinct from the two-way channel adapters, plus agent tools so Jarvis can act on "text/email/notify me" requests. - notifications/alerts.py: send_email_alert (stdlib SMTP, STARTTLS/SSL), send_sms_alert (Twilio REST via httpx, no twilio SDK), send_push_alert (ntfy preferred, Pushover fallback), send_alert dispatcher, and a stdlib .env loader. Every call has a timeout, catches all errors and returns a NotificationResult instead of raising, and never logs/returns secrets. - tools/notification_tools.py: notify_email / notify_sms / notify_push / notify (unified), all gated by the channel:send capability. - .env.example: all required env vars with placeholders (git-ignored .env). - test_notifications.py: runnable smoke test (one email + SMS + push), masks secrets and reports SKIP for unconfigured channels. - Tests: 20 mocked unit tests (no network/secrets) covering success, provider errors, unconfigured failures, secret non-leakage, and tool registration.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Expands OpenJarvis into a full personal assistant across five workstreams. Every new module ships with tests (215 passing) and prefers free, key-free data sources; heavier dependencies are opt-in extras.
synthesize_stream()with buffered default;EdgeTTSBackendstreams MP3 incrementally;/v1/speech/synthesizereturnsStreamingResponsegated byspeech.tts_stream; frontend plays via MediaSource with blob fallback. Includes Edge mic-capture and silence/hallucination filtering fixes.edge-ttsadded as optionalspeech-ttsextra.OPENJARVIS_WORKSPACE→[tools]config (file_allowed_dirs,file_write_confirm). Defaults unchanged so autonomous operators keep working; sensitive files remain blocked regardless.weather(Open-Meteo) andnews(Google News RSS, optional NewsAPI) — no API key required.GmailConnector.send_messageandGCalendarConnector.create_event;email_send/calendar_create_event(bothrequires_confirmation) plus read-onlyemail_list/calendar_list_events.constructionreportlab extra), and 7 agent tools.Test plan
pyteston all touched modules — 215 passing (~3s)speech-tts,construction) anduv.lockregeneration in canonical/CI environmentNotes
uv.lockintentionally left unchanged; declaring the new optional extras inpyproject.tomlis the source of truth. Regenerate the lock in the canonical multi-platform/CI environment to avoid pruning GPU/platform-specific deps.morning_brief,daily_digest,news_briefing).