#!/bin/sh # Drop — client minimal destiné à un assistant IA (§17, phase 34). # # Volontairement séparé de bin/drop, qui fait dix fois cette taille : un # assistant doit pouvoir lire ce fichier en entier et savoir s'en servir sans # documentation. Pas de profils multiples, pas de presse-papiers, pas de SSE — # un seul cercle, quatre gestes : envoyer un texte, envoyer un fichier, lire # les derniers éléments, savoir où l'on en est. # # Ne dépend que de curl, comme bin/drop (§2, contrainte 4). # # Le jeton est écrit dans ~/.config/drop/ia.conf en 600 et n'est affiché nulle # part, sur aucune sortie : le code d'appairage, lui, peut traverser le # contexte d'un modèle sans dommage (usage unique, deux minutes), le jeton non # (§12 bis). set -eu VERSION='1.0' CONFIG_DOSSIER="${XDG_CONFIG_HOME:-$HOME/.config}/drop" # Un cercle par installation, c'est le cas courant et le plus lisible côté # « Mes appareils » : un appareil « ia » par cercle, révocable seul. Pour en # suivre plusieurs depuis la même machine, DROP_IA_CONFIG désigne un autre # fichier — un jeton par cercle, sans introduire ici la mécanique de profils # de bin/drop, qui est précisément ce qui rend ce client-là trop volumineux # pour être lu d'un trait par un assistant. # # DROP_IA_CONFIG=~/.config/drop/ia-jeux.conf drop-ia envoyer "…" CONFIG="${DROP_IA_CONFIG:-$CONFIG_DOSSIER/ia.conf}" # ---------------------------------------------------------------- utilitaires echec() { printf 'drop-ia : %s\n' "$1" >&2 exit 1 } dire() { printf '%s\n' "$1" } # Un caractère de contrôle sert de marqueur temporaire pour les guillemets # échappés : sans lui, une valeur contenant \" couperait l'extraction en deux. MARQUEUR=$(printf '\001') # exiger_valeur