Files
deepseek-harness/skills/create-dsh-sdk-project/SKILL.md
Yichen Jiang fee12f1af0 refactor(llm-deepseek)!: rename the provider route to deepseek-official
The native adapter's route was named deepseek, colliding with pi-ai's
catalog provider of the same name, so the two DeepSeek paths could never
be mounted side by side. The web settings page needs both configurable at
once. Compositions, fixtures, goldens, scaffolding defaults, and docs all
move together (pre-release, no shim); TUI/session-query-spill/
missing-credential goldens re-recorded through their keyless refresh
modes because provider-name length shifts box padding and spill
truncation points.
2026-07-29 16:36:07 +08:00

58 lines
2.1 KiB
Markdown

---
name: create-dsh-sdk-project
description: Create a DeepSeek Harness SDK project non-interactively (headless), driven by an agent instead of the interactive wizard. Use when asked to scaffold a new DSH SDK project without a terminal.
---
# Create a DeepSeek Harness SDK project headlessly
The `create-sdk` initializer normally runs an interactive wizard. To create a project
**without a terminal**, pass a structured spec and ask for machine-readable events:
```sh
npm create @deepseek-ai/sdk -- --config-json '<spec-json>' --json
```
- `--config-json '<json>'` supplies the whole spec inline (no prompts). Alternatively
`--config <path.json>` reads the same spec from a file.
- `--json` makes the command emit one NDJSON lifecycle event per line to stdout.
## Spec shape
All fields are optional except those a chosen feature requires. Unsupplied answers that
have a sensible default are taken from it; a *required* answer with no default (a secret,
a custom provider base URL, a required feature option) makes the run fail loud rather than
block.
```json
{
"directory": "my-agent",
"description": "A DeepSeek Harness agent",
"provider": "deepseek-official",
"apiKey": "<key>",
"model": "deepseek-v4-flash",
"interface": "tui",
"pm": "npm",
"install": false,
"features": [
{ "id": "persistence", "options": ["sqlite"] },
{ "id": "web", "options": ["exa"], "secrets": { "apiKey": "<exa-key>" } }
]
}
```
`features` is the complete set of optional features to enable, each with its chosen
options and any secrets/values it needs. The interactive feature tree and its
recommended-feature prompts are skipped in headless mode.
## Reacting to events
Each line of stdout is one JSON object:
- `{"type":"done"}` — the project was created (and installed, if `install` was true).
- `{"type":"action-required","prompt":"<message>"}` — a required answer was missing.
Add the corresponding field to the spec (e.g. an `apiKey`, a feature secret, a custom
`baseURL`) and re-run.
- `{"type":"error","message":"<message>"}` — the run failed for another reason.
Iterate: read `action-required`, fill the named input into the spec, re-run until `done`.