2026-07-06 21:57:17 +08:00
<!-- Generated by scripts/gen-config-catalog.ts — do not edit by hand.
Run `pnpm run gen-config-catalog` to regenerate. -->
# Plugin Config Catalog
2026-07-06 23:16:29 +08:00
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.
2026-07-06 21:57:17 +08:00
2026-07-06 23:06:03 +08:00
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.
2026-07-06 21:57:17 +08:00
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`
2026-07-24 01:40:25 +08:00
Requires: `agents`
2026-07-06 21:57:17 +08:00
```ts config-catalog
2026-07-24 01:40:25 +08:00
/** Plugin config: the provider/model target used for each ACP-created agent. */
2026-07-06 21:57:17 +08:00
export interface AcpConfig {
2026-07-14 21:57:52 +08:00
/** Provider route for created agents. */
provider?: string
2026-07-24 01:40:25 +08:00
/** Model name for created agents. */
2026-07-06 21:57:17 +08:00
model?: string
2026-07-19 02:18:59 +08:00
/** Runtime-only transport override; production uses stdio. */
2026-07-06 21:57:17 +08:00
stream?: Stream
}
` ``
Depends on: ` Stream` (` @agentclientprotocol/sdk `)
2026-07-24 01:40:25 +08:00
Source: [` packages/acp/acp/src/index.ts:56`](../packages/acp/acp/src/index.ts)
2026-07-06 21:57:17 +08:00
2026-07-15 15:57:57 +08:00
## ` @deepseek -ai/dsh-acp-demo`
2026-07-06 21:57:17 +08:00
` ``ts config-catalog
/**
2026-07-24 01:40:25 +08:00
* App config: the swappable per-deployment values. ` provider` and ` model` configure
* each agent the ACP bridge creates at ` session/new`; ` persona` is the
2026-07-07 11:03:11 +08:00
* deployment persona (forwarded to the system-prompt plugin); ` toolOrder` is
* the explicit model-facing tool order (forwarded to the system-prompt plugin);
2026-07-08 12:58:23 +08:00
* ` tools` is the tool registry's config (its presentation ` mode`, forwarded
2026-07-15 15:57:57 +08:00
* through agent-spine-demo); ` persistenceRoot` is the JSONL backend's directory.
2026-07-06 21:57:17 +08:00
*/
export interface Config {
2026-07-14 21:57:52 +08:00
/** Provider route for ACP-created agents. */
provider: string
2026-07-06 21:57:17 +08:00
/** Model name for ACP-created agents (must have a registered adapter). */
model: string
2026-07-18 14:59:26 +08:00
/** Bundled agent-loop concurrency cap; ` 1` is serial and omission uses its default. */
2026-07-16 15:52:35 +08:00
maxParallelToolCalls?: number
2026-07-06 21:57:17 +08:00
/** Deployment persona (the system-prompt plugin's ` persona` config). */
persona?: string
2026-07-07 11:03:11 +08:00
/** Explicit model-facing tool order (the system-prompt plugin's ` toolOrder` config; see dsh-system-prompt). */
toolOrder?: string[]
2026-07-15 15:57:57 +08:00
/** Tool-registry config — its presentation ` mode` (forwarded through agent-spine-demo; see dsh-tools). */
2026-07-08 12:58:23 +08:00
tools?: ToolsConfig
2026-07-12 15:41:42 +08:00
/** DeepSeek Harness home directory exposed to bash and used for local skill discovery. */
dshHome?: string
2026-07-21 14:09:17 +08:00
/** Fallback session-title limits forwarded through agent-spine-demo. */
sessionTitle?: NonNullable<agentCore.Config['sessionTitle']>
2026-07-23 20:16:14 +08:00
/** Directory for JSONL sessions and the derived query index. Defaults to ` ./.sessions`. */
2026-07-06 21:57:17 +08:00
persistenceRoot?: string
2026-07-26 23:44:52 +08:00
/** Write delta-chunk runs as packed storage rows (the JSONL backend's ` packChunks`). Defaults to ` true`. */
2026-07-15 21:26:36 +08:00
packChunks?: boolean
2026-07-20 00:06:21 +08:00
/** JSONL artifact encoding; defaults to checksummed Zstandard frames. */
persistenceCompression?: JsonlCompression
2026-07-12 12:09:35 +08:00
/** Controls automatic AGENTS.md/CLAUDE.md loading; configure a byte budget or set ` false`. */
workspaceContext: agentCore.Config['workspaceContext']
2026-07-15 15:57:57 +08:00
/** Skill registry, local-provider, and model-facing consumer config forwarded to agent-spine-demo. */
2026-07-09 23:11:10 +08:00
skills?: agentCore.SkillConfig
2026-07-12 16:00:56 +08:00
/** Model-facing bash tool config forwarded through agent-core. */
toolBash?: NonNullable<agentCore.Config['toolBash']>
2026-07-17 17:29:38 +08:00
/** Generic background-task controls forwarded through agent-core; set false to omit their tool surface. */
2026-07-12 16:00:56 +08:00
toolTasks?: NonNullable<agentCore.Config['toolTasks']>
2026-07-24 01:40:25 +08:00
/** Persisted same-session goals; owner defaults enable them, or false disables the stack and tools. */
2026-07-19 23:55:33 +08:00
goals?: agentCore.GoalConfig | false
2026-07-20 03:34:19 +08:00
/** Bounded transient model-request retry policy forwarded through agent-core. */
llmRetry?: NonNullable<agentCore.Config['llmRetry']>
2026-07-06 21:57:17 +08:00
}
` ``
2026-07-24 01:40:25 +08:00
Depends on: [` agentCore`](../packages/examples/agent-spine-demo/src/index.ts) · [` JsonlCompression`](../packages/session-persistence/session-persistence-jsonl/src/index.ts) · [` ToolsConfig`](#deepseek-aidsh-tools)
2026-07-08 12:58:23 +08:00
2026-07-25 14:17:24 +08:00
Source: [` packages/examples/acp-demo/src/index.ts:39`](../packages/examples/acp-demo/src/index.ts)
2026-07-06 21:57:17 +08:00
2026-07-15 15:57:57 +08:00
## ` @deepseek -ai/dsh-agent-loop`
Requires: ` agents` · ` sessions` · ` llm` · ` tools` · ` systemPrompt`
` ``ts config-catalog
2026-07-16 14:36:16 +08:00
/** Agent-loop plugin configuration. */
2026-07-15 15:57:57 +08:00
export interface Config {
2026-07-16 11:36:16 +08:00
/**
2026-07-18 14:59:26 +08:00
* Maximum parallel-safe calls in flight per agent step. ` 1` is serial;
* omission defaults to {@link DEFAULT_MAX_PARALLEL_TOOL_CALLS}.
2026-07-16 11:36:16 +08:00
*/
maxParallelToolCalls?: number
2026-07-15 15:57:57 +08:00
/** Agents created or resumed at plugin startup. */
agents: (AgentOptions & {
2026-07-15 17:01:59 +08:00
/** Stable config label used in logs and as the fresh combined-id prefix. */
id: string
/** Optional stable identity; remounts resume its materialized history, while first use creates it fresh. */
sessionId?: SessionId
2026-07-15 15:57:57 +08:00
/** Optional workspace for a fresh session. */
cwd?: string
/** Persisted session to resume instead of creating a fresh session. */
resumeSessionId?: SessionId
})[]
}
` ``
2026-07-19 14:57:52 +08:00
Depends on: [` AgentOptions`](core-data-structures/core.md) · [` SessionId`](core-data-structures/core.md)
2026-07-15 15:57:57 +08:00
2026-07-24 16:07:49 +08:00
Source: [` packages/core/agent-loop/src/index.ts:360`](../packages/core/agent-loop/src/index.ts)
2026-07-15 15:57:57 +08:00
## ` @deepseek -ai/dsh-agent-spine-demo`
2026-07-06 21:57:17 +08:00
` ``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
2026-07-07 11:03:11 +08:00
* bridge, simply omits it), ` persona` and ` toolOrder` to the system-prompt
* plugin (the deployment's persona section and the explicit model-facing tool
2026-07-12 16:00:56 +08:00
* order), the ` tools` object to the tool registry (its presentation ` mode`),
2026-07-21 14:09:17 +08:00
* ` dshHome` to bash environment and local skill discovery, ` sessionTitle` to
* the fallback title service, ` skills` to the
2026-07-17 18:35:48 +08:00
* skill registry/local provider/tool consumer, ` workspaceContext` to the
2026-07-20 23:10:33 +08:00
* workspace-context loader, ` llmRetry` to the bounded request-recovery policy,
* and ` toolBash`/` toolTasks` to the model-facing tool plugins this bundle owns.
2026-07-21 01:13:28 +08:00
* ` goals` opts into and configures the persisted goal domain plus its model tool
* and same-session driver; ` invariants` configures global and package-filtered
* relational checks. Owner schemas supply defaults for optional input;
2026-07-17 18:35:48 +08:00
* workspace context instead requires an explicit byte budget or ` false` because
* it changes model-visible input. Producer opt-in stays producer-local:
* ` toolBash` configures bash only; independently composed producers keep their
* own config.
2026-07-06 21:57:17 +08:00
*/
export interface Config {
/** The agent-loop ` agents` list (see dsh-agent-loop's ` Config`). */
agents?: AgentLoopConfig['agents']
2026-07-18 14:59:26 +08:00
/** Agent-loop concurrency cap; ` 1` is serial. */
2026-07-16 14:56:02 +08:00
maxParallelToolCalls?: AgentLoopConfig['maxParallelToolCalls']
2026-07-06 21:57:17 +08:00
/** The deployment persona (see dsh-system-prompt's ` Config`). */
persona?: SystemPromptConfig['persona']
2026-07-07 11:03:11 +08:00
/** The explicit model-facing tool order (see dsh-system-prompt's ` Config`). */
toolOrder?: SystemPromptConfig['toolOrder']
2026-07-08 12:58:23 +08:00
/** The tool registry's config — its presentation ` mode` (see dsh-tools' ` Config`). */
tools?: ToolsConfig
2026-07-12 15:41:42 +08:00
/** DeepSeek Harness home directory shared by shell context and local skill discovery. */
dshHome?: string
2026-07-21 14:09:17 +08:00
/** Deterministic fallback and accepted-title limits; omission uses the bundle's example policy. */
sessionTitle?: SessionTitleConfig
2026-07-12 12:09:35 +08:00
/** Workspace-context loader controls with an explicit byte budget; set ` false` for hermetic prompts. */
workspaceContext: workspaceContext.Config | false
2026-07-10 14:19:06 +08:00
/** Skill registry, local provider, and model-facing consumer config. */
2026-07-09 23:11:10 +08:00
skills?: SkillConfig
2026-07-12 16:00:56 +08:00
/** Model-facing bash tool config, including this producer's background opt-in. */
toolBash?: toolBash.Config
2026-07-17 17:29:38 +08:00
/** Generic background-task controls; set false to keep the task service without model-facing task tools. */
toolTasks?: toolTasks.Config | false
2026-07-19 19:19:57 +08:00
/** Global enablement and package-name filters for invariant companions. */
invariants?: InvariantConfig
2026-07-19 23:55:33 +08:00
/** Opt-in persisted same-session goal stack; set false or omit to leave it unmounted. */
goals?: GoalConfig | false
2026-07-20 03:34:19 +08:00
/** Bounded transient model-request retry policy. */
llmRetry?: llmRetry.Config
2026-07-09 23:11:10 +08:00
}
2026-07-10 14:19:06 +08:00
/** Skill bundle config forwarded to the registry, local provider, and model-facing consumer. */
2026-07-09 23:11:10 +08:00
export interface SkillConfig {
2026-07-17 17:29:38 +08:00
/** Mount the bundled local skill provider and model-facing skill tool (default true). */
enabled?: boolean
2026-07-10 14:19:06 +08:00
/** Registry-level discovery cache settings. */
2026-07-09 23:11:10 +08:00
registry?: SkillRegistryConfig
/** Local filesystem skill provider settings. */
local?: SkillLocal.Config
2026-07-10 14:19:06 +08:00
/** Model-facing skill catalog and tool settings. */
tool?: toolSkill.Config
2026-07-06 21:57:17 +08:00
}
2026-07-19 23:55:33 +08:00
/** Persisted goal domain, model-tool policy, and same-session driver config. */
export interface GoalConfig {
/** Goal-domain creation defaults. */
domain?: GoalDomainConfig
/** Model-facing goal-tool authority policy. */
tool?: toolGoal.Config
}
2026-07-06 21:57:17 +08:00
` ``
2026-07-21 21:11:32 +08:00
Depends on: [` AgentLoopConfig`](#deepseek-aidsh-agent-loop) · [` GoalDomainConfig`](#deepseek-aidsh-goal) · [` InvariantConfig`](#deepseek-aidsh-invariants) · [` llmRetry`](../packages/llm/llm-retry/src/index.ts) · [` SessionTitleConfig`](#deepseek-aidsh-session-title) · [` SkillLocal`](../packages/skill/skill-local/src/index.ts) · [` SkillRegistryConfig`](#deepseek-aidsh-skill) · [` SystemPromptConfig`](#deepseek-aidsh-system-prompt) · [` toolBash`](../packages/bash/tool-bash/src/index.ts) · [` toolGoal`](../packages/goal/tool-goal/src/index.ts) · [` ToolsConfig`](#deepseek-aidsh-tools) · [` toolSkill`](../packages/skill/tool-skill/src/index.ts) · [` toolTasks`](../packages/tasks/tool-tasks/src/index.ts) · [` workspaceContext`](../packages/context/workspace-context/src/index.ts)
2026-07-06 21:57:17 +08:00
2026-07-21 21:11:32 +08:00
Source: [` packages/examples/agent-spine-demo/src/index.ts:87`](../packages/examples/agent-spine-demo/src/index.ts)
2026-07-06 21:57:17 +08:00
## ` @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
2026-07-17 17:21:10 +08:00
/** Per-stream spill-file cap; larger streams retain only their in-memory tail. */
maxSpillBytes?: number
/** Grace period for kill escalation and for inherited pipes after shell exit. */
2026-07-06 21:57:17 +08:00
graceMs?: number
}
` ``
2026-07-15 21:08:58 +08:00
Source: [` packages/bash/bash-local/src/index.ts:17`](../packages/bash/bash-local/src/index.ts)
2026-07-06 21:57:17 +08:00
2026-07-09 16:05:44 +08:00
## ` @deepseek -ai/dsh-bash-sandbox`
2026-07-14 20:05:57 +08:00
Requires: ` sandbox` · ` sandboxPolicy`
2026-07-09 16:05:44 +08:00
` ``ts config-catalog
/**
2026-07-14 20:05:57 +08:00
* Plugin config: the local executor's knobs, verbatim. The sandbox policy —
2026-07-21 00:44:28 +08:00
* the default mode and fallback ` workspace-write` root — is NOT here: it lives
* on ` ctx.sandboxPolicy` (` @deepseek -ai/dsh-sandbox-policy`), which resolves
* each calling session's mode and cwd for both enforcing families. The runner
* choice is likewise the ` ctx.sandbox` provider's config, not this executor's.
2026-07-09 16:05:44 +08:00
*/
2026-07-14 20:05:57 +08:00
export type Config = LocalConfig
2026-07-09 16:05:44 +08:00
` ``
2026-07-14 20:05:57 +08:00
Depends on: [` LocalConfig`](#deepseek-aidsh-bash-local)
2026-07-09 16:05:44 +08:00
2026-07-14 23:42:22 +08:00
Source: [` packages/bash/bash-sandbox/src/index.ts:27`](../packages/bash/bash-sandbox/src/index.ts)
2026-07-09 16:05:44 +08:00
2026-07-15 21:21:24 +08:00
## ` @deepseek -ai/dsh-cli-demo`
` ``ts config-catalog
2026-07-19 13:25:30 +08:00
/** App config forwarded to the spine, configured agent, and JSONL backend. */
2026-07-15 21:21:24 +08:00
export interface Config {
2026-07-19 13:25:30 +08:00
/** Provider route for the configured agent. */
2026-07-19 13:11:50 +08:00
provider: string
2026-07-19 13:25:30 +08:00
/** Model name for the configured agent; a matching adapter must be registered. */
2026-07-15 21:21:24 +08:00
model: string
2026-07-19 14:30:39 +08:00
/** Bundled agent-loop concurrency cap; ` 1` is serial and omission uses its default. */
maxParallelToolCalls?: number
2026-07-15 21:21:24 +08:00
/** Deployment persona forwarded to the system-prompt plugin. */
persona?: string
/** Explicit model-facing tool order forwarded to the system-prompt plugin. */
toolOrder?: string[]
/** Tool-registry presentation config forwarded through agent-spine-demo. */
tools?: ToolsConfig
2026-07-19 14:30:39 +08:00
/** DeepSeek Harness home directory exposed to bash and used for local skill discovery. */
dshHome?: string
2026-07-21 14:09:17 +08:00
/** Fallback session-title limits forwarded through agent-spine-demo. */
sessionTitle?: NonNullable<agentCore.Config['sessionTitle']>
2026-07-15 21:21:24 +08:00
/** Directory the JSONL session backend writes under. Defaults to ` ./.sessions`. */
persistenceRoot?: string
2026-07-20 00:06:21 +08:00
/** JSONL artifact encoding; defaults to checksummed Zstandard frames. */
persistenceCompression?: JsonlCompression
2026-07-15 21:21:24 +08:00
/** Skill registry, local-provider, and model-facing consumer config. */
skills?: agentCore.SkillConfig
2026-07-19 14:30:39 +08:00
/** Model-facing bash tool config forwarded through agent-spine-demo. */
toolBash?: NonNullable<agentCore.Config['toolBash']>
/** Generic background-task control-tool config forwarded through agent-spine-demo. */
toolTasks?: NonNullable<agentCore.Config['toolTasks']>
2026-07-20 03:34:19 +08:00
/** Bounded transient model-request retry policy forwarded through agent-spine-demo. */
llmRetry?: NonNullable<agentCore.Config['llmRetry']>
2026-07-19 13:11:50 +08:00
/** Controls automatic AGENTS.md/CLAUDE.md loading; configure a byte budget or set ` false`. */
workspaceContext: agentCore.Config['workspaceContext']
2026-07-15 21:21:24 +08:00
}
` ``
2026-07-20 00:06:21 +08:00
Depends on: [` agentCore`](../packages/examples/agent-spine-demo/src/index.ts) · [` JsonlCompression`](../packages/session-persistence/session-persistence-jsonl/src/index.ts) · [` ToolsConfig`](#deepseek-aidsh-tools)
2026-07-15 21:21:24 +08:00
2026-07-21 14:50:06 +08:00
Source: [` packages/examples/cli-demo/src/index.ts:26`](../packages/examples/cli-demo/src/index.ts)
2026-07-15 21:21:24 +08:00
2026-07-25 02:15:58 +08:00
## ` @deepseek -ai/dsh-client-hmr`
Requires: ` clientModuleHost` · ` httpServer`
` ``ts config-catalog
/** Plugin config, validated by the same-named schemastery schema. */
export interface Config {
/** Bundle stat-poll interval in milliseconds (default 500, the build-side watcher's polling default). */
pollIntervalMs?: number
}
` ``
2026-07-25 14:24:40 +08:00
Source: [` packages/client/hmr/src/index.ts:29`](../packages/client/hmr/src/index.ts)
2026-07-25 02:15:58 +08:00
2026-07-08 11:00:06 +08:00
## ` @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
2026-07-08 12:55:14 +08:00
/**
2026-07-22 19:57:44 +08:00
* Hard cap for serialized log-array, completion-value, and failure-message payloads;
* fixed result-envelope syntax is excluded.
2026-07-08 12:55:14 +08:00
*/
2026-07-21 04:34:14 +08:00
maxOutputBytes?: number
2026-07-08 11:00:06 +08:00
/** The worker's max old-generation heap in MiB (` resourceLimits`); overflow kills the worker, surfacing as kind ` 'worker-exit'`. */
maxOldGenerationSizeMb?: number
}
` ``
2026-07-22 19:09:27 +08:00
Source: [` packages/code-runtime/code-runtime-worker/src/index.ts:24`](../packages/code-runtime/code-runtime-worker/src/index.ts)
2026-07-06 21:57:17 +08:00
## ` @deepseek -ai/dsh-compact-basic`
2026-07-15 14:47:29 +08:00
Requires: ` llm` · ` tokenMeter`
2026-07-06 21:57:17 +08:00
` ``ts config-catalog
2026-07-20 15:34:00 +08:00
/** Basic compaction configuration with an optional exact-target policy table. */
export interface BasicCompactConfig extends CompactPolicyConfig {
/** Exact provider/model overrides; duplicate targets fail plugin load. */
modelPolicies?: ModelCompactPolicyConfig[]
/** Enable automatic post-step pressure and overflow-recovery listeners. Defaults to ` true`. */
auto?: boolean
}
/** Policy fields shared by the default policy and exact model overrides. */
export interface CompactPolicyConfig {
/** Compact at this fraction of the model's context window. Defaults to ` 0.8`. */
2026-07-16 12:58:07 +08:00
thresholdRatio?: number
2026-07-20 15:34:00 +08:00
/** Recent context retained as a fraction of the model's window. Defaults to ` 0.16`. */
retainRatio?: number
/** Absolute recent-context budget; mutually exclusive with ` retainRatio`. */
2026-07-16 12:58:07 +08:00
retainTokens?: number
2026-07-20 15:34:00 +08:00
/** Summary provider; set together with ` summarizationModel`, or inherit the conversation target. */
2026-07-17 22:38:46 +08:00
summarizationProvider?: string
2026-07-20 15:34:00 +08:00
/** Summary model; set together with ` summarizationProvider`, or inherit the conversation target. */
2026-07-15 14:47:29 +08:00
summarizationModel?: string
/** Provider generation cap for summarization. Defaults to ` 8192`. */
maxTokens?: number
/** Extra attempts after the first compaction when pressure remains above threshold. Defaults to ` 1`. */
compactionRetries?: number
2026-07-15 16:50:44 +08:00
/** Maximum retries after canonical context overflow; ` 0` disables recovery. Defaults to ` 1`. */
maxOverflowRetries?: number
2026-07-20 15:34:00 +08:00
}
/** Exact provider/model override merged over the default compaction policy. */
export interface ModelCompactPolicyConfig extends CompactPolicyConfig {
/** Registered provider route to match. */
provider: string
/** Exact routed model id to match within ` provider`. */
model: string
2026-07-15 14:47:29 +08:00
}
2026-07-06 21:57:17 +08:00
` ``
2026-07-20 15:34:00 +08:00
Source: [` packages/compact/compact-basic/src/types.ts:38`](../packages/compact/compact-basic/src/types.ts)
2026-07-06 21:57:17 +08:00
2026-07-16 18:51:26 +08:00
## ` @deepseek -ai/dsh-compact-tool-result-prune`
` ``ts config-catalog
/** Character-budget policy for deterministic tool-result pruning. */
export interface ToolResultPruneConfig {
/** Prune when total text exceeds this many Unicode code points. Defaults to ` 8192`. */
thresholdChars?: number
/** Maximum leading Unicode code points retained. Defaults to ` 4096`. */
headChars?: number
/** Maximum trailing Unicode code points retained. Defaults to ` 1024`. */
tailChars?: number
}
` ``
Source: [` packages/compact/compact-tool-result-prune/src/types.ts:4`](../packages/compact/compact-tool-result-prune/src/types.ts)
2026-07-06 21:57:17 +08:00
## ` @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
}
` ``
2026-07-15 13:07:11 +08:00
Source: [` packages/fs/fs-local/src/index.ts:38`](../packages/fs/fs-local/src/index.ts)
2026-07-06 21:57:17 +08:00
2026-07-14 20:05:57 +08:00
## ` @deepseek -ai/dsh-fs-sandbox`
Requires: ` sandboxPolicy`
` ``ts config-catalog
/**
* Plugin config: the local backend's knobs, verbatim (only ` cwd`, the resolve
* base for relative paths). The sandbox default (mode + ` workspace-write`
2026-07-21 00:44:28 +08:00
* fallback root) is NOT here — ` ctx.sandboxPolicy` resolves each calling
* session for both enforcing families.
2026-07-14 20:05:57 +08:00
*/
export type Config = LocalConfig
` ``
Depends on: [` LocalConfig`](#deepseek-aidsh-fs-local)
Source: [` packages/fs/fs-sandbox/src/index.ts:49`](../packages/fs/fs-sandbox/src/index.ts)
2026-07-19 18:47:34 +08:00
## ` @deepseek -ai/dsh-goal`
Requires: ` agents`
` ``ts config-catalog
/** Deployment defaults for goal creation. */
export interface Config {
/** Total rounds used when a create request omits its own cap. */
defaultMaxGoalRounds?: number
}
` ``
Source: [` packages/goal/goal/src/index.ts:56`](../packages/goal/goal/src/index.ts)
2026-07-06 21:57:17 +08:00
## ` @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.
2026-07-14 14:37:16 +08:00
* Process-level: read once at load, a relative path resolves against the process
2026-07-06 21:57:17 +08:00
* 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
}
` ``
2026-07-14 18:04:05 +08:00
Source: [` packages/hooks/hooks-claude/src/index.ts:44`](../packages/hooks/hooks-claude/src/index.ts)
2026-07-06 21:57:17 +08:00
## ` @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 {
/**
2026-07-14 14:37:16 +08:00
* Path to a Codex ` hooks.json`. Process-level: read once at load, a relative
2026-07-06 21:57:17 +08:00
* 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
}
` ``
2026-07-14 18:04:05 +08:00
Source: [` packages/hooks/hooks-codex/src/index.ts:42`](../packages/hooks/hooks-codex/src/index.ts)
2026-07-06 21:57:17 +08:00
2026-07-25 02:15:58 +08:00
## ` @deepseek -ai/dsh-host-apiproxy`
2026-07-25 16:04:48 +08:00
Requires: ` agents` · ` sessions` · ` tools` · ` userInteraction` · ` workspace`
2026-07-25 02:15:58 +08:00
` ``ts config-catalog
2026-07-25 16:04:48 +08:00
/** Gateway plugin config: host-level agent routing and Workspace creation root. */
2026-07-25 02:15:58 +08:00
export interface Config {
/** Default provider route for created/resumed agents. */
provider: string
/** Default model id. */
model: string
2026-07-25 16:04:48 +08:00
/** Parent directory for name-created Workspaces; defaults to the Host cwd. */
workspaceRoot?: string
2026-07-25 02:15:58 +08:00
}
` ``
2026-07-25 16:04:48 +08:00
Source: [` packages/host/apiproxy/src/index.ts:33`](../packages/host/apiproxy/src/index.ts)
2026-07-25 02:15:58 +08:00
## ` @deepseek -ai/dsh-host-webserver`
` ``ts config-catalog
/** Gateway config: listen address plus the static dist anchor (injected by the composing app, never self-resolved). */
export interface Config {
/** Listen host; the two supported values are loopback and all-interfaces. */
host: '127.0.0.1' | '0.0.0.0'
/** Listen port; zero requests an OS-assigned port. */
port: number
/** Absolute path of index.html inside the static root (dist location is workspace knowledge of the app). */
distIndex: string
}
` ``
Source: [` packages/host/webserver/src/index.ts:39`](../packages/host/webserver/src/index.ts)
2026-07-19 19:19:57 +08:00
## ` @deepseek -ai/dsh-invariants`
` ``ts config-catalog
/** Runtime invariant selection configured on the service plugin. */
export interface Config {
/** Global switch; defaults to ` true`. */
readonly enabled?: boolean
/** Case-sensitive JavaScript regex sources that admit package names; empty admits all. */
readonly package_allowlist?: string[]
/** Case-sensitive JavaScript regex sources that exclude package names after allowlist matching. */
readonly package_blocklist?: string[]
}
` ``
Source: [` packages/support/invariants/src/index.ts:15`](../packages/support/invariants/src/index.ts)
2026-07-11 14:08:12 +08:00
## ` @deepseek -ai/dsh-jsonrpc`
Requires: ` agents`
` ``ts config-catalog
2026-07-17 17:29:38 +08:00
/** JSON-RPC deployment config plus runtime-only test seams. */
2026-07-11 14:08:12 +08:00
export interface JsonRpcConfig {
2026-07-17 17:29:38 +08:00
/** Report max-token turn/subagent termination as a successful SDK result. */
maxTokensAsSuccess?: boolean
2026-07-14 00:40:36 +08:00
/** Transport input override; production uses ` process.stdin`. */
2026-07-11 14:08:12 +08:00
input?: Readable
2026-07-14 00:40:36 +08:00
/** Transport output override; production uses ` process.stdout`. */
2026-07-11 14:08:12 +08:00
output?: Writable
2026-07-14 00:40:36 +08:00
/** Process-exit override; production uses ` process.exit`. */
2026-07-11 14:08:12 +08:00
exit?: (code: number) => void
}
` ``
Depends on: ` Readable` (` node:stream`) · ` Writable` (` node:stream`)
2026-07-14 00:40:36 +08:00
Source: [` packages/ui/jsonrpc/src/index.ts:26`](../packages/ui/jsonrpc/src/index.ts)
2026-07-11 14:08:12 +08:00
2026-07-06 21:57:17 +08:00
## ` @deepseek -ai/dsh-llm-deepseek`
Requires: ` llm`
` ``ts config-catalog
2026-07-07 09:34:12 +08:00
/**
* Plugin config, validated by the same-named schemastery schema. Every field
* is optional in yml: credentials/endpoint fall back to the environment (a
2026-07-25 07:47:51 +08:00
* missing API key fails plugin load, not the first call), omitted thinking
* mode uses the provider default, and omitted reasoning effort resolves to
* ` high`.
2026-07-07 09:34:12 +08:00
*/
2026-07-06 21:57:17 +08:00
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
2026-07-26 13:42:02 +08:00
/** Deployment thinking policy; ` disabled` limits every conversation request to ` off`. */
2026-07-06 21:57:17 +08:00
thinking?: 'enabled' | 'disabled'
2026-07-26 13:42:02 +08:00
/** Default thinking effort (default ` high`); ` off` disables thinking per request. */
reasoningEffort?: 'off' | 'high' | 'max'
2026-07-23 11:51:52 +08:00
/** Positive context capacity used when the selected model has no exact value. */
defaultContextWindow?: number
2026-07-15 13:33:42 +08:00
/** Advisory models shown by discovery consumers; defaults to V4 Flash and V4 Pro. */
models?: DeepSeekCatalogModel[]
2026-07-20 03:34:19 +08:00
/** Maximum provider idle time while one stream read is outstanding (default five minutes). */
streamIdleTimeoutMs?: number
2026-07-15 13:33:42 +08:00
}
2026-07-26 22:45:33 +08:00
/** One optional model entry advertised by the direct-fetch adapter. */
2026-07-15 13:33:42 +08:00
export interface DeepSeekCatalogModel {
/** Wire model id accepted by the configured endpoint. */
id: string
/** Selector label; defaults to {@link id}. */
name?: string
/** Optional selector detail for deployments with similar model variants. */
description?: string
2026-07-20 15:34:00 +08:00
/** Known combined request/response context capacity; omitted when deployment metadata is unavailable. */
contextWindow?: number
2026-07-06 21:57:17 +08:00
}
` ``
2026-07-25 07:47:51 +08:00
Source: [` packages/llm/llm-deepseek/src/index.ts:35`](../packages/llm/llm-deepseek/src/index.ts)
2026-07-06 21:57:17 +08:00
## ` @deepseek -ai/dsh-llm-pi-ai`
Requires: ` llm`
` ``ts config-catalog
2026-07-14 21:57:52 +08:00
/** Plugin configuration: the non-empty provider profiles this instance owns. */
2026-07-06 21:57:17 +08:00
export interface Config {
2026-07-14 21:57:52 +08:00
/** Non-empty set of pi-ai provider routes this adapter instance owns. */
providers: PiAiProviderProfile[]
2026-07-06 21:57:17 +08:00
}
2026-07-14 21:57:52 +08:00
/** 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. */
2026-07-26 13:07:27 +08:00
reasoning?: ModelThinkingLevel
2026-07-14 21:57:52 +08:00
/** 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
2026-07-20 03:34:19 +08:00
/** Maximum provider idle time while one stream read is outstanding. */
streamIdleTimeoutMs?: number
2026-07-14 21:57:52 +08:00
}
2026-07-06 21:57:17 +08:00
` ``
2026-07-26 13:07:27 +08:00
Depends on: ` CacheRetention` (` @earendil -works/pi-ai`) · ` ModelThinkingLevel` (` @earendil -works/pi-ai`) · ` ThinkingBudgets` (` @earendil -works/pi-ai`) · ` Transport` (` @earendil -works/pi-ai`)
2026-07-14 21:57:52 +08:00
2026-07-20 03:34:19 +08:00
Source: [` packages/llm/llm-pi-ai/src/config.ts:48`](../packages/llm/llm-pi-ai/src/config.ts)
2026-07-06 21:57:17 +08:00
## ` @deepseek -ai/dsh-llm-replay`
Requires: ` llm`
` ``ts config-catalog
2026-07-07 09:34:12 +08:00
/** Plugin config: the {@link ReplayConfig} inputs, each defaulting to its ` DSH_SNAPSHOT_*` env var in ` apply`. */
2026-07-06 21:57:17 +08:00
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[]
2026-07-15 13:33:42 +08:00
/** Optional replay-only provider catalog; absent or empty selects catch-all waterfall replay. */
providers?: ReplayProviderConfig[]
2026-07-24 19:08:10 +08:00
/** Optional per-chunk pacing delay in ms (see {@link ReplayConfig.paceMs}); absent keeps burst yield. */
paceMs?: number
2026-07-15 13:33:42 +08:00
}
/** One provider route exposed by the replay adapter. */
export interface ReplayProviderConfig {
/** Provider route used for replay requests. */
id: string
/** Selector label; defaults to {@link id}. */
name?: string
2026-07-24 01:40:25 +08:00
/** Advisory models exposed to replay scenarios that exercise discovery. */
2026-07-15 13:33:42 +08:00
models?: ReplayModelConfig[]
}
/** One model exposed by a replay-only provider catalog. */
export interface ReplayModelConfig {
/** Model id used for replay requests. */
id: string
/** Selector label; defaults to {@link id}. */
name?: string
/** Optional selector description. */
description?: string
2026-07-21 19:05:40 +08:00
/** Optional positive integer context capacity published by the replay adapter. */
contextWindow?: number
2026-07-06 21:57:17 +08:00
}
` ``
2026-07-27 13:35:10 +08:00
Source: [` packages/support/llm-replay/src/index.ts:598`](../packages/support/llm-replay/src/index.ts)
2026-07-06 21:57:17 +08:00
2026-07-20 03:34:19 +08:00
## ` @deepseek -ai/dsh-llm-retry`
Requires: ` agents`
` ``ts config-catalog
/** Deployment-owned limits and classification for transient request recovery. */
export interface Config {
/** Maximum transient retries after the first request (default 2). */
maxTransientRetries?: number
/** Initial local exponential-backoff delay in milliseconds (default 500). */
initialDelayMs?: number
/** Maximum accepted or locally scheduled delay in milliseconds (default 10000). */
maxDelayMs?: number
/** Symmetric random multiplier range around one (default 0.1). */
jitterRatio?: number
/** Stable failure codes eligible for this policy. */
retryableCodes?: string[]
}
` ``
Source: [` packages/llm/llm-retry/src/index.ts:39`](../packages/llm/llm-retry/src/index.ts)
2026-07-16 12:05:35 +08:00
## ` @deepseek -ai/dsh-lsp-local`
Requires: ` lsp`
` ``ts config-catalog
2026-07-16 17:31:20 +08:00
/** Plugin configuration: provider id → local language-server configuration. */
2026-07-16 12:05:35 +08:00
export interface Config {
2026-07-16 17:31:20 +08:00
/** Non-empty table of stable provider ids to independent local server configurations. */
servers: Record<string, LspLocalServerConfig>
}
/** One configured local language server and its host bounds. */
export interface LspLocalServerConfig {
2026-07-16 12:05:35 +08:00
/** Executable to spawn (absolute, or resolved on PATH at load). */
command: string
/** Lowercase leading-dot extension → LSP language id (e.g. ` { '.ts': 'typescript' }`). */
extensionToLanguage: Record<string, string>
2026-07-16 12:08:06 +08:00
/** Arguments passed to the executable (no shell). Default ` []`. */
args?: string[]
/** Extra env vars merged on top of the scrubbed ambient env. Default ` {}`. */
env?: Record<string, string>
/** Static ` initialize` options forwarded to the server. Default ` null`. */
initializationOptions?: unknown
/** Static answer to every ` workspace/configuration` item. Default ` null`. */
configuration?: unknown
/** Largest single framed message accepted from the server (bytes). Default 16000000. */
maxMessageBytes?: number
/** Largest stderr tail retained for diagnostics (bytes). Default 1000000. */
maxStderrBytes?: number
/** Largest source file this host will open (bytes). Default 4000000. */
maxDocumentBytes?: number
/** Graceful ` shutdown`/` exit` budget before escalation (ms). Default 5000. */
shutdownTimeoutMs?: number
2026-07-21 13:29:40 +08:00
/** Request-cancel and SIGTERM→SIGKILL grace (ms). Default 2000. */
2026-07-16 12:08:06 +08:00
killGraceMs?: number
2026-07-16 12:05:35 +08:00
}
` ``
2026-07-21 13:29:40 +08:00
Source: [` packages/lsp/lsp-local/src/index.ts:85`](../packages/lsp/lsp-local/src/index.ts)
2026-07-16 12:05:35 +08:00
2026-07-07 23:21:54 +08:00
## ` @deepseek -ai/dsh-mcp-client`
Requires: ` tools`
` ``ts config-catalog
2026-07-25 13:02:37 +08:00
/** Configuration for one stdio or Streamable HTTP MCP server. */
2026-07-07 23:21:54 +08:00
export type Config = StdioConfig | StreamableHttpConfig
/** Config for connecting to an MCP server via a spawned child process over stdio. */
export interface StdioConfig {
2026-07-25 13:02:37 +08:00
/** Selects child-process stdio transport. */
2026-07-07 23:21:54 +08:00
transport: 'stdio'
2026-07-13 23:39:02 +08:00
/**
* Stable local namespace for this server's model-facing tool names
* (` mcp__<serverName>__<rawName>`). Must match ` [A-Za-z0-9_-]{1,32}` and be
* unique across live mcp-client instances.
*/
serverName: string
2026-07-25 13:02:37 +08:00
/** Executable used to start the server. */
2026-07-07 23:21:54 +08:00
command: string
2026-07-25 13:02:37 +08:00
/** Arguments passed directly, without shell interpolation. */
2026-07-07 23:21:54 +08:00
args: string[]
/** Extra env vars merged on top of scrubbed ambient env. */
env: Record<string, string>
/** Working directory for the child process. */
cwd: string
2026-07-25 13:02:37 +08:00
/** Per-tool-call timeout in milliseconds. */
2026-07-07 23:21:54 +08:00
toolCallTimeoutMs: number
}
/** Config for connecting to an MCP server over Streamable HTTP (SSE). */
export interface StreamableHttpConfig {
2026-07-25 13:02:37 +08:00
/** Selects Streamable HTTP transport. */
2026-07-07 23:21:54 +08:00
transport: 'streamable-http'
2026-07-13 23:39:02 +08:00
/**
* Stable local namespace for this server's model-facing tool names
* (` mcp__<serverName>__<rawName>`). Must match ` [A-Za-z0-9_-]{1,32}` and be
* unique across live mcp-client instances.
*/
serverName: string
2026-07-25 13:02:37 +08:00
/** MCP endpoint URL. */
2026-07-07 23:21:54 +08:00
url: string
2026-07-25 13:02:37 +08:00
/** Additional headers attached to MCP requests. */
2026-07-07 23:21:54 +08:00
headers: Record<string, string>
2026-07-25 13:02:37 +08:00
/** Per-tool-call timeout in milliseconds. */
2026-07-07 23:21:54 +08:00
toolCallTimeoutMs: number
}
` ``
2026-07-21 03:08:35 +08:00
Source: [` packages/mcp/mcp-client/src/index.ts:93`](../packages/mcp/mcp-client/src/index.ts)
2026-07-07 23:21:54 +08:00
2026-07-12 21:03:41 +08:00
## ` @deepseek -ai/dsh-permission`
Requires: ` bash` · ` approval`
` ``ts config-catalog
/** The {@link PermissionService} config: the deployment's preset table. */
export interface Config {
/**
2026-07-14 01:09:44 +08:00
* 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.
2026-07-12 21:03:41 +08:00
*/
presets?: Record<string, PresetSpec>
}
2026-07-14 12:34:14 +08:00
/** One preset's sandbox/approval bundle and optional client presentation. */
2026-07-12 21:03:41 +08:00
export interface PresetSpec {
2026-07-14 20:05:57 +08:00
/** The ` sandbox/mode` value the preset writes through. */
2026-07-12 21:03:41 +08:00
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)
2026-07-14 21:25:36 +08:00
Source: [` packages/ui/permission/src/index.ts:83`](../packages/ui/permission/src/index.ts)
2026-07-12 21:03:41 +08:00
2026-07-22 16:57:23 +08:00
## ` @deepseek -ai/dsh-plan-mode`
Requires: ` tools` · ` systemPrompt`
` ``ts config-catalog
/** Deployment-owned plan guidance. */
export interface PlanModeConfig {
/** Guidance rendered as the ` plan:policy` prompt section while plan mode is active. */
section: string
}
` ``
2026-07-25 16:43:07 +08:00
Source: [` packages/plan/plan-mode/src/index.ts:57`](../packages/plan/plan-mode/src/index.ts)
2026-07-22 16:57:23 +08:00
2026-07-21 16:01:00 +08:00
## ` @deepseek -ai/dsh-pty-local`
Requires: ` pty` · ` sandbox` · ` sandboxPolicy`
` ``ts config-catalog
/** Public plugin configuration. */
export interface Config {
/** Backend registry type (default: ` shell`). */
backendType?: string
/** Interactive shell executable (default: ` /bin/bash`). */
shellPath?: string
/** Shell arguments (default: ` --noprofile --norc -i`). */
shellArgs?: string[]
/** Terminal rows. */
rows?: number
/** Terminal columns. */
cols?: number
/** Maximum retained logical lines. */
scrollbackLines?: number
/** Maximum retained UTF-8 bytes. */
scrollbackMaxBytes?: number
/** Maximum bytes returned by one read or settled viewport. */
maxReadBytes?: number
/** Readiness polling interval. */
pollIntervalMs?: number
/** Delay before Linux exact syscall probes. */
exactProbeAfterMs?: number
/** Silence duration that yields ` inferred_idle`. */
idleSilenceMs?: number
/** Absolute send wait bound. */
timeoutMs?: number
/** Grace before teardown escalates to ` SIGKILL`. */
disposeGraceMs?: number
}
` ``
Source: [` packages/pty/pty-local/src/config.ts:6`](../packages/pty/pty-local/src/config.ts)
2026-07-08 14:24:20 +08:00
## ` @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[]
2026-07-08 14:40:08 +08:00
/**
* 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
2026-07-08 14:24:20 +08:00
}
` ``
2026-07-16 02:29:32 +08:00
Source: [` packages/guard/repeat-tool-guard/src/index.ts:26`](../packages/guard/repeat-tool-guard/src/index.ts)
2026-07-08 14:24:20 +08:00
2026-07-09 15:42:37 +08:00
## ` @deepseek -ai/dsh-sandbox-local`
` ``ts config-catalog
/** Plugin config. All optional — ` static Config` supplies the defaults. */
export interface Config {
/**
2026-07-13 23:27:00 +08:00
* 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}.
2026-07-09 15:42:37 +08:00
*/
runnerCommand?: string[]
2026-07-11 21:37:38 +08:00
/**
* 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[]
2026-07-13 16:24:32 +08:00
/** Positive timeout for each functional probe; zero would mean unbounded to Node. */
2026-07-09 15:42:37 +08:00
probeTimeoutMs?: number
}
` ``
2026-07-14 23:42:22 +08:00
Source: [` packages/sandbox/sandbox-local/src/index.ts:19`](../packages/sandbox/sandbox-local/src/index.ts)
2026-07-09 15:42:37 +08:00
2026-07-14 20:05:57 +08:00
## ` @deepseek -ai/dsh-sandbox-policy`
` ``ts config-catalog
/**
* Plugin config: the deployment's sandbox default. All optional — ` Config`
* supplies the defaults (` mode: 'read-only'` is the fail-safe default; a
* deployment that wants a workspace-writable agent opts in explicitly). The
* runner choice is NOT here (it is the ` ctx.sandbox` provider's config), nor
* is any per-family knob: this is the one shared policy home.
*/
export interface Config {
/** File-sandbox mode a session starts from (default: ` read-only`). */
mode?: SandboxMode
/**
2026-07-21 00:44:28 +08:00
* Fallback root for agentless calls and sessions without a cwd (default:
* ` process.cwd()`). Normal agent calls use their session cwd instead.
2026-07-14 20:05:57 +08:00
*/
workspaceRoot?: string
}
` ``
Depends on: [` SandboxMode`](core-data-structures/sandbox.md)
Source: [` packages/sandbox/sandbox-policy/src/index.ts:44`](../packages/sandbox/sandbox-policy/src/index.ts)
2026-07-06 21:57:17 +08:00
## ` @deepseek -ai/dsh-session-persistence-jsonl`
Requires: ` sessions`
` ``ts config-catalog
2026-07-15 21:26:36 +08:00
/** Plugin config: where the JSONL backend keeps its session logs, and the packed-row write switch. */
2026-07-06 21:57:17 +08:00
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
2026-07-25 15:11:17 +08:00
* (bash calls, subprocesses). Sessions group under human-readable project
* directories, then per-session directories. An existing root must be a
* readable directory; an absent root is created on first materialization.
2026-07-06 21:57:17 +08:00
*/
root: string
2026-07-15 21:26:36 +08:00
/**
* Write runs of consecutive ` assistant/chunk` delta events as packed
* ` text-chunks`/` reasoning-chunks`/` tool-call-chunks` rows (lossless,
2026-07-26 23:44:52 +08:00
* ~60% smaller logs measured on a real session). Defaults to true; false
* keeps one ` SessionEvent` per line for diagnostics. Reading packed rows is
* unconditional: a log's layout never depends on this switch.
2026-07-15 21:26:36 +08:00
*/
packChunks?: boolean
2026-07-20 00:06:21 +08:00
/** Physical encoding; defaults to checksummed Zstandard frames. */
compression?: JsonlCompression
2026-07-06 21:57:17 +08:00
}
2026-07-20 00:06:21 +08:00
/** Physical encoding selected for JSONL session artifacts. */
export type JsonlCompression = 'zstd' | 'none'
2026-07-06 21:57:17 +08:00
` ``
2026-07-27 03:54:03 +08:00
Source: [` packages/session-persistence/session-persistence-jsonl/src/index.ts:40`](../packages/session-persistence/session-persistence-jsonl/src/index.ts)
2026-07-06 21:57:17 +08:00
## ` @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:`
2026-07-19 11:37:41 +08:00
* opens an in-process database (tests). On filesystems with POSIX modes,
* missing directories and databases are created owner-only; existing path
* modes are preserved. Filesystem setup errors other than an existing database
2026-07-19 11:51:22 +08:00
* fail initialization. The backend does not protect confidentiality or
* integrity when another principal can replace the database entry in its
* parent directory.
2026-07-06 21:57:17 +08:00
*/
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'
` ``
2026-07-24 16:07:49 +08:00
Source: [` packages/session-persistence/session-persistence-sqlite/src/index.ts:58`](../packages/session-persistence/session-persistence-sqlite/src/index.ts)
2026-07-06 21:57:17 +08:00
2026-07-15 10:51:38 +08:00
## ` @deepseek -ai/dsh-session-query-sqlite`
2026-07-10 16:51:19 +08:00
Requires: ` sessions`
` ``ts config-catalog
2026-07-23 20:16:14 +08:00
/** Combined session-query configuration backed by SQLite full-text search. */
export interface Config extends SessionQueryConfig {
2026-07-23 19:36:05 +08:00
/**
* Dedicated derived-index path; ` :memory:` is supported for tests. Missing
* directories and database files are created owner-only on POSIX filesystems;
* existing modes are preserved.
*/
2026-07-15 10:51:38 +08:00
path: string
/** SQLite journal mode. Defaults to ` wal`. */
journalMode?: JournalMode
2026-07-17 09:39:39 +08:00
/** Page size when a request omits ` limit`. At most ` Number.MAX_SAFE_INTEGER - 1`; defaults to 20. */
2026-07-15 10:51:38 +08:00
defaultLimit?: number
2026-07-17 09:39:39 +08:00
/** Largest accepted page size. At most ` Number.MAX_SAFE_INTEGER - 1`; defaults to 100. */
2026-07-15 10:51:38 +08:00
maxLimit?: number
/** Maximum snippet length in Unicode code points. Defaults to 240. */
snippetChars?: number
2026-07-24 19:47:23 +08:00
/** Maximum concurrent persisted-log inspections in one inherited batch read. Defaults to 4. */
persistedInspectConcurrency?: number
2026-07-10 16:51:19 +08:00
}
2026-07-15 10:51:38 +08:00
/** Supported SQLite journal modes. */
export type JournalMode = 'wal' | 'delete' | 'truncate' | 'persist'
2026-07-10 16:51:19 +08:00
` ``
2026-07-23 20:16:14 +08:00
Depends on: [` SessionQueryConfig`](../packages/session-query/session-query/src/index.ts)
2026-07-24 19:47:23 +08:00
Source: [` packages/session-query/session-query-sqlite/src/index.ts:76`](../packages/session-query/session-query-sqlite/src/index.ts)
2026-07-10 16:51:19 +08:00
2026-07-21 16:46:48 +08:00
## ` @deepseek -ai/dsh-session-reference`
Requires: ` sessionQuery`
` ``ts config-catalog
/** Session-reference service configuration. */
export interface Config {
2026-07-21 20:16:18 +08:00
/** Maximum distinct source sessions referenced by one message, from one to three. */
2026-07-21 16:46:48 +08:00
maxReferences?: number
/** Default host candidate-list limit. */
candidateLimit?: number
/** Maximum rendered UTF-8 bytes for one source snapshot. */
maxReferenceBytes?: number
}
` ``
2026-07-21 20:16:18 +08:00
Source: [` packages/context/session-reference/src/config.ts:11`](../packages/context/session-reference/src/config.ts)
2026-07-21 16:46:48 +08:00
2026-07-21 01:54:00 +08:00
## ` @deepseek -ai/dsh-session-title`
Requires: ` sessions`
` ``ts config-catalog
/** Required deterministic fallback and accepted-title limits. */
export interface Config {
/** Maximum whitespace-delimited words in the built-in fallback. */
readonly fallbackMaxWords: number
/** Maximum UTF-8 bytes in the built-in fallback. */
readonly fallbackMaxBytes: number
/** Maximum UTF-8 bytes in any accepted title. */
readonly maxTitleBytes: number
}
` ``
2026-07-22 17:34:31 +08:00
Source: [` packages/session-title/session-title/src/index.ts:70`](../packages/session-title/session-title/src/index.ts)
2026-07-21 01:54:00 +08:00
## ` @deepseek -ai/dsh-session-title-all-messages-llm`
2026-07-21 12:08:00 +08:00
Requires: ` sessionTitle` · ` llm` · ` sessions`
2026-07-21 01:54:00 +08:00
` ``ts config-catalog
/** Required LLM policy; this plugin adds no defaults. */
export type Config = SessionTitleLlmConfig
` ``
Depends on: [` SessionTitleLlmConfig`](../packages/session-title/session-title-llm/src/index.ts)
Source: [` packages/session-title/session-title-all-messages-llm/src/index.ts:15`](../packages/session-title/session-title-all-messages-llm/src/index.ts)
## ` @deepseek -ai/dsh-session-title-first-message-llm`
2026-07-21 12:08:00 +08:00
Requires: ` sessionTitle` · ` llm` · ` sessions`
2026-07-21 01:54:00 +08:00
` ``ts config-catalog
/** Required LLM policy; this plugin adds no defaults. */
export type Config = SessionTitleLlmConfig
` ``
Depends on: [` SessionTitleLlmConfig`](../packages/session-title/session-title-llm/src/index.ts)
Source: [` packages/session-title/session-title-first-message-llm/src/index.ts:15`](../packages/session-title/session-title-first-message-llm/src/index.ts)
2026-07-09 23:11:10 +08:00
## ` @deepseek -ai/dsh-skill`
` ``ts config-catalog
/** Skill registry configuration. */
export interface Config {
2026-07-12 22:49:46 +08:00
/** Maximum number of completed cwd/provider catalogs kept in memory. */
readonly collectCacheMaxEntries?: number
2026-07-09 23:11:10 +08:00
}
` ``
2026-07-12 22:49:46 +08:00
Source: [` packages/skill/skill/src/index.ts:113`](../packages/skill/skill/src/index.ts)
2026-07-09 23:11:10 +08:00
## ` @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[]
}
` ``
2026-07-12 16:30:01 +08:00
Source: [` packages/skill/skill-local/src/index.ts:40`](../packages/skill/skill-local/src/index.ts)
2026-07-09 23:11:10 +08:00
2026-07-09 13:01:14 +08:00
## ` @deepseek -ai/dsh-spill-local`
` ``ts config-catalog
/** Plugin config (all optional — ` static Config` supplies the defaults). */
export interface Config {
/**
* Root directory for spill files. Omitted uses a lazily-created private
* (0700) per-process directory under the OS temp dir — the safe default for
* a local deployment. Set it to keep spill files under a known location.
*/
root?: string
}
` ``
Source: [` packages/spill/spill-local/src/index.ts:22`](../packages/spill/spill-local/src/index.ts)
## ` @deepseek -ai/dsh-spill-policy`
Requires: ` tools`
` ``ts config-catalog
/** Plugin config. */
export interface Config {
/**
* The model-facing context cap for a plain-text tool result, in UTF-8 bytes.
* Omitted disables the policy entirely (no-op). When set, a result larger than
* this is spilled and replaced with a preview derived from this same budget.
*/
maxInlineBytes?: number
}
` ``
2026-07-26 09:01:03 +08:00
Source: [` packages/spill/spill-policy/src/index.ts:60`](../packages/spill/spill-policy/src/index.ts)
2026-07-09 23:11:10 +08:00
2026-07-25 01:11:39 +08:00
## ` @deepseek -ai/dsh-storage-domain`
Requires: ` storage`
` ``ts config-catalog
/**
* Plugin config. Which backend serves which domain is decided here, not
* globally on the hub: ` backend` is the default route and ` routes` overrides
* it per domain name. A route naming an unregistered backend fails loud at
* ` open` with ` backend-not-found`.
*/
export interface Config {
/** Default backend name for every domain without an explicit route. Required: there is no universally correct medium. */
backend: string
/** Per-domain overrides: domain name → backend name. */
routes?: Record<string, string>
}
` ``
2026-07-25 16:04:48 +08:00
Source: [` packages/storage/storage-domain/src/index.ts:52`](../packages/storage/storage-domain/src/index.ts)
2026-07-25 01:11:39 +08:00
2026-07-24 22:49:57 +08:00
## ` @deepseek -ai/dsh-storage-json`
Requires: ` storage`
` ``ts config-catalog
/**
* Plugin configuration.
* ` root` has NO default on purpose: a ` process.cwd()` fallback would scatter
* unit files wherever the process happens to start; assemblies state the
* location explicitly.
*/
export interface Config {
/** Directory holding one ` <unit>.json` file per unit. */
root: string
}
` ``
Source: [` packages/storage/storage-json/src/index.ts:27`](../packages/storage/storage-json/src/index.ts)
## ` @deepseek -ai/dsh-storage-sqlite`
Requires: ` storage`
` ``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). On filesystems with POSIX modes,
* missing directories and databases are created owner-only; existing path
* modes are preserved. Filesystem setup errors other than an existing
* database fail the open. The backend does not protect confidentiality or
* integrity when another principal can replace the database entry in its
* parent directory.
*/
path: string
/**
* SQLite ` journal_mode` pragma. ` wal` (the default) suits local disks; 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; 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 the durability clause of the KV backend contract.
*/
export type JournalMode = 'wal' | 'delete' | 'truncate' | 'persist'
` ``
Source: [` packages/storage/storage-sqlite/src/index.ts:24`](../packages/storage/storage-sqlite/src/index.ts)
2026-07-06 21:57:17 +08:00
## ` @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[]
/**
2026-07-19 15:56:32 +08:00
* Working directory override for the child process and its ACP session.
* Must be non-empty; a relative path resolves against the harness launch
* directory at load, and the result must be an existing directory. When
* omitted, each child inherits its delegating parent session's cwd — and
* starting one from a parent session that has no cwd fails.
2026-07-06 21:57:17 +08:00
*/
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
2026-07-19 12:19:33 +08:00
/** Termination confirmation window (ms), including forced exit on every platform. */
2026-07-06 21:57:17 +08:00
disposeGraceMs?: number
}
2026-07-13 23:27:00 +08:00
/** Fixed response to child permission requests: reject by default, or select the first allow option. */
2026-07-06 21:57:17 +08:00
export type PermissionPolicy = 'allow' | 'reject'
` ``
2026-07-19 15:21:33 +08:00
Source: [` packages/subagent/subagent-acp/src/index.ts:21`](../packages/subagent/subagent-acp/src/index.ts)
2026-07-06 21:57:17 +08:00
## ` @deepseek -ai/dsh-subagent-fork`
2026-07-11 22:55:40 +08:00
Requires: ` subagents`
2026-07-06 21:57:17 +08:00
` ``ts config-catalog
/** Config: the registry name to register the provider under. */
export interface Config {
/** Provider name on ` ctx.subagents` (default ` fork`). */
providerName: string
}
` ``
2026-07-13 23:27:00 +08:00
Source: [` packages/subagent/subagent-fork/src/index.ts:25`](../packages/subagent/subagent-fork/src/index.ts)
2026-07-06 21:57:17 +08:00
## ` @deepseek -ai/dsh-subagent-spawn`
2026-07-11 22:55:40 +08:00
Requires: ` subagents`
2026-07-06 21:57:17 +08:00
` ``ts config-catalog
/** Config: the registry name to register the provider under. */
export interface Config {
/** Provider name on ` ctx.subagents` (default ` spawn`). */
providerName: string
}
` ``
2026-07-12 03:36:43 +08:00
Source: [` packages/subagent/subagent-spawn/src/index.ts:20`](../packages/subagent/subagent-spawn/src/index.ts)
2026-07-06 21:57:17 +08:00
## ` @deepseek -ai/dsh-system-prompt`
` ``ts config-catalog
2026-07-07 09:34:12 +08:00
/** Plugin config: the deployment-authored fragment of the system prompt (see {@link Config.persona} for its contract). */
2026-07-06 21:57:17 +08:00
export interface Config {
/**
2026-07-13 16:24:32 +08:00
* Deployment-wide order-0 persona template. A scoped section named
* ` deployment:persona` shadows it; ` {{variable}}` references are strict.
2026-07-06 21:57:17 +08:00
*/
persona?: string
2026-07-07 11:03:11 +08:00
/**
2026-07-13 16:24:32 +08:00
* Model-facing tool names in order, with {@link TOOL_ORDER_REST} exactly once.
2026-07-13 23:27:00 +08:00
* 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.
2026-07-07 11:03:11 +08:00
*/
toolOrder?: string[]
2026-07-06 21:57:17 +08:00
}
` ``
2026-07-16 18:12:34 +08:00
Source: [` packages/core/system-prompt/src/index.ts:147`](../packages/core/system-prompt/src/index.ts)
2026-07-06 21:57:17 +08:00
2026-07-14 16:04:34 +08:00
## ` @deepseek -ai/dsh-time-context`
2026-07-16 17:47:51 +08:00
Requires: ` agents`
2026-07-14 16:04:34 +08:00
` ``ts config-catalog
2026-07-17 10:12:27 +08:00
/** Request-preparation clock formatting and append scheduling. Invalid values fail plugin load. */
2026-07-14 16:04:34 +08:00
export interface Config {
2026-07-14 21:45:54 +08:00
/** IANA time zone used for the rendered timestamp. Omit to resolve the Node process's system zone at plugin load. */
2026-07-14 16:04:34 +08:00
timeZone?: string
2026-07-17 10:12:27 +08:00
/** Minimum milliseconds between durable injections in one session. Omit or set to 0 to inject on every eligible pre-step attempt. */
2026-07-14 16:04:34 +08:00
refreshIntervalMs?: number
}
` ``
2026-07-19 12:06:23 +08:00
Source: [` packages/context/time-context/src/index.ts:19`](../packages/context/time-context/src/index.ts)
2026-07-14 16:04:34 +08:00
2026-07-15 14:47:29 +08:00
## ` @deepseek -ai/dsh-token-meter`
` ``ts config-catalog
2026-07-20 15:34:00 +08:00
/** Token-meter plugin configuration; the fixed estimator has no settings. */
2026-07-21 14:49:57 +08:00
export type TokenMeterConfig = Record<string, never>
2026-07-15 14:47:29 +08:00
` ``
2026-07-16 12:58:07 +08:00
Source: [` packages/llm/token-meter/src/types.ts:10`](../packages/llm/token-meter/src/types.ts)
2026-07-15 14:47:29 +08:00
2026-07-09 21:22:54 +08:00
## ` @deepseek -ai/dsh-tool-bash`
Requires: ` tools` · ` bash` · ` systemPrompt`
` ``ts config-catalog
2026-07-12 15:41:42 +08:00
/** Configuration for the bash tool and its managed child environment. */
2026-07-09 21:22:54 +08:00
export interface Config {
2026-07-15 21:08:58 +08:00
/** Expose ` run_in_background` (default true); disabled calls are also rejected. */
2026-07-09 21:22:54 +08:00
enableRunInBackground?: boolean
2026-07-12 15:41:42 +08:00
/** DeepSeek Harness home directory exposed as ` DSH_HOME`; defaults to ` $DSH_HOME` or ` ~/.dsh`. */
dshHome?: string
2026-07-09 21:22:54 +08:00
}
` ``
2026-07-21 23:44:08 +08:00
Source: [` packages/bash/tool-bash/src/index.ts:41`](../packages/bash/tool-bash/src/index.ts)
2026-07-09 21:22:54 +08:00
2026-07-08 11:50:12 +08:00
## ` @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
2026-07-19 22:50:49 +08:00
* bound — see .agents/notes/implemented/feature/2026-07-08-self-referential-cordis-toolset.md for the trust stance.
2026-07-08 11:50:12 +08:00
*/
vmTimeoutMs?: number
}
` ``
2026-07-13 23:27:00 +08:00
Source: [` packages/cordis/tool-cordis/src/index.ts:25`](../packages/cordis/tool-cordis/src/index.ts)
2026-07-08 11:50:12 +08:00
2026-07-06 21:57:17 +08:00
## ` @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
}
` ``
2026-07-15 21:39:02 +08:00
Source: [` packages/fs/tool-fs/src/index.ts:24`](../packages/fs/tool-fs/src/index.ts)
2026-07-06 21:57:17 +08:00
2026-07-09 20:44:32 +08:00
## ` @deepseek -ai/dsh-tool-fs-search`
Requires: ` tools` · ` systemPrompt` · ` bash`
` ``ts config-catalog
/** Plugin config (all optional — ` Config` supplies the defaults). */
export interface Config {
/** Max paths one ` glob` call retains inline; later paths go to the formatted spill file. */
globMaxResults?: number
/** Max flat matches one ` grep` call retains inline; later matches go to the formatted spill file. */
grepMaxMatches?: number
/** Max bytes retained for one matched-line preview (the cut preserves UTF-8 boundaries). */
grepMaxLineBytes?: number
/** Max complete raw ` rg` stdout bytes a search will parse; larger raw output fails with ` SEARCH_RAW_OUTPUT_OVERFLOW`. */
rawOutputMaxBytes?: number
/** Cooperative tool-call timeout budget (ms) on both tools, enforced by ` @deepseek -ai/dsh-timeout-policy` through ` exec.signal`. */
timeoutMs?: number
}
` ``
2026-07-13 16:17:36 +08:00
Source: [` packages/fs/tool-fs-search/src/index.ts:62`](../packages/fs/tool-fs-search/src/index.ts)
2026-07-09 20:44:32 +08:00
2026-07-19 19:22:10 +08:00
## ` @deepseek -ai/dsh-tool-goal`
Requires: ` agents` · ` goals` · ` tools` · ` systemPrompt`
` ``ts config-catalog
/** Model policy and hard lower bounds for goal-state updates. */
export interface Config {
/** Minimum admitted goal rounds before the model may self-report ` blocked`. */
blockedAfterConsecutiveRounds?: number
}
` ``
2026-07-19 19:42:17 +08:00
Source: [` packages/goal/tool-goal/src/index.ts:27`](../packages/goal/tool-goal/src/index.ts)
2026-07-19 19:22:10 +08:00
2026-07-16 12:05:35 +08:00
## ` @deepseek -ai/dsh-tool-lsp`
Requires: ` tools` · ` lsp` · ` systemPrompt`
` ``ts config-catalog
/** Plugin configuration: result caps and the timeout budget. */
export interface Config {
/** Largest number of rendered locations before an omission marker (default 100). */
maxLocations?: number
2026-07-21 13:29:40 +08:00
/** Largest complete rendered result in characters, including truncation metadata (default 16000). */
maxResultChars?: number
2026-07-16 12:05:35 +08:00
/** Tool-call timeout budget in ms (default 60000). */
timeoutMs?: number
}
` ``
2026-07-21 13:29:40 +08:00
Source: [` packages/lsp/tool-lsp/src/index.ts:58`](../packages/lsp/tool-lsp/src/index.ts)
2026-07-16 12:05:35 +08:00
2026-07-22 22:37:20 +08:00
## ` @deepseek -ai/dsh-tool-pty`
Requires: ` pty` · ` tools` · ` systemPrompt`
` ``ts config-catalog
/** Model-facing terminal tool configuration. */
export interface Config {
/** Expose ` run_in_background` and accept background sends (default true). */
enableRunInBackground?: boolean
/** Maximum UTF-8 bytes in one complete terminal or task-output result. */
maxResultBytes?: number
}
` ``
2026-07-23 02:53:43 +08:00
Source: [` packages/pty/tool-pty/src/index.ts:35`](../packages/pty/tool-pty/src/index.ts)
2026-07-22 22:37:20 +08:00
2026-07-20 00:51:19 +08:00
## ` @deepseek -ai/dsh-tool-ralph`
Requires: ` tools` · ` workflows` · ` subagents` · ` systemPrompt`
` ``ts config-catalog
/** Deployment policy for the fixed Ralph workflow. */
export interface Config {
/** Fresh structured-output provider used for every round (default ` spawn`). */
subagentProvider?: string
/** Default and deployment ceiling for one call's round count (default 256). */
maxRounds?: number
/** Maximum serialized characters in one structured handoff (default 16384). */
maxHandoffChars?: number
2026-07-20 12:56:09 +08:00
/** Maximum characters in a successful parent-facing terminal text (default 16384). */
maxResultChars?: number
2026-07-20 00:51:19 +08:00
}
` ``
2026-07-21 03:08:35 +08:00
Source: [` packages/workflow/tool-ralph/src/index.ts:23`](../packages/workflow/tool-ralph/src/index.ts)
2026-07-20 00:51:19 +08:00
2026-07-24 15:09:55 +08:00
## ` @deepseek -ai/dsh-tool-session-query`
Requires: ` tools` · ` systemPrompt` · ` sessionQuery`
` ``ts config-catalog
/** Deployment-owned search count and timeout bounds. */
export interface Config {
/** Maximum authorized hits returned by one search call. Defaults to 100. */
maxSearchResults?: number
/** Cooperative full-text search deadline in milliseconds. Defaults to 30000. */
searchTimeoutMs?: number
}
` ``
2026-07-25 15:38:09 +08:00
Source: [` packages/session-query/tool-session-query/src/index.ts:29`](../packages/session-query/tool-session-query/src/index.ts)
2026-07-24 15:09:55 +08:00
2026-07-10 14:19:06 +08:00
## ` @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)
2026-07-06 21:57:17 +08:00
## ` @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
/**
2026-07-15 21:08:58 +08:00
* Model-facing tool name (default ` subagent`). Each loaded instance must use
* a distinct name.
2026-07-06 21:57:17 +08:00
*/
toolName?: string
/**
2026-07-15 21:08:58 +08:00
* Expose ` run_in_background` (default true). Disabled instances omit the
* parameter and reject forced background calls.
2026-07-09 21:22:54 +08:00
*/
enableRunInBackground?: boolean
2026-07-06 21:57:17 +08:00
/**
2026-07-15 21:08:58 +08:00
* Agent options applied to every child; omitted fields use child-loop defaults.
2026-07-06 21:57:17 +08:00
*/
agentOptions?: AgentOptions
2026-07-09 02:18:39 +08:00
/**
2026-07-15 21:08:58 +08:00
* Per-child persona that shadows ` deployment:persona`. Requires the
* provider's ` persona` capability; omission preserves the deployment persona.
2026-07-09 02:18:39 +08:00
*/
persona?: string
/**
2026-07-15 21:08:58 +08:00
* Tool filter applied to every child. Filtered tools disappear from its
* prompt and reject execution. Requires the provider's ` toolFilter`
2026-07-19 17:20:49 +08:00
* capability; unknown names fail startup.
2026-07-09 02:18:39 +08:00
*/
toolFilter?: {
/** Global tool names the child keeps; everything else is removed. */
allow?: string[]
/** Global tool names removed from the child. */
deny?: string[]
}
/**
2026-07-20 17:12:14 +08:00
* Maximum child depth: a non-negative safe integer (default ` 3`; ` 0` forbids
2026-07-19 17:20:49 +08:00
* delegation entirely), or ` 'provider-managed'` to send no cap. A numeric cap
* requires the provider's ` depthLimit` capability (mount fails loud
2026-07-20 17:58:57 +08:00
* otherwise). The provider checks the calling agent's current depth at every
* start; the tool remains model-visible so runtime policy owns rejection.
2026-07-19 17:20:49 +08:00
* ` 'provider-managed'` is for an out-of-process provider (ACP) whose
* recursion budget belongs to the child harness's own deployment.
2026-07-09 02:18:39 +08:00
*/
2026-07-19 17:20:49 +08:00
maxDepth?: number | 'provider-managed'
2026-07-06 21:57:17 +08:00
}
` ``
2026-07-19 14:57:52 +08:00
Depends on: [` AgentOptions`](core-data-structures/core.md)
2026-07-06 21:57:17 +08:00
2026-07-21 03:08:35 +08:00
Source: [` packages/subagent/tool-subagent/src/index.ts:24`](../packages/subagent/tool-subagent/src/index.ts)
2026-07-09 21:22:54 +08:00
## ` @deepseek -ai/dsh-tool-tasks`
Requires: ` tools` · ` tasks` · ` systemPrompt`
` ``ts config-catalog
2026-07-15 21:08:58 +08:00
/** Configures bounded ` task_output` waits. */
2026-07-09 21:22:54 +08:00
export interface Config {
/** Wait duration applied when ` task_output` sets ` wait` without ` timeout_ms` (default 30s). */
waitTimeoutMs?: number
/** Hard cap on any single wait; a larger model-supplied ` timeout_ms` is clamped down to it (default 10min). */
maxWaitTimeoutMs?: number
}
` ``
2026-07-23 01:56:10 +08:00
Source: [` packages/tasks/tool-tasks/src/index.ts:23`](../packages/tasks/tool-tasks/src/index.ts)
2026-07-06 21:57:17 +08:00
## ` @deepseek -ai/dsh-tool-web`
Requires: ` tools` · ` web` · ` systemPrompt`
` ``ts config-catalog
2026-07-27 12:41:36 +08:00
/** Plugin config: which web tools to register, the source cap, per-tool budgets, and the fetch output cap. */
2026-07-06 21:57:17 +08:00
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
2026-07-08 15:06:02 +08:00
/** Cooperative timeout budget (ms) for ` web_fetch`. Defaults to 30000. */
fetchTimeoutMs?: number
/** Cooperative timeout budget (ms) for ` web_search`. Defaults to 30000. */
searchTimeoutMs?: number
2026-07-27 16:40:02 +08:00
/** Cap on source characters converted and complete ` web_fetch` output characters. Defaults to 200000. */
2026-07-27 12:41:36 +08:00
fetchMaxOutputChars?: number
2026-07-06 21:57:17 +08:00
}
` ``
2026-07-27 16:40:02 +08:00
Source: [` packages/web/tool-web/src/index.ts:35`](../packages/web/tool-web/src/index.ts)
2026-07-06 21:57:17 +08:00
2026-07-07 10:00:58 +08:00
## ` @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
}
` ``
2026-07-21 03:08:35 +08:00
Source: [` packages/workflow/tool-workflow/src/index.ts:27`](../packages/workflow/tool-workflow/src/index.ts)
2026-07-07 10:00:58 +08:00
2026-07-08 12:58:23 +08:00
## ` @deepseek -ai/dsh-tools`
Requires: ` systemPrompt`
` ``ts config-catalog
/** Plugin config: how the registered tools are presented to the model. */
export interface Config {
/**
2026-07-13 23:27:00 +08:00
* 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.
2026-07-08 12:58:23 +08:00
*/
mode?: ToolPresentationMode
2026-07-26 10:33:48 +08:00
/**
* Concurrency cap for a ` run_code` program's overlapping sub-calls
* (default 10, the loop scheduler's own default). Sub-calls follow the
* native scheduling contract — only calls whose tools classify
* concurrency-safe overlap; exclusive calls form barriers — so ` 1`
* restores strictly serial dispatch. Must be a positive integer.
*/
maxParallelSubCalls?: number
2026-07-08 12:58:23 +08:00
}
/** How the registry presents its tools to the model (see {@link Config.mode}). */
export type ToolPresentationMode = 'native' | 'code' | 'both'
` ``
2026-07-26 18:29:09 +08:00
Source: [` packages/core/tools/src/index.ts:566`](../packages/core/tools/src/index.ts)
2026-07-08 12:58:23 +08:00
2026-07-17 12:01:37 +08:00
## ` @deepseek -ai/dsh-tui`
2026-07-24 12:31:26 +08:00
Requires: ` agents` · ` sessions` · ` commands` · ` userInteraction` · ` tools` · ` llm` · ` systemPrompt` · ` tokenMeter`
2026-07-17 12:01:37 +08:00
` ``ts config-catalog
/** Serializable plugin configuration. */
export interface Config extends TuiConfig {
2026-07-22 15:01:54 +08:00
/** Banner subtitle line. When absent, the banner has no subtitle and sweeps in on start. */
2026-07-17 12:01:37 +08:00
welcome?: string
2026-07-19 11:37:14 +08:00
/** Exact shared agent/session identity driven by this terminal. Defaults to ` main`. */
sessionId?: string
2026-07-22 15:01:54 +08:00
/**
2026-07-24 12:31:26 +08:00
* Shell command fallback printed on exit or after selecting a session when
* the host cannot hand off in place. Every ` {session}` becomes the selected
* id; the TUI never executes this text. Absent disables only the fallback,
* not the interactive selector.
2026-07-22 15:01:54 +08:00
*/
resumeCommand?: string
2026-07-17 12:01:37 +08:00
}
2026-07-23 17:39:30 +08:00
/** Interaction and presentation settings for the pi-tui terminal mode. */
2026-07-17 12:01:37 +08:00
export interface TuiConfig {
/** Render model reasoning blocks. */
showReasoning?: boolean
2026-07-20 22:44:01 +08:00
/** Maximum tool-card body lines retained in its collapsed head/tail preview. */
2026-07-17 12:01:37 +08:00
maxToolOutputLines?: number
2026-07-20 22:44:01 +08:00
/** Maximum options visible at once in a user-question panel. */
2026-07-17 12:01:37 +08:00
maxQuestionOptions?: number
2026-07-20 22:44:01 +08:00
/** Maximum models visible at once in the model selector. */
maxModelOptions?: number
2026-07-24 12:31:26 +08:00
/** Maximum sessions visible at once in the resume selector. */
maxResumeOptions?: number
2026-07-20 22:44:01 +08:00
/** User-question panel width in terminal columns, clamped to the terminal. */
2026-07-17 12:01:37 +08:00
questionDialogWidth?: number
2026-07-20 22:44:01 +08:00
/** User-question panel maximum height in terminal rows. */
2026-07-17 12:01:37 +08:00
questionDialogMaxHeight?: number
2026-07-20 22:44:01 +08:00
/** Model-selector width in terminal columns. */
modelDialogWidth?: number
/** Model-selector maximum height in terminal rows. */
modelDialogMaxHeight?: number
2026-07-23 17:39:30 +08:00
/** Maximum fuzzy file candidates displayed for one ` @` query. */
fileSearchMaxResults?: number
/** Maximum paths retained in one ` @` workspace index. */
fileSearchMaxEntries?: number
/** Directory basenames excluded from ` @` traversal and completion. */
fileSearchExcludedDirectories?: string[]
2026-07-17 12:01:37 +08:00
/** Show the terminal's hardware cursor at the pi editor's IME marker. */
showHardwareCursor?: boolean
/** Apply the built-in ANSI color palette. */
color?: boolean
2026-07-22 15:01:54 +08:00
/**
* Paint the startup banner's product name in the DeepSeek brand gradient
* using 24-bit truecolor. Requires {@link TuiConfig.color}; falls back to the
* flat accent color when either is off. Unset auto-detects ` COLORTERM` at the
* process boundary, so most deployments leave it unset.
*/
truecolor?: boolean
/** Terminal window title while the UI is mounted; a logged session title prefixes it. */
2026-07-17 12:01:37 +08:00
title?: string
}
` ``
2026-07-25 08:32:38 +08:00
Source: [` packages/ui/tui/src/index.ts:273`](../packages/ui/tui/src/index.ts)
2026-07-08 12:58:23 +08:00
2026-07-20 19:26:04 +08:00
## ` @deepseek -ai/dsh-tui-demo`
` ``ts config-catalog
/** App config routed to the spine, TUI, configured agent, and JSONL backend. */
export interface Config {
/** Provider route for the ` main` agent. */
provider: string
/** Model name for the ` main` agent; a matching adapter must be registered. */
model: string
/** Bundled agent-loop concurrency cap; ` 1` is serial and omission uses its default. */
maxParallelToolCalls?: number
/** Deployment persona forwarded to the system-prompt plugin. */
persona?: string
/** Explicit model-facing tool order forwarded to the system-prompt plugin. */
toolOrder?: string[]
/** Tool-registry presentation config forwarded through agent-spine-demo. */
tools?: ToolsConfig
/** DeepSeek Harness home directory exposed to bash and used for local skill discovery. */
dshHome?: string
2026-07-21 14:09:17 +08:00
/** Fallback session-title limits forwarded through agent-spine-demo. */
sessionTitle?: NonNullable<agentCore.Config['sessionTitle']>
2026-07-23 20:16:14 +08:00
/** Directory for JSONL sessions and the derived query index. Defaults to ` ./.sessions`. */
2026-07-20 19:26:04 +08:00
persistenceRoot?: string
2026-07-20 20:20:21 +08:00
/** JSONL artifact encoding; defaults to checksummed Zstandard frames. */
persistenceCompression?: JsonlCompression
2026-07-21 17:53:30 +08:00
/** Cross-session reference discovery and snapshot byte budgets. */
sessionReferences?: SessionReferenceConfig
2026-07-22 15:01:54 +08:00
/** TUI transcript's optional first line; absent renders nothing on start. */
2026-07-20 19:26:04 +08:00
welcome?: string
2026-07-22 15:01:54 +08:00
/**
* Shell command template the TUI prints on exit and lists under ` /resume`,
* with ` {session}` replaced by the live session id (forwarded to the front
2026-07-25 12:43:59 +08:00
* door). Set it to a command that resumes the session, e.g.
* ` dsh --resume {session}`.
2026-07-22 15:01:54 +08:00
*/
resumeCommand?: string
2026-07-20 19:26:04 +08:00
/** Full-screen TUI presentation settings. */
ui?: uiTui.TuiConfig
/** Skill registry, local-provider, and model-facing consumer config. */
skills?: agentCore.SkillConfig
/** Model-facing bash tool config forwarded through agent-spine-demo. */
toolBash?: NonNullable<agentCore.Config['toolBash']>
/** Generic background-task controls forwarded through agent-spine-demo; set false to omit them. */
toolTasks?: NonNullable<agentCore.Config['toolTasks']>
2026-07-20 22:18:20 +08:00
/** Persisted same-session goals; owner defaults enable them, or false disables the stack and command. */
goals?: agentCore.GoalConfig | false
2026-07-20 19:26:04 +08:00
/** Persisted session id to resume instead of creating a fresh session. */
resumeSessionId?: string
/** Controls automatic AGENTS.md/CLAUDE.md loading; configure a byte budget or set ` false`. */
workspaceContext: agentCore.Config['workspaceContext']
}
` ``
2026-07-21 17:53:30 +08:00
Depends on: [` agentCore`](../packages/examples/agent-spine-demo/src/index.ts) · [` JsonlCompression`](../packages/session-persistence/session-persistence-jsonl/src/index.ts) · [` SessionReferenceConfig`](#deepseek-aidsh-session-reference) · [` ToolsConfig`](#deepseek-aidsh-tools) · [` uiTui`](../packages/ui/tui/src/index.ts)
2026-07-20 19:26:04 +08:00
2026-07-23 20:16:14 +08:00
Source: [` packages/examples/tui-demo/src/index.ts:39`](../packages/examples/tui-demo/src/index.ts)
2026-07-17 12:01:37 +08:00
2026-07-11 21:37:38 +08:00
## ` @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).
*/
2026-07-12 22:49:46 +08:00
readonly policy?: ApprovalPolicy
2026-07-11 21:37:38 +08:00
}
/**
* 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'
` ``
2026-07-19 21:17:57 +08:00
Source: [` packages/ui/user-approval/src/index.ts:198`](../packages/ui/user-approval/src/index.ts)
2026-07-08 12:58:23 +08:00
2026-07-06 21:57:17 +08:00
## ` @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
}
` ``
2026-07-14 17:57:50 +08:00
Source: [` packages/web/web/src/index.ts:55`](../packages/web/web/src/index.ts)
2026-07-06 21:57:17 +08:00
## ` @deepseek -ai/dsh-web-fetch-local`
Requires: ` web`
` ``ts config-catalog
2026-07-07 09:34:12 +08:00
/** Plugin config: the provider's transport and size limits plus its ` User-Agent` (all defaulted). */
2026-07-06 21:57:17 +08:00
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
2026-07-14 05:06:01 +08:00
/** Default fetch timeout in milliseconds, within Node's timer range. */
2026-07-06 21:57:17 +08:00
timeoutMs?: number
/** Maximum number of same-origin redirect hops to follow. */
maxRedirects?: number
/** ` User-Agent` header sent on every request. */
userAgent?: string
}
` ``
2026-07-14 05:08:05 +08:00
Source: [` packages/web/web-fetch-local/src/index.ts:34`](../packages/web/web-fetch-local/src/index.ts)
2026-07-06 21:57:17 +08:00
## ` @deepseek -ai/dsh-web-search-deepseek`
Requires: ` web`
` ``ts config-catalog
2026-07-07 09:34:12 +08:00
/** Plugin config (all optional — ` apply` fills env-var and constant defaults). */
2026-07-06 21:57:17 +08:00
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
}
` ``
2026-07-14 19:12:06 +08:00
Source: [` packages/web/web-search-deepseek/src/index.ts:38`](../packages/web/web-search-deepseek/src/index.ts)
2026-07-06 21:57:17 +08:00
## ` @deepseek -ai/dsh-web-search-exa`
Requires: ` web`
` ``ts config-catalog
2026-07-07 09:34:12 +08:00
/** Plugin config (all optional — ` apply` fills env-var and constant defaults). */
2026-07-06 21:57:17 +08:00
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
}
` ``
2026-07-14 04:21:48 +08:00
Source: [` packages/web/web-search-exa/src/index.ts:37`](../packages/web/web-search-exa/src/index.ts)
2026-07-06 21:57:17 +08:00
## ` @deepseek -ai/dsh-web-search-perplexity`
Requires: ` web`
` ``ts config-catalog
2026-07-07 09:34:12 +08:00
/** Plugin config (all optional — ` apply` fills env-var and constant defaults). */
2026-07-06 21:57:17 +08:00
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'
}
` ``
2026-07-14 04:21:48 +08:00
Source: [` packages/web/web-search-perplexity/src/index.ts:31`](../packages/web/web-search-perplexity/src/index.ts)
2026-07-06 21:57:17 +08:00
2026-07-09 19:06:55 +08:00
## ` @deepseek -ai/dsh-workflow-workerthread`
2026-07-07 10:00:58 +08:00
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
2026-07-09 20:09:10 +08:00
/** vm timeout for the script's initial synchronous slice, inside the worker (default 5000 ms). */
2026-07-07 10:00:58 +08:00
syncTimeoutMs?: number
/**
* How long after a cancellation an unsettled script may keep running before
2026-07-09 18:50:29 +08:00
* the run force-settles ` cancelled` and its worker is TERMINATED (default
* 5000 ms); also bounds ` dispose()`.
2026-07-07 10:00:58 +08:00
*/
disposeGraceMs?: number
}
` ``
2026-07-14 17:41:20 +08:00
Source: [` packages/workflow/workflow-workerthread/src/index.ts:32`](../packages/workflow/workflow-workerthread/src/index.ts)
2026-07-07 10:00:58 +08:00
2026-07-10 14:32:44 +08:00
## ` @deepseek -ai/dsh-workspace-context`
` ``ts config-catalog
/** User-facing workspace instruction loader configuration. */
export interface Config {
/** Harness home containing the fixed user-global ` AGENTS.md`; defaults to ` $DSH_HOME` or ` ~/.dsh`. */
dshHome?: string
/** Directory entries that identify the project root while walking upward from the session cwd. */
projectRootMarkers?: string[]
2026-07-12 12:09:35 +08:00
/** UTF-8 byte cap for one rendered baseline or dynamic batch; non-positive or non-finite disables loading. */
maxBytes: number
2026-07-13 16:31:03 +08:00
/** Maximum UTF-8 bytes read from one instruction file; larger files are ignored. */
maxSourceBytes?: number
2026-07-22 15:01:54 +08:00
/**
* Ordered same-directory project candidates; every existing file loads, with
* per-directory trimmed-content duplicates collapsed to the earliest candidate.
*/
2026-07-10 14:32:44 +08:00
instructionFileCandidates?: string[]
2026-07-22 15:01:54 +08:00
/**
* Ordered same-directory local-overlay candidates loaded after the base files
* under the same per-directory trimmed-content dedup; empty disables the overlay.
*/
localInstructionFileCandidates?: string[]
2026-07-10 14:32:44 +08:00
}
` ``
2026-07-22 15:01:54 +08:00
Source: [` packages/context/workspace-context/src/config.ts:17`](../packages/context/workspace-context/src/config.ts)
2026-07-07 10:00:58 +08:00
2026-07-06 21:57:17 +08:00
## 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))
2026-07-25 02:15:58 +08:00
- ` @deepseek -ai/dsh-client-connection` — requires ` httpServer` · ` apiProxy` ([` packages/client/connection/src/index.ts`](../packages/client/connection/src/index.ts))
2026-07-26 00:57:21 +08:00
- ` @deepseek -ai/dsh-client-locale` ([` packages/client/locale/src/index.ts`](../packages/client/locale/src/index.ts))
2026-07-25 02:15:58 +08:00
- ` @deepseek -ai/dsh-client-modules` — requires ` httpServer` · ` loader` ([` packages/client/modules/src/index.ts`](../packages/client/modules/src/index.ts))
2026-07-19 21:17:57 +08:00
- ` @deepseek -ai/dsh-client-runtime` ([` packages/client/runtime/src/index.ts`](../packages/client/runtime/src/index.ts))
2026-07-27 03:17:52 +08:00
- ` @deepseek -ai/dsh-client-ui-command` ([` packages/client/ui-command/src/index.ts`](../packages/client/ui-command/src/index.ts))
2026-07-19 21:17:57 +08:00
- ` @deepseek -ai/dsh-client-ui-conversation` ([` packages/client/ui-conversation/src/index.ts`](../packages/client/ui-conversation/src/index.ts))
- ` @deepseek -ai/dsh-client-ui-layout` ([` packages/client/ui-layout/src/index.ts`](../packages/client/ui-layout/src/index.ts))
2026-07-26 02:54:29 +08:00
- ` @deepseek -ai/dsh-client-ui-models` ([` packages/client/ui-models/src/index.ts`](../packages/client/ui-models/src/index.ts))
2026-07-22 23:39:50 +08:00
- ` @deepseek -ai/dsh-client-ui-question` — requires ` tools` · ` userInteraction` ([` packages/client/ui-question/src/index.ts`](../packages/client/ui-question/src/index.ts))
2026-07-26 00:57:21 +08:00
- ` @deepseek -ai/dsh-client-ui-settings` ([` packages/client/ui-settings/src/index.ts`](../packages/client/ui-settings/src/index.ts))
2026-07-26 12:48:30 +08:00
- ` @deepseek -ai/dsh-client-ui-settings-general` ([` packages/client/ui-settings-general/src/index.ts`](../packages/client/ui-settings-general/src/index.ts))
2026-07-19 21:17:57 +08:00
- ` @deepseek -ai/dsh-client-ui-sidebar` ([` packages/client/ui-sidebar/src/index.ts`](../packages/client/ui-sidebar/src/index.ts))
2026-07-27 03:17:52 +08:00
- ` @deepseek -ai/dsh-client-ui-skill` ([` packages/client/ui-skill/src/index.ts`](../packages/client/ui-skill/src/index.ts))
- ` @deepseek -ai/dsh-client-ui-slash` ([` packages/client/ui-slash/src/index.ts`](../packages/client/ui-slash/src/index.ts))
- ` @deepseek -ai/dsh-client-ui-subagent` ([` packages/client/ui-subagent/src/index.ts`](../packages/client/ui-subagent/src/index.ts))
2026-07-19 21:17:57 +08:00
- ` @deepseek -ai/dsh-client-ui-theme` ([` packages/client/ui-theme/src/index.ts`](../packages/client/ui-theme/src/index.ts))
- ` @deepseek -ai/dsh-client-ui-trajectory` ([` packages/client/ui-trajectory/src/index.ts`](../packages/client/ui-trajectory/src/index.ts))
2026-07-25 16:04:48 +08:00
- ` @deepseek -ai/dsh-client-ui-workspace` ([` packages/client/ui-workspace/src/index.ts`](../packages/client/ui-workspace/src/index.ts))
2026-07-19 23:55:33 +08:00
- ` @deepseek -ai/dsh-command-goal` — requires ` commands` · ` goals` ([` packages/goal/command-goal/src/index.ts`](../packages/goal/command-goal/src/index.ts))
2026-07-19 22:11:59 +08:00
- ` @deepseek -ai/dsh-commands` ([` packages/ui/commands/src/index.ts`](../packages/ui/commands/src/index.ts))
2026-07-06 21:57:17 +08:00
- ` @deepseek -ai/dsh-fs-policy` ([` packages/fs/fs-policy/src/index.ts`](../packages/fs/fs-policy/src/index.ts))
2026-07-19 20:30:43 +08:00
- ` @deepseek -ai/dsh-goal-session` — requires ` agents` · ` goals` · ` sessions` ([` packages/goal/goal-session/src/index.ts`](../packages/goal/goal-session/src/index.ts))
2026-07-06 21:57:17 +08:00
- ` @deepseek -ai/dsh-llm` ([` packages/llm/llm/src/index.ts`](../packages/llm/llm/src/index.ts))
2026-07-16 12:05:35 +08:00
- ` @deepseek -ai/dsh-lsp` ([` packages/lsp/lsp/src/index.ts`](../packages/lsp/lsp/src/index.ts))
2026-07-21 16:01:00 +08:00
- ` @deepseek -ai/dsh-pty` ([` packages/pty/pty/src/index.ts`](../packages/pty/pty/src/index.ts))
2026-07-06 21:57:17 +08:00
- ` @deepseek -ai/dsh-session` ([` packages/core/session/src/index.ts`](../packages/core/session/src/index.ts))
2026-07-21 14:50:06 +08:00
- ` @deepseek -ai/dsh-session-checkpoint-policy` — requires ` llm` · ` sessionPersistence` · ` sessions` · ` tools` ([` packages/session-persistence/session-checkpoint-policy/src/index.ts`](../packages/session-persistence/session-checkpoint-policy/src/index.ts))
2026-07-24 22:49:57 +08:00
- ` @deepseek -ai/dsh-storage` ([` packages/storage/storage/src/index.ts`](../packages/storage/storage/src/index.ts))
2026-07-06 21:57:17 +08:00
- ` @deepseek -ai/dsh-subagent` ([` packages/subagent/subagent/src/index.ts`](../packages/subagent/subagent/src/index.ts))
2026-07-26 05:13:39 +08:00
- ` @deepseek -ai/dsh-tasks-local` ([` packages/tasks/tasks-local/src/index.ts`](../packages/tasks/tasks-local/src/index.ts))
2026-07-08 15:06:02 +08:00
- ` @deepseek -ai/dsh-timeout-policy` — requires ` tools` ([` packages/timeout/timeout-policy/src/index.ts`](../packages/timeout/timeout-policy/src/index.ts))
2026-07-07 15:22:07 +08:00
- ` @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))
2026-07-06 21:57:17 +08:00
- ` @deepseek -ai/dsh-tool-todo` — requires ` tools` ([` packages/todo/tool-todo/src/index.ts`](../packages/todo/tool-todo/src/index.ts))
2026-07-09 17:55:01 +08:00
- ` @deepseek -ai/dsh-user-interaction` ([` packages/ui/user-interaction/src/index.ts`](../packages/ui/user-interaction/src/index.ts))
2026-07-25 16:04:48 +08:00
- ` @deepseek -ai/dsh-workspace` — requires ` storageDomain` · ` sessionPersistence` ([` packages/workspace/workspace/src/index.ts`](../packages/workspace/workspace/src/index.ts))
2026-07-06 21:57:17 +08:00
## Seam packages (not directly loadable)
2026-07-19 22:50:49 +08:00
Abstract service classes — a deployment loads a concrete implementation package instead ([capability seams](../.agents/notes/implemented/architecture/2026-06-13-capability-seams.md)).
2026-07-06 21:57:17 +08:00
- ` @deepseek -ai/dsh-bash` — abstract ` BashExecutor` ([` packages/bash/bash/src/index.ts`](../packages/bash/bash/src/index.ts))
2026-07-08 02:17:24 +08:00
- ` @deepseek -ai/dsh-code-runtime` — abstract ` CodeRuntime` ([` packages/code-runtime/code-runtime/src/index.ts`](../packages/code-runtime/code-runtime/src/index.ts))
2026-07-06 21:57:17 +08:00
- ` @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))
2026-07-09 15:42:37 +08:00
- ` @deepseek -ai/dsh-sandbox` — abstract ` SandboxProvider` ([` packages/sandbox/sandbox/src/index.ts`](../packages/sandbox/sandbox/src/index.ts))
2026-07-06 21:57:17 +08:00
- ` @deepseek -ai/dsh-session-persistence` — abstract ` SessionPersistence` ([` packages/session-persistence/session-persistence/src/index.ts`](../packages/session-persistence/session-persistence/src/index.ts))
2026-07-23 20:16:14 +08:00
- ` @deepseek -ai/dsh-session-query` — abstract ` SessionQueryService` ([` packages/session-query/session-query/src/index.ts`](../packages/session-query/session-query/src/index.ts))
2026-07-13 11:07:27 +08:00
- ` @deepseek -ai/dsh-spill` — abstract ` SpillStore` ([` packages/spill/spill/src/index.ts`](../packages/spill/spill/src/index.ts))
2026-07-26 05:13:39 +08:00
- ` @deepseek -ai/dsh-tasks` — abstract ` TaskService` ([` packages/tasks/tasks/src/index.ts`](../packages/tasks/tasks/src/index.ts))
2026-07-07 10:00:58 +08:00
- ` @deepseek -ai/dsh-workflow` — abstract ` WorkflowService` ([` packages/workflow/workflow/src/index.ts`](../packages/workflow/workflow/src/index.ts))
2026-07-06 21:57:17 +08:00
## Library packages (no plugin entry)
Imported as libraries by other packages; a ` cordis.yml` cannot load them.
2026-07-15 18:17:38 +08:00
- ` @deepseek -ai/create-sdk` ([` packages/sdk/create-sdk/src/index.ts`](../packages/sdk/create-sdk/src/index.ts))
2026-07-08 01:44:20 +08:00
- ` @deepseek -ai/dsh-acp-snapshot` ([` packages/support/acp-snapshot/src/index.ts`](../packages/support/acp-snapshot/src/index.ts))
2026-07-16 17:39:53 +08:00
- ` @deepseek -ai/dsh-agent-loop-testkit` ([` packages/support/agent-loop-testkit/src/index.ts`](../packages/support/agent-loop-testkit/src/index.ts))
2026-07-06 21:57:17 +08:00
- ` @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))
2026-07-19 21:17:57 +08:00
- ` @deepseek -ai/dsh-client-ui-primitives` ([` packages/client/ui-primitives/src/index.ts`](../packages/client/ui-primitives/src/index.ts))
- ` @deepseek -ai/dsh-client-ui-slots` ([` packages/client/ui-slots/src/index.ts`](../packages/client/ui-slots/src/index.ts))
- ` @deepseek -ai/dsh-client-web` ([` packages/client/web/src/index.ts`](../packages/client/web/src/index.ts))
- ` @deepseek -ai/dsh-client-web-react` ([` packages/client/web-react/src/index.ts`](../packages/client/web-react/src/index.ts))
2026-07-15 18:17:38 +08:00
- ` @deepseek -ai/dsh-helper` ([` packages/sdk/helper/src/index.ts`](../packages/sdk/helper/src/index.ts))
2026-07-06 21:57:17 +08:00
- ` @deepseek -ai/dsh-hook-protocol` ([` packages/hooks/hook-protocol/src/index.ts`](../packages/hooks/hook-protocol/src/index.ts))
2026-07-15 15:57:57 +08:00
- ` @deepseek -ai/dsh-jsonrpc-demo` ([` packages/examples/jsonrpc-demo/src/index.ts`](../packages/examples/jsonrpc-demo/src/index.ts))
2026-07-25 08:20:40 +08:00
- ` @deepseek -ai/dsh-llm-mock-server` ([` packages/support/llm-mock-server/src/index.ts`](../packages/support/llm-mock-server/src/index.ts))
2026-07-14 05:00:54 +08:00
- ` @deepseek -ai/dsh-loader-smoke` ([` packages/support/loader-smoke/src/index.ts`](../packages/support/loader-smoke/src/index.ts))
2026-07-10 14:32:44 +08:00
- ` @deepseek -ai/dsh-paths` ([` packages/util/paths/src/index.ts`](../packages/util/paths/src/index.ts))
2026-07-09 13:01:14 +08:00
- ` @deepseek -ai/dsh-retention` ([` packages/util/retention/src/index.ts`](../packages/util/retention/src/index.ts))
2026-07-08 23:54:03 +08:00
- ` @deepseek -ai/dsh-scope` ([` packages/core/scope/src/index.ts`](../packages/core/scope/src/index.ts))
2026-07-15 18:17:38 +08:00
- ` @deepseek -ai/dsh-scripts` ([` packages/sdk/scripts/src/index.ts`](../packages/sdk/scripts/src/index.ts))
2026-07-21 01:54:00 +08:00
- ` @deepseek -ai/dsh-session-title-llm` ([` packages/session-title/session-title-llm/src/index.ts`](../packages/session-title/session-title-llm/src/index.ts))
2026-07-06 21:57:17 +08:00
- ` @deepseek -ai/dsh-subagent-inprocess` ([` packages/subagent/subagent-inprocess/src/index.ts`](../packages/subagent/subagent-inprocess/src/index.ts))
2026-07-09 13:42:03 +08:00
- ` @deepseek -ai/dsh-subagent-subprocess` ([` packages/subagent/subagent-subprocess/src/index.ts`](../packages/subagent/subagent-subprocess/src/index.ts))
2026-07-18 16:32:08 +08:00
- ` @deepseek -ai/dsh-telemetry` ([` packages/sdk/telemetry/src/index.ts`](../packages/sdk/telemetry/src/index.ts))
2026-07-08 11:18:27 +08:00
- ` @deepseek -ai/dsh-timeout` ([` packages/util/timeout/src/index.ts`](../packages/util/timeout/src/index.ts))