dsh-canvas-tsx-sidebar

uiinstall failsnpmMIT

A dsh-better-sidebar tab that statically parses Qoder Canvas `*.canvas.tsx` files into structured pages in the DSH right sidebar (the source is never executed: no eval, no bundler, no sandbox iframe), with a file-viewer takeover for `.tsx` and a bundled Skill for authoring the format.

下载量 / Downloads
6,009
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

Install

dsh plugin --profile web add dsh-canvas-tsx-sidebar

Sandbox test results

StageResult
1 install✗
2 list—
3 mount—
4 boot—
First error
dsh: initialized profile web at /home/node/.dsh/profiles/web

Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).

README

dsh-canvas-tsx-sidebar

[简体中文](README.md) | [Français](README.fr.md) | [Deutsch](README.de.md) | [Italiano](README.it.md) | [Русский](README.ru.md) | [Español](README.es.md)

Веб-плагин DSH (DeepSeek Harness) — плагин-потребитель dsh-better-sidebar.

Статически разбирает файлы *.canvas.tsx из Qoder Canvas в рабочей области в структурированные страницы и отображает их в правой боковой панели DSH.

Полностью статический конвейер: исходники canvas не выполняются. Без eval, без new Function, без бандлера, без sandbox-iframe.
Разбор выполняется на стороне браузера собственным легковесным рекурсивным парсером (ноль зависимостей парсера).

В репозитории также есть Skill: skills/writing-qoder-canvas/, который учит LLM писать этот формат. См. [Интеграция Skill](#интеграция-skill-научить-llm-писать-canvastsx).

Диапазон совместимости: полное перечисление единой линией — engines.dsh — точное перечисление из 16 позиций (та же строка в package.json engines, peer @deepseek-ai/dsh-client-locale и dsh.plugin.json; без интервалов, без caret):

0.1.0-rc.2 || 0.1.0-rc.3 || 0.1.0-rc.6 || 0.1.0-rc.7 || 0.1.0-rc.8 || 0.1.1-rc.1 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-rc.1 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5

0.7.2 (latest / dsh-0.2.1-rc.2) и выше устанавливается на любой из перечисленных хостов; неперечисленные версии хоста (в т.ч. 0.2.1 stable и линия 0.2.2) вне заявленной области — при выпуске stable-версии перечисление нужно расширить и перевыпустить; не используйте latest вслепую на необъявленных хостах (engines не удовлетворены → тихая блокировка стартовой проверкой). Исторические dist-tag старых линий (все = 0.6.0, 15 позиций до 0.2.0-rc.2):

DSH host · plugin version · install dist-tag

any in the 20-term enum (incl. 0.2.1-rc.1 and rc.2) · 0.7.2 (latest) · latest or dsh-0.2.1-rc.1 / dsh-0.2.1-rc.2

0.2.0-rc.1/rc.2 · 0.6.0 · dsh-0.2.0

0.1.7-rc.1/rc.2 · 0.6.0 · dsh-0.1.7

0.1.5 line · 0.6.0 · dsh-0.1.5

0.1.2-rc.1 · 0.6.0 · dsh-0.1.2

(по состоянию на 2026-10-17; старые линии обслуживаются ветками compat/0.1.7 / замороженной compat/0.1.5 и archive/release/0.1.2.)


Предварительные требования

  • DSH dsh web нормально запускается
  • Установлен dsh-better-sidebar (>=0.19.1)

Без better-sidebar плагин полностью пассивен: обе регистрации молча пропускаются и не затрагивают остальные функции DSH.

Установка

Способ A (рекомендуется, официальный CLI)

# hosts inside the 20-term enum (incl. 0.2.1-rc.1 and rc.2): latest works
dsh plugin --profile <profile> add dsh-canvas-tsx-sidebar@latest          # 0.7.2, 17-term full enumeration
dsh plugin --profile <profile> add dsh-canvas-tsx-sidebar@dsh-0.2.1-rc.1  # same, explicit line tag
# alt: local tarball (this line: dsh-canvas-tsx-sidebar-0.7.2.tgz)
dsh plugin --profile <profile> add <dsh-canvas-tsx-sidebar-0.7.2.tgz>
`dsh` добавляет этот пакет в `dsh.profile.bundles`; при запуске входящий в пакет `cordis.patch.yml` вставляет запись загрузчика, и клиентский бандл регистрируется и доставляется согласно `entry.name`.

### Способ B (вручную, альтернативный)

1. Скопировать пакет в `~/.dsh/profiles/<profile>/node_modules/dsh-canvas-tsx-sidebar`
   (либо добавить `"dsh-canvas-tsx-sidebar": "link:<путь-к-плагину>"` в `dependencies` файла `package.json` профиля);
2. дописать следующую строку в `~/.dsh/profiles/<profile>/cordis.patch.yml`:
  • insert:
  • id: dsh-canvas-tsx-sidebar

name: dsh-canvas-tsx-sidebar

3. выполнить `pnpm install` в каталоге профиля.

> ⚠️ **Выберите способ A или способ B — не регистрируйте дважды.**

### Активация

4. **Перезапустите `dsh web`** — добавление бандла требует перезагрузки на стороне хоста (hot reload работает только для изменений клиента **уже подключённого** плагина);
5. жёсткое обновление страницы в браузере (Ctrl+Shift+R).

Состояние подключения можно перепроверить через `pwsh -NoProfile -File ./scripts/mount-check.ps1`.

## Использование

Две точки входа:

| Точка входа | Как вызывается | Поведение |
|---|---|---|
| **Просмотрщик файлов** (перехват) | Открыть любой `.tsx` в дереве файлов | `.canvas.tsx` → структурированная страница + переключатель `Просмотр/Код`; остальные `.tsx` → просмотр исходника |
| **Вкладка** | меню `+` правой панели → **Отчёт Canvas** | ввести путь вручную и посмотреть, не открывая файл в редакторе |

Просмотрщик файлов можно отключить в настройках карточки Side; после отключения такие файлы возвращаются к встроенному просмотрщику кода.

Открытие **одного** файла рендерит **именно этот** файл — плагин не сканирует рабочую область.

### Почему просмотрщик файлов обязан перехватывать все .tsx

`exts: ['tsx']` — единственный работоспособный способ перехвата; цена в том, что перехватываются и `.tsx` вне canvas. Все доказательства взяты из исходников better-sidebar и практических проверок в экосистеме:

| # | Ограничение | Доказательство |
|---|---|---|
| L1 | `extOf()` берёт только последний сегмент расширения → `extOf('a.canvas.tsx') === 'tsx'` | `src/client/paths.ts:80-85` |
| L2 | `exts: ['tsx']` перехватывает **все** `.tsx` рабочей области, а priority 0 перекрывает CodeMirror встроенного `code` (-100) | `service.ts:847-875` |
| L3 | `detect` вызывается только при доступных байтах `head`, а `head` приходит только из бинарного `fs.read` — текстовый `.tsx` до этой ветки никогда не доходит | `service.ts:860` |
| L4 | после перехвата дескриптором `component` обязан отрисоваться, **API делегирования/отката нет** | `EditorHost.tsx:349,486` |
| L5 | экосистемный плагин `dsh-code-nav` уже содержит `tsx` в своём `LANG_EXT` и перехватывает с `priority: 10` | `dsh-code-nav/src/lang-registry.js` |

→ Определение `.canvas.tsx` 

…(truncated)

Rendered from the README published on npm. Formatted only, not edited.

Versions

Published on npm::19,最后更新 2026-11-06

Links

GitHub · Homepage · npm

Same category