-
Notifications
You must be signed in to change notification settings - Fork 4.5k
feat(tools): add DeepSeek Harness support #1672
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weβll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
DarkskyX15
wants to merge
3
commits into
Fission-AI:main
Choose a base branch
from
DarkskyX15:feat/add-dsh-support
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
3 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| --- | ||
| "@fission-ai/openspec": minor | ||
| --- | ||
|
|
||
| - **DeepSeek Harness** β `openspec init --tools dsh` (command-line id `dsh`) installs the OpenSpec workflow skills into `.dsh/skills/` for DeepSeek Harness. It is skills-only (no command adapter or command files): dsh discovers the generated `SKILL.md` files as its highest-priority project root and surfaces them through its skill catalog, `skill` tool, and `/openspec-*` user invocations. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2 changes: 2 additions & 0 deletions
2
openspec/changes/archive/2026-08-15-add-dsh-support/.openspec.yaml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,2 @@ | ||
| schema: spec-driven | ||
| created: 2026-08-15 |
87 changes: 87 additions & 0 deletions
87
openspec/changes/archive/2026-08-15-add-dsh-support/design.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,87 @@ | ||
| ## Context | ||
|
|
||
| See proposal.md - Why. | ||
|
|
||
| OpenSpec already routes every skill-capable tool through one pipeline: `AI_TOOLS` metadata in `src/core/config.ts` drives tool detection (`available-tools.ts`), selection and validation (`init.ts`), skill path resolution (`shared/skill-paths.ts`), generation, version drift, and update. Tools that expose no custom command files simply have no `ToolCommandAdapter`, which `command-surface.ts` classifies as capability `none`. | ||
|
|
||
| DeepSeek Harness parses skills from fixed local roots (see `.ref/dsh-skills-θ§£ζι»θΎ.md`): `<project>/.dsh/skills` (rank 100), `<project>/.agents/skills` (rank 200), and user-level `~/.dsh/skills` (rank 400). It discovers only one level (`<root>/<name>/SKILL.md` or `<root>/<name>.md`), requires `name` (kebab-case) and non-empty `description` frontmatter, tolerates extra fields, and exposes skills to the model through `<available_skills>` plus a `skill` tool; users can also trigger them with the `/name` gesture. OpenSpec's generated `SKILL.md` files already satisfy every dsh constraint, so no template or frontmatter changes are needed. | ||
|
|
||
| ## Goals / Non-Goals | ||
|
|
||
| **Goals:** | ||
|
|
||
| - Add one `dsh` entry to `AI_TOOLS` that opts into the existing project-local skills pipeline. | ||
| - Make first-time setup, auto-detection, refresh, and profile/delivery drift work through existing generic code. | ||
| - Lock the dsh path and invocation behavior with focused tests. | ||
|
|
||
| **Non-Goals:** | ||
|
|
||
| - A dsh command adapter or any `.dsh/commands/` output β dsh has no file-based command surface. | ||
| - A global `~/.dsh/skills` install target β dsh has a higher-priority project root and OpenSpec manages per-project artifacts. | ||
| - Reclassifying dsh as `skills-invocable` in `command-surface.ts`; that belongs to the in-flight `add-tool-command-surface-capabilities` work. Until then dsh shares the current adapterless behavior of Rovo Dev CLI and Kimi Code. | ||
| - Changing generated skill templates or frontmatter. | ||
|
|
||
| ## Decisions | ||
|
|
||
| ### 1. Represent dsh as an adapterless, project-local tool entry | ||
|
|
||
| Add to `src/core/config.ts`: | ||
|
|
||
| ```ts | ||
| { | ||
| name: 'DeepSeek Harness', | ||
| value: 'dsh', | ||
| available: true, | ||
| successLabel: 'DeepSeek Harness', | ||
| skillsDir: '.dsh', | ||
| detectionPaths: ['.dsh/skills', '.dsh'], | ||
| }, | ||
| ``` | ||
|
|
||
| `resolveToolSkillsDir()` then resolves to `<projectRoot>/.dsh/skills`, which is dsh's rank-100 project root. Nothing else in init/update/selection needs a code change because those paths derive from `AI_TOOLS`. | ||
|
|
||
| Alternative considered: write to `~/.dsh/skills` via `globalSkillsDir`. Rejected because the project root outranks the user root, keeps artifacts repo-local and reviewable, and matches OpenSpec's project-scoped update/removal semantics (MiniMax Code's global-only design exists to work around a tool that only reads the user root, which is not dsh's case). | ||
|
|
||
| ### 2. Detect dsh from `.dsh/skills` and `.dsh` | ||
|
|
||
| `detectionPaths: ['.dsh/skills', '.dsh']` mirrors Rovo Dev CLI's `['.rovodev/skills', '.rovodev']`. `.dsh/skills` is the actual dsh skill root; `.dsh` recognizes an existing dsh project config root even before any skill exists. | ||
|
|
||
| Alternative considered: `.dsh/skills` only. Rejected as needlessly strict β `.dsh` is tool-specific (unlike the generic `.agents`), so a bare root is a meaningful signal. | ||
|
|
||
| ### 3. No command adapter; inherit capability `none` | ||
|
|
||
| `resolveCommandSurfaceCapability('dsh')` returns `none` because no adapter is registered. Consequences, all existing generic behavior: | ||
|
|
||
| - `delivery=both` / `skills`: skills generated; init reports `Commands skipped for: dsh (no adapter)`. | ||
| - `delivery=commands`: no dsh artifacts and the existing zero-artifact correction is printed. | ||
|
|
||
| Alternative considered: special-case dsh as `skills-invocable` like Codex so commands-only delivery keeps skills. Semantically dsh's skill tool + `/name` gesture are invocable, but the current shipped model only special-cases Codex; widening it here would duplicate the open `add-tool-command-surface-capabilities` change and expand this change's test matrix. Deferred deliberately. | ||
|
|
||
| ### 4. Use the default `/openspec-*` skill reference spelling | ||
|
|
||
| dsh's user-facing `/name` gesture makes `/openspec-propose` a real, typeable invocation, so the default transformer (`getSkillReferenceTransformer` fallback) is correct. The model side can call the `skill` tool by name regardless. | ||
|
|
||
| Alternative considered: add `dsh` to `NATURAL_LANGUAGE_SKILL_TOOLS` (like Rovo). Rejected because Rovo has no slash-like gesture at all, while dsh documents `/name`. | ||
|
|
||
| ### 5. No shared-root ownership work | ||
|
|
||
| `.dsh/skills` is used by no other `AI_TOOLS` entry, so `shared-skill-target.ts` marker/reconciliation logic does not apply. If the same repo also generates the `.agents` target, dsh will prefer its rank-100 `.dsh/skills` tree and there is no single-writer conflict to resolve. | ||
|
|
||
| ### 6. No frontmatter or template changes | ||
|
|
||
| OpenSpec writes `---` first line, kebab-case `name`, non-empty `description`, one-level `<name>/SKILL.md`, and only kebab-case extra fields. This satisfies dsh's fail-closed validation rules from `.ref` Β§3. Tests assert the generated file shape so a future template change cannot silently break dsh discovery. | ||
|
|
||
| ## Risks / Trade-offs | ||
|
|
||
| - [Commands-only delivery leaves dsh with zero artifacts] β Mitigation: init/update already print the existing `delivery` correction for capability-`none` tools; docs list dsh as skills-only, and the deferred capability work is the real fix. | ||
| - [`.dsh` detection can fire on a stale empty directory after commands-only removal] β Mitigation: interactive init shows detected-but-unconfigured tools as unselected in extend mode; behavior matches Rovo and is a cosmetic pre-selection, never a forced write. | ||
| - [dsh fail-closed parsing could silently drop skills] β Mitigation: generated files already comply; the init regression test checks frontmatter shape, and manual smoke testing against a real dsh session is in tasks. | ||
| - [Same-name skills under `.dsh/skills` and `.agents/skills`] β Mitigation: dsh's rank ordering (100 < 200) deterministically prefers `.dsh/skills`; this is upstream behavior, documented in supported-tools. | ||
|
|
||
| ## Migration Plan | ||
|
|
||
| Additive metadata change: no data migration and no rollback beyond reverting the entry. Projects using the shared `.agents` target today keep working; selecting `dsh` on a later `openspec init` writes the dedicated higher-priority root without touching `.agents`. | ||
|
|
||
| ## Open Questions | ||
|
|
||
| _None._ | ||
31 changes: 31 additions & 0 deletions
31
openspec/changes/archive/2026-08-15-add-dsh-support/proposal.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,31 @@ | ||
| ## Why | ||
|
|
||
| DeepSeek Harness discovers skills from fixed local roots, with `<project>/.dsh/skills` as its highest-priority project root. OpenSpec supports many assistants but has no dedicated target for it today, so dsh users can only use the vendor-neutral shared `.agents` target or hand-place skills β losing the dedicated `.dsh` integration. | ||
|
|
||
| ## What Changes | ||
|
|
||
| - Add DeepSeek Harness as a supported tool with id `dsh`, `skillsDir: '.dsh'`, and detection paths `.dsh/skills` and `.dsh`. | ||
| - Generate the OpenSpec workflow skills into `.dsh/skills/openspec-*/SKILL.md` for dsh via `openspec init --tools dsh` and `openspec update`. | ||
| - Keep dsh skills-only: no command adapter and no `.dsh/commands/` files, because dsh has no file-based custom command surface. | ||
| - Spell dsh skill references as `/openspec-*` (dsh supports the user `/name` gesture), matching the existing skills-only tool pattern. | ||
| - Document dsh in the supported tools and command syntax docs. | ||
| - Add regression tests for detection, path resolution, init, update, and invocation spelling. | ||
|
|
||
| ## Capabilities | ||
|
|
||
| ### New Capabilities | ||
|
|
||
| _None._ | ||
|
|
||
| ### Modified Capabilities | ||
|
|
||
| - `ai-tool-paths`: define the `.dsh` skills root and detection paths for DeepSeek Harness. | ||
|
|
||
| ## Impact | ||
|
|
||
| - `src/core/config.ts` β add the `dsh` entry to `AI_TOOLS` | ||
| - `docs/supported-tools.md` β tool row, invocation table, and `--tools` id list | ||
| - `docs/cli.md` β supported `--tools` id list | ||
| - `docs/commands.md`, `docs/how-commands-work.md`, `docs/troubleshooting.md` β skills-only invocation tables and notes | ||
| - `test/core/available-tools.test.ts`, `test/core/shared/skill-paths.test.ts`, `test/core/shared/tool-detection.test.ts`, `test/core/init.test.ts`, `test/core/update.test.ts`, `test/utils/command-references.test.ts`, `test/core/command-generation/registry.test.ts` β targeted dsh coverage | ||
| - `.changeset/add-dsh-support.md` β release note |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
π Maintainability & Code Quality | π‘ Minor | β‘ Quick win
Document rollback of generated dsh files.
openspec initandopenspec updatewrite.dsh/skillsartifacts. Reverting theAI_TOOLSentry does not remove files already written to user projects. State that rollback stops future dsh detection and generation, while existing.dsh/skillsfiles require explicit cleanup if removal is required.Based on learnings, archived changes apply independently without transactional rollback. The supplied initialization flow writes generated skills before completion.
Proposed clarification
π Committable suggestion
π€ Prompt for AI Agents
Source: Learnings