|
### 🖼️ Aperçus multi-images exacts
L'exportateur sans interface d'OpenPencil installé produit des aperçus fidèles à la conception : la première image de premier niveau en grand PNG sûr pour la relecture, plus une piste de vignettes défilant horizontalement, la sélection au clic et la navigation précédent/suivant pour les documents multi-images.
|
### 🗺️ Canevas interactif
« Ouvrir le canevas interactif » monte paresseusement le SDK web en lecture seule d'OpenPencil avec déplacement, zoom et ajustement — inspectez n'importe quelle page, nœud imbriqué ou page inactive sans quitter la conversation.
|
|
### ✏️ Éditeur géré
Avec `editable: true`, l'action d'édition ouvre l'éditeur géré d'OpenPencil — sélection, calques, propriétés, outils de dessin, annuler/rétablir et sémantique d'enregistrement explicite — dans un espace de travail latéral droit redimensionnable, avec une option plein écran.
|
### 🤖 Outils de conception natifs pour agents
Cinq outils directs de canevas et six outils `openpencil_pipeline_*` permettent à l'agent de créer, inspecter, affiner, publier, modifier et lire un véritable canevas via les runtimes OpenPencil gérés.
|
|
### 🔐 Autorisations contrôlées par capacités
Les autorisations d'image et de document sont des capacités signées, liées à un hachage. Les métadonnées du navigateur n'exposent jamais un chemin d'hôte arbitraire, et les capacités signées d'aperçu/éditeur n'entrent jamais dans le résultat canonique de l'outil ni dans le contexte du modèle.
|
### ⚡ Sécurité transactionnelle
Un document du pipeline complet reste un brouillon privé non publié jusqu'à la réussite de tous les contrôles qualité natifs et DSH. La publication n'écrase aucun chemin existant, et un abandon ou un lot échoué ne laisse aucune cible vide.
|
|
### 🌍 Suit l'apparence de DSH
La carte de l'outil et l'éditeur géré suivent la locale chinois/anglais et le thème clair/sombre de DSH sans recharger la session d'édition.
|
### 🎯 Un flux de travail complet
« Exigence → brouillon privé → lots sémantiques → aperçus live pour l'utilisateur → validation déterministe de la structure, de la mise en page et de la qualité → publication atomique avec intégrité du PNG final » — un flux complet dans DSH.
|
## Installation dans DSH
DSH est un paquet distinct. Installez-le une fois si vous ne l'avez pas déjà :
```sh
npm install -g @deepseek-ai/dsh@latest
```
Ajoutez ensuite le plugin à un profil et lancez l'application web :
```sh
dsh plugin --profile web add @zseven-w/dsh-openpencil@next
dsh web
```
Pour le développement local, compilez ce checkout, liez son chemin absolu au profil Web, puis redémarrez complètement DSH :
```sh
pnpm run build
dsh plugin --profile web add link:/absolute/path/to/dsh-openpencil
dsh web
```
La dépendance `link:` rend les recompilations ultérieures visibles depuis ce checkout. DSH doit toutefois être entièrement redémarré après le remplacement de la dépendance du profil, car le profil Web fourni ne recharge pas à chaud les bundles hôte par défaut.
Vous préférez ne pas installer DSH globalement ? Exécutez les deux mêmes étapes via `pnpm dlx` :
```sh
pnpm dlx --package=@deepseek-ai/dsh@latest dsh plugin --profile web add @zseven-w/dsh-openpencil@next
pnpm dlx --package=@deepseek-ai/dsh@latest dsh web
```
> Le plugin OpenPencil est public et ne requiert aucun jeton npm. Si la pré-version DSH elle-même requiert une authentification auprès du registre, conservez cet identifiant dans une configuration npm au niveau utilisateur ou temporaire, hors du dépôt. Ce dépôt ne contient délibérément aucun identifiant de registre.
## Outils de conception
Le choix facultatif suit `openpencil_style_plan` → `openpencil_style_confirm` → `openpencil_pipeline_begin`, avec le brief original et `style_selection`. Catalogue et guide exact fonctionnent sans recommandation ; le fournisseur est désactivé par défaut. Ce transfert prend en charge script, pas app-agent ni commerce. La génération app-agent ordinaire reste disponible.
| Outil | Rôle |
| --- | --- |
| `openpencil_new` | Voie rapide compatible pour les tâches simples : exécute un script QuickJS transactionnel `batch_design`, ne publie que si la cible n'existe pas et renvoie une présentation modifiable. Préférez le pipeline complet pour un design de production. |
| `openpencil_pipeline_begin` | Démarre un brouillon privé appartenant à la session, crée en interne son unique racine, renvoie le contrat canvas/build compact correspondant au runtime et ouvre immédiatement ce même brouillon live dans la barre latérale ; le `.op` cible reste non publié. |
| `openpencil_pipeline_context` | Charge uniquement un détail ciblé de consigne, style, thème ou UI kit réellement absent du contrat begin ; ce n'est pas une étape de démarrage systématique. |
| `openpencil_pipeline_batch` | Exécute au plus deux scripts de génération natifs directs `I(...)`/`K(...)` : d'abord le premier viewport borné par `begin.next`, puis toutes les régions restantes dans un second et dernier lot. Chaque transaction réussie tente d'afficher un PNG exact à l'utilisateur. |
| `openpencil_pipeline_inspect` | Fournit uniquement un diagnostic manuel explicitement demandé par l'utilisateur ; la génération normale ne l'utilise ni comme aperçu ni comme examen visuel par le modèle. |
| `openpencil_pipeline_finish` | En un appel sain, finalise et valide le brouillon, rend automatiquement l'aperçu PNG exact de la racine finale et publie atomiquement avec `createIfAbsent`. Une seule réparation exclusivement `U(...)` et un dernier finish ne sont autorisés que si le résultat vaut `needs_correction`, `canContinue: true`, contient des `repairTargets` complets et non vides, avec `omitted: 0` ; tout autre résultat non publié est terminal. |
| `openpencil_pipeline_abort` | Supprime le brouillon non publié sans créer le fichier cible. |
| `openpencil_create` | Applique un programme transactionnel `batch_design` pour générer ou restructurer des nœuds sur un canevas existant. |
| `openpencil_edit` | Modifie un nœud explicite ou le nœud unique sélectionné par l'utilisateur. |
| `openpencil_render` | Crée un instantané `.op` immuable, adressé par contenu, et rend chaque image de premier niveau de la page active — `scale` et `editable` en option. |
| `openpencil_selection` | Lit les nœuds exacts sélectionnés dans le canevas de l'éditeur actif. |
## Flux de conception piloté par l'agent
Pour une demande courte ordinaire, appelez immédiatement `openpencil_pipeline_begin` et suivez le chemin rapide fixe : le premier lot JS direct borné par `begin.next` → un second et dernier lot JS direct contenant toutes les régions restantes → un appel à `openpencil_pipeline_finish`. Begin crée l'unique racine et ouvre aussitôt le canevas live privé dans la barre latérale ; le chemin demandé dans l'espace de travail reste absent jusqu'à la publication atomique. Après chaque begin ou lot réussi, lancez immédiatement l'appel requis suivant, sans narration, planification, comparaison, inspection ni outil sans rapport. Par défaut, le design entier n'utilise qu'une seule image ; chaque frame Hero/Product/Art/Media possède exactement un visuel principal, jamais une image accompagnée d'une icône factice.
Après chaque lot validé, l'outil tente seulement de présenter à l'utilisateur un aperçu PNG exact. Dès que l'appel revient, suivez immédiatement son `next` ; n'attendez pas une auto-inspection visuelle du modèle. Si `next` signale `previewUnavailable`, le script est déjà validé sur le canevas live : ne relancez pas le lot et n'appelez ni `openpencil_pipeline_inspect` ni `read_image`. `openpencil_pipeline_inspect` est réservé exclusivement à un diagnostic explicitement demandé par l'utilisateur.
Finish exécute les contrôles déterministes natifs de finalisation, lint, contraste et mise en page, ainsi que les garde-fous qualité stricts de DSH. Un appel sain rend le PNG exact de la racine finale et publie dans la même étape. Une réparation n'est autorisée que si le résultat contient simultanément `stage: "needs_correction"`, `canContinue: true`, des `repairTargets` complets et non vides avec `omitted: 0`, et si chaque cible possède `operation: "U"`, un `nodeId` exact non vide et un `patch` non vide. Appliquez toutes les cibles ensemble dans un unique lot exclusivement `U(...)`, puis appelez finish exactement une dernière fois sans narration. Tout autre résultat non publié, erreur ou `canContinue: false` est terminal : signalez-le une fois, sans réessayer, inspecter, lire image/contexte, abandonner ni démarrer un autre brouillon. Avec `published: true`, le PNG final et l'éditeur live sont déjà attachés : renvoyez le résultat et terminez immédiatement. Un garde-fou en échec ou `openpencil_pipeline_abort` laisse la cible absente. L'autorisation de modification liée au document n'ouvre automatiquement la barre latérale que si elle est libre et conserve **Modifier le canevas** pour un changement explicite.
Au sein du même service DSH en cours d'exécution, un changement de navigateur ou un rechargement permet de restaurer une publication durable et strictement analysée de `openpencil_new` ou `openpencil_pipeline_finish` sous forme de PNG exact avec l'action explicite **Modifier le canevas**. Une carte historique n'ouvre jamais automatiquement la barre latérale : l'utilisateur doit cliquer sur cette action. Un `openpencil_render` historique ordinaire reste en lecture seule, et les connexions non-loopback ne reçoivent jamais d'autorisation d'éditeur.
La skill `openpencil-design` incluse reste une référence légère facultative ; la génération ordinaire commence directement avec le contrat begin compact et complet. Le schéma natif actuel fait autorité et le runtime géré ne dépend pas du binaire de bureau. `openpencil_new` demeure une voie rapide compatible à lot unique.
Utilisez `openpencil_create` et `openpencil_edit` uniquement pour un canevas existant. Leurs modifications restent non enregistrées tant que l'action Enregistrer de l'éditeur n'a pas été déclenchée.
## Ressources de la visionneuse web
DSH ne sert que `client.js` pour un plugin client ; le SDK ESM d'OpenPencil, son WASM et CanvasKit sont donc préparés comme des ressources explicites de même origine :
```sh
pnpm run sync:viewer-assets
```
La commande de synchronisation privilégie un dépôt voisin `../openpencil` (développement local), en recourant en dernier ressort au sous-module vendored `vendor/openpencil` (CI et nouveaux clones). Remplacez-la avec `OPENPENCIL_ROOT` ou `--openpencil-root`. Un répertoire de ressources précompilées complet peut être sélectionné avec `DSHPLUGIN_OPENPENCIL_VIEWER_SOURCE`. La recherche au runtime peut être remplacée avec `DSHPLUGIN_OPENPENCIL_VIEWER_ASSET_DIR`.
Les ressources de la visionneuse sont chargées paresseusement uniquement après que l'utilisateur a ouvert le canevas. Si elles sont absentes ou invalides, l'aperçu PNG reste disponible et aucun bouton de canevas n'est proposé.
## Éditeur géré
Les sessions modifiables utilisent l'hôte web géré d'OpenPencil — la même architecture que celle d'`op-vscode`. Le plugin ne démarre l'hôte qu'après une action utilisateur autorisée, conserve le jeton du démon en mémoire, valide la source et l'origine de l'iframe, et ferme le processus lorsque la session d'édition se termine. La surface de l'éditeur est sélectionnée progressivement : les détails natifs de l'outil lorsque l'hôte déclare ce point d'intégration, sinon l'espace de travail latéral droit du plugin, avec des contrôles de redimensionnement et de plein écran.
Le démarrage utilise un listening handshake sûr avec les montages lents : les sondes de disponibilité ne commencent qu'après que l'hôte intégré a annoncé son adresse d'écoute. Aucune installation de bureau d'OpenPencil n'est requise.
Les installations publiées prennent en charge six cibles natives : `darwin-arm64`, `darwin-x64`, `linux-arm64`, `linux-x64`, `win32-arm64` et `win32-x64` ; les paquets Linux requièrent glibc. Le paquet racine sélectionne le paquet de plateforme adapté au système d'exploitation et au processeur au moyen d'`optionalDependencies` aux versions exactes (par exemple `@zseven-w/dsh-openpencil-darwin-arm64`). Ce paquet fournit `op-host-web-server`, le bundle web de l'éditeur et CanvasKit sous la forme d'un même runtime cohérent. L'éditeur géré ne dépend donc ni de `/Applications/OpenPencil.app`, ni d'`openpencil-desktop` dans le `PATH`, ni d'un checkout des sources d'OpenPencil.
Si DSH recharge ou décharge le plugin alors que le canevas contient des modifications non enregistrées, l'hôte conserve un brouillon de récupération local opaque pendant sept jours au maximum. Rouvrir la même source demande confirmation avant de la restaurer dans le canevas actif ; la récupération n'écrase jamais le fichier `.op` tant que l'utilisateur n'a pas explicitement enregistré.
Les paquets officiels des six plateformes reçoivent leurs points de terminaison bootstrap de collaboration Chine/Monde pendant le build de release protégé, qui valide les valeurs injectées avant publication. Un build local autonome dépourvu de cette injection peut remplacer le bootstrap avant de démarrer DSH avec `OPENPENCIL_COLLAB_BOOTSTRAP_URL=https://