Metadata-Version: 2.4
Name: abstractassistant
Version: 0.4.4
Summary: A sleek (macOS) system tray application providing instant access to LLMs
Author-email: Laurent-Philippe Albou <contact@abstractcore.ai>
License-Expression: MIT
Project-URL: Homepage, https://github.com/lpalbou/abstractassistant
Project-URL: Repository, https://github.com/lpalbou/abstractassistant
Project-URL: Issues, https://github.com/lpalbou/abstractassistant/issues
Keywords: ai,llm,macos,system-tray,assistant
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: End Users/Desktop
Classifier: Operating System :: MacOS
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Desktop Environment
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: abstractagent>=0.3.7
Requires-Dist: abstractvoice>=0.9.3
Requires-Dist: abstractcore[anthropic,lmstudio,media,ollama,openai,tokens,tools]>=2.13.13
Requires-Dist: pystray>=0.19.4
Requires-Dist: Pillow>=10.0.0
Requires-Dist: PyQt5>=5.15.0
Requires-Dist: markdown>=3.5.0
Requires-Dist: pygments>=2.16.0
Requires-Dist: pymdown-extensions>=10.0
Requires-Dist: pyperclip>=1.8.2
Requires-Dist: plyer>=2.1.0
Requires-Dist: setuptools<81,>=61.0
Provides-Extra: lite
Provides-Extra: voice
Requires-Dist: abstractvoice[audio-io,stt]>=0.9.3; extra == "voice"
Provides-Extra: apple
Requires-Dist: abstractcore[all-apple]>=2.13.13; extra == "apple"
Requires-Dist: abstractvoice[all-apple]>=0.9.3; extra == "apple"
Provides-Extra: gpu
Requires-Dist: abstractcore[all-gpu]>=2.13.13; extra == "gpu"
Requires-Dist: abstractvoice[all-gpu]>=0.9.3; extra == "gpu"
Provides-Extra: all
Requires-Dist: abstractvoice[audio-io,stt]>=0.9.3; extra == "all"
Provides-Extra: dev
Requires-Dist: pytest>=7.0.0; extra == "dev"
Requires-Dist: black>=23.0.0; extra == "dev"
Requires-Dist: isort>=5.12.0; extra == "dev"
Requires-Dist: mypy>=1.5.0; extra == "dev"
Dynamic: license-file

# AbstractAssistant

AbstractAssistant is a macOS-first tray app and CLI.

The tray app is gateway-first: it connects to AbstractGateway, discovers available providers/models there, and keeps only local UI/session state.

It is part of the **AbstractFramework** ecosystem:
- https://github.com/lpalbou/AbstractFramework
- key components used directly here:
  - AbstractCore: https://github.com/lpalbou/abstractcore
  - AbstractRuntime: https://github.com/lpalbou/abstractruntime

## What it does

- **Tray UI**: menu bar/system tray bubble with sessions, attachments, tool approvals, and voice.
- **Media settings**: Gateway-backed Voice, TTS, STT, and Image selectors for generated speech, transcription, and image generation.
- **CLI**: run a single agentic turn in the terminal.
- **Durable tool boundary**: tool calls are surfaced as a resumable wait and executed only through the gateway after approval.

High-level flow:

```
Tray UI / CLI -> AbstractGateway -> AbstractRuntime -> AbstractCore -> Provider(s)
```

## Install

```bash
pip install "abstractassistant"
```

Requirements (summary):
- Python 3.10+
- Tray UI is macOS-first (menu bar/system tray); CLI/backend may work elsewhere but macOS is the primary target.
- For tray mode, an AbstractGateway instance must be available.

## Quick start

Tray UI:

```bash
assistant
```

CLI (one turn):

```bash
assistant run --prompt "What is in this repo and where do I start?"
```

Gateway startup (local dev):

```bash
export ABSTRACTGATEWAY_FLOWS_DIR="$PWD/abstractgateway/flows/bundles"
export ABSTRACTGATEWAY_AUTH_TOKEN="your-shared-token"
abstractgateway serve --host 127.0.0.1 --port 8080
assistant
```

Optional assistant-side overrides:

```bash
assistant --gateway-url http://127.0.0.1:8080 --gateway-token "$ABSTRACTGATEWAY_AUTH_TOKEN"
```

The Media settings dialog is populated from Gateway catalog routes:
`/api/gateway/voice/voices`, `/api/gateway/audio/speech/models`,
`/api/gateway/audio/transcriptions/models`, `/api/gateway/vision/provider_models`,
and `/api/gateway/vision/models`. If it only shows `default`, verify that the
running Gateway is the current package version and not an older server process.

## Data & durability

Default data directory: `~/.abstractassistant/`.

Contents (evidence: `abstractassistant/core/session_index.py`):
- `session.json`: transcript snapshot + last run id (fast UX state)
- `sessions.json`: session registry + active session id
- `runtime/`: AbstractRuntime stores (run state, ledger, artifacts)

## Documentation

Start here: [docs/README.md](docs/README.md)

Core guides:
- [docs/INSTALLATION.md](docs/INSTALLATION.md)
- [docs/getting-started.md](docs/getting-started.md)
- [docs/api.md](docs/api.md)
- [docs/architecture.md](docs/architecture.md)
- [docs/faq.md](docs/faq.md)

## Development

```bash
pip install -e ".[dev]"
python -m pytest -q
```

## Contributing / Security / License

- Contributing: [CONTRIBUTING.md](CONTRIBUTING.md)
- Security reporting: [SECURITY.md](SECURITY.md)
- License: [LICENSE](LICENSE)
- Acknowledgments: [ACKNOWLEDGMENTS.md](ACKNOWLEDGMENTS.md)
