Metadata-Version: 2.4
Name: roshni
Version: 0.3.0
Summary: Personal data infrastructure framework — health, finance, journals, and AI agents
Project-URL: Homepage, https://github.com/uabbasi/roshni
Project-URL: Repository, https://github.com/uabbasi/roshni
Project-URL: Issues, https://github.com/uabbasi/roshni/issues
Author-email: Usman Abbasi <uabbasi@gmail.com>
License-Expression: MIT
License-File: LICENSE
Keywords: agent,finance,health,journal,personal-data,rag
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
Requires-Python: >=3.11
Requires-Dist: aiofiles>=23.2
Requires-Dist: apscheduler>=3.10
Requires-Dist: click>=8.0
Requires-Dist: duckduckgo-search>=7.0
Requires-Dist: google-api-python-client>=2.123
Requires-Dist: google-auth-oauthlib>=1.0
Requires-Dist: google-cloud-storage>=2.16
Requires-Dist: gspread-dataframe>=4.0
Requires-Dist: gspread>=6.1
Requires-Dist: litellm>=1.60
Requires-Dist: loguru>=0.7
Requires-Dist: pydantic>=2.0
Requires-Dist: python-dotenv>=0.21
Requires-Dist: python-telegram-bot>=21.0
Requires-Dist: pyyaml>=6.0
Requires-Dist: questionary>=2.0
Requires-Dist: rich>=13.0
Requires-Dist: tenacity>=8.0
Provides-Extra: agent-langchain
Requires-Dist: langchain-core>=1.2; extra == 'agent-langchain'
Requires-Dist: langchain>=0.3; extra == 'agent-langchain'
Provides-Extra: all
Requires-Dist: cvxpy>=1.6; extra == 'all'
Requires-Dist: duckdb>=1.4; extra == 'all'
Requires-Dist: faiss-cpu>=1.11; extra == 'all'
Requires-Dist: fitbit>=0.3; extra == 'all'
Requires-Dist: langchain-core>=1.2; extra == 'all'
Requires-Dist: langchain>=0.3; extra == 'all'
Requires-Dist: pandas>=2.2; extra == 'all'
Requires-Dist: requests-oauthlib>=2.0; extra == 'all'
Requires-Dist: requests>=2.32; extra == 'all'
Requires-Dist: scikit-learn>=1.5; extra == 'all'
Requires-Dist: sentence-transformers>=4.0; extra == 'all'
Requires-Dist: yfinance>=0.2; extra == 'all'
Provides-Extra: dev
Requires-Dist: mypy>=1.11; extra == 'dev'
Requires-Dist: pandas>=2.2; extra == 'dev'
Requires-Dist: pytest-asyncio>=1.1; extra == 'dev'
Requires-Dist: pytest-cov>=6.2; extra == 'dev'
Requires-Dist: pytest>=8.3; extra == 'dev'
Requires-Dist: requests>=2.32; extra == 'dev'
Requires-Dist: ruff>=0.12; extra == 'dev'
Requires-Dist: scikit-learn>=1.5; extra == 'dev'
Requires-Dist: sentence-transformers>=4.0; extra == 'dev'
Provides-Extra: financial
Requires-Dist: pandas>=2.2; extra == 'financial'
Provides-Extra: financial-full
Requires-Dist: cvxpy>=1.6; extra == 'financial-full'
Requires-Dist: duckdb>=1.4; extra == 'financial-full'
Requires-Dist: pandas>=2.2; extra == 'financial-full'
Requires-Dist: yfinance>=0.2; extra == 'financial-full'
Provides-Extra: fitbit
Requires-Dist: fitbit>=0.3; extra == 'fitbit'
Requires-Dist: pandas>=2.2; extra == 'fitbit'
Requires-Dist: requests-oauthlib>=2.0; extra == 'fitbit'
Requires-Dist: requests>=2.32; extra == 'fitbit'
Provides-Extra: health
Requires-Dist: pandas>=2.2; extra == 'health'
Requires-Dist: requests>=2.32; extra == 'health'
Provides-Extra: journal
Requires-Dist: scikit-learn>=1.5; extra == 'journal'
Requires-Dist: sentence-transformers>=4.0; extra == 'journal'
Provides-Extra: journal-chroma
Requires-Dist: chromadb>=1.0; extra == 'journal-chroma'
Requires-Dist: scikit-learn>=1.5; extra == 'journal-chroma'
Requires-Dist: sentence-transformers>=4.0; extra == 'journal-chroma'
Provides-Extra: journal-faiss
Requires-Dist: faiss-cpu>=1.11; extra == 'journal-faiss'
Requires-Dist: scikit-learn>=1.5; extra == 'journal-faiss'
Requires-Dist: sentence-transformers>=4.0; extra == 'journal-faiss'
Description-Content-Type: text/markdown

# Roshni

> *roshni* (روشنی) — "light" in Urdu

Safety-first personal AI assistant with Telegram and terminal support.

## 5-Minute First Run

You need Python 3.11+.

### 1. Install

```bash
pip install roshni
```

### 2. Run Setup Wizard

```bash
roshni init
```

The wizard guides you through:
- Bot identity (name + personality — with arrow-key selection)
- AI provider (Gemini default, with step-by-step setup guides for every provider)
- Bot's Brain (vault folder for memory, tasks, and knowledge)
- Integrations (Google services, Trello, Notion, Apple Health, Fitbit — each with setup walkthrough)
- Safety level (one simple choice: Balanced / Read only / Full access)
- Platform (Telegram or terminal)

### 3. Try It Immediately

```bash
roshni chat
```

Terminal chat is the fastest first experience. No Telegram required.

### 4. Run on Telegram

```bash
roshni run
```

## Security Model

- **Balanced** (default): Can read and search everything, create drafts/tasks/notes. Asks before sending emails or deleting anything.
- **Read only**: Can search and read your data, but can't create or change anything.
- **Full access**: Can do everything including send emails and delete items.
- Telegram is deny-by-default unless your user ID is allowlisted.
- Gmail is draft-first by default (no send).

## Integrations

| Integration | Default | Risk | Notes |
|---|---|---|---|
| Gmail | Draft-only | Low | Saves drafts locally; optional send mode |
| Google Workspace profile | Off | Medium | Guided least-privilege scope choices |
| Obsidian | Off | Low | Read-only vault search |
| Trello | Off | Medium | Boards/lists/cards/labels/comments with approvals on write actions |
| Notion | Off | Medium | Database-backed page search/create/update/append |
| HealthKit import | Off | Low | Reads Apple Health `export.xml` summaries |
| Fitbit | Off | Low | Steps, sleep, heart rate via Fitbit API |
| Notes | On | Medium | Local note writes (approval-gated) |
| Weather | On | Low | Read-only |
| Web search/fetch | On | Low | Read-only |
| Reminders | On | Medium | Local reminder writes (approval-gated) |

## Local LLM (Ollama) Requirements

Recommended minimums:
- 8 GB RAM: small models only
- 16 GB RAM: solid everyday use
- 32 GB RAM: smoother larger local models

Quick start:
```bash
# Install Ollama first: https://ollama.com
ollama serve
ollama pull deepseek-r1
```

Then choose `Local (Ollama)` in `roshni init`.

## Delighter Features

- `morning_brief`
- `daily_plan`
- `weekly_review`
- `inbox_triage_bundle`
- `save_reminder` / `list_reminders` / `complete_reminder`

## Built-in Tools

- `get_weather`
- `search_web`
- `fetch_webpage`

## Reconfigure Anytime

```bash
roshni init
```

## Optional Extras

The base install includes everything you need: LLM, Telegram, Google APIs, web search. These extras add specialized features:

| Extra | What it adds |
|---|---|
| `health` | Health data collection (pandas) |
| `fitbit` | Fitbit steps/sleep/heart rate |
| `journal` | Journal RAG with embeddings |
| `financial` | Financial calculators |
| `financial-full` | Market data + portfolio optimization |
| `agent-langchain` | LangChain integration |
| `all` | Everything above |

## Development

```bash
git clone https://github.com/uabbasi/roshni.git
cd roshni
uv sync --extra dev
uv run pytest tests/
```

See `CLAUDE.md` for architecture details.
