|
### 🖼️ Точные превью нескольких кадров
Установленный headless-экспортёр OpenPencil формирует точные превью: первый верхнеуровневый кадр — как крупный PNG, пригодный для воспроизведения, плюс горизонтально прокручиваемая лента миниатюр с выбором по клику и навигацией «предыдущий/следующий» для документов с несколькими кадрами.
|
### 🗺️ Интерактивный холст
«Открыть интерактивный холст» лениво монтирует доступный только для чтения Web SDK OpenPencil с панорамированием, масштабированием и подгонкой под размер — изучайте любую страницу, вложенный узел или неактивную страницу, не покидая диалог.
|
|
### ✏️ Управляемый редактор
С параметром `editable: true` действие «редактировать» открывает управляемый редактор OpenPencil — выделение, слои, свойства, инструменты рисования, отмена/повтор и явную семантику сохранения — в изменяемой по размеру правой боковой рабочей области с опцией полноэкранного режима.
|
### 🤖 Дизайн-инструменты, созданные для агентов
Пять инструментов прямой работы с холстом и шесть инструментов `openpencil_pipeline_*` позволяют агенту создавать, проверять, дорабатывать, публиковать, изменять и читать настоящий холст через управляемые среды OpenPencil.
|
|
### 🔐 Гранты на основе возможностей
Гранты на изображения и документы — это подписанные возможности, привязанные к хешу. Метаданные браузера никогда не раскрывают произвольный путь на хосте, а подписанные возможности превью и редактора никогда не попадают в канонический результат инструмента или контекст модели.
|
### ⚡ Транзакционная безопасность
Документ полного пайплайна остаётся приватным неопубликованным черновиком до прохождения всех нативных проверок качества и проверок DSH. Публикация не перезаписывает существующий путь, а отмена или неудачный батч не оставляют пустой целевой файл.
|
|
### 🌍 Соответствует стилю DSH
Карточка инструмента и управляемый редактор следуют китайской/английской локали DSH и светлой/тёмной теме без перезагрузки сессии редактирования.
|
### 🎯 Один полный рабочий процесс
«Требование → приватный live canvas в боковой панели → два семантических батча с точным PNG для пользователя → детерминированные нативные/DSH-гейты качества → атомарная публикация» — полный цикл внутри DSH.
|
## Установка в DSH
DSH — отдельный пакет. Установите его один раз, если его ещё нет:
```sh
npm install -g @deepseek-ai/dsh@latest
```
Затем добавьте плагин в профиль и запустите веб-приложение:
```sh
dsh plugin --profile web add @zseven-w/dsh-openpencil@next
dsh web
```
Для локальной разработки соберите этот checkout, свяжите его абсолютный путь с Web-профилем, а затем полностью перезапустите DSH:
```sh
pnpm run build
dsh plugin --profile web add link:/absolute/path/to/dsh-openpencil
dsh web
```
Зависимость `link:` делает последующие пересборки видимыми прямо из этого checkout. Однако после замены зависимости профиля DSH необходимо полностью перезапустить, поскольку поставляемый Web-профиль по умолчанию не выполняет горячую перезагрузку хост-бандлов.
Не хотите ставить DSH глобально? Выполните те же два шага через `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
```
> Плагин OpenPencil публичный и не требует npm-токена. Если сам пререлиз DSH требует аутентификации в реестре, храните эти учётные данные в пользовательском или временном npm-конфиге вне этого чекаута. Этот репозиторий намеренно не содержит учётных данных реестра.
## Дизайн-инструменты
Необязательный выбор: `openpencil_style_plan` → `openpencil_style_confirm` → `openpencil_pipeline_begin` с исходным brief и `style_selection`. Каталог и точный выбор доступны без рекомендаций; провайдер по умолчанию выключен. Передача поддерживает script, но не app-agent и commerce. Обычная генерация app-agent остаётся доступной.
| Инструмент | Что он делает |
| --- | --- |
| `openpencil_new` | Совместимый быстрый путь для простых задач: выполняет один транзакционный QuickJS-скрипт `batch_design`, публикует только при отсутствии цели и возвращает редактируемое представление. Для промышленного дизайна предпочтителен полный пайплайн. |
| `openpencil_pipeline_begin` | Запускает принадлежащий сессии приватный черновик с единственным root, немедленно открывает тот же live canvas в боковой панели и оставляет целевой `.op` неопубликованным. |
| `openpencil_pipeline_context` | Загружает одну ограниченную деталь guideline, style, theme или UI kit, только если её действительно нет в контракте begin; это не цикл обновления при запуске. |
| `openpencil_pipeline_batch` | Выполняет не более двух прямых QuickJS-скриптов генерации. Каждая успешная транзакция лишь пытается показать пользователю точный PNG; после возврата инструмента сразу следуйте `next`. |
| `openpencil_pipeline_inspect` | Предоставляет ручную диагностику только по явному запросу пользователя; обычная генерация не использует его как этап превью или просмотра изображения моделью. |
| `openpencil_pipeline_finish` | Выполняет детерминированные нативные и DSH-гейты, рендерит точный PNG после финализации и атомарно публикует через `createIfAbsent`. Ровно один U-only ремонт и один последний finish разрешены только при `needs_correction`, `canContinue: true`, полном непустом `repairTargets` и `omitted: 0`; любой другой неопубликованный результат терминален. |
| `openpencil_pipeline_abort` | Удаляет неопубликованный черновик, не создавая целевой файл. |
| `openpencil_create` | Применяет транзакционную программу `batch_design`, чтобы сгенерировать или перестроить узлы на существующем живом холсте. |
| `openpencil_edit` | Изменяет указанный узел или единственный узел, выбранный пользователем. |
| `openpencil_render` | Создаёт неизменяемый снапшот `.op` с адресацией по содержимому и рендерит каждый верхнеуровневый кадр на активной странице — с опциональными `scale` и `editable`. |
| `openpencil_selection` | Считывает точные узлы, выбранные на живом холсте редактора. |
## Рабочий процесс агента в дизайне
Для обычной генерации используйте фиксированный короткий путь: `openpencil_pipeline_begin` → два прямых QuickJS-вызова `openpencil_pipeline_batch` → один `openpencil_pipeline_finish`. Begin создаёт единственный root и немедленно открывает приватный live canvas в боковой панели; запрошенный путь в рабочей области не существует до успешной публикации. После каждого успешного begin или батча немедленно выполняйте следующий обязательный вызов без повествования, планирования, сравнения, инспекции или посторонних инструментов. По умолчанию весь дизайн использует ровно одно изображение; каждый Hero/Product/Art/Media frame содержит ровно один основной визуал, никогда одновременно изображение и placeholder-иконку.
Оба успешных батча пытаются показать пользователю точное PNG-превью. После возврата инструмента сразу следуйте `next`. Если `next` сообщает `previewUnavailable`, скрипт уже закоммичен в live canvas: не запускайте батч повторно и не вызывайте `openpencil_pipeline_inspect` или `read_image`. `openpencil_pipeline_inspect` предназначен только для диагностики, явно запрошенной пользователем.
Finish выполняет нативные финализацию OpenPencil, lint, проверки контраста и макета, а также детерминированные гейты качества DSH; затем в том же здоровом вызове рендерит точный финальный PNG и атомарно публикует цель. Ремонт разрешён только если результат одновременно содержит `stage: "needs_correction"`, `canContinue: true`, полный непустой `repairTargets` с `omitted: 0`, а каждая цель — `operation: "U"`, точный непустой `nodeId` и непустой `patch`. Примените все цели вместе ровно в одном U-only батче, затем без пояснений вызовите finish ровно один последний раз. Любой другой неопубликованный результат, ошибка или `canContinue: false` терминальны: сообщите один раз и не повторяйте, не инспектируйте, не читайте image/context, не вызывайте abort и не создавайте заменяющий draft. При провале гейта или вызове `openpencil_pipeline_abort` цель не создаётся. Точный финальный PNG и live editor в published result уже авторитетны: верните результат и немедленно завершите работу. Боковая панель автоматически открывается только когда свободна, а **Редактировать холст** остаётся для явного переключения.
В пределах того же работающего сервиса DSH после смены браузера или перезагрузки строго разобранную долговечную публикацию от `openpencil_new` или `openpencil_pipeline_finish` можно восстановить как точный PNG с явным действием **Редактировать холст**. Историческая карточка никогда не открывает боковую панель автоматически — пользователь должен нажать это действие. Обычный исторический `openpencil_render` остаётся только для чтения, а соединения не через loopback никогда не получают редакторский грант.
Встроенный skill `openpencil-design` остаётся руководством по скриптингу и качеству, а управляемая среда не зависит от настольного бинарного файла. `openpencil_new` сохраняется как совместимый быстрый путь с одним батчем, но для генерации промышленного качества следует выбирать полный пайплайн.
Используйте `openpencil_create` и `openpencil_edit` только для существующего живого холста. Их изменения остаются несохранёнными до действия «Сохранить» в редакторе.
## Ассеты веб-просмотрщика
DSH обслуживает только `client.js` для клиентского плагина, поэтому ESM SDK OpenPencil, его WASM и CanvasKit подготавливаются как явные ассеты с тем же источником:
```sh
pnpm run sync:viewer-assets
```
Команда синхронизации предпочитает соседний чекаут `../openpencil` (локальная разработка) и переключается на вендорный субмодуль `vendor/openpencil` (CI и свежие клоны). Переопределите его с помощью `OPENPENCIL_ROOT` или `--openpencil-root`. Полный каталог предсобранных ассетов можно выбрать с помощью `DSHPLUGIN_OPENPENCIL_VIEWER_SOURCE`. Поиск во время выполнения можно переопределить с помощью `DSHPLUGIN_OPENPENCIL_VIEWER_ASSET_DIR`.
Ассеты просмотрщика загружаются лениво только после того, как пользователь откроет холст. Если они отсутствуют или невалидны, превью PNG остаётся доступным, а кнопка холста не предлагается.
## Управляемый редактор
Редактируемые сессии используют управляемый веб-хост OpenPencil — ту же архитектуру, что и `op-vscode`. Плагин запускает хост только после авторизованного действия пользователя, держит токен демона в памяти, проверяет источник и происхождение iframe и закрывает процесс при завершении сессии редактирования. Поверхность редактора выбирается постепенно: нативные детали инструмента, когда хост объявляет такой шов, в противном случае — правая боковая рабочая область плагина с изменением размера и полноэкранным управлением.
При запуске используется listening handshake, безопасный для медленных монтирований: проверки готовности начинаются только после того, как встроенный хост сообщит связанный адрес. Установка настольного OpenPencil не требуется.
Опубликованная версия поддерживает шесть нативных целей: `darwin-arm64`, `darwin-x64`, `linux-arm64`, `linux-x64`, `win32-arm64` и `win32-x64`; пакетам Linux требуется glibc. Корневой пакет выбирает подходящий платформенный пакет по ОС и CPU через `optionalDependencies` с точными версиями (например, `@zseven-w/dsh-openpencil-darwin-arm64`). Этот пакет поставляет совместимые друг с другом `op-host-web-server`, веб-бандл редактора и CanvasKit как единый runtime. Поэтому управляемый редактор не зависит от `/Applications/OpenPencil.app`, `openpencil-desktop` в `PATH` или checkout исходного кода OpenPencil.
Если DSH перезагружает или выгружает плагин, пока холст «грязный», хост сохраняет непрозрачный локальный черновик восстановления на срок до семи дней. При повторном открытии того же источника плагин спрашивает, прежде чем восстановить его на живом холсте; восстановление никогда не перезаписывает файл `.op`, пока пользователь явно не сохранит.
Официальные пакеты для всех шести платформ получают bootstrap-эндпоинты совместной работы для Китая и глобального региона во время защищённой release-сборки; внедрённые значения проверяются до публикации. Локальная самостоятельная сборка без такого внедрения может переопределить bootstrap до запуска DSH через `OPENPENCIL_COLLAB_BOOTSTRAP_URL=https://