deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:wang-junjian/dsh-artifact-viewer
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
中文 | English
A DeepSeek Harness bundle plugin that adds an artifact sidebar and bookmarking
for agent conversations. It does not modify the deepseek-harness source
tree; it is built as a standalone plugin and loaded into the web profile.
shell.overlay)
listing artifacts for the current session.~/.dsh/storages/artifact-viewer/bookmarks.json by the host half.conversation.message.images) with one that adds a bookmark star overlay..fileLink buttons, the turn-tail "产物" chips from ui-deliverables,
inline-code file mentions in the closing prose, markdown links such as
[sample.html](/Users/.../sample.html), and inline <code> paths such as
/Users/.../cat.svg, so clicking a generated file opens it inside the
artifact panel instead of the host default application.Install the plugin into a DeepSeek Harness profile. The plugin does not modify
the deepseek-harness repository itself.
# From a local checkout
dsh plugin --profile web add ~/GitHub/wang-junjian/dsh-artifact-viewer
# Or from a registry, once published
dsh plugin --profile web add @wangjunjian/dsh-artifact-viewer
The bundle is appended to dsh.profile.bundles automatically.
You can override the plugin config in your profile's cordis.patch.yml:
- id: artifact-viewer
config:
enabled: true
The @deepseek-ai/dsh-* dependencies are regular registry packages (currently
release candidates), so no local checkout of deepseek-harness is needed.
pnpm install
pnpm run typecheck
pnpm run build
pnpm run test
pnpm run lint
src/
index.ts # Node/host half: bookmarks + preview RPC
client/
index.ts # Browser half: slot registrations
store.ts # Panel UI state store
locales.ts # Chinese/English copy
current-session.ts # Observable source for the current session snapshot
bookmarks.ts # Browser bookmark controller
artifacts.ts # Artifact detection from ConversationSnapshot
display.ts # Display/bookmark conversion helpers
ArtifactToggle.tsx # sidebar.footer.action entry
ArtifactPanel.tsx # shell.overlay panel
ArtifactList.tsx # Artifact list inside the panel
ArtifactPreview.tsx # Preview pane for selected artifact
ArtifactMessageImages.tsx # conversation.message.images replacement
| File kind | Rendering |
|---|---|
| HTML, HTM | Sandboxed iframe |
| Markdown, MD | Markdown text (Mermaid fences rendered as SVG diagrams) |
| SVG, PNG, JPG, JPEG, WEBP, GIF | Image |
| JSON | Syntax-highlighted code (via CodeBlock) |
| Source code (py, js, ts, jsx, tsx, css, scss, less, rs, go, c, cpp, cc, java, kt, swift, rb, php, sh, sql, xml, yaml, yml, toml, dockerfile, txt, log) | Syntax-highlighted code |
| Plain text / unknown | Pre-formatted text |
| Video (mp4, webm, mov) | Listed; no inline preview |
Bookmarks are stored in the DeepSeek Harness home under
~/.dsh/storages/artifact-viewer/bookmarks.json. The file groups bookmarks by
canonical project path, so multiple projects can share one store while staying
isolated:
{
"version": 1,
"projects": {
"/workspace/project-a": [
{
"id": "file:/workspace/foo.ts:42",
"kind": "file",
"name": "foo.ts",
"path": "/workspace/foo.ts",
"seq": 42,
"sessionId": "<session-id>",
"createdAt": 1234567890
}
]
}
}
The DSH home directory is resolved via @deepseek-ai/dsh-home-paths, which
honors the $DSH_HOME environment variable and falls back to ~/.dsh. Because
the store lives in the Harness home rather than inside any project directory,
switching between browsers (Chrome, Safari, etc.) for the same project reads the
same bookmark file, provided both browsers resolve the workspace to the same
canonical path. The host normalizes projectPath with fs.realpath before it
is used as a lookup key, so macOS symbolic-link differences such as
/var/folders vs /private/var/folders do not split bookmarks across browsers.
Versions before this change stored bookmarks at
<project-root>/.dsh/bookmarks.json. Those files are no longer read; if you
have existing bookmarks in the old location, move them into the new store under
~/.dsh/storages/artifact-viewer/bookmarks.json and wrap them under the
project's canonical path key, or re-create the bookmarks in the UI.
The host half registers a loopback-only channel at /artifact-viewer:
bookmarks/read — returns the bookmark array.bookmarks/write — writes the bookmark array.file/preview — returns UTF-8 file content or base64-encoded binary data
(for images/SVG/HTML) up to 512 KiB. Non-UTF-8 text files are rejected with
an error so that binary files are not rendered as garbled text.shell.overlay; a native right-column slot
would be preferable once dsh exposes one.sessionId field was added cannot be navigated
back to their source session.CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。