deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
Codex-style workspace file references for the DeepSeek Harness web GUI: type @ in the composer to browse the current workspace's files and insert the file's workspace-relative path as plain text, prefixed with a workspace anchor (工作区文件:).
@ → file.md → send
The agent receives a relative path anchored to the workspace (工作区文件:file.md), so it resolves the file inside the session workspace instead of searching the whole disk by name — no absolute paths, no truncated chips.
DSH's composer reference chips occupy a single character cell, so any label longer than 1–2 characters is visually truncated (the full label only appears on hover). For file names that defeats the purpose. Inserting the path as plain text means:
工作区文件:sub/file.md for nested files), which steers it to the workspace instead of a disk-wide search.@ opens a file group at the top of the existing trigger menu (before subagents/plugins).node_modules, .git, and dotfiles are excluded.工作区文件:relative/path); falls back to the bare file name when the file is outside the workspace root.dsh web).127.0.0.1 — the default). See Security.Add the package to the profile and enable it, then restart dsh web.
# from your workspace (the path is anchored to the invoking directory)
dsh plugin --profile web add github:<your-account>/dsh-file-ref
# or from a local checkout
dsh plugin --profile web add /path/to/dsh-file-ref
Append a row to $DSH_HOME/profiles/web/cordis.patch.yml:
- insert:
- id: file-ref
name: 'dsh-file-ref'
inject: [webServer]
Restart the server:
dsh web
While developing the bundle itself, the client half hot-reloads: the
client-hmrchain polls served bundles every 500 ms and reloads the plugin in the browser without a server restart. New rows (the cordis patch above) still need a restart because the boot graph is composed at startup.
Two halves, one package (a dsh.client dual-face plugin):
lib/index.js) registers one exact HTTP route on the web
server: GET /dsh-file-ref/list?path=<absolute-directory> → { cwd, files: [{ name, path }] }. The walk uses node:fs/promises with a bounded
recursive scan.lib/client.js) registers an @ input-trigger source
(file-ref, order -1 so it lists first). Candidates call the route with
the session's cwd (from the sessions store). Picking a file inserts the
workspace-relative path prefixed with a workspace anchor plus a trailing
space — the anchor makes the model resolve the file inside the workspace
rather than searching the whole disk by name.The browser never needs a filesystem API; the host never exposes one beyond the single listing route.
The client bundle is a plain classic script that registers itself via
window.__ModuleLoader__.load({ id, factory }) (the format the DSH module
loader serves under /plugins/<id>/client.js). No build step is required.
Run the host smoke test (no cordis needed):
node smoke-test.mjs # lists this package's own directory
node smoke-test.mjs /path/to/dir # or any absolute directory
--host 0.0.0.0.400); unreadable directories are skipped
silently.@ menu group title renders the raw source name (file-ref) because
the trigger menu's locale namespace is owned by ui-input-trigger.MIT
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。