deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
English | 中文
A project-scoped file search plugin for the DeepSeek Harness Web GUI, inspired by PhpStorm's Search Everywhere.
[!IMPORTANT] DeepSeek Harness is currently a developer preview and may introduce compatibility-breaking changes. This plugin currently installs a small source patch that exposes a lifecycle-safe
keyboardClient Service to dynamic Cordis packages.
Shift twice.Esc or by clicking the backdrop.Clone this repository, then pass your DeepSeek Harness checkout to the installer:
git clone https://github.com/codezha/dsh-double-shift-file-search.git
cd dsh-double-shift-file-search
node scripts/install.mjs /path/to/deepseek-harness
Alternatively, use an environment variable:
DSH_CHECKOUT=/path/to/deepseek-harness npm run install:dsh
The installer:
index.ts and api-catalog.ts under .install-backup/;keyboard Client Service;Running the installer repeatedly against the same compatible checkout is idempotent.
Run these commands in the DeepSeek Harness checkout:
corepack pnpm --filter @deepseek-ai/dsh-cordis-client-runner run bundle
corepack pnpm --filter @deepseek-ai/dsh-web-frontend run build
Then refresh the existing DSH GUI, normally at http://127.0.0.1:3080. Do not start a separate Vite server as a replacement for the running DSH GUI.
If pnpm run dev:web is already running from that same checkout, it may rebuild the Client plugin bundle automatically; otherwise use the explicit build commands above.
The files under plugin/ are plain JavaScript function bodies accepted by cordis_define; they are not importable JavaScript modules.
From a DSH Session using the Cordis/creation preset, ask the agent to:
plugin/manifest.json;plugin/host.body.js as code.host;plugin/client.body.js as code.client;cordis_define with plugin: { kind: "new", idPrefix: "fseek" };cordis_run with the returned pluginId and packageId.Example prompt:
Read plugin/manifest.json, plugin/host.body.js, and plugin/client.body.js from this repository.
Define a new dynamic Cordis plugin using idPrefix "fseek", the manifest name/purpose,
and the complete Host/Client bodies. Then run the returned Package.
A Client package may require approval in the DSH GUI before it runs. Dynamic definitions live only in the current DSH process and must be defined again after that process restarts. Never hard-code generated IDs such as fseek-1 or pkg-1.
To update an existing runtime instance, define a new immutable Package for the same Plugin:
pluginId;cordis_define with plugin: { kind: "existing", pluginId } and the latest complete bodies;cordis_run for the returned Package with mode: "update"..git, node_modules, vendor, dist, build, coverage, .next, .idea, and .cache.Use the same checkout path used during installation:
node scripts/uninstall.mjs /path/to/deepseek-harness
Or:
DSH_CHECKOUT=/path/to/deepseek-harness npm run uninstall:dsh
The uninstaller restores only the backups created by this repository. If those backups are missing, it refuses to guess how to modify the DSH checkout. Rebuild the Client runner and Web shell afterward, then refresh the existing GUI.
A running dynamic plugin can be stopped with cordis_stop or removed from the current process with cordis_undefine.
plugin/host.body.js — secure project search and preview Host half.plugin/client.body.js — Double-Shift shortcut, overlay, results, highlighting, preview, and native open action.plugin/manifest.json — plugin metadata and service requirements.dsh-patch/keyboard.ts — lifecycle-safe page-wide keyboard Client Service.scripts/install.mjs — installs the keyboard capability into a DSH checkout.scripts/uninstall.mjs — restores the install-time backups.scripts/check-plugin-bodies.mjs — syntax-checks the dynamic function bodies.Run focused syntax checks with:
npm run check
This repository uses the dsh-plugin GitHub topic recommended by DeepSeek Harness. Repository topics are metadata configured on GitHub; they are not npm keywords or Git tags.
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。