deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:JeremyGuo/dsh-slide
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
A per-Conversation visual slide editor for the DeepSeek Harness Web UI. A setting switches the current Conversation from the built-in chat surface to a PowerPoint-like canvas while preserving the same Session and AI input channel.

cwd; lexical traversal and symlink escapes are rejected.Select one or more slide objects to give the annotation agent a precise focus. The selection is context rather than a permission boundary, so the agent can still make the broader deck changes needed to fulfill the request.

Install the published plugin:
dsh plugin --profile web add dsh-slide@dsh-plugin
dsh web
Or build this checkout:
pnpm install
pnpm run build
dsh plugin --profile web add /absolute/path/to/dsh-slide
dsh web
The setting is scoped to the Conversation that is currently open; it is not a global replacement for every chat.
To return to the standard chat interface, open the same setting while that Conversation is active and turn it off. Enabling or disabling Slide Editor for one Conversation does not affect other Conversations.
Each Conversation defaults to:
.dsh-slide/<session-id>.slides.json
Because the default path contains the Session id, different Sessions in the same Workspace do not share a file by default. A user or tool can deliberately associate multiple Sessions with the same existing *.slides.json file; those Sessions then share that file and concurrent saves may overwrite each other.
Open the floating File menu to manage the current deck. New and Save As show a Workspace folder picker and generate a readable, unused *.slides.json name automatically; no path entry is required. Load uses the same picker to choose an existing deck, Save writes immediately, and Close saves before returning the current Conversation to normal chat. Opening a deck from the Files panel has the same association behavior as Load. Documents contain the slide model and annotation review state. Global settings contain enabled Session ids, shared knowledge prompt, knowledge paths, and per-Session document paths.
The top-level Conversation receives an open_slide_deck tool. It opens an existing Workspace-relative *.slides.json file and switches that Conversation into Slide Editor mode. The file must already exist and pass document validation; the agent may create it first with a filesystem tool and then call open_slide_deck.
Subagents cannot use open_slide_deck. Calls from a Session carrying parentSession or origin: "subagent" are rejected. Closing Slide Editor disables the mode for the current Session but retains its last document association.
Each annotation owns an isolated message thread and one focus: selected elements, selected pages, or the whole deck. Every turn starts a foreground one-shot spawn subagent under the current Conversation with that annotation's history, focused content, full deck JSON, shared guidance, and knowledge file paths. Selection guides the task but never limits authority: every annotation may update any object or page and add pages. The host streams visible text deltas and tool start/end events as NDJSON while withholding reasoning deltas. The final strict JSON response contains a short review message and slide operations; the browser validates and applies accepted operations immediately, updating both the canvas and live thumbnails. One-shot runs do not wake the parent Conversation, and annotations can progress independently.
An image is a positioned element. Use workspace:<relative-path> for a Workspace file, or provide a data or HTTPS URL:
All element coordinates and visual lengths, including x, y, width, height, fontSize, and radius, use the fixed 1280 × 720 slide design space. The editor scales them together when the rendered page or thumbnail changes size.
{
"kind": "image",
"x": 80,
"y": 120,
"width": 500,
"height": 320,
"src": "workspace:images/photo.png",
"fit": "cover",
"alt": "Product photo"
}
Arbitrary polygons and curves use one geometry element with standard SVG path data. The path uses a local viewBox and is scaled into the outer element rectangle:
{
"kind": "geometry",
"x": 600,
"y": 180,
"width": 400,
"height": 240,
"viewBoxWidth": 100,
"viewBoxHeight": 100,
"path": "M 5 90 L 50 5 L 95 90 Z",
"fill": "#dbeafe",
"stroke": "#2563eb",
"strokeWidth": 2
}
Use M/L/H/V/Z for polygons, C/S for cubic Bézier curves, Q/T for quadratic Bézier curves, and A for elliptical arcs. Open curves normally use "fill":"none".
Subagents learn this syntax through the operation protocol appended to every annotation prompt. The prompt includes the supported add-image, add-geometry, and update-element JSON examples, SVG command guidance, the complete current deck JSON, the selected focus, annotation history, shared prompt, and knowledge paths. Model output is decoded and validated before any operation is applied.
open_slide_deck tool.conversation slot registration at priority -100 only while the current Session is enabled.window.__ModuleLoader__, so installing the package does not rebuild the DSH frontend.*.slides.json; HTML export is included, while editable PPTX export is not.CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。