mirror of
https://github.com/deepseek-ai/deepseek-harness
synced 2026-08-15 21:04:50 +00:00
1204 lines
49 KiB
Markdown
1204 lines
49 KiB
Markdown
<!-- Generated by scripts/gen-config-catalog.ts — do not edit by hand.
|
|
Run `pnpm run gen-config-catalog` to regenerate. -->
|
|
|
|
# Plugin Config Catalog
|
|
|
|
Every `config:` block a `cordis.yml` entry can set: for each loadable harness package, the verbatim config declaration (JSDoc included) its `apply` function or service constructor receives, with every referenced type pasted alongside (package-local types) or linked (everything else). The paste is the plugin's full declared config type — a field the runtime schema deliberately excludes is a runtime-only seam (its own JSDoc says so) and is not settable from `cordis.yml`. This is the **deployment**-axis reference — the wiring a plugin author works against is the cordis [events](cordis-catalog/events.md) + [services](cordis-catalog/services.md) catalogs, the model-facing tool schemas are the [tool catalog](tool-catalog.md), and [core-data-structures/](core-data-structures/core.md) documents the types these declarations reference.
|
|
|
|
This file is GENERATED from source (`scripts/gen-config-catalog.ts`) and verified fresh by `pnpm run verify-config-catalog` (part of `doc-sync`) — do not edit it by hand. Declaration blocks use a `ts config-catalog` fence (skipped by doc-typecheck, since a lone declaration referencing imports is not standalone-compilable). The generator also cross-checks the runtime schemastery schema against the pasted declaration — every schema-validated key, nested keys included, must be locatable on the declared config type — so the paste cannot hide a loader-accepted field.
|
|
|
|
A `Requires:` line lists the service keys the plugin `inject`s: its `cordis.yml` tree must also load providers for those services. Scope is the harness tier (`packages/`); the vendored cordis plugins a config tree may also load (`hmr`, the console logger, …) are pinned upstream source ([vendoring policy](../vendor/README.md)) and not catalogued here.
|
|
|
|
## `@deepseek-ai/dsh-acp`
|
|
|
|
Requires: `agents` · `sessions` · `sessionPersistence` · `tools` · `userInteraction`
|
|
|
|
```ts config-catalog
|
|
/** Plugin config: the agent template ACP sessions are created from. */
|
|
export interface AcpConfig {
|
|
/** Provider route for created agents. */
|
|
provider?: string
|
|
/** Model name for created agents (must have a registered adapter). */
|
|
model?: string
|
|
/** Runtime-only transport override for tests; production uses stdio. */
|
|
stream?: Stream
|
|
}
|
|
```
|
|
|
|
Depends on: `Stream` (`@agentclientprotocol/sdk`)
|
|
|
|
Source: [`packages/ui/acp/src/index.ts:203`](../packages/ui/acp/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-acp-agent`
|
|
|
|
```ts config-catalog
|
|
/**
|
|
* App config: the swappable per-deployment values. `provider` and `model` configure the
|
|
* agent template the ACP bridge creates each session's agent from (NOT a
|
|
* pre-created agent — ACP creates agents at `session/new`); `persona` is the
|
|
* deployment persona (forwarded to the system-prompt plugin); `toolOrder` is
|
|
* the explicit model-facing tool order (forwarded to the system-prompt plugin);
|
|
* `tools` is the tool registry's config (its presentation `mode`, forwarded
|
|
* through agent-core); `persistenceRoot` is the JSONL backend's directory.
|
|
*/
|
|
export interface Config {
|
|
/** Provider route for ACP-created agents. */
|
|
provider: string
|
|
/** Model name for ACP-created agents (must have a registered adapter). */
|
|
model: string
|
|
/** Deployment persona (the system-prompt plugin's `persona` config). */
|
|
persona?: string
|
|
/** Explicit model-facing tool order (the system-prompt plugin's `toolOrder` config; see dsh-system-prompt). */
|
|
toolOrder?: string[]
|
|
/** Tool-registry config — its presentation `mode` (forwarded through agent-core; see dsh-tools). */
|
|
tools?: ToolsConfig
|
|
/** Directory the JSONL session backend writes under. Defaults to `./.sessions`. */
|
|
persistenceRoot?: string
|
|
/** Skill registry, local-provider, and model-facing consumer config forwarded to agent-core. */
|
|
skills?: agentCore.SkillConfig
|
|
}
|
|
```
|
|
|
|
Depends on: [`agentCore`](../packages/core/agent-core/src/index.ts) · [`ToolsConfig`](#deepseek-aidsh-tools)
|
|
|
|
Source: [`packages/ui/acp-agent/src/index.ts:31`](../packages/ui/acp-agent/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-agent-core`
|
|
|
|
```ts config-catalog
|
|
/**
|
|
* Bundle config: each field forwarded verbatim to the child that owns it — `agents` to the
|
|
* agent loop (an app that pre-creates no agents, like the ACP bridge, omits it),
|
|
* `persona` and `toolOrder` to the system-prompt plugin (the deployment's persona section and
|
|
* the explicit model-facing tool order), the `tools` object to the tool registry (its
|
|
* presentation `mode`), and `skills` to the skill registry/local provider/tool consumer.
|
|
* The schema intersects the owners' schemas, which supply defaults for every
|
|
* optional input and keep validation from drifting.
|
|
*/
|
|
export interface Config {
|
|
/** The agent-loop `agents` list (see dsh-agent-loop's `Config`). */
|
|
agents?: AgentLoopConfig['agents']
|
|
/** The deployment persona (see dsh-system-prompt's `Config`). */
|
|
persona?: SystemPromptConfig['persona']
|
|
/** The explicit model-facing tool order (see dsh-system-prompt's `Config`). */
|
|
toolOrder?: SystemPromptConfig['toolOrder']
|
|
/** The tool registry's config — its presentation `mode` (see dsh-tools' `Config`). */
|
|
tools?: ToolsConfig
|
|
/** Skill registry, local provider, and model-facing consumer config. */
|
|
skills?: SkillConfig
|
|
}
|
|
|
|
/** Skill bundle config forwarded to the registry, local provider, and model-facing consumer. */
|
|
export interface SkillConfig {
|
|
/** Registry-level discovery cache settings. */
|
|
registry?: SkillRegistryConfig
|
|
/** Local filesystem skill provider settings. */
|
|
local?: SkillLocal.Config
|
|
/** Model-facing skill catalog and tool settings. */
|
|
tool?: toolSkill.Config
|
|
}
|
|
```
|
|
|
|
Depends on: [`AgentLoopConfig`](#deepseek-aidsh-agent-loop) · [`SkillLocal`](../packages/skill/skill-local/src/index.ts) · [`SkillRegistryConfig`](#deepseek-aidsh-skill) · [`SystemPromptConfig`](#deepseek-aidsh-system-prompt) · [`ToolsConfig`](#deepseek-aidsh-tools) · [`toolSkill`](../packages/skill/tool-skill/src/index.ts)
|
|
|
|
Source: [`packages/core/agent-core/src/index.ts:46`](../packages/core/agent-core/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-agent-loop`
|
|
|
|
Requires: `agents` · `sessions` · `llm` · `tools` · `systemPrompt`
|
|
|
|
```ts config-catalog
|
|
/** Plugin configuration for declarative startup agents. */
|
|
export interface Config {
|
|
/** Agents created or resumed at plugin startup. */
|
|
agents: (AgentOptions & {
|
|
/** Registry identity for the live agent. */
|
|
id: AgentId
|
|
/** Optional workspace for a fresh session. */
|
|
cwd?: string
|
|
/** Persisted session to resume instead of creating a fresh session. */
|
|
resumeSessionId?: SessionId
|
|
})[]
|
|
}
|
|
```
|
|
|
|
Depends on: [`AgentId`](../packages/core/agent/src/index.ts) · [`AgentOptions`](../packages/core/agent/src/index.ts) · [`SessionId`](../packages/core/session/src/index.ts)
|
|
|
|
Source: [`packages/core/agent-loop/src/index.ts:322`](../packages/core/agent-loop/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-bash-local`
|
|
|
|
```ts config-catalog
|
|
/** Plugin config (all optional — `static Config` supplies the defaults). */
|
|
export interface Config {
|
|
/** Default working directory for commands (default: process.cwd()). */
|
|
cwd?: string
|
|
/** Default foreground timeout in milliseconds. */
|
|
timeoutMs?: number
|
|
/** Upper bound for per-call timeout overrides. */
|
|
maxTimeoutMs?: number
|
|
/** Per-stream in-memory output cap; overflow spills to a temp file. */
|
|
maxOutputBytes?: number
|
|
/** Grace period between the SIGTERM and the SIGKILL escalation on a kill. */
|
|
graceMs?: number
|
|
}
|
|
```
|
|
|
|
Source: [`packages/bash/bash-local/src/index.ts:21`](../packages/bash/bash-local/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-bash-sandbox`
|
|
|
|
Requires: `sandbox`
|
|
|
|
```ts config-catalog
|
|
/**
|
|
* Plugin config: the local executor's knobs plus the sandbox policy. All
|
|
* optional — `static Config` supplies the defaults (`mode: 'read-only'` is the
|
|
* fail-safe default; an example that wants a workspace-writable agent opts in
|
|
* explicitly). The runner choice is NOT configured here: which platform
|
|
* backend confines the command is the `ctx.sandbox` provider's config.
|
|
*/
|
|
export interface Config extends LocalConfig {
|
|
/** File-sandbox mode commands run under (default: `read-only`). */
|
|
mode?: SandboxMode
|
|
/**
|
|
* Root directory `workspace-write` mode may write under (default: the
|
|
* executor's default working directory — `cwd`, else `process.cwd()`).
|
|
*/
|
|
workspaceRoot?: string
|
|
}
|
|
```
|
|
|
|
Depends on: [`LocalConfig`](#deepseek-aidsh-bash-local) · [`SandboxMode`](core-data-structures/sandbox.md)
|
|
|
|
Source: [`packages/bash/bash-sandbox/src/index.ts:26`](../packages/bash/bash-sandbox/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-code-runtime-worker`
|
|
|
|
```ts config-catalog
|
|
/** Plugin config: every execution cap, changeable from `cordis.yml` (no hardcoded tunables). */
|
|
export interface Config {
|
|
/**
|
|
* Busy-time budget in milliseconds: the run fails with kind `'timeout'`
|
|
* once the worker's MEASURED event-loop active time
|
|
* (`worker.performance.eventLoopUtilization()`) exceeds this. Metering
|
|
* measured busy time — not wall time, not host-side pending-call
|
|
* bookkeeping — is what makes the budget both fair (a program awaiting a
|
|
* slow tool accrues nothing) and ungameable (a hot loop accrues whether
|
|
* or not a decoy dispatch is in flight).
|
|
*/
|
|
computeMs?: number
|
|
/**
|
|
* Wall-clock ceiling in milliseconds; never pauses for anything. The
|
|
* backstop for what busy-time cannot see (a program awaiting a promise
|
|
* nobody will resolve).
|
|
*/
|
|
maxWallMs?: number
|
|
/** Shared byte budget for captured log text (console + raw stream writes), truncation marked in-band. */
|
|
maxLogBytes?: number
|
|
/**
|
|
* Byte cap for the completion value, measured by its real cross-boundary
|
|
* size (string bytes, or structured-clone wire size); an oversized or
|
|
* non-cloneable value crosses as a capped string rendering.
|
|
*/
|
|
maxValueBytes?: number
|
|
/** The worker's max old-generation heap in MiB (`resourceLimits`); overflow kills the worker, surfacing as kind `'worker-exit'`. */
|
|
maxOldGenerationSizeMb?: number
|
|
}
|
|
```
|
|
|
|
Source: [`packages/code-runtime/code-runtime-worker/src/index.ts:24`](../packages/code-runtime/code-runtime-worker/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-compact-basic`
|
|
|
|
Requires: `llm`
|
|
|
|
```ts config-catalog
|
|
/**
|
|
* Backend configuration. Every knob is REQUIRED except `auto` and
|
|
* `charsPerToken`: there is no concrete data yet to justify default
|
|
* thresholds/budgets, so a consumer must state each value explicitly rather
|
|
* than inherit a guessed default. `auto` alone defaults to `true`
|
|
* (auto-compaction is the intended posture), and `charsPerToken` defaults to
|
|
* the English-text heuristic its estimator was calibrated on.
|
|
*/
|
|
export interface BasicCompactConfig {
|
|
/** Context window size in tokens. */
|
|
contextWindow: number
|
|
/** Compact when estimated token usage exceeds this fraction of context window. */
|
|
thresholdRatio: number
|
|
/** Number of tokens of recent context to retain during compaction. */
|
|
retainTokens: number
|
|
/** Provider to use for summarization (`''` with an empty model inherits the conversation target). */
|
|
summarizationProvider: string
|
|
/** Model to use for summarization (`''` with an empty provider inherits the conversation target). */
|
|
summarizationModel: string
|
|
/** Provider generation cap for the summarization call. */
|
|
maxTokens: number
|
|
/** Extra compaction attempts when the first compacted surface is still over threshold. */
|
|
compactionRetries: number
|
|
/** Enable automatic compaction on the `agent/pre-step` seam (default true). */
|
|
auto?: boolean
|
|
/**
|
|
* Text density for the token estimator: estimated tokens = chars /
|
|
* `charsPerToken`. Defaults to 4 (typical English text). A CJK-heavy
|
|
* deployment should set ~1-2 — CJK runs at roughly 1-2 chars per token, so
|
|
* the default UNDERestimates several-fold and compaction fires far too late.
|
|
* May be fractional.
|
|
*/
|
|
charsPerToken?: number
|
|
}
|
|
```
|
|
|
|
Source: [`packages/compact/compact-basic/src/types.ts:20`](../packages/compact/compact-basic/src/types.ts)
|
|
|
|
## `@deepseek-ai/dsh-fs-local`
|
|
|
|
```ts config-catalog
|
|
/** Configuration for the local filesystem backend. */
|
|
export interface Config {
|
|
/** Base directory for relative paths. Defaults to `process.cwd()`. */
|
|
cwd?: string
|
|
}
|
|
```
|
|
|
|
Source: [`packages/fs/fs-local/src/index.ts:49`](../packages/fs/fs-local/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-hooks-claude`
|
|
|
|
Requires: `bash`
|
|
|
|
```ts config-catalog
|
|
/** Plugin config: where the CC hook config lives + substitution roots. */
|
|
export interface Config {
|
|
/**
|
|
* Path to a `hooks.json` or a settings file whose `hooks` key holds the config.
|
|
* Process-level: read once at load, a relative path resolves against the process
|
|
* launch cwd, so one config applies to the whole process.
|
|
* TODO(per-session-hook-config): per-session discovery of a project-local
|
|
* `hooks.json` from each `session/new.cwd` is not yet implemented.
|
|
*/
|
|
configPath: string
|
|
/**
|
|
* Replaces `${CLAUDE_PLUGIN_ROOT}` in command strings (the plugin's root dir).
|
|
*/
|
|
pluginRoot?: string
|
|
/**
|
|
* Replaces `${CLAUDE_PROJECT_DIR}` in command strings AND is exported as the
|
|
* `CLAUDE_PROJECT_DIR` env var for hook processes. When omitted, the env var
|
|
* defaults per-run to the agent's session workspace (`session.header.cwd`, the
|
|
* same dir the hook runs in) — Claude Code always exports this var, and common
|
|
* unmodified hooks reference `$CLAUDE_PROJECT_DIR` for project-relative paths.
|
|
*/
|
|
projectDir?: string
|
|
/** Default per-hook timeout in ms when a hook sets none (CC default: 600000). */
|
|
defaultTimeoutMs?: number
|
|
/** Character cap for the `hook/result` event's persisted stderr summary. */
|
|
stderrSummaryMaxChars?: number
|
|
}
|
|
```
|
|
|
|
Source: [`packages/hooks/hooks-claude/src/index.ts:43`](../packages/hooks/hooks-claude/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-hooks-codex`
|
|
|
|
Requires: `bash`
|
|
|
|
```ts config-catalog
|
|
/** Plugin config: where the Codex hooks.json lives + the model name for payloads. */
|
|
export interface Config {
|
|
/**
|
|
* Path to a Codex `hooks.json`. Process-level: read once at load, a relative
|
|
* path resolves against the process launch cwd.
|
|
* TODO(per-session-hook-config): per-session project-local discovery from each
|
|
* `session/new.cwd` is not yet implemented.
|
|
*/
|
|
configPath: string
|
|
/** The model name stamped on every payload (Codex includes `model` on each event). */
|
|
model?: string
|
|
/** Default per-hook timeout in ms when a hook sets none (Codex default: 600000). */
|
|
defaultTimeoutMs?: number
|
|
/** Character cap for the `hook/result` event's persisted stderr summary. */
|
|
stderrSummaryMaxChars?: number
|
|
}
|
|
```
|
|
|
|
Source: [`packages/hooks/hooks-codex/src/index.ts:41`](../packages/hooks/hooks-codex/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-jsonrpc`
|
|
|
|
Requires: `agents`
|
|
|
|
```ts config-catalog
|
|
/** Runtime-only test seams; no field is configurable from `cordis.yml`. */
|
|
export interface JsonRpcConfig {
|
|
/** Transport input override; production uses `process.stdin`. */
|
|
input?: Readable
|
|
/** Transport output override; production uses `process.stdout`. */
|
|
output?: Writable
|
|
/** Process-exit override; production uses `process.exit`. */
|
|
exit?: (code: number) => void
|
|
}
|
|
```
|
|
|
|
Depends on: `Readable` (`node:stream`) · `Writable` (`node:stream`)
|
|
|
|
Source: [`packages/ui/jsonrpc/src/index.ts:26`](../packages/ui/jsonrpc/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-llm-deepseek`
|
|
|
|
Requires: `llm`
|
|
|
|
```ts config-catalog
|
|
/**
|
|
* Plugin config, validated by the same-named schemastery schema. Every field
|
|
* is optional in yml: credentials/endpoint fall back to the environment (a
|
|
* missing API key fails plugin load, not the first call), and omitted
|
|
* thinking fields send nothing on the wire, so the provider default applies.
|
|
*/
|
|
export interface Config {
|
|
/** API key; falls back to $DEEPSEEK_API_KEY. Required one way or the other. */
|
|
apiKey?: string
|
|
/** Endpoint base; falls back to $DEEPSEEK_BASE_URL, then the public API. */
|
|
baseURL?: string
|
|
/** Thinking-mode default for every request (provider default: enabled). */
|
|
thinking?: 'enabled' | 'disabled'
|
|
/** Thinking effort (only meaningful with thinking enabled). */
|
|
reasoningEffort?: 'high' | 'max'
|
|
}
|
|
```
|
|
|
|
Source: [`packages/llm/llm-deepseek/src/index.ts:30`](../packages/llm/llm-deepseek/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-llm-pi-ai`
|
|
|
|
Requires: `llm`
|
|
|
|
```ts config-catalog
|
|
/** Plugin configuration: the non-empty provider profiles this instance owns. */
|
|
export interface Config {
|
|
/** Non-empty set of pi-ai provider routes this adapter instance owns. */
|
|
providers: PiAiProviderProfile[]
|
|
}
|
|
|
|
/** Configuration for one pi-ai provider route. */
|
|
export interface PiAiProviderProfile {
|
|
/** pi-ai provider catalog name and Harness route key. */
|
|
provider: string
|
|
/** Provider credential; when absent pi-ai uses its provider-native ambient discovery. */
|
|
apiKey?: string
|
|
/** Override the selected catalog model's endpoint without changing its protocol metadata. */
|
|
baseURL?: string
|
|
/** Provider request headers; Harness attribution wins reserved names. */
|
|
headers?: Record<string, string>
|
|
/** Provider-neutral pi-ai reasoning level. */
|
|
reasoning?: ThinkingLevel
|
|
/** Token budgets used by reasoning providers that support them. */
|
|
thinkingBudgets?: ThinkingBudgets
|
|
/** Prompt-cache retention preference. */
|
|
cacheRetention?: CacheRetention
|
|
/** Streaming transport preference. */
|
|
transport?: Transport
|
|
/** HTTP/provider SDK timeout in milliseconds. */
|
|
timeoutMs?: number
|
|
/** WebSocket connection timeout in milliseconds. */
|
|
websocketConnectTimeoutMs?: number
|
|
/** Provider SDK retry count. */
|
|
maxRetries?: number
|
|
/** Maximum provider-requested retry delay in milliseconds. */
|
|
maxRetryDelayMs?: number
|
|
}
|
|
```
|
|
|
|
Depends on: `CacheRetention` (`@earendil-works/pi-ai`) · `ThinkingBudgets` (`@earendil-works/pi-ai`) · `ThinkingLevel` (`@earendil-works/pi-ai`) · `Transport` (`@earendil-works/pi-ai`)
|
|
|
|
Source: [`packages/llm/llm-pi-ai/src/config.ts:40`](../packages/llm/llm-pi-ai/src/config.ts)
|
|
|
|
## `@deepseek-ai/dsh-llm-replay`
|
|
|
|
Requires: `llm`
|
|
|
|
```ts config-catalog
|
|
/** Plugin config: the {@link ReplayConfig} inputs, each defaulting to its `DSH_SNAPSHOT_*` env var in `apply`. */
|
|
export interface Config {
|
|
/** Override the fixture path; defaults to `$DSH_SNAPSHOT_FILE`. */
|
|
file?: string
|
|
/** Override the sidecar path; defaults to `$DSH_SNAPSHOT_OVERRIDE`. */
|
|
overrideFile?: string
|
|
/**
|
|
* Override the child-log paths; defaults to `$DSH_SNAPSHOT_CHILD_FILES` (a
|
|
* path-separator-delimited list). Each is a recorded subagent session log for
|
|
* a nested-agent scenario; absent/empty for a single-session scenario.
|
|
*/
|
|
childFiles?: string[]
|
|
}
|
|
```
|
|
|
|
Source: [`packages/support/llm-replay/src/index.ts:306`](../packages/support/llm-replay/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-permission`
|
|
|
|
Requires: `bash` · `approval`
|
|
|
|
```ts config-catalog
|
|
/** The {@link PermissionService} config: the deployment's preset table. */
|
|
export interface Config {
|
|
/**
|
|
* The preset table: name → knob bundle. Defaults to `workspace-write`
|
|
* (workspace-write + ask) and `danger-full-access` (danger-full-access +
|
|
* never). The name `custom` is reserved for the derived not-a-preset state.
|
|
*/
|
|
presets?: Record<string, PresetSpec>
|
|
}
|
|
|
|
/** One preset's sandbox/approval bundle and optional client presentation. */
|
|
export interface PresetSpec {
|
|
/** The `bash/sandbox-mode` value the preset writes through. */
|
|
sandbox: SandboxMode
|
|
/** The `approval/policy` value the preset writes through. */
|
|
approval: ApprovalPolicy
|
|
/** The display label a client shows for this preset; the raw table key when omitted. */
|
|
name?: string
|
|
/** One user-facing sentence on what the preset means; omitted when not configured. */
|
|
description?: string
|
|
}
|
|
```
|
|
|
|
Depends on: [`ApprovalPolicy`](core-data-structures/approval.md) · [`SandboxMode`](core-data-structures/sandbox.md)
|
|
|
|
Source: [`packages/ui/permission/src/index.ts:80`](../packages/ui/permission/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-repeat-tool-guard`
|
|
|
|
```ts config-catalog
|
|
/**
|
|
* Plugin config, validated by the same-named schemastery schema plus the
|
|
* load-time checks in `apply` (misconfiguration fails loud: an empty
|
|
* `thresholds` list, a non-integer, a value below 2, or a duplicate throws at
|
|
* plugin load, never a silent fall-back). `include`/`exclude` entries are
|
|
* `*`-wildcard predicates over tool names at call time, not references to
|
|
* registry entries — a pattern matching no currently registered tool is valid
|
|
* (`exclude: [mcp_*]` must stay legal in a deployment that loads no MCP tools).
|
|
*/
|
|
export interface Config {
|
|
/** Consecutive-repeat counts that trigger a reminder (default `[3, 5, 8]`). */
|
|
thresholds?: number[]
|
|
/** Tool-name patterns to track; empty means every tool is tracked. */
|
|
include?: string[]
|
|
/** Tool-name patterns transparent to the chain (neither count nor reset). */
|
|
exclude?: string[]
|
|
/**
|
|
* Maximum characters of canonical arguments quoted in the DETAILED reminder
|
|
* (default 500). Large payloads (a `write` body, a long command) would
|
|
* otherwise ride into the next request unbounded — precisely in a loop
|
|
* scenario; the cap bounds the reminder, never the detection (the chain key
|
|
* always compares the FULL canonical string).
|
|
*/
|
|
argumentsPreviewChars?: number
|
|
}
|
|
```
|
|
|
|
Source: [`packages/guard/repeat-tool-guard/src/index.ts:27`](../packages/guard/repeat-tool-guard/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-sandbox-local`
|
|
|
|
```ts config-catalog
|
|
/** Plugin config. All optional — `static Config` supplies the defaults. */
|
|
export interface Config {
|
|
/**
|
|
* Override the runner argv; bwrap-shaped profile arguments are appended. A
|
|
* non-empty override asserts full enforcement and skips built-in selection and
|
|
* probing; a broken runner then fails at execution and must be identifiable by
|
|
* {@link runnerFailureSignatures}.
|
|
*/
|
|
runnerCommand?: string[]
|
|
/**
|
|
* Case-insensitive stderr substrings emitted when a configured
|
|
* {@link runnerCommand} refuses its profile before executing the wrapped
|
|
* command. Required and non-empty with `runnerCommand`; rejected without
|
|
* it. Missing/unexecutable runner errors are added automatically from
|
|
* `runnerCommand[0]`, while these signatures cover an executable runner's
|
|
* own failure dialect.
|
|
*/
|
|
runnerFailureSignatures?: string[]
|
|
/** Positive timeout for each functional probe; zero would mean unbounded to Node. */
|
|
probeTimeoutMs?: number
|
|
}
|
|
```
|
|
|
|
Source: [`packages/sandbox/sandbox-local/src/index.ts:20`](../packages/sandbox/sandbox-local/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-session-persistence-jsonl`
|
|
|
|
Requires: `sessions`
|
|
|
|
```ts config-catalog
|
|
/** Plugin config: where the JSONL backend keeps its session logs (`root` is required — no default). */
|
|
export interface Config {
|
|
/**
|
|
* Root directory for all session files. Required (no default): a default of
|
|
* `process.cwd()` would scatter session files as the process's cwd changes
|
|
* (bash calls, subprocesses). Sessions group under per-cwd subdirectories.
|
|
*/
|
|
root: string
|
|
}
|
|
```
|
|
|
|
Source: [`packages/session-persistence/session-persistence-jsonl/src/index.ts:23`](../packages/session-persistence/session-persistence-jsonl/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-session-persistence-sqlite`
|
|
|
|
Requires: `sessions`
|
|
|
|
```ts config-catalog
|
|
/** Plugin configuration. */
|
|
export interface Config {
|
|
/**
|
|
* Filesystem path to the SQLite database file. The special value `:memory:`
|
|
* opens an in-process database (tests); a file path is created (with parent
|
|
* dirs) on construction.
|
|
*/
|
|
path: string
|
|
/**
|
|
* SQLite `journal_mode` pragma. `wal` (the default) is the recorded
|
|
* durability model; pick a rollback-journal mode (`delete`/`truncate`/
|
|
* `persist`) on filesystems where WAL's shared-memory files do not work
|
|
* (network mounts). See {@link JournalMode}.
|
|
*/
|
|
journalMode?: JournalMode
|
|
}
|
|
|
|
/**
|
|
* Journal modes the backend will run under. `wal` is the default and the
|
|
* durability model the persistence ADR records; the rollback-journal modes
|
|
* (`delete`/`truncate`/`persist`) exist for filesystems where WAL's
|
|
* shared-memory files do not work (network mounts). `memory`/`off` are
|
|
* excluded: dropping journal durability silently contradicts what this
|
|
* backend promises.
|
|
*/
|
|
export type JournalMode = 'wal' | 'delete' | 'truncate' | 'persist'
|
|
```
|
|
|
|
Source: [`packages/session-persistence/session-persistence-sqlite/src/index.ts:38`](../packages/session-persistence/session-persistence-sqlite/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-session-query`
|
|
|
|
Requires: `sessions`
|
|
|
|
```ts config-catalog
|
|
/** Configuration for exact session-query reads. */
|
|
export interface Config {
|
|
/** Maximum accepted raw read context on either side. Defaults to 50. */
|
|
readWindowMax?: number
|
|
}
|
|
```
|
|
|
|
Source: [`packages/session-query/session-query/src/config.ts:9`](../packages/session-query/session-query/src/config.ts)
|
|
|
|
## `@deepseek-ai/dsh-skill`
|
|
|
|
```ts config-catalog
|
|
/** Skill registry configuration. */
|
|
export interface Config {
|
|
/** Maximum number of completed cwd/provider catalogs kept in memory. */
|
|
readonly collectCacheMaxEntries?: number
|
|
}
|
|
```
|
|
|
|
Source: [`packages/skill/skill/src/index.ts:113`](../packages/skill/skill/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-skill-local`
|
|
|
|
Requires: `skills`
|
|
|
|
```ts config-catalog
|
|
/** Local filesystem skill provider configuration. */
|
|
export interface Config {
|
|
/** DeepSeek Harness config root. Defaults to `$DSH_HOME` or `~/.dsh`. */
|
|
dshHome?: string
|
|
/** Shared agent config root. Defaults to `$DSH_AGENTS_HOME` or `~/.agents`. */
|
|
agentsHome?: string
|
|
/** Additional skill roots scanned after project roots and before user roots. */
|
|
customSkillDirs?: string[]
|
|
}
|
|
```
|
|
|
|
Source: [`packages/skill/skill-local/src/index.ts:39`](../packages/skill/skill-local/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-stdio-agent`
|
|
|
|
```ts config-catalog
|
|
/**
|
|
* App config: the swappable per-demo values, each routed to where the app wires
|
|
* it. `provider`/`model`/`resumeSessionId` configure the pre-created `main` agent (through
|
|
* {@link @deepseek-ai/dsh-agent-core}'s forwarded `agents` list); `persona` is
|
|
* the deployment persona (forwarded to the system-prompt plugin); `toolOrder`
|
|
* is the explicit model-facing tool order (forwarded to the system-prompt plugin);
|
|
* fresh sessions use `process.cwd()` as their workspace cwd; resumed sessions
|
|
* keep their persisted cwd. `persistenceRoot` is the JSONL backend's directory;
|
|
* `welcome` is the UI banner.
|
|
*/
|
|
export interface Config {
|
|
/** Provider route for the `main` agent. */
|
|
provider: string
|
|
/** Model name for the `main` agent (must have a registered adapter). */
|
|
model: string
|
|
/** Deployment persona (the system-prompt plugin's `persona` config). */
|
|
persona?: string
|
|
/** Explicit model-facing tool order (the system-prompt plugin's `toolOrder` config; see dsh-system-prompt). */
|
|
toolOrder?: string[]
|
|
/** Tool-registry config — its presentation `mode` (forwarded through agent-core; see dsh-tools). */
|
|
tools?: ToolsConfig
|
|
/** Directory the JSONL session backend writes under. Defaults to `./.sessions`. */
|
|
persistenceRoot?: string
|
|
/** stdin-chat banner printed once on start. Defaults to `'ready.'`. */
|
|
welcome?: string
|
|
/** Skill registry, local-provider, and model-facing consumer config forwarded to agent-core. */
|
|
skills?: agentCore.SkillConfig
|
|
/**
|
|
* If set, the `main` agent RESUMES this persisted session id instead of
|
|
* starting fresh. Sourced from an env var in the leaf `cordis.yml`
|
|
* (`resumeSessionId: !!js process.env.RESUME_SESSION_ID`).
|
|
*/
|
|
resumeSessionId?: string
|
|
}
|
|
```
|
|
|
|
Depends on: [`agentCore`](../packages/core/agent-core/src/index.ts) · [`ToolsConfig`](#deepseek-aidsh-tools)
|
|
|
|
Source: [`packages/ui/stdio-agent/src/index.ts:36`](../packages/ui/stdio-agent/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-subagent-acp`
|
|
|
|
Requires: `subagents`
|
|
|
|
```ts config-catalog
|
|
/** Config: how to spawn and drive the child ACP agent process. */
|
|
export interface Config {
|
|
/** Provider name on `ctx.subagents` (default `acp`). */
|
|
providerName: string
|
|
/** The executable to spawn for each run (the child ACP agent). */
|
|
command: string
|
|
/** Arguments passed to {@link command}. */
|
|
args: string[]
|
|
/**
|
|
* Working directory for the child process and its ACP session. Defaults to
|
|
* the parent process's cwd when omitted.
|
|
*/
|
|
cwd?: string
|
|
/**
|
|
* How to auto-answer the child's `session/request_permission` prompts:
|
|
* `reject` (default — decline every prompt) or `allow` (approve via the first
|
|
* allow-shaped option). The first cut surfaces no prompt to a human.
|
|
*/
|
|
permission: PermissionPolicy
|
|
/**
|
|
* Extra environment variables for the child process — e.g. the child
|
|
* harness's own `DEEPSEEK_API_KEY`. Forwarded on top of a credential-scrubbed
|
|
* copy of the parent env, so an explicit key here reaches the child while
|
|
* ambient secrets do not leak implicitly.
|
|
*/
|
|
env: Record<string, string>
|
|
/**
|
|
* Grace period (ms) for the child's EOF-driven quiesce on dispose — its
|
|
* window to flush persistence and tear down its own nested subprocesses
|
|
* before the parent escalates to a signal.
|
|
*/
|
|
disposeEofGraceMs?: number
|
|
/** Grace period (ms) between `SIGTERM` and the `SIGKILL` escalation on dispose. */
|
|
disposeGraceMs?: number
|
|
}
|
|
|
|
/** Fixed response to child permission requests: reject by default, or select the first allow option. */
|
|
export type PermissionPolicy = 'allow' | 'reject'
|
|
```
|
|
|
|
Source: [`packages/subagent/subagent-acp/src/index.ts:18`](../packages/subagent/subagent-acp/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-subagent-fork`
|
|
|
|
Requires: `subagents`
|
|
|
|
```ts config-catalog
|
|
/** Config: the registry name to register the provider under. */
|
|
export interface Config {
|
|
/** Provider name on `ctx.subagents` (default `fork`). */
|
|
providerName: string
|
|
}
|
|
```
|
|
|
|
Source: [`packages/subagent/subagent-fork/src/index.ts:25`](../packages/subagent/subagent-fork/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-subagent-mock`
|
|
|
|
Requires: `subagents`
|
|
|
|
```ts config-catalog
|
|
/** Config for the mock provider; all optional with test-friendly defaults. */
|
|
export interface Config {
|
|
/** Registry name to register under. */
|
|
name: string
|
|
/** The text the scripted child "returns" as its final answer. */
|
|
reply?: string
|
|
/** The stop reason the run settles with. */
|
|
stopReason?: SubagentStopReason
|
|
/** Which start-time capabilities to advertise (default: all `true`). */
|
|
capabilities?: Partial<SubagentCapabilities>
|
|
/**
|
|
* The conversation-history descriptor to declare
|
|
* ({@link SubagentProvider.inheritsParentContext}); default `false` (fresh
|
|
* conversation). Set `true` to exercise seeded/fork wording in consumer
|
|
* tests. This flag says nothing about tool, service, scope, or authority
|
|
* inheritance.
|
|
*/
|
|
inheritsParentContext?: boolean
|
|
/**
|
|
* Structured value surfaced when a request carries an `outputSchema` and the
|
|
* `outputSchema` capability is on (default: `{ reply }`).
|
|
*/
|
|
structured?: unknown
|
|
}
|
|
```
|
|
|
|
Depends on: [`SubagentCapabilities`](../packages/subagent/subagent/src/index.ts) · [`SubagentStopReason`](../packages/subagent/subagent/src/index.ts)
|
|
|
|
Source: [`packages/support/subagent-mock/src/index.ts:86`](../packages/support/subagent-mock/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-subagent-spawn`
|
|
|
|
Requires: `subagents`
|
|
|
|
```ts config-catalog
|
|
/** Config: the registry name to register the provider under. */
|
|
export interface Config {
|
|
/** Provider name on `ctx.subagents` (default `spawn`). */
|
|
providerName: string
|
|
}
|
|
```
|
|
|
|
Source: [`packages/subagent/subagent-spawn/src/index.ts:20`](../packages/subagent/subagent-spawn/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-system-prompt`
|
|
|
|
```ts config-catalog
|
|
/** Plugin config: the deployment-authored fragment of the system prompt (see {@link Config.persona} for its contract). */
|
|
export interface Config {
|
|
/**
|
|
* Deployment-wide order-0 persona template. A scoped section named
|
|
* `deployment:persona` shadows it; `{{variable}}` references are strict.
|
|
*/
|
|
persona?: string
|
|
/**
|
|
* Model-facing tool names in order, with {@link TOOL_ORDER_REST} exactly once.
|
|
* Shape errors fail at load and unknown names fail at assembly; known names
|
|
* hidden in one scope may be absent there. Omitted means lexicographic order.
|
|
*/
|
|
toolOrder?: string[]
|
|
}
|
|
```
|
|
|
|
Source: [`packages/core/system-prompt/src/index.ts:147`](../packages/core/system-prompt/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-time-context`
|
|
|
|
Requires: `systemPrompt`
|
|
|
|
```ts config-catalog
|
|
/** Request-time clock formatting and refresh policy. Invalid values fail plugin load. */
|
|
export interface Config {
|
|
/** IANA time zone used for the rendered timestamp. Omit to resolve the Node process's system zone at plugin load. */
|
|
timeZone?: string
|
|
/** Maximum age of a reading within one turn, in milliseconds (default 60,000; `0` refreshes every step). */
|
|
refreshIntervalMs?: number
|
|
}
|
|
```
|
|
|
|
Source: [`packages/context/time-context/src/index.ts:22`](../packages/context/time-context/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-tool-cordis`
|
|
|
|
Requires: `tools`
|
|
|
|
```ts config-catalog
|
|
/** Config for the tool-cordis plugin: the sandbox evaluation bound. */
|
|
export interface Config {
|
|
/**
|
|
* Milliseconds the SYNCHRONOUS portion of mount code may run in the vm
|
|
* before evaluation is aborted (default 5000). An async body escapes this
|
|
* bound — see docs/rfc/implemented/feature/2026-07-08-self-referential-cordis-toolset.md for the trust stance.
|
|
*/
|
|
vmTimeoutMs?: number
|
|
}
|
|
```
|
|
|
|
Source: [`packages/cordis/tool-cordis/src/index.ts:25`](../packages/cordis/tool-cordis/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-tool-fs`
|
|
|
|
Requires: `tools` · `fs` · `systemPrompt`
|
|
|
|
```ts config-catalog
|
|
/** Plugin config (all optional — `Config` supplies the defaults). */
|
|
export interface Config {
|
|
/** Default and maximum number of lines returned by one `read` call. */
|
|
readLimit?: number
|
|
/** Maximum characters returned for a single line before truncation. */
|
|
readMaxLineLength?: number
|
|
/** Maximum bytes returned for the selected lines of one `read` call. */
|
|
readMaxBytes?: number
|
|
/** Files at or above this size stream instead of loading whole into memory. */
|
|
readStreamMinSize?: number
|
|
}
|
|
```
|
|
|
|
Source: [`packages/fs/tool-fs/src/index.ts:31`](../packages/fs/tool-fs/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-tool-skill`
|
|
|
|
Requires: `tools` · `skills`
|
|
|
|
```ts config-catalog
|
|
/** Model-facing skill catalog configuration. */
|
|
export interface Config {
|
|
/** Maximum normalized description length rendered in the session catalog; minimum 3. */
|
|
catalogDescriptionMaxLength?: number
|
|
}
|
|
```
|
|
|
|
Source: [`packages/skill/tool-skill/src/index.ts:19`](../packages/skill/tool-skill/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-tool-subagent`
|
|
|
|
Requires: `tools` · `subagents`
|
|
|
|
```ts config-catalog
|
|
/** Config: which registered provider this tool delegates to, plus child defaults. */
|
|
export interface Config {
|
|
/** The `ctx.subagents` provider name to start runs on (e.g. `spawn`, `acp`). */
|
|
provider: string
|
|
/**
|
|
* The model-facing tool name to register (default `subagent`). To expose more
|
|
* than one transport, load this plugin once per provider — each load MUST set
|
|
* a distinct `toolName` (the tool registry rejects a duplicate name), e.g.
|
|
* `{ provider: 'spawn', toolName: 'subagent' }` and
|
|
* `{ provider: 'acp', toolName: 'subagent_acp' }`.
|
|
*/
|
|
toolName?: string
|
|
/**
|
|
* Default per-child agent options (model) applied to every spawned child.
|
|
* Omitted fields fall back to the child loop's own defaults.
|
|
*/
|
|
agentOptions?: AgentOptions
|
|
/**
|
|
* Per-child persona applied to every child this tool spawns: a scoped
|
|
* `deployment:persona` section shadowing the deployment's persona for the
|
|
* child alone. Requires the bound provider's `persona` capability
|
|
* (in-process backends support it; a request against one that doesn't is
|
|
* rejected at start). Omitted ⇒ the child renders the deployment persona.
|
|
*/
|
|
persona?: string
|
|
/**
|
|
* Tool scoping applied to every child this tool spawns (see
|
|
* `SubagentStartRequest.toolFilter`): the named global tools vanish from
|
|
* the child's prompt AND refuse to execute. Requires the provider's
|
|
* `toolFilter` capability. Unknown names fail the spawn loudly. Note the
|
|
* child otherwise sees every global tool — including this delegation tool
|
|
* itself; `deny`-listing it (or setting `maxDepth`) is how a deployment
|
|
* bounds recursion.
|
|
*/
|
|
toolFilter?: {
|
|
/** Global tool names the child keeps; everything else is removed. */
|
|
allow?: string[]
|
|
/** Global tool names removed from the child. */
|
|
deny?: string[]
|
|
}
|
|
/**
|
|
* Recursion cap applied to every child this tool spawns (see
|
|
* `SubagentStartRequest.maxDepth`): a spawn whose child would sit deeper
|
|
* than this in the delegation tree is rejected. Requires the provider's
|
|
* `depthLimit` capability. Must be a non-negative safe integer and is
|
|
* validated when the plugin loads. Omitted ⇒ unbounded (bound it in
|
|
* deployments that expose this tool to children).
|
|
*/
|
|
maxDepth?: number
|
|
}
|
|
```
|
|
|
|
Depends on: [`AgentOptions`](../packages/core/agent/src/index.ts)
|
|
|
|
Source: [`packages/subagent/tool-subagent/src/index.ts:24`](../packages/subagent/tool-subagent/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-tool-web`
|
|
|
|
Requires: `tools` · `web` · `systemPrompt`
|
|
|
|
```ts config-catalog
|
|
/** Plugin config: which web tools to register, the source cap, and per-tool budgets. */
|
|
export interface Config {
|
|
/** Register `web_search`. Defaults to true. */
|
|
search?: boolean
|
|
/** Register `web_fetch`. Defaults to true. */
|
|
fetch?: boolean
|
|
/** Upper bound on sources returned by one `web_search` call. */
|
|
searchMaxResults?: number
|
|
/** Cooperative timeout budget (ms) for `web_fetch`. Defaults to 30000. */
|
|
fetchTimeoutMs?: number
|
|
/** Cooperative timeout budget (ms) for `web_search`. Defaults to 30000. */
|
|
searchTimeoutMs?: number
|
|
}
|
|
```
|
|
|
|
Source: [`packages/web/tool-web/src/index.ts:29`](../packages/web/tool-web/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-tool-workflow`
|
|
|
|
Requires: `tools` · `workflows` · `systemPrompt`
|
|
|
|
```ts config-catalog
|
|
/** Config: the model-facing tool name plus result rendering caps. */
|
|
export interface Config {
|
|
/** The model-facing tool name to register (default `workflow`). */
|
|
toolName?: string
|
|
/** Rendered-result ceiling, in characters: a longer JSON value is truncated with a notice (default 50000). */
|
|
maxResultChars?: number
|
|
}
|
|
```
|
|
|
|
Source: [`packages/workflow/tool-workflow/src/index.ts:26`](../packages/workflow/tool-workflow/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-tools`
|
|
|
|
Requires: `systemPrompt`
|
|
|
|
```ts config-catalog
|
|
/** Plugin config: how the registered tools are presented to the model. */
|
|
export interface Config {
|
|
/**
|
|
* Model presentation. `native` (default) sends every visible schema; `code`
|
|
* sends only `run_code` plus a generated SDK prompt; `both` sends both forms.
|
|
* Code modes require a TypeScript runtime and fail prompt assembly when it is
|
|
* absent or mismatched. Under `code`, native names in `toolOrder` are invalid.
|
|
*/
|
|
mode?: ToolPresentationMode
|
|
}
|
|
|
|
/** How the registry presents its tools to the model (see {@link Config.mode}). */
|
|
export type ToolPresentationMode = 'native' | 'code' | 'both'
|
|
```
|
|
|
|
Source: [`packages/core/tools/src/index.ts:308`](../packages/core/tools/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-user-approval`
|
|
|
|
```ts config-catalog
|
|
/** Plugin config. All optional — `static Config` supplies the defaults. */
|
|
export interface Config {
|
|
/**
|
|
* The deployment's default {@link ApprovalPolicy} for sessions without an
|
|
* `approval/policy` override — `'ask'` delegates to the composed answerers
|
|
* (fail-closed with none); `'never'` auto-rejects every ask without
|
|
* prompting (the deterministic CI/unattended stance).
|
|
*/
|
|
readonly policy?: ApprovalPolicy
|
|
}
|
|
|
|
/**
|
|
* A session's approval policy — what happens to an {@link ApprovalService}
|
|
* ask BEFORE any interactive answerer sees it:
|
|
*
|
|
* - `'ask'` (the default) — delegate to the composed answerers; with none
|
|
* composed the chain falls through to the fail-closed `'unavailable'`
|
|
* (exactly today's behavior).
|
|
* - `'never'` — never prompt anyone: every ask resolves `'rejected'`
|
|
* deterministically. The strict headless stance (CI, unattended runs) and
|
|
* the only policy value stated in the system prompt — unlike `'ask'`, its
|
|
* outcome is knowable without asking, so stating it cannot overclaim.
|
|
*/
|
|
export type ApprovalPolicy = 'ask' | 'never'
|
|
```
|
|
|
|
Source: [`packages/ui/user-approval/src/index.ts:214`](../packages/ui/user-approval/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-web`
|
|
|
|
```ts config-catalog
|
|
/**
|
|
* Config for the web seam. `searchProvider` / `fetchProvider` pin which provider
|
|
* wins for each capability; both are optional (a single registered usable
|
|
* provider auto-selects). Operational overrides such as environment variables
|
|
* must feed these same fields rather than introduce a hidden priority chain.
|
|
*/
|
|
export interface WebServiceConfig {
|
|
/** Explicit search provider id. Omitted = auto-select when exactly one usable. */
|
|
readonly searchProvider?: string
|
|
/** Explicit fetch provider id. Omitted = auto-select when exactly one usable. */
|
|
readonly fetchProvider?: string
|
|
}
|
|
```
|
|
|
|
Source: [`packages/web/web/src/index.ts:59`](../packages/web/web/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-web-fetch-local`
|
|
|
|
Requires: `web`
|
|
|
|
```ts config-catalog
|
|
/** Plugin config: the provider's transport and size limits plus its `User-Agent` (all defaulted). */
|
|
export interface Config {
|
|
/** Maximum accepted request URL length. */
|
|
maxUrlLength?: number
|
|
/** Maximum response body size in bytes. */
|
|
maxResponseBytes?: number
|
|
/** Maximum decoded body length in characters. */
|
|
maxBodyChars?: number
|
|
/** Default fetch timeout in milliseconds. */
|
|
timeoutMs?: number
|
|
/** Upper bound for a per-request timeout override. */
|
|
maxTimeoutMs?: number
|
|
/** Maximum number of same-origin redirect hops to follow. */
|
|
maxRedirects?: number
|
|
/** `User-Agent` header sent on every request. */
|
|
userAgent?: string
|
|
}
|
|
```
|
|
|
|
Source: [`packages/web/web-fetch-local/src/index.ts:34`](../packages/web/web-fetch-local/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-web-search-deepseek`
|
|
|
|
Requires: `web`
|
|
|
|
```ts config-catalog
|
|
/** Plugin config (all optional — `apply` fills env-var and constant defaults). */
|
|
export interface Config {
|
|
/** DeepSeek API key. Falls back to `$DEEPSEEK_API_KEY`. Empty → unavailable. */
|
|
apiKey?: string
|
|
/** Anthropic-compatible endpoint base; `/messages` is appended. */
|
|
baseURL?: string
|
|
/** Anthropic-format model name. Defaults to `deepseek-v4-flash`. */
|
|
model?: string
|
|
/** `anthropic-version` header value. Defaults to `2023-06-01`. */
|
|
apiVersion?: string
|
|
/** Upper bound on generated tokens for the Messages request. Defaults to 4096. */
|
|
maxTokens?: number
|
|
/** Maximum `web_search` server-tool uses per request. Defaults to 5. */
|
|
maxUses?: number
|
|
}
|
|
```
|
|
|
|
Source: [`packages/web/web-search-deepseek/src/index.ts:40`](../packages/web/web-search-deepseek/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-web-search-exa`
|
|
|
|
Requires: `web`
|
|
|
|
```ts config-catalog
|
|
/** Plugin config (all optional — `apply` fills env-var and constant defaults). */
|
|
export interface Config {
|
|
/** Exa API key. Falls back to `$EXA_API_KEY`. Empty → provider unavailable. */
|
|
apiKey?: string
|
|
/** Endpoint base; `/search` is appended. Defaults to the public API. */
|
|
baseURL?: string
|
|
/** Retrieval mode sent as Exa's `type`. Defaults to `auto`. */
|
|
searchType?: 'auto' | 'keyword' | 'neural'
|
|
/** Default result count when a request carries no `maxResults`. Omitted = none. */
|
|
numResults?: number
|
|
/** Highlight sentences requested per result. Defaults to 1. */
|
|
highlightsPerResult?: number
|
|
}
|
|
```
|
|
|
|
Source: [`packages/web/web-search-exa/src/index.ts:39`](../packages/web/web-search-exa/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-web-search-perplexity`
|
|
|
|
Requires: `web`
|
|
|
|
```ts config-catalog
|
|
/** Plugin config (all optional — `apply` fills env-var and constant defaults). */
|
|
export interface Config {
|
|
/** Perplexity API key. Falls back to `$PERPLEXITY_API_KEY`. Empty → unavailable. */
|
|
apiKey?: string
|
|
/** Endpoint base; `/chat/completions` is appended. Defaults to the public API. */
|
|
baseURL?: string
|
|
/** Search model name. Defaults to `sonar`. */
|
|
model?: string
|
|
/** Upper bound on generated answer tokens. Defaults to 1024. */
|
|
maxTokens?: number
|
|
/** Recency window sent as `search_recency_filter`. Omitted = no filter. */
|
|
searchRecency?: 'day' | 'week' | 'month' | 'year'
|
|
}
|
|
```
|
|
|
|
Source: [`packages/web/web-search-perplexity/src/index.ts:33`](../packages/web/web-search-perplexity/src/index.ts)
|
|
|
|
## `@deepseek-ai/dsh-workflow-workerthread`
|
|
|
|
Requires: `subagents`
|
|
|
|
```ts config-catalog
|
|
/** Plugin config (all optional — `static Config` supplies the defaults). */
|
|
export interface Config {
|
|
/** The `ctx.subagents` provider children run on (default `spawn`). */
|
|
provider?: string
|
|
/** Concurrent `agent()` ceiling; `0` (the default) auto-resolves to `min(16, max(1, cores - 2))`. */
|
|
maxConcurrentAgents?: number
|
|
/** Total `agent()` calls one run may start — the runaway-loop backstop (default 1000). */
|
|
maxTotalAgents?: number
|
|
/** Items accepted by a single `parallel()`/`pipeline()` call (default 4096). */
|
|
maxItemsPerCall?: number
|
|
/** vm timeout for the script's initial synchronous slice, inside the worker (default 5000 ms). */
|
|
syncTimeoutMs?: number
|
|
/**
|
|
* How long after a cancellation an unsettled script may keep running before
|
|
* the run force-settles `cancelled` and its worker is TERMINATED (default
|
|
* 5000 ms); also bounds `dispose()`.
|
|
*/
|
|
disposeGraceMs?: number
|
|
}
|
|
```
|
|
|
|
Source: [`packages/workflow/workflow-workerthread/src/index.ts:36`](../packages/workflow/workflow-workerthread/src/index.ts)
|
|
|
|
## Loadable plugins with no config
|
|
|
|
These load from a `cordis.yml` entry with no `config:` block; they declare no config surface.
|
|
|
|
- `@deepseek-ai/dsh-agent` ([`packages/core/agent/src/index.ts`](../packages/core/agent/src/index.ts))
|
|
- `@deepseek-ai/dsh-fs-policy` ([`packages/fs/fs-policy/src/index.ts`](../packages/fs/fs-policy/src/index.ts))
|
|
- `@deepseek-ai/dsh-invariants` — requires `sessions` ([`packages/support/invariants/src/index.ts`](../packages/support/invariants/src/index.ts))
|
|
- `@deepseek-ai/dsh-llm` ([`packages/llm/llm/src/index.ts`](../packages/llm/llm/src/index.ts))
|
|
- `@deepseek-ai/dsh-session` ([`packages/core/session/src/index.ts`](../packages/core/session/src/index.ts))
|
|
- `@deepseek-ai/dsh-subagent` ([`packages/subagent/subagent/src/index.ts`](../packages/subagent/subagent/src/index.ts))
|
|
- `@deepseek-ai/dsh-timeout-policy` — requires `tools` ([`packages/timeout/timeout-policy/src/index.ts`](../packages/timeout/timeout-policy/src/index.ts))
|
|
- `@deepseek-ai/dsh-tool-ask-user` — requires `tools` · `userInteraction` ([`packages/ui/tool-ask-user/src/index.ts`](../packages/ui/tool-ask-user/src/index.ts))
|
|
- `@deepseek-ai/dsh-tool-bash` — requires `tools` · `bash` · `systemPrompt` ([`packages/bash/tool-bash/src/index.ts`](../packages/bash/tool-bash/src/index.ts))
|
|
- `@deepseek-ai/dsh-tool-todo` — requires `tools` ([`packages/todo/tool-todo/src/index.ts`](../packages/todo/tool-todo/src/index.ts))
|
|
- `@deepseek-ai/dsh-user-interaction` ([`packages/ui/user-interaction/src/index.ts`](../packages/ui/user-interaction/src/index.ts))
|
|
|
|
## Seam packages (not directly loadable)
|
|
|
|
Abstract service classes — a deployment loads a concrete implementation package instead ([capability seams](rfc/implemented/architecture/2026-06-13-capability-seams.md)).
|
|
|
|
- `@deepseek-ai/dsh-bash` — abstract `BashExecutor` ([`packages/bash/bash/src/index.ts`](../packages/bash/bash/src/index.ts))
|
|
- `@deepseek-ai/dsh-code-runtime` — abstract `CodeRuntime` ([`packages/code-runtime/code-runtime/src/index.ts`](../packages/code-runtime/code-runtime/src/index.ts))
|
|
- `@deepseek-ai/dsh-compact` — abstract `CompactService` ([`packages/compact/compact/src/index.ts`](../packages/compact/compact/src/index.ts))
|
|
- `@deepseek-ai/dsh-fs` — abstract `FileSystem` ([`packages/fs/fs/src/index.ts`](../packages/fs/fs/src/index.ts))
|
|
- `@deepseek-ai/dsh-sandbox` — abstract `SandboxProvider` ([`packages/sandbox/sandbox/src/index.ts`](../packages/sandbox/sandbox/src/index.ts))
|
|
- `@deepseek-ai/dsh-session-persistence` — abstract `SessionPersistence` ([`packages/session-persistence/session-persistence/src/index.ts`](../packages/session-persistence/session-persistence/src/index.ts))
|
|
- `@deepseek-ai/dsh-workflow` — abstract `WorkflowService` ([`packages/workflow/workflow/src/index.ts`](../packages/workflow/workflow/src/index.ts))
|
|
|
|
## Library packages (no plugin entry)
|
|
|
|
Imported as libraries by other packages; a `cordis.yml` cannot load them.
|
|
|
|
- `@deepseek-ai/dsh-acp-snapshot` ([`packages/support/acp-snapshot/src/index.ts`](../packages/support/acp-snapshot/src/index.ts))
|
|
- `@deepseek-ai/dsh-app-boot` ([`packages/ui/app-boot/src/index.ts`](../packages/ui/app-boot/src/index.ts))
|
|
- `@deepseek-ai/dsh-brand` ([`packages/util/brand/src/index.ts`](../packages/util/brand/src/index.ts))
|
|
- `@deepseek-ai/dsh-hook-protocol` ([`packages/hooks/hook-protocol/src/index.ts`](../packages/hooks/hook-protocol/src/index.ts))
|
|
- `@deepseek-ai/dsh-jsonrpc-agent` ([`packages/ui/jsonrpc-agent/src/index.ts`](../packages/ui/jsonrpc-agent/src/index.ts))
|
|
- `@deepseek-ai/dsh-scope` ([`packages/core/scope/src/index.ts`](../packages/core/scope/src/index.ts))
|
|
- `@deepseek-ai/dsh-subagent-inprocess` ([`packages/subagent/subagent-inprocess/src/index.ts`](../packages/subagent/subagent-inprocess/src/index.ts))
|
|
- `@deepseek-ai/dsh-subagent-subprocess` ([`packages/subagent/subagent-subprocess/src/index.ts`](../packages/subagent/subagent-subprocess/src/index.ts))
|
|
- `@deepseek-ai/dsh-timeout` ([`packages/util/timeout/src/index.ts`](../packages/util/timeout/src/index.ts))
|