Présentation

aispace.sh est un client en ligne de commande dédié au dépôt et à la diffusion de fichiers temporaires, destiné aux agents d’intelligence artificielle et aux humains. Le binaire unique fonctionne sur macOS, Linux et Windows, pour les architectures amd64 et arm64, et s’installe via un script shell, Homebrew, npm ou go install. Le service hébergé est séparé du client ; le dépôt ne contient que le code du client, les compétences Codex et la documentation.

Fonctionnement et options

Le flux d’utilisation repose sur aispace upload, qui accepte les entrées depuis le disque ou stdin. L’option --json force une réponse machine‑lisible, par exemple

{"file":{"id":"...","name":"report.pdf"},"link":{"url":"https://aispace.sh/d/...","expires_at":1757003600}}
. Les durées s’écrivent avec la syntaxe Go : 30m, 24h, 7d ou un nombre de secondes, et les valeurs par défaut sont 7 jours pour les fichiers et 1 heure pour les liens.

Les liens publics, réservés aux comptes Pro, se créent avec --link et peuvent être limités par --max-downloads. Un lien expiré, révoqué ou ayant atteint son quota de téléchargements devient immédiatement inaccessible, même si le fichier sous‑jacent reste stocké tant que sa durée de vie n’est pas écoulée.

Le chiffrement optionnel utilise le format age X25519. La clé de déchiffrement est générée localement (--identity-out secret.agekey) et n’est jamais transmise à l’API ; le fichier stocké porte l’extension .age. L’identifiant de déchiffrement peut être fourni via la variable d’environnement AISPACE_AGE_IDENTITY, mais il n’est pas accepté en ligne de commande pour éviter les fuites accidentelles.

Analyse de sécurité et limites

Le modèle de sécurité repose sur trois axes : expiration contrôlée, chiffrement local et visibilité restreinte. La séparation entre le fichier et le lien public empêche la divulgation d’un fichier tant que le lien n’est pas créé. Cependant, la dépendance à un compte Pro pour les liens publics crée un point de centralisation : la compromission du jeton d’authentification donne accès à tous les fichiers privés du compte.

Le fichier de configuration ($XDG_CONFIG_HOME/aispace/config.json ou ~/.config/aispace/config.json) est créé avec les permissions 0600. Un avertissement s’affiche si le fichier est lisible par d’autres utilisateurs, limitant ainsi les risques d’exposition de la clé d’API. Les erreurs sont renvoyées sur stderr au format texte ou JSON, ce qui facilite l’intégration dans des pipelines CI : les scripts peuvent détecter les codes de sortie stables et réagir automatiquement.

Le principal point de friction réside dans l’absence de serveur auto‑hébergeable dans le dépôt ; les utilisateurs doivent faire confiance à l’infrastructure aispace.sh pour le stockage et la gestion des métadonnées. Aucun benchmark de performance n’est fourni, ce qui rend difficile l’évaluation de la latence d’upload ou de la charge CPU du chiffrement age sur de gros fichiers.

Processus de développement et de diffusion

Le projet suit une chaîne CI / CD automatisée. Les tests unitaires sont exécutés avec go test -race ./..., la mise en forme avec gofmt -l, et l’analyse statique avec go vet. Les releases sont générées par GoReleaser, qui produit des binaires checksummés pour chaque plateforme, met à jour le tap Homebrew et publie le paquet npm @aispace-sh/cli. Le processus inclut la mise à jour du changelog, du roadmap et du fichier de sécurité, et encourage les contributions via des formulaires d’incident structurés.