DSH reserves the entire DSH_ prefix for host bootstrap settings: dsh-app-boot (BOOTSTRAP_PREFIXES) throws on the first DSH_* name it finds in a .env file, rejects the whole file, and `dsh web` aborts before any plugin loads. A user who pointed this plugin at their OpenPencil install the way DSH teaches — DSH_OPENPENCIL_BINARY in ~/.dsh/.env or the working directory's .env — took the host down instead. Reported as issue #6, which also correctly identified it as a structural, family-wide trap: ~20 variables across 7 plugins. All user-facing overrides take the DSHPLUGIN_ prefix: BINARY, DESKTOP, JIAN, EDITOR_BINARY, EDITOR_WEB_BUNDLE_DIR, EDITOR_CANVASKIT_DIR, VIEWER_ASSET_DIR and VIEWER_SOURCE, in code and in all 15 READMEs. The reporter proposed dropping the prefix entirely; DSHPLUGIN_ keeps a greppable family namespace without matching the literal DSH_ rule, and avoids handing generic names to a user's environment. DSHP_ was rejected as one keystroke from the fatal prefix. DSH_OPENPENCIL_SOURCE_ROOT keeps its name: verify-platform-packages.mjs already accepts the unprefixed OPENPENCIL_SOURCE_ROOT beside it. Several of these name executables the plugin launches, so moving them out of the reserved namespace makes them settable from a WORKING-DIRECTORY .env — a file that arrives with a clone. That is a deliberate, documented consequence of the family-wide rule, and part of what we are raising upstream. - src/plugin-env.ts: the shared reader. The new name wins BY PRESENCE, not truthiness — an empty new value means "no override" and must not resurrect a stale legacy value — then the legacy name. A legacy name warns once per process, printing names and precedence, never the value (a filesystem path). - Legacy names are read through all of 0.x and removed in the first 1.0.0 prerelease. Reading them cannot make them work in a .env file, which is why the warning says REPLACE the old assignment rather than add the new one. NOT VERIFIED — this repository does not currently build. It still imports APIs that DSH 0.1.5 removed (JsonValue from dsh-tools, DetailsToolOwnerProps, Session.events): 10 TS errors, identical before and after this change and none in the files it touches. With noEmitOnError set, tsc emits nothing, so the existing test suites run against a stale September 6 build and cannot say anything about this change. The 0.1.5 migration has to land before this is released; the sibling plugins are already migrated and their equivalents of this change are verified. Claude-Session: https://claude.ai/code/session_01Bnf63EbDp8SMUxWr6pnHHd
27 KiB
DSH OpenPencil
Das DeepSeek-Harness-Plugin für OpenPencil – echte .op-Dokumente direkt in einer Unterhaltung anzeigen, untersuchen und bearbeiten.
Exakte Multi-Frame-Vorschauen • Interaktive Leinwand • Verwalteter Editor • Agent-native Design-Tools
npm: @zseven-w/dsh-openpencil · Aktuelle Plugin-Version: 0.1.0-rc.7 · Bis einschließlich DSH 0.1.1-rc.2 getestet
English · 简体中文 · 繁體中文 · 日本語 · 한국어 · Français · Español · Deutsch · Português · Русский · हिन्दी · Türkçe · ไทย · Tiếng Việt · Bahasa Indonesia
Exakte Multi-Frame-.op-Vorschauen mit einer interaktiven Leinwand und dem Arbeitsbereich des verwalteten Editors
Warum DSH OpenPencil
DSH OpenPencil verbindet DeepSeek Harness mit OpenPencil, sodass ein Agent eine echte, bearbeitbare, interaktive Design-Leinwand steuert, statt ein generiertes Bild zurückzugeben.
🖼️ Exakte Multi-Frame-VorschauenDer installierte Headless-Exporter von OpenPencil rendert designgetreue Vorschauen: den ersten Frame der obersten Ebene als großes, replaysicheres PNG sowie eine horizontal scrollbare Miniaturbildleiste mit Auswählen per Klick und Zurück-/Weiter-Navigation für Dokumente mit mehreren Frames. |
🗺️ Interaktive Leinwand„Interaktive Leinwand öffnen“ lädt die schreibgeschützte OpenPencil-Web-SDK bei Bedarf nach und bietet Schwenken, Zoomen und Einpassen – beliebige Seiten, verschachtelte Knoten oder inaktive Seiten lassen sich untersuchen, ohne die Unterhaltung zu verlassen. |
✏️ Verwalteter EditorMit |
🤖 Agent-native Design-ToolsFünf direkte Canvas-Tools plus sechs |
🔐 Durch Capabilities geschützte GrantsBild- und Dokument-Grants sind signierte, an Hashes gebundene Capabilities. Browser-Metadaten legen niemals einen beliebigen Host-Pfad offen, und signierte Vorschau-/Editor-Capabilities gelangen nie in das kanonische Tool-Ergebnis oder den Modellkontext. |
⚡ Transaktionale SicherheitEin Dokument der vollständigen Pipeline bleibt ein privater, unveröffentlichter Entwurf, bis alle nativen und DSH-Qualitäts-Gates bestanden sind. Die Veröffentlichung überschreibt keinen vorhandenen Pfad; Abbruch oder fehlerhafte Batches hinterlassen kein leeres Ziel. |
🌍 Übernimmt das Look & Feel von DSHDie Tool-Karte und der verwaltete Editor übernehmen das Chinesisch-/Englisch-Locale und das Hell-/Dunkel-Design von DSH, ohne die Bearbeitungssitzung neu zu laden. |
🎯 Ein vollständiger Workflow„Anforderung → privater Entwurf → semantische Batches → Live-Vorschauen für den Benutzer → deterministische Struktur-/Layout-/Qualitätsprüfung → atomare Veröffentlichung mit Integritätsnachweis des finalen PNGs“ – ein vollständiger Ablauf in DSH. |
Installation in DSH
DSH ist ein eigenes Paket. Installiere es einmalig, falls noch nicht vorhanden:
npm install -g @deepseek-ai/dsh@latest
Füge dann das Plugin einem Profil hinzu und starte die Web-App:
dsh plugin --profile web add @zseven-w/dsh-openpencil@next
dsh web
Für die lokale Entwicklung bauen Sie diesen Checkout, verlinken seinen absoluten Pfad mit dem Web-Profil und starten DSH anschließend vollständig neu:
pnpm run build
dsh plugin --profile web add link:/absolute/path/to/dsh-openpencil
dsh web
Die link:-Abhängigkeit macht spätere Neubauten direkt aus diesem Checkout sichtbar. Nach dem Ersetzen der Profilabhängigkeit muss DSH jedoch vollständig neu gestartet werden, da das mitgelieferte Web-Profil Host-Bundles standardmäßig nicht per Hot Reload aktualisiert.
Lieber ohne globale DSH-Installation? Führe dieselben zwei Schritte über pnpm dlx aus:
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
Das OpenPencil-Plugin ist öffentlich und benötigt kein npm-Token. Wenn die DSH-Prerelease selbst eine Registry-Authentifizierung erfordert, bewahren Sie diese Anmeldedaten in einer npm-Konfiguration auf Benutzer- oder temporärer Ebene außerhalb des Checkouts auf. Dieses Repository enthält bewusst keine Registry-Anmeldedaten.
Design-Tools
| Tool | Funktion |
|---|---|
openpencil_new |
Kompatibler Schnellpfad für einfache Aufgaben: führt ein transaktionales QuickJS-batch_design-Skript aus, veröffentlicht nur bei noch nicht vorhandenem Ziel und gibt eine bearbeitbare Darstellung zurück. Für produktionsreife Designs ist die vollständige Pipeline vorzuziehen. |
openpencil_pipeline_begin |
Startet einen sitzungseigenen privaten Entwurf, legt intern dessen einzigen Root an, gibt den kompakten laufzeitgleichen Canvas-/Build-Vertrag zurück und öffnet denselben Live-Entwurf sofort in der Seitenleiste; die Ziel-.op bleibt unveröffentlicht. |
openpencil_pipeline_context |
Lädt nur ein gezieltes Detail zu Richtlinie, Stil, Theme oder UI-Kit, das im Begin-Vertrag tatsächlich fehlt; dies ist keine feste Startphase. |
openpencil_pipeline_batch |
Führt höchstens zwei direkte native I(...)-/K(...)-Generierungsskripte aus: zuerst den von begin.next begrenzten ersten sichtbaren Viewport, dann alle restlichen Bereiche in einem zweiten und letzten Batch. Jede erfolgreiche Transaktion versucht eine exakte PNG-Vorschau für den Benutzer. |
openpencil_pipeline_inspect |
Dient nur der manuellen Diagnose, wenn der Benutzer sie ausdrücklich verlangt; die normale Generierung verwendet es weder als Vorschau noch als visuelle Modellprüfung. |
openpencil_pipeline_finish |
Finalisiert und validiert den Entwurf in einem gesunden Aufruf, rendert automatisch die exakte finale Root-PNG-Vorschau und veröffentlicht atomar mit createIfAbsent. Genau eine reine U(...)-Reparatur und ein letzter Finish-Aufruf sind nur bei needs_correction, canContinue: true, einem vollständigen nicht leeren repairTargets und omitted: 0 erlaubt; jedes andere nicht veröffentlichte Ergebnis ist terminal. |
openpencil_pipeline_abort |
Verwirft den unveröffentlichten Entwurf, ohne die Zieldatei anzulegen. |
openpencil_create |
Wendet ein transaktionales batch_design-Programm an, um Knoten auf einer vorhandenen Live-Leinwand zu erzeugen oder umzustrukturieren. |
openpencil_edit |
Modifiziert einen expliziten Knoten oder den einzelnen vom Benutzer ausgewählten Knoten. |
openpencil_render |
Erstellt einen unveränderlichen, inhaltsadressierten .op-Snapshot und rendert jeden Frame der obersten Ebene auf der aktiven Seite – optional mit scale und editable. |
openpencil_selection |
Liest die exakt auf der Leinwand des Live-Editors ausgewählten Knoten. |
Agent-Design-Workflow
Rufen Sie für eine gewöhnliche kurze Anforderung sofort openpencil_pipeline_begin auf und folgen Sie dem festen Schnellpfad: der von begin.next begrenzte erste direkte JS-Batch → ein zweiter und letzter direkter JS-Batch mit allen verbleibenden Bereichen → ein openpencil_pipeline_finish. Begin legt den einzigen Root an und öffnet die private Live-Leinwand sofort in der Seitenleiste; der angeforderte Arbeitsbereichspfad bleibt bis zur atomaren Veröffentlichung abwesend. Nach jedem erfolgreichen Begin- oder Batch-Aufruf folgt der nächste erforderliche Aufruf sofort und ohne Erläuterung, Planung, Vergleich, Inspektion oder fremden Tool-Aufruf. Standardmäßig verwendet das gesamte Design genau ein Bild; jeder Hero-/Produkt-/Art-/Media-Frame hat genau ein primäres Visual, niemals zugleich ein Bild und einen Platzhalter-Icon.
Nach jedem erfolgreich eingespielten Batch versucht das Tool lediglich, dem Benutzer eine exakte PNG-Vorschau anzuzeigen. Sobald der Aufruf zurückkehrt, folgen Sie sofort seinem next; warten Sie nicht auf eine visuelle Selbstprüfung des Modells. Meldet next previewUnavailable, ist das Skript bereits auf der Live-Leinwand festgeschrieben: den Batch nicht erneut ausführen und weder openpencil_pipeline_inspect noch read_image aufrufen. openpencil_pipeline_inspect bleibt ausschließlich einer vom Benutzer ausdrücklich verlangten Diagnose vorbehalten.
Finish führt die deterministische native Finalisierung, Lint-, Kontrast- und Layoutprüfung sowie die harten DSH-Qualitäts-Gates aus. Ein gesunder Aufruf rendert das exakte finale Root-PNG und veröffentlicht im selben Schritt. Eine Reparatur ist nur erlaubt, wenn das Ergebnis zugleich stage: "needs_correction", canContinue: true, ein vollständiges nicht leeres repairTargets mit omitted: 0 und für jedes Ziel operation: "U", eine exakte nicht leere nodeId sowie einen nicht leeren patch enthält. Alle Ziele werden zusammen in genau einem reinen U(...)-Batch angewendet; danach folgt ohne Erläuterung genau ein letzter Finish-Aufruf. Jeder andere nicht veröffentlichte Rückgabewert, ein Fehler oder canContinue: false ist terminal: einmal melden und nicht erneut versuchen, inspizieren, Bild/Kontext lesen, abbrechen oder einen Ersatzentwurf starten. Bei published: true sind finales PNG und Live-Editor bereits angehängt: Ergebnis zurückgeben und sofort beenden. Ein fehlgeschlagenes Gate oder openpencil_pipeline_abort lässt das Ziel abwesend. Die dokumentgebundene Bearbeitungsberechtigung öffnet die Seitenleiste nur im Leerlauf automatisch und behält Leinwand bearbeiten für einen ausdrücklichen Wechsel.
Innerhalb desselben laufenden DSH-Dienstes lässt sich nach einem Browserwechsel oder Neuladen eine strikt geparste dauerhafte Veröffentlichung von openpencil_new oder openpencil_pipeline_finish als exaktes PNG mit ausdrücklicher Aktion Leinwand bearbeiten wiederherstellen. Eine Verlaufskarte öffnet die Seitenleiste nie automatisch; der Benutzer muss diese Aktion anklicken. Ein gewöhnlicher historischer openpencil_render bleibt schreibgeschützt, und Nicht-Loopback-Verbindungen erhalten niemals einen Editor-Grant.
Der gebündelte openpencil-design-Skill bleibt eine optionale schlanke Referenz; normale Generierung beginnt direkt mit dem vollständigen kompakten Begin-Vertrag. Die aktuelle native Tool-Spezifikation ist maßgeblich, und die verwaltete Laufzeit benötigt keine Desktop-Binärdatei. openpencil_new bleibt ein kompatibler Einzel-Batch-Schnellpfad.
Verwenden Sie openpencil_create und openpencil_edit nur für eine vorhandene Live-Leinwand. Ihre Änderungen bleiben bis zur Aktion „Speichern“ im Editor ungespeichert.
Web-Viewer-Assets
DSH liefert für ein Client-Plugin nur client.js aus; daher werden die OpenPencil-ESM-SDK, ihr WASM und CanvasKit als explizite Same-Origin-Assets bereitgestellt:
pnpm run sync:viewer-assets
Der Sync-Befehl bevorzugt ein benachbartes ../openpencil-Checkout (lokale Entwicklung) und greift andernfalls auf das eingebundene vendor/openpencil-Submodul zurück (CI und frische Klone). Überschreiben Sie es mit OPENPENCIL_ROOT oder --openpencil-root. Ein vollständiges vorgefertigtes Asset-Verzeichnis kann mit DSHPLUGIN_OPENPENCIL_VIEWER_SOURCE ausgewählt werden. Die Suche zur Laufzeit kann mit DSHPLUGIN_OPENPENCIL_VIEWER_ASSET_DIR überschrieben werden.
Viewer-Assets werden erst nachgeladen, nachdem der Benutzer die Leinwand geöffnet hat. Sind sie nicht vorhanden oder ungültig, bleibt die PNG-Vorschau verfügbar und es wird kein Leinwand-Button angezeigt.
Verwalteter Editor
Bearbeitbare Sitzungen nutzen den verwalteten Web-Host von OpenPencil – dieselbe Architektur wie bei op-vscode. Das Plugin startet den Host erst nach einer autorisierten Benutzeraktion, hält das Daemon-Token im Arbeitsspeicher, validiert iframe-Quelle und -Origin und beendet den Prozess, wenn die Editor-Sitzung endet. Die Editor-Oberfläche wird schrittweise ausgewählt: native Tool-Details, wenn der Host diese Schnittstelle deklariert, andernfalls der rechtsseitige Arbeitsbereich des Plugins mit Größenänderung und Vollbild-Steuerung.
Der Start verwendet einen für langsame Mounts sicheren listening handshake: Bereitschaftsprüfungen beginnen erst, nachdem der mitgelieferte Host seine gebundene Adresse gemeldet hat. Eine Desktop-Installation von OpenPencil ist nicht erforderlich.
Veröffentlichte Installationen unterstützen sechs native Ziele: darwin-arm64, darwin-x64, linux-arm64, linux-x64, win32-arm64 und win32-x64; die Linux-Pakete setzen glibc voraus. Das Root-Paket wählt über exakt versionierte optionalDependencies anhand von Betriebssystem und CPU das passende Plattformpaket aus (zum Beispiel @zseven-w/dsh-openpencil-darwin-arm64). Dieses Paket stellt op-host-web-server, das Web-Bundle des Editors und CanvasKit als eine zusammengehörige Laufzeit bereit. Der verwaltete Editor hängt daher weder von /Applications/OpenPencil.app noch von openpencil-desktop im PATH oder einem OpenPencil-Quell-Checkout ab.
Wenn DSH das Plugin neu lädt oder entlädt, während die Leinwand ungespeicherte Änderungen enthält, bewahrt der Host bis zu sieben Tage lang einen undurchsichtigen lokalen Wiederherstellungsentwurf auf. Beim erneuten Öffnen derselben Quelle wird nachgefragt, bevor sie in die Live-Leinwand wiederhergestellt wird; die Wiederherstellung überschreibt die .op-Datei nie, bis der Benutzer explizit speichert.
Die offiziellen Pakete für alle sechs Plattformen erhalten ihre Bootstrap-Endpunkte für die Zusammenarbeit in China und weltweit während des geschützten Release-Builds; die injizierten Endpunkte werden vor der Veröffentlichung validiert. Bei einem lokalen Eigenbau ohne diese Injektion kann der Bootstrap vor dem Start von DSH mit OPENPENCIL_COLLAB_BOOTSTRAP_URL=https://<your-host>/api/v1/collaboration/bootstrap überschrieben werden. Der Wert muss https verwenden und exakt den Pfad /api/v1/collaboration/bootstrap besitzen.
Für die geräteübergreifende Leinwandsynchronisierung müssen sowohl die native PC/DSH-Laufzeit als auch die mobile App auf dieselbe OpenPencil-Release-Linie aktualisiert werden, die die aktuelle Korrektur der Kollaborationswarteschlange enthält. Wird eine ältere mobile App mit einer neueren PC-Laufzeit kombiniert, können weiterhin entfernte Cursor sichtbar sein, obwohl keine Leinwand-Commits empfangen werden.
Bei der Entwicklung aus diesem Repository müssen vor dem Start von DSH zuerst das Web-Bundle des Editors und dann der native Host gebaut werden; anschließend wird die zusammengehörige Laufzeit bereitgestellt.
pnpm run build:editor-web führt das von OpenPencil unterstützte WASM-Bundle-Gate aus. Erforderlich sind Bash, Cargo/Rust mit dem Target wasm32-unknown-unknown, die wasm-bindgen-CLI, wasm-opt aus Binaryen, Node.js und gzip; CanvasKit benötigt kein EMSDK. Der Web-Build verwendet die Build-Variablen für den Collaboration-Bootstrap nicht. Vor pnpm run build:editor-runtime müssen sowohl OPENPENCIL_BUILD_COLLAB_BOOTSTRAP_URL_CN als auch OPENPENCIL_BUILD_COLLAB_BOOTSTRAP_URL_GLOBAL gesetzt sein. Sie werden ausschließlich vom nativen Cargo-Build verwendet, der beim Fehlen einer Variablen nach dem Fail-closed-Prinzip abbricht. Nach beiden erfolgreichen Builds wird die Laufzeit mit dem letzten Befehl bereitgestellt.
pnpm run build:editor-web
pnpm run build:editor-runtime
pnpm run stage:editor-runtime
Explizite Laufzeit-Überschreibungen werden nur als vollständiger, zusammengehöriger Satz akzeptiert:
DSHPLUGIN_OPENPENCIL_EDITOR_BINARYfürop-host-web-server;DSHPLUGIN_OPENPENCIL_EDITOR_WEB_BUNDLE_DIRfür das gebaute Editor-Web-Bundle;DSHPLUGIN_OPENPENCIL_EDITOR_CANVASKIT_DIRfür die CanvasKit-Assets.
Nur einen Teil dieses Satzes anzugeben ist ungültig; das Plugin kombiniert keine benutzerdefinierten Pfade mit den Laufzeit-Assets des Pakets.
Speichervorgänge nutzen einen optimistischen Quell-Hash, ein atomares Ersetzen und eine Nachfolger-Capability. Wenn sich die Quelle außerhalb des Editors ändert, meldet das Plugin einen Konflikt, statt sie zu überschreiben.
Ergebnis-Metadaten
Das für das Modell sichtbare Ergebnis bleibt einfaches JSON. Das nur im Browser verfügbare presentationMeta.$dshOpenPencil enthält additive Grants für:
image: PNG-Pfad, Vorschau-/Download-URLs und echte Breite/Höhe;frames: jeder exakt gerenderte Frame der obersten Ebene in der Reihenfolge der aktiven Seite, einschließlich Knoten-ID/-Name/-Index und signierter PNG-URLs;document: Quell-Aktionspfad plus unveränderliche Snapshot-URL, Bytes und SHA-256;viewer: versionierte SDK-/WASM-/CanvasKit-URLs, wenn die Asset-Route angehängt ist;editor: eingeschränkte Start-/Aktualisierungs-Capabilities, wenneditable: trueautorisiert ist.
Das Ergebnis erfasst außerdem renderer, rendererBinary, fidelity und etwaige Warnungen. Vorhandene reine PNG-Schema-v1-Nachrichten bleiben renderbar.
DSH 0.1.1-rc.2 speichert Browser-Präsentationsmetadaten für Tools, die unter PTC/Code Mode verschachtelt sind, nicht dauerhaft. Das Plugin stellt diese reine UI-Projektion über einen Same-Origin-, sitzungsgebundenen Endpunkt wieder her: Der Browser sendet nur die Sitzungs-ID, die Call-ID und den unveränderlichen Dokument-SHA-256, während der Host das maßgebliche Ergebnis aus dem dauerhaften DSH-Sitzungsprotokoll auflöst und einen kurzlebigen In-Process-Marker ausschließlich zur Autorisierung aktueller Live-Bearbeitungen verwendet. Signierte Vorschau-/Editor-Capabilities gelangen nie in das kanonische Tool-Ergebnis oder den Modellkontext. Der dauerhafte Verlauf eines gewöhnlichen openpencil_render bleibt schreibgeschützt. Eine strikt geparste dauerhafte Veröffentlichung von openpencil_new oder openpencil_pipeline_finish kann nur über Loopback und nach ausdrücklichem Klick des Benutzers einen Editor-Grant erhalten; das automatische Öffnen der Seitenleiste bleibt aktuellen, vertrauenswürdigen Live-Ergebnissen vorbehalten.
Für eine begrenzte Wiedergabe akzeptiert die verschachtelte Metadaten-Wiederherstellung bis zu 128 Frames der obersten Ebene; größere Code-Mode-Ergebnisse bleiben über ihren kanonischen JSON-Fallback verfügbar.
Aktuelle Einschränkungen
- Folgeänderungen an einer vorhandenen Leinwand setzen einen bereits geöffneten verwalteten Editor voraus. Änderungen bleiben ungespeichert, bis der Benutzer dessen Aktion „Speichern“ ausführt.
- Die leichtgewichtige Leinwand der Web-SDK ist schreibgeschützt; die vollständige Bearbeitung nutzt die separate Oberfläche des verwalteten Editors. Auf DSH
0.1.1-rc.2verwendet das Plugin den in der Größe veränderbaren rechten Arbeitsbereich mit Vollbild-Option. - Die exakte Galerie umfasst Frames der obersten Ebene auf der aktiven Seite; die interaktive Leinwand bleibt der Weg, um inaktive Seiten und verschachtelte Knoten zu untersuchen.
- Render- und Snapshot-Caches benötigen weiterhin eine produktweite Aufbewahrungsrichtlinie.
Projektstruktur
dsh-openpencil/
├── src/ Plugin sources (TypeScript)
│ ├── index.ts Host plugin entry — Cordis service, tools, assets
│ ├── tool.ts / design-tools.ts / new-tool.ts Host-side design tools
│ ├── renderer.ts Exact OpenPencil renderer + Jian fallback
│ ├── editor-host.ts / editor-recovery.ts Managed editor lifecycle + drafts
│ ├── viewer-assets.ts Web SDK / WASM / CanvasKit asset staging
│ ├── mcp-client.ts OpenPencil MCP connection
│ └── client/ Browser client — React workbench, gallery, selection dock
├── lib/ Compiled output (published to npm)
├── scripts/ Build helpers — viewer asset sync, client build, host tests
├── tests/ Node test suites (client, host API, MCP, viewer assets)
├── docs/images/ Documentation screenshots
├── vendor/openpencil/ OpenPencil checkout (git submodule — viewer asset source)
├── cordis.patch.yml DSH bundle patch that mounts the plugin
├── tsconfig.json Host / Node TypeScript config
└── tsconfig.client.json Browser client TypeScript config
Build und Verifizieren
pnpm run sync:viewer-assets
pnpm run build
pnpm run test:viewer-assets
pnpm run test:client
pnpm run test:host /absolute/path/to/design.op 375 1091
Builds erfordern Node 24.11 oder neuer und pnpm. DSH-Host-/Client-Pakete sind Peer-Abhängigkeiten, die vom Ziel-DSH-Profil bereitgestellt werden. Build-Tools werden aus lokalen Dev-Abhängigkeiten, dem aktiven verlinkten DSH-Checkout oder einem installierten DSH-Quellbundle aufgelöst; mit DSH_SOURCE_ROOT kann ein Quell-Checkout explizit ausgewählt werden. Die Lockfile pinnt eigenständige öffentliche Build-Tools, wenn diese Umgebung separat bereitgestellt wird.
Für eine private DSH-Prerelease bewahren Sie die ausgegebene npm-Anmeldeinformation außerhalb dieses Repositorys auf (zum Beispiel in einer .npmrc auf Benutzer- oder temporärer Ebene) und führen Sie die angeforderte Version direkt aus:
pnpm dlx --package=@deepseek-ai/dsh@latest dsh web
Committen Sie niemals .npmrc, NPM_TOKEN oder kopierte Registry-Anmeldedaten. Dieses Repository ignoriert die lokale npm-Konfiguration standardmäßig.
test:host führt einen echten exakten Render durch, validiert PNG-IHDR-Geometrie und SHA-256, testet unveränderliche Bild-/Dokument-Capabilities über HTTP und prüft, ob Viewer-Assets gewährbar sind. Die erwarteten Abmessungen sind fixture-spezifisch.
Ökosystem
DSH OpenPencil ist das DeepSeek-Harness-Plugin für OpenPencil – das weltweit erste quelloffene, AI-native Vektor-Design-Tool – und Teil der ZSeven-W-Familie reiner Rust- und AI-nativer Tools.
| Projekt | Was es ist |
|---|---|
| OpenPencil | Das Design-Tool, das dieses Plugin steuert – Prompt-zu-Leinwand-Generierung, parallele Agent-Teams, Design-als-Code-.op-Dateien und ein integrierter MCP-Server. Die exakten Vorschauen, die interaktive Leinwand und der verwaltete Editor hier werden von OpenPencil selbst betrieben. |
| agent-rs | Eine Async-Runtime aus reinem Rust für die Auslieferung von LLM-Agenten – Multi-Provider, durchgängig tool-fähig, strukturierte Berechtigungen, echtes MCP, null unsafe. Treibt die integrierte Agent-Runtime von OpenPencil an. |
| jian | Ein UI-Framework aus reinem Rust mit GPU-Skia – Widgets, Layout, Ereignisse und Hot Reload in einem Stack. OpenPencils UI-Framework und die Quelle des Fallback-Renderers dieses Plugins. |
| Zode | Ein quelloffener, AI-nativer Coding-Assistent für Ihr Terminal – liest Ihren Code, führt Befehle aus und steuert OpenPencil über MCP. |
| noema | Ein Local-first-, nicht-vektorbasiertes Speichersystem für Coding-Agenten – dauerhafter Speicher als einsehbare Dateien, funktioniert über Laufzeiten hinweg. |
| openpencil-skill | Das LLM-Skill-Plugin, das KI-Agenten beibringt, wie sie mit op designen – ein Begleiter zu diesem DSH-Plugin. |
Weitere DSH-Plugins:
- DSH Android — ein Live-Android-Emulator oder USB-Gerät in der Konversation, vollständig über adb gesteuert
- DSH Crew — Arbeit aus Claude Code / Codex an DSH-Agenten delegieren
- DSH iOS — ein lebender iOS-Simulator — und ein iPhone per USB — in der Konversation
- DSH Noema — Langzeitgedächtnis für DSH
Mitwirken
Beiträge sind willkommen! Forken und klonen Sie das Repository, erstellen Sie einen Branch, führen Sie pnpm run build und die Test-Suites aus, committen Sie mit Conventional Commits und eröffnen Sie einen PR gegen main.
Community
Anerkannte Community: LINUX DO
Lizenz
MIT — Copyright (c) 2026 ZSeven-W
Komponenten von Drittanbietern sind in THIRD_PARTY_NOTICES.md aufgeführt.

