Metadata-Version: 2.5
Name: opsiom-cli
Version: 1.5.2
Summary: Interface en ligne de commande pour discuter avec Opsiom, l'assistant IA francophone.
Keywords: chatbot,cli,francophone,ia,opsiom
Classifier: Environment :: Console
Classifier: Intended Audience :: End Users/Desktop
Classifier: Natural Language :: French
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Topic :: Communications :: Chat
Requires-Python: >=3.9
Requires-Dist: requests>=2.31
Provides-Extra: dev
Requires-Dist: pytest>=7; extra == 'dev'
Description-Content-Type: text/markdown

# opsiom-cli

Discutez avec **Opsiom**, l’assistant IA francophone, depuis votre terminal.

```
pip install opsiom-cli
opsiom
```

## Sommaire

- [Démarrage rapide](#démarrage-rapide)
- [Utilisation](#utilisation)
- [Commandes de session](#commandes-de-session)
- [Configuration](#configuration)
- [Dépannage](#dépannage)
- [Confidentialité et sécurité](#confidentialité-et-sécurité)
- [Développement](#développement)

## Démarrage rapide

1. Installez le paquet (Python 3.9 ou plus récent) :

   ```bash
   pip install opsiom-cli
   ```

2. Lancez-le. Au premier démarrage, le CLI demande l’adresse du serveur, puis votre clé API ou votre pseudo Octix. Ces informations vous sont transmises par la personne qui héberge Opsiom.

   ```bash
   opsiom
   ```

3. Vérifiez la connexion à tout moment :

   ```bash
   opsiom doctor
   ```

## Utilisation

| Commande | Effet |
|---|---|
| `opsiom` | Session interactive. |
| `opsiom -p "Résume ce texte"` | Pose une question, affiche la réponse et quitte. |
| `cat notes.txt \| opsiom` | Envoie le contenu de l’entrée standard comme question. |
| `opsiom -m <modèle> …` | Choisit le modèle (identifiant ou nom partiel). |
| `opsiom configure` | Reconfigure le serveur et la clé d’accès. |
| `opsiom doctor` | Vérifie l’URL, le serveur, les modèles et le quota. |
| `opsiom paths` | Affiche les emplacements des fichiers locaux. |
| `opsiom --logo` | Affiche le repère graphique au démarrage de la session. |

### Saisie multiligne

Dans une session, tapez `"""` seul sur une ligne, écrivez votre texte, puis terminez par `"""` seul sur une ligne. Entrée seule envoie un message simple.

## Commandes de session

| Commande | Effet |
|---|---|
| `/retry` | Relance la dernière question. |
| `/copy` | Copie la dernière réponse dans le presse-papiers. |
| `/save [nom]` | Exporte la conversation en Markdown dans `~/opsiom-conversations/`. |
| `/new` | Repart d’une conversation vide. |
| `/clear` | Efface l’écran. |
| `/model [id ou numéro]` | Change de modèle. Sans argument, affiche un menu. |
| `/models` | Liste les modèles disponibles. |
| `/status` | Rappelle la connexion, le compte et le quota. |
| `/quota` | Affiche le quota restant aujourd’hui. |
| `/doctor` | Lance le diagnostic depuis la session. |
| `/help` | Affiche l’aide. |
| `/quit` | Quitte (aussi `/exit`, ou Ctrl+D). |

Raccourcis : **Entrée** envoie, **Ctrl+C** annule la saisie ou la réponse en cours, **Ctrl+D** quitte. L’historique des saisies se parcourt avec les flèches.

## Configuration

Les paramètres sont lus dans cet ordre de priorité : options de ligne de commande, variables d’environnement, fichier de configuration.

| Option | Variable d’environnement | Rôle |
|---|---|---|
| `--url` | `OPSIOM_URL` | Adresse du serveur ou du Space Hugging Face. |
| `--api-key` | `OPSIOM_API_KEY` | Clé API (serveur API). |
| `--backend` | `OPSIOM_BACKEND` | `api`, `hf` ou `auto` (d’après l’adresse). |
| `--username` | `OPSIOM_USERNAME` | Pseudo Octix (Space Hugging Face). |
| — | `OPSIOM_PASSWORD` | Mot de passe Octix. **Déconseillé** : visible par les autres processus du même utilisateur. Préférez la saisie masquée. |
| `--hf-token` | `OPSIOM_HF_TOKEN` ou `HF_TOKEN` | Jeton Hugging Face, si le Space est privé. |

Fichiers locaux (`opsiom paths` les affiche) :

- **configuration** : `config.json`, droits 600. Le mot de passe n’y est jamais écrit.
- **quota local** : `usage.json`, un cache d’affichage. Le serveur fait foi.
- **historique de saisie** : pour la flèche du haut.
- **transcriptions** : dossier des exports `/save`.

### Affichage

- Les couleurs sont désactivées si `NO_COLOR` est défini, si `TERM=dumb`, ou si la sortie est redirigée vers un fichier ou un pipe.
- Sur un terminal sans UTF-8, les symboles basculent sur de l’ASCII.

## Dépannage

**« connexion impossible »**
Vérifiez l’adresse avec `opsiom doctor`, puis votre réseau. Si le serveur est un Space Hugging Face, il peut être en veille : patientez une minute, puis relancez.

**« clé API invalide ou expirée »**
Reconfigurez avec `opsiom configure`.

**« session expirée ou refusée par le Space »**
Le CLI propose de vous reconnecter, puis renvoie votre message.

**« quota quotidien atteint » ou « quota dépassé côté serveur »**
Le quota se réinitialise chaque jour. Utilisez `/quota` pour voir où vous en êtes.

**« modèle inconnu » ou « hors forfait »**
Tapez `/models` pour la liste. Un modèle marqué « hors forfait » n’est pas inclus dans votre offre.

**Les accents ou les couleurs s’affichent mal**
Utilisez un terminal qui gère l’UTF-8 et les couleurs 256. Sous Windows, préférez Windows Terminal.

**Le presse-papiers ne fonctionne pas avec `/copy`**
Sous Linux, installez `xclip`, `wl-copy` ou `xsel`. Sous macOS et Windows, les outils système sont utilisés.

## Confidentialité et sécurité

- Chaque message est envoyé au serveur d’Opsiom. Le CLI ne transmet rien d’autre.
- Le mot de passe Octix n’est jamais enregistré : il est demandé à chaque lancement (saisie masquée).
- La clé API est stockée dans `config.json`, avec des droits 600. Ne partagez pas ce fichier.
- Un serveur `http://` distant est signalé : la clé et le mot de passe circuleraient en clair. Utilisez `https://`.
- Le contenu des conversations n’est écrit sur le disque que si vous lancez `/save`.

## Développement

```bash
git clone <dépôt>
cd opsiom-cli
pip install -e ".[dev]"
pytest
```

Structure :

```
src/opsiom_cli/
├── cli.py       options, configuration, question unique, sous-commandes
├── chat.py      session interactive, commandes, diagnostic, erreurs
├── clients.py   clients serveur API et Space Hugging Face, flux SSE
├── storage.py   chemins, configuration, quota local, transcriptions
└── ui.py        couleurs, symboles, indicateur d’attente, streaming
tests/           tests unitaires et tests de bout en bout (faux serveur)
```

## Licence

À compléter.
