mirror of
https://github.com/msitarzewski/agency-agents.git
synced 2026-09-28 20:35:53 +03:00
feat(integration): add DeepSeek Harness (dsh) skills support (#846)
Adds DeepSeek Harness as an integration target: 279 agency-* SKILL.md skills installed to ${DSH_HOME:-~/.dsh}/skills (or DSH_SKILLS_DIR for project scope).
Verified in DeepSeek Harness itself (@deepseek-ai/dsh 0.1.7-rc.2, installed via the documented npx path on Ubuntu 26.04 arm64): the repo installer placed 279 skills, and dsh's own skill-filesystem parser accepted all 279 with zero warnings (a planted invalid name and a missing description were both rejected with dsh's own messages).
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
053ddbbf39
commit
479193dcce
+34
-5
@@ -27,6 +27,7 @@
|
||||
# osaurus -- Copy skills to ~/.osaurus/skills/
|
||||
# hermes -- Copy lazy-router plugin to ~/.hermes/plugins/ and enable it
|
||||
# vibe -- Copy agents and prompts to ~/.vibe/agents/ and ~/.vibe/prompts/
|
||||
# dsh -- Copy skills to ~/.dsh/skills/ (user-wide) or .dsh/skills/ (project)
|
||||
# all -- Install for all detected tools (default)
|
||||
#
|
||||
# Selection (compose freely; empty = everything):
|
||||
@@ -50,8 +51,9 @@
|
||||
# --help Show this help
|
||||
#
|
||||
# Env: CLAUDE_CONFIG_DIR, COPILOT_AGENT_DIR, CURSOR_RULES_DIR, GEMINI_AGENTS_DIR,
|
||||
# OPENCODE_AGENTS_DIR, OPENCLAW_DIR, QWEN_AGENTS_DIR, CODEX_AGENTS_DIR,
|
||||
# OSAURUS_SKILLS_DIR, HERMES_HOME, HERMES_PLUGIN_DIR, VIBE_HOME
|
||||
# OPENCODE_AGENTS_DIR, OPENCLAW_DIR, QWEN_AGENTS_DIR, ZCODE_AGENTS_DIR,
|
||||
# CODEX_AGENTS_DIR, OSAURUS_SKILLS_DIR, HERMES_HOME, HERMES_PLUGIN_DIR,
|
||||
# VIBE_HOME, DSH_HOME, DSH_SKILLS_DIR
|
||||
# override default install paths (checked before hardcoded defaults).
|
||||
#
|
||||
# --- USAGE-END --- (sentinel for usage(); do not remove)
|
||||
@@ -130,7 +132,7 @@ INTEGRATIONS="$REPO_ROOT/integrations"
|
||||
# shellcheck source=lib.sh
|
||||
. "$SCRIPT_DIR/lib.sh"
|
||||
|
||||
ALL_TOOLS=(claude-code copilot antigravity gemini-cli opencode openclaw cursor aider windsurf qwen zcode kimi codex osaurus hermes vibe)
|
||||
ALL_TOOLS=(claude-code copilot antigravity gemini-cli opencode openclaw cursor aider windsurf qwen zcode kimi codex osaurus hermes vibe dsh)
|
||||
|
||||
# The division set is derived from divisions.json (the single source of truth)
|
||||
# so the installer can never drift from the catalog — a hardcoded copy silently
|
||||
@@ -292,7 +294,7 @@ path_collision_group() {
|
||||
case "$1" in
|
||||
claude-code|copilot) printf 'raw-source-md' ;; # <division>-<slug>.md
|
||||
gemini-cli|opencode|qwen|zcode) printf 'slug-md' ;; # <slug>.md
|
||||
antigravity|osaurus) printf 'agency-skill' ;; # agency-<slug>/SKILL.md
|
||||
antigravity|osaurus|dsh) printf 'agency-skill' ;; # agency-<slug>/SKILL.md
|
||||
*) printf '' ;;
|
||||
esac
|
||||
}
|
||||
@@ -313,6 +315,7 @@ resolve_dest() {
|
||||
osaurus) var="OSAURUS_SKILLS_DIR" ;;
|
||||
hermes) var="HERMES_PLUGIN_DIR" ;;
|
||||
vibe) var="VIBE_HOME" ;;
|
||||
dsh) var="DSH_SKILLS_DIR" ;;
|
||||
esac
|
||||
if [[ -n "$var" && -n "${!var:-}" ]]; then
|
||||
if [[ "$tool" == "claude-code" ]]; then
|
||||
@@ -340,6 +343,7 @@ resolve_tool_path() {
|
||||
zcode) bin="zcode" ;;
|
||||
kimi) bin="kimi" ;; codex) bin="codex" ;; antigravity) bin="" ;;
|
||||
osaurus) bin="osaurus" ;; hermes) bin="hermes" ;; vibe) bin="vibe" ;;
|
||||
dsh) bin="dsh" ;;
|
||||
esac
|
||||
[[ -n "$bin" ]] && command -v "$bin" 2>/dev/null
|
||||
}
|
||||
@@ -444,6 +448,7 @@ detect_codex() { command -v codex >/dev/null 2>&1 || [[ -d "${HOME}/.code
|
||||
detect_osaurus() { command -v osaurus >/dev/null 2>&1 || [[ -d "${HOME}/.osaurus" ]]; }
|
||||
detect_hermes() { command -v hermes >/dev/null 2>&1 || [[ -d "${HERMES_HOME:-${HOME}/.hermes}" ]]; }
|
||||
detect_vibe() { command -v vibe >/dev/null 2>&1 || [[ -d "${VIBE_HOME:-${HOME}/.vibe}" ]]; }
|
||||
detect_dsh() { command -v dsh >/dev/null 2>&1 || [[ -d "${DSH_HOME:-${HOME}/.dsh}" ]]; }
|
||||
|
||||
is_detected() {
|
||||
case "$1" in
|
||||
@@ -463,6 +468,7 @@ is_detected() {
|
||||
osaurus) detect_osaurus ;;
|
||||
hermes) detect_hermes ;;
|
||||
vibe) detect_vibe ;;
|
||||
dsh) detect_dsh ;;
|
||||
*) return 1 ;;
|
||||
esac
|
||||
}
|
||||
@@ -486,6 +492,7 @@ tool_label() {
|
||||
osaurus) printf "%-14s %s" "Osaurus" "(~/.osaurus/skills)" ;;
|
||||
hermes) printf "%-14s %s" "Hermes" "(~/.hermes/plugins)" ;;
|
||||
vibe) printf "%-14s %s" "Mistral Vibe" "(~/.vibe/agents)" ;;
|
||||
dsh) printf "%-14s %s" "DeepSeek Harness" "(~/.dsh/skills)" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
@@ -609,7 +616,7 @@ tool_simple_name() {
|
||||
claude-code) echo "Claude Code";; copilot) echo "Copilot";; antigravity) echo "Antigravity";;
|
||||
gemini-cli) echo "Gemini CLI";; opencode) echo "OpenCode";; openclaw) echo "OpenClaw";;
|
||||
cursor) echo "Cursor";; aider) echo "Aider";; windsurf) echo "Windsurf";;
|
||||
qwen) echo "Qwen Code";; zcode) echo "ZCode";; kimi) echo "Kimi Code";; codex) echo "Codex";; osaurus) echo "Osaurus";; *) echo "$1";;
|
||||
qwen) echo "Qwen Code";; zcode) echo "ZCode";; kimi) echo "Kimi Code";; codex) echo "Codex";; osaurus) echo "Osaurus";; dsh) echo "DeepSeek Harness";; *) echo "$1";;
|
||||
esac
|
||||
}
|
||||
|
||||
@@ -825,6 +832,27 @@ install_osaurus() {
|
||||
ok "Osaurus: $count skills -> $dest"
|
||||
}
|
||||
|
||||
install_dsh() {
|
||||
local src="$INTEGRATIONS/dsh"
|
||||
local dest; dest="$(resolve_dest dsh "${DSH_HOME:-${HOME}/.dsh}/skills")"
|
||||
local count=0
|
||||
[[ -d "$src" ]] || { err "integrations/dsh missing. Run convert.sh first."; return 1; }
|
||||
mkdir -p "$dest"
|
||||
local d
|
||||
while IFS= read -r -d '' d; do
|
||||
local name; name="$(basename "$d")"
|
||||
slug_allowed "$name" || continue
|
||||
mkdir -p "$dest/$name"
|
||||
install_file "$d/SKILL.md" "$dest/$name/SKILL.md"
|
||||
incr count
|
||||
done < <(find "$src" -mindepth 1 -maxdepth 1 -type d -print0)
|
||||
ok "DeepSeek Harness: $count skills -> $dest"
|
||||
warn "DeepSeek Harness: set DSH_SKILLS_DIR=.dsh/skills (in a project) to install there instead."
|
||||
if command -v dsh >/dev/null 2>&1; then
|
||||
warn "DeepSeek Harness: activate an agent with /agency-<slug> or by name in conversation."
|
||||
fi
|
||||
}
|
||||
|
||||
install_gemini_cli() {
|
||||
local src="$INTEGRATIONS/gemini-cli/agents"
|
||||
local dest; dest="$(resolve_dest gemini-cli "${HOME}/.gemini/agents")"
|
||||
@@ -1307,6 +1335,7 @@ install_tool() {
|
||||
osaurus) install_osaurus ;;
|
||||
hermes) install_hermes ;;
|
||||
vibe) install_vibe ;;
|
||||
dsh) install_dsh ;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user