439436269-ctrl/dsh-preview-snip ↗★ 0

dsh-preview-snip

Circle a region or quote selected text in an image/PDF preview and insert it into the DSH composer. 适合需要从PDF或图片预览中截取区域、添加批注并快速插入输入框的用户。

パッケージ
dsh-preview-snip
互換性
未検証
Cordis ピア範囲
^4.0.1
バージョン
0.3.0
ライセンス
MIT
最終更新
2026/10/24

インストール

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:439436269-ctrl/dsh-preview-snip

ドキュメント

README 全文を読む ↗

dsh-preview-snip

Snip, annotate or quote any document preview in DSH and put the result into the composer.

Quick snip and composer attachment

Annotation editor

What it does

The plugin adds three actions to the right-Sidebar document-preview header:

  • 圈选 / Snip — drag a rectangle; the selection becomes a PNG attachment in the composer. The quick path only adds the image; it does not fill in a question.
  • 全能圈选 / Annotate — drag a rectangle, then open an editor and add a box, circle/ellipse, arrow or text, choose a color, undo/clear, and insert the annotated PNG.
  • 引用选中 / Quote selection — quote the current text selection into the composer as a Markdown blockquote.

Nothing is sent automatically: the attachment and text land in the composer, and you finish the question and press send.

Works on every preview type

  • Pixels: , current frame and `` — images, PDF pages, video frames and WebGL viewports (the first-party Blender/STL viewers keep their drawing buffer).
  • DOM screenshot: text, Markdown, code and HTML previews are serialized to an SVG foreignObject and rasterized in the browser; the current pane stylesheet is embedded, so the screenshot keeps the preview's appearance.
  • Quote: any preview whose text is selectable.

Annotation editor

After a full snip you get a canvas editor:

  • box, ellipse, arrow, text;
  • red / amber / blue / green;
  • undo, clear, cancel, insert;
  • text is entered inline (not a browser prompt);
  • the inserted image is the annotated canvas, not the original crop.

Sidebar browser (desktop)

When a webpage is open in DSH's right-side browser tab, a small floating 圈选 / 全能圈选 group appears over the webview. It captures through Electron's webview.capturePage() and then uses the same crop, annotation and composer-attachment path.

  • This is the browser tab (sidebar.right.pane.tab key browser), not a document preview.
  • In browser/web mode the page is a cross-origin iframe, so the group does not appear; a browser extension would be needed there.

Install

dsh plugin --profile 
 add dsh-preview-snip

Open any file in the right Sidebar. The three buttons appear as one segmented group in the preview header.

How it works

  • Uses sidebar.right.tab.document.actions for file previews and a conversation.session.header.utilities bridge for the desktop sidebar browser; no Host routes and no external screenshot library.
  • Pixel crops map through object-fit: contain for images/video, and use the canvas bitmap for PDF/WebGL.
  • Sidebar-browser capture uses webview.capturePage(); the selected viewport rectangle is cropped from the returned NativeImage.
  • DOM previews are cloned, the pane's CSS rules are embedded, and the clone is drawn through an SVG foreignObject.
  • Creates the PNG in the browser and hands it to conversation.createDrafts / inputActions.addAttachments, the same draft attachment path as a pasted image.
  • Quoting uses the browser text selection and inputActions.setDraft.

Limits

  • DOM screenshots skip cross-origin stylesheets and cross-origin background images; text and layout still render.
  • Video captures the current frame; it does not record.
  • WebGL capture needs the viewer to keep its drawing buffer; the first-party Blender and STL viewers do. A third-party WebGL preview that clears its buffer may capture blank.
  • Cross-origin images that taint the canvas fail with a notice.
  • Sidebar-browser capture is desktop-only; it needs a `` with capturePage. Browser/iframe mode cannot capture a cross-origin page.
  • The editor is client-side only; the original file is never modified.

Compatibility

  • DSH 0.2.0-rc.2 (and 0.2.1-rc.2).
  • Client-only plugin; no Host configuration.