dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
Option+A npm script palette for DeepSeek Harness: search package.json scripts and run one in a new terminal.
Press Option+A in any DeepSeek Harness session to open a searchable list of the active repository's package.json scripts. Pick one with the keyboard, and it starts in a new Harness terminal tab; choosing the same script again offers to restart it in that tab. The shortcut is configurable from the plugin's own page.
↑ / ↓ navigate, Home / End jump, PageUp / PageDown move a page, Enter runs, Esc closes. The search field uses the ARIA combobox + listbox pattern, so screen readers announce the active script.packageManager and lockfiles, supporting npm, pnpm, yarn, and bun.package.json, then cds into that package before running.package.json; the terminal runs the script with the user's normal terminal permissions.In the desktop app, open Plugins in the sidebar, choose Add plugin, and enter the local directory path. The desktop profile is managed by the Electron app, which is why this is the preferred path there.
For another profile, use the CLI:
git clone https://github.com/jeremytenjo/dsh-plugin-npm-scripts.git
dsh plugin --profile <profile> add ./dsh-plugin-npm-scriptsReplace ` with the name shown by dsh --profile --dump-config (for example web`). Restart the Host or reload the page after installing.
The package ships its browser bundle (client.js), so no build step is required to install it.
The plugin is profile-wide: install it once and it is enabled by default in every session. It adds nothing to individual projects and there is no per-project switch — a project only needs a package.json.
package.json.⌥A).↑ / ↓ to highlight a script and press Enter. The first result is selected automatically, so Option+A, Enter runs the first script.The command shown in the palette is what will be typed:
cd '/path/to/package' && pnpm run 'build'cd is omitted when the package already is the session working directory.
The palette uses the nearest package.json between the session working directory and the repository root. This means a session opened in a monorepo package shows that package's scripts, while a session at the repository root shows the root scripts.
If no package.json exists, the palette shows an error with a retry action.
packageManager in package.json (pnpm@9.15.0, yarn@4.5.0, …).pnpm-lock.yamlyarn.lockbun.lockb / bun.lockpackage-lock.json / npm-shrinkwrap.jsonnpm.Setting · Where · Default Keyboard shortcut · Plugins → npm scripts → Keyboard shortcut · Option+A on macOS, Alt+A on Windows/Linux
Open Plugins in the sidebar and select npm scripts. Select the current binding (the keycaps with the pencil), press the new combination, and release to save.
On the Desktop app the binding is registered with the native keyboard service. On the Web, Option+A is a local fallback because browsers reject single-modifier Option bindings; saving a browser-supported combination replaces that fallback, and Reset to default brings Option+A back.
Key · Action Option+A (default) · Open the palette; press again to close. Change it on the plugin page. ↑ / ↓ · Move the highlight Home / End · First / last script PageUp / PageDown · Move six rows Enter · Run the highlighted script; in the restart prompt, restart it Esc · Close the palette; in the restart prompt, cancel it Tab / Shift+Tab · Cycle focus between search and close
While the palette is open, Harness's modal layer blocks background shortcuts. The effective binding appears in both Settings → Keyboard shortcuts and the plugin page; editing either place updates the same preference. In the Web app, Option+A remains a local fallback until you save a browser-supported combination.
plugins.bundle.config page for dsh-plugin-npm-scripts. It records one physical key combination, validates it with the shortcut service (describeBinding), and persists it through ctx.shortcuts.edit.POST /__dsh/npm-scripts.git rev-parse --show-toplevel, walks to the nearest package.json, parses it, and returns the scripts plus the detected package manager.terminal tab.localStorage, together with the Host terminal identity. Choosing that script again resolves the saved tab before anything runs.The Host route never runs project scripts, never accepts a client filesystem path, and refuses non-loopback or cross-origin requests.
pnpm install
pnpm test # filter, quoting, and manifest tests
pnpm build # regenerates client.jssrc/client.jsx is the browser source. src/filter.js and src/shell.js are pure, testable helpers. client.js is generated by esbuild and wrapped for the Harness module loader; commit the regenerated bundle with source changes.
Layout while developing:
index.js Host route and repository inspection
src/client.jsx Modal, shortcut, terminal launch and restart
src/filter.js Search/ranking and highlight slices
src/launches.js Script-to-terminal records for the restart prompt
src/shell.js Package-manager command construction and quoting
test/*.test.mjs Node test runner suites
cordis.patch.yml Profile layer entry0.2.1-rc.3 or newer.package.json.package.json are listed, at most 1000, with bounded name and command lengths.package.json; it does not scan every workspace package or browse node_modules.MIT