Metadata-Version: 2.5
Name: opsiom-cli
Version: 1.6.0
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: prompt-toolkit>=3; extra == 'dev'
Requires-Dist: pytest>=7; extra == 'dev'
Requires-Dist: rich>=13; extra == 'dev'
Provides-Extra: pretty
Requires-Dist: prompt-toolkit>=3; extra == 'pretty'
Requires-Dist: rich>=13; extra == 'pretty'
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 -f <fichier> -p "…"` | Joint un fichier texte à la question (répétable avec `-f`). |
| `opsiom recette` | Liste les recettes. `opsiom recette <nom> "texte"` applique une recette. |
| `opsiom -m <modèle> …` | Choisit le modèle (numéro, 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. |
| `/fichier [chemin\|effacer]` | Joint un fichier texte à la prochaine question. Sans argument, liste les fichiers en attente. |
| `/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 la jauge et 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. **Tab** complète les commandes, les modèles après `/model` et les chemins après `/fichier`.

### Joindre des fichiers

Un fichier texte (UTF-8, 200 Ko au maximum) peut être envoyé avec votre question :

```
/fichier rapport.md
Résume les points faibles de ce rapport.
```

Le fichier est mis en attente, envoyé avec la prochaine question, puis retiré. Une estimation du nombre de tokens est affichée (≈ caractères / 4). Les fichiers binaires, trop volumineux ou non UTF-8 sont refusés avec un message explicite.

En question unique : `opsiom -f rapport.md -p "Résume-le"`. Sans `-p`, la question par défaut est « Résume ce document. ».

### Recettes

Les recettes sont des consignes réutilisables :

| Recette | Effet |
|---|---|
| `resume` | Résumé avec les points clés en liste. |
| `corriger` | Correction de l’orthographe, de la grammaire et de la ponctuation. |
| `reformuler` | Réécriture claire et professionnelle. |
| `traduire-en-anglais` | Traduction en anglais, ton conservé. |
| `expliquer` | Explication simple. |
| `idees` | Dix idées en lien avec le texte. |

```bash
opsiom recette resume -f article.md
cat notes.txt | opsiom recette corriger
opsiom recette traduire-en-anglais "Bonjour à tous"
```

Pour ajouter les vôtres, créez un fichier `<nom>.md` dans le dossier affiché par `opsiom paths` (« recettes personnelles »). Un fichier de même nom remplace la recette intégrée.

## 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 et extras

Le CLI fonctionne seul. Deux extras enrichissent l’expérience :

```bash
pip install "opsiom-cli[pretty]"
```

- **rich** : rendu Markdown en direct dans le terminal.
- **prompt_toolkit** : complétion des commandes, des modèles et des chemins, historique.

Sans ces paquets, les réponses s’affichent en texte brut et la saisie reste celle du terminal. `OPSIOM_PLAIN=1` désactive le rendu Markdown.

- 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.

**« fichier introuvable », « binaire », « non UTF-8 » ou « trop volumineux »**
Le fichier joint doit être un texte UTF-8 de 200 Ko au maximum. Convertissez-le ou découpez-le en plusieurs fichiers.

**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, recettes, sous-commandes
├── chat.py      session interactive, commandes, diagnostic, erreurs
├── clients.py   clients serveur API et Space Hugging Face, flux SSE
├── files.py     fichiers joints : lecture, contrôles, mise en forme
├── recipes.py   recettes intégrées et personnelles
├── prompt.py    complétion et historique (prompt_toolkit, optionnel)
├── storage.py   chemins, configuration, quota local, transcriptions
└── ui.py        couleurs, symboles, jauge, indicateur d’attente, rendu Markdown (rich, optionnel)
tests/           tests unitaires et tests de bout en bout (faux serveur)
```

## Licence

À compléter.
