dsh-preset-kit
开发工具 活跃维护

dsh-preset-kit

Moeblack/dsh-preset-kit

支持将Agent预设打包为独立插件包,提供软链接安装、运行时热更新、预设归属登记与干净卸载能力,无需修改核心配置即可灵活管理不同场景的预设资源。

0
Stars 标星
0
Forks 分支
0
Watchers 关注
0
Open Issues
TypeScript
主要语言
None
开源协议
7 KB
仓库大小
1 个月前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:Moeblack/dsh-preset-kit
git clone https://github.com/Moeblack/dsh-preset-kit.git
git clone git@github.com:Moeblack/dsh-preset-kit.git
README.md master

dsh-preset-kit

Publish agent presets into a DeepSeek Harness home: copy installs refreshed on
every boot, owner tracking, and clean uninstall.

Why

dsh treats presets as local files: a preset is a directory under
$DSH_HOME/.agent-presets/<id>/ holding agent.cordis.yml (+ optional
preset.yml). Bundles cannot add preset roots — composeProfile replaces
the agent-presets row's roots with the shipped root at the top overlay —
so a plugin that ships a preset has to write into the user root itself.

This kit is that shared piece: publish, conflict rules, ownership records,
and uninstall, so every preset-carrying plugin does not reinvent it.

Hot reload vs. boot refresh

  • dsh-agent-presets re-reads its roots on every list()/resolve(), so a
    preset that appears in the user root is visible immediately — no restart.
  • dsh's preset scanner does not follow symlinks (readdir file types +
    isDirectory()), so the default mode is copy. Republish on every plugin
    boot (the natural apply() cadence) to refresh the copied preset from its
    source — upgrading the plugin and restarting dsh updates the preset.
  • symlink mode exists for tooling that consumes the user root itself, but a
    symlinked preset is invisible to dsh.

API

import { publishPresetSync } from 'dsh-preset-kit'

// In a Cordis plugin apply():
const undo = publishPresetSync({
  id: 'minimal-web',                    // /^[a-z0-9][a-z0-9-]*$/
  dir: new URL('./presets/minimal-web/', import.meta.url).pathname,
  owner: 'dsh-minimal-web',             // your package name
})
ctx.effect(() => undo, 'preset-publish')

Async variants for scripts: publishPreset, unpublishPreset,
listPublished. dshHome defaults to $DSH_HOME, then ~/.dsh.

Ownership rules

  • Publishing into an id already published by the same owner replaces it.
  • Publishing into an id published by a different owner throws.
  • Publishing into a preset directory the user authored by hand (no
    publisher record) throws — never overwrite a person's work.
  • unpublishPreset removes only its own publication; the undo function is
    safe to run after a manual rm.

Records live in $DSH_HOME/.agent-presets/.publishers/<id>.json.