|
|
@@ -18,22 +18,16 @@ Requires: `agents` · `sessions` · `sessionPersistence` · `tools` · `userInte
|
|
|
export interface AcpConfig {
|
|
|
/** Model name for created agents (must have a registered adapter). */
|
|
|
model?: string
|
|
|
- /**
|
|
|
- * Transport stream override. Production omits this (the plugin wires
|
|
|
- * `process.stdin`/`process.stdout` via `ndJsonStream`). Tests inject an
|
|
|
- * in-memory `Stream` (e.g. an `ndJsonStream` over a `Duplex` pair) to drive
|
|
|
- * the bridge without a subprocess. Not part of the schemastery `Config` —
|
|
|
- * it is a runtime-only seam, never set from a `cordis.yml`.
|
|
|
- */
|
|
|
+ /** Runtime-only transport override for tests; production uses stdio. */
|
|
|
stream?: Stream
|
|
|
}
|
|
|
```
|
|
|
|
|
|
Depends on: `Stream` (`@agentclientprotocol/sdk`)
|
|
|
|
|
|
-Source: [`packages/ui/acp/src/index.ts:236`](../packages/ui/acp/src/index.ts)
|
|
|
+Source: [`packages/ui/acp/src/index.ts:203`](../packages/ui/acp/src/index.ts)
|
|
|
|
|
|
-## `@deepseek-ai/dsh-acp-agent`
|
|
|
+## `@deepseek-ai/dsh-acp-demo`
|
|
|
|
|
|
```ts config-catalog
|
|
|
/**
|
|
|
@@ -43,7 +37,7 @@ Source: [`packages/ui/acp/src/index.ts:236`](../packages/ui/acp/src/index.ts)
|
|
|
* deployment persona (forwarded to the system-prompt plugin); `toolOrder` is
|
|
|
* the explicit model-facing tool order (forwarded to the system-prompt plugin);
|
|
|
* `tools` is the tool registry's config (its presentation `mode`, forwarded
|
|
|
- * through agent-core); `persistenceRoot` is the JSONL backend's directory.
|
|
|
+ * through agent-spine-demo); `persistenceRoot` is the JSONL backend's directory.
|
|
|
*/
|
|
|
export interface Config {
|
|
|
/** Model name for ACP-created agents (must have a registered adapter). */
|
|
|
@@ -52,18 +46,47 @@ export interface Config {
|
|
|
persona?: string
|
|
|
/** Explicit model-facing tool order (the system-prompt plugin's `toolOrder` config; see dsh-system-prompt). */
|
|
|
toolOrder?: string[]
|
|
|
- /** Tool-registry config — its presentation `mode` (forwarded through agent-core; see dsh-tools). */
|
|
|
+ /** Tool-registry config — its presentation `mode` (forwarded through agent-spine-demo; see dsh-tools). */
|
|
|
tools?: ToolsConfig
|
|
|
/** Directory the JSONL session backend writes under. Defaults to `./.sessions`. */
|
|
|
persistenceRoot?: string
|
|
|
+ /** Skill registry, local-provider, and model-facing consumer config forwarded to agent-spine-demo. */
|
|
|
+ skills?: agentCore.SkillConfig
|
|
|
+ /** Model-facing bash tool config forwarded through agent-core. */
|
|
|
+ toolBash?: NonNullable<agentCore.Config['toolBash']>
|
|
|
+ /** Generic background-task control-tool config forwarded through agent-core. */
|
|
|
+ toolTasks?: NonNullable<agentCore.Config['toolTasks']>
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+Depends on: [`agentCore`](../packages/examples/agent-spine-demo/src/index.ts) · [`ToolsConfig`](#deepseek-aidsh-tools)
|
|
|
+
|
|
|
+Source: [`packages/examples/acp-demo/src/index.ts:31`](../packages/examples/acp-demo/src/index.ts)
|
|
|
+
|
|
|
+## `@deepseek-ai/dsh-agent-loop`
|
|
|
+
|
|
|
+Requires: `agents` · `sessions` · `llm` · `tools` · `systemPrompt`
|
|
|
+
|
|
|
+```ts config-catalog
|
|
|
+/** Plugin configuration for declarative startup agents. */
|
|
|
+export interface Config {
|
|
|
+ /** Agents created or resumed at plugin startup. */
|
|
|
+ agents: (AgentOptions & {
|
|
|
+ /** Registry identity for the live agent. */
|
|
|
+ id: AgentId
|
|
|
+ /** Optional workspace for a fresh session. */
|
|
|
+ cwd?: string
|
|
|
+ /** Persisted session to resume instead of creating a fresh session. */
|
|
|
+ resumeSessionId?: SessionId
|
|
|
+ })[]
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-Depends on: [`ToolsConfig`](#deepseek-aidsh-tools)
|
|
|
+Depends on: [`AgentId`](../packages/core/agent/src/index.ts) · [`AgentOptions`](../packages/core/agent/src/index.ts) · [`SessionId`](../packages/core/session/src/index.ts)
|
|
|
|
|
|
-Source: [`packages/ui/acp-agent/src/index.ts:52`](../packages/ui/acp-agent/src/index.ts)
|
|
|
+Source: [`packages/core/agent-loop/src/index.ts:322`](../packages/core/agent-loop/src/index.ts)
|
|
|
|
|
|
-## `@deepseek-ai/dsh-agent-core`
|
|
|
+## `@deepseek-ai/dsh-agent-spine-demo`
|
|
|
|
|
|
```ts config-catalog
|
|
|
/**
|
|
|
@@ -71,7 +94,10 @@ Source: [`packages/ui/acp-agent/src/index.ts:52`](../packages/ui/acp-agent/src/i
|
|
|
* `agents` to the agent loop (an app that pre-creates no agents, like the ACP
|
|
|
* bridge, simply omits it), `persona` and `toolOrder` to the system-prompt
|
|
|
* plugin (the deployment's persona section and the explicit model-facing tool
|
|
|
- * order), the `tools` object to the tool registry (its presentation `mode`).
|
|
|
+ * order), the `tools` object to the tool registry (its presentation `mode`),
|
|
|
+ * and `toolBash`/`toolTasks` to the two model-facing tool plugins this bundle
|
|
|
+ * owns. Producer opt-in stays producer-local: `toolBash` configures bash only;
|
|
|
+ * future background-capable tools remain independently composed plugins.
|
|
|
* Every field is optional INPUT here because each owner's schema
|
|
|
* supplies the default (`[]` / `''` / absent — lexicographic / `native`); the
|
|
|
* schema is the INTERSECTION of the owners' own schemas (the registry's
|
|
|
@@ -87,48 +113,28 @@ export interface Config {
|
|
|
toolOrder?: SystemPromptConfig['toolOrder']
|
|
|
/** The tool registry's config — its presentation `mode` (see dsh-tools' `Config`). */
|
|
|
tools?: ToolsConfig
|
|
|
+ /** Skill registry, local provider, and model-facing consumer config. */
|
|
|
+ skills?: SkillConfig
|
|
|
+ /** Model-facing bash tool config, including this producer's background opt-in. */
|
|
|
+ toolBash?: toolBash.Config
|
|
|
+ /** Generic background-task control-tool wait bounds. */
|
|
|
+ toolTasks?: toolTasks.Config
|
|
|
}
|
|
|
-```
|
|
|
-
|
|
|
-Depends on: [`AgentLoopConfig`](#deepseek-aidsh-agent-loop) · [`SystemPromptConfig`](#deepseek-aidsh-system-prompt) · [`ToolsConfig`](#deepseek-aidsh-tools)
|
|
|
-
|
|
|
-Source: [`packages/core/agent-core/src/index.ts:71`](../packages/core/agent-core/src/index.ts)
|
|
|
|
|
|
-## `@deepseek-ai/dsh-agent-loop`
|
|
|
-
|
|
|
-Requires: `agents` · `sessions` · `llm` · `tools` · `systemPrompt`
|
|
|
-
|
|
|
-```ts config-catalog
|
|
|
-/**
|
|
|
- * Plugin config: the agents to create — or resume, via `resumeSessionId` —
|
|
|
- * declaratively at startup, so a cordis.yml deployment needs no code.
|
|
|
- */
|
|
|
-export interface Config {
|
|
|
- /** Agents created from configuration at startup. */
|
|
|
- agents: (AgentOptions & {
|
|
|
- /** Agent id to register under; also seeds the fresh per-run session id (`${id}-session-<uuid>`). */
|
|
|
- id: AgentId
|
|
|
- /**
|
|
|
- * If set, the config agent RESUMES this persisted session id instead of
|
|
|
- * starting a fresh `${id}-session-<uuid>`. Sourced from an env var in
|
|
|
- * cordis.yml (`resumeSessionId: !!js process.env.RESUME_SESSION_ID`), so a
|
|
|
- * demo can continue a prior conversation without code changes. Requires a
|
|
|
- * `dsh-session-persistence` backend; the resume is deferred until that
|
|
|
- * service is available (via `ctx.inject`) and the loaded session's events
|
|
|
- * seed the live session so history continues.
|
|
|
- *
|
|
|
- * The schema accepts a plain string at runtime (cordis.yml values are
|
|
|
- * untyped); the brand is compile-time only — the config format is the
|
|
|
- * boundary where an id enters, so the TYPE declares the brand here.
|
|
|
- */
|
|
|
- resumeSessionId?: SessionId
|
|
|
- })[]
|
|
|
+/** Skill bundle config forwarded to the registry, local provider, and model-facing consumer. */
|
|
|
+export interface SkillConfig {
|
|
|
+ /** Registry-level discovery cache settings. */
|
|
|
+ registry?: SkillRegistryConfig
|
|
|
+ /** Local filesystem skill provider settings. */
|
|
|
+ local?: SkillLocal.Config
|
|
|
+ /** Model-facing skill catalog and tool settings. */
|
|
|
+ tool?: toolSkill.Config
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-Depends on: [`AgentId`](../packages/core/agent/src/index.ts) · [`AgentOptions`](../packages/core/agent/src/index.ts) · [`SessionId`](../packages/core/session/src/index.ts)
|
|
|
+Depends on: [`AgentLoopConfig`](#deepseek-aidsh-agent-loop) · [`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) · [`ToolsConfig`](#deepseek-aidsh-tools) · [`toolSkill`](../packages/skill/tool-skill/src/index.ts) · [`toolTasks`](../packages/tasks/tool-tasks/src/index.ts)
|
|
|
|
|
|
-Source: [`packages/core/agent-loop/src/index.ts:36`](../packages/core/agent-loop/src/index.ts)
|
|
|
+Source: [`packages/examples/agent-spine-demo/src/index.ts:55`](../packages/examples/agent-spine-demo/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-bash-local`
|
|
|
|
|
|
@@ -148,7 +154,34 @@ export interface Config {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/bash/bash-local/src/index.ts:29`](../packages/bash/bash-local/src/index.ts)
|
|
|
+Source: [`packages/bash/bash-local/src/index.ts:17`](../packages/bash/bash-local/src/index.ts)
|
|
|
+
|
|
|
+## `@deepseek-ai/dsh-bash-sandbox`
|
|
|
+
|
|
|
+Requires: `sandbox`
|
|
|
+
|
|
|
+```ts config-catalog
|
|
|
+/**
|
|
|
+ * Plugin config: the local executor's knobs plus the sandbox policy. All
|
|
|
+ * optional — `static Config` supplies the defaults (`mode: 'read-only'` is the
|
|
|
+ * fail-safe default; an example that wants a workspace-writable agent opts in
|
|
|
+ * explicitly). The runner choice is not configured here: which platform
|
|
|
+ * backend confines the command is the `ctx.sandbox` provider's config.
|
|
|
+ */
|
|
|
+export interface Config extends LocalConfig {
|
|
|
+ /** File-sandbox mode commands run under (default: `read-only`). */
|
|
|
+ mode?: SandboxMode
|
|
|
+ /**
|
|
|
+ * Root directory `workspace-write` mode may write under (default: the
|
|
|
+ * executor's default working directory — `cwd`, else `process.cwd()`).
|
|
|
+ */
|
|
|
+ workspaceRoot?: string
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+Depends on: [`LocalConfig`](#deepseek-aidsh-bash-local) · [`SandboxMode`](core-data-structures/sandbox.md)
|
|
|
+
|
|
|
+Source: [`packages/bash/bash-sandbox/src/index.ts:27`](../packages/bash/bash-sandbox/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-code-runtime-worker`
|
|
|
|
|
|
@@ -184,7 +217,7 @@ export interface Config {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/code-runtime/code-runtime-worker/src/index.ts:29`](../packages/code-runtime/code-runtime-worker/src/index.ts)
|
|
|
+Source: [`packages/code-runtime/code-runtime-worker/src/index.ts:21`](../packages/code-runtime/code-runtime-worker/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-compact-basic`
|
|
|
|
|
|
@@ -237,7 +270,7 @@ export interface Config {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/fs/fs-local/src/index.ts:58`](../packages/fs/fs-local/src/index.ts)
|
|
|
+Source: [`packages/fs/fs-local/src/index.ts:35`](../packages/fs/fs-local/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-hooks-claude`
|
|
|
|
|
|
@@ -248,7 +281,7 @@ Requires: `bash`
|
|
|
export interface Config {
|
|
|
/**
|
|
|
* Path to a `hooks.json` or a settings file whose `hooks` key holds the config.
|
|
|
- * PROCESS-LEVEL: read once at load, a relative path resolves against the process
|
|
|
+ * Process-level: read once at load, a relative path resolves against the process
|
|
|
* launch cwd, so one config applies to the whole process.
|
|
|
* TODO(per-session-hook-config): per-session discovery of a project-local
|
|
|
* `hooks.json` from each `session/new.cwd` is not yet implemented.
|
|
|
@@ -273,7 +306,7 @@ export interface Config {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/hooks/hooks-claude/src/index.ts:56`](../packages/hooks/hooks-claude/src/index.ts)
|
|
|
+Source: [`packages/hooks/hooks-claude/src/index.ts:43`](../packages/hooks/hooks-claude/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-hooks-codex`
|
|
|
|
|
|
@@ -283,7 +316,7 @@ Requires: `bash`
|
|
|
/** Plugin config: where the Codex hooks.json lives + the model name for payloads. */
|
|
|
export interface Config {
|
|
|
/**
|
|
|
- * Path to a Codex `hooks.json`. PROCESS-LEVEL: read once at load, a relative
|
|
|
+ * Path to a Codex `hooks.json`. Process-level: read once at load, a relative
|
|
|
* path resolves against the process launch cwd.
|
|
|
* TODO(per-session-hook-config): per-session project-local discovery from each
|
|
|
* `session/new.cwd` is not yet implemented.
|
|
|
@@ -298,25 +331,27 @@ export interface Config {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/hooks/hooks-codex/src/index.ts:43`](../packages/hooks/hooks-codex/src/index.ts)
|
|
|
+Source: [`packages/hooks/hooks-codex/src/index.ts:41`](../packages/hooks/hooks-codex/src/index.ts)
|
|
|
|
|
|
-## `@deepseek-ai/dsh-invariants`
|
|
|
+## `@deepseek-ai/dsh-jsonrpc`
|
|
|
|
|
|
-Requires: `sessions`
|
|
|
+Requires: `agents`
|
|
|
|
|
|
```ts config-catalog
|
|
|
-/** Plugin config. */
|
|
|
-export interface Config {
|
|
|
- /**
|
|
|
- * Deep-freeze logged session-event data so mutating a logged event throws.
|
|
|
- * Default true — this plugin only runs in dev/test, where freezing is the
|
|
|
- * point. Set false to assert the event contract without freezing.
|
|
|
- */
|
|
|
- freeze?: boolean
|
|
|
+/** Runtime-only test seams; no field is configurable from `cordis.yml`. */
|
|
|
+export interface JsonRpcConfig {
|
|
|
+ /** Transport input override; production uses `process.stdin`. */
|
|
|
+ input?: Readable
|
|
|
+ /** Transport output override; production uses `process.stdout`. */
|
|
|
+ output?: Writable
|
|
|
+ /** Process-exit override; production uses `process.exit`. */
|
|
|
+ exit?: (code: number) => void
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/support/invariants/src/index.ts:45`](../packages/support/invariants/src/index.ts)
|
|
|
+Depends on: `Readable` (`node:stream`) · `Writable` (`node:stream`)
|
|
|
+
|
|
|
+Source: [`packages/ui/jsonrpc/src/index.ts:26`](../packages/ui/jsonrpc/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-llm-deepseek`
|
|
|
|
|
|
@@ -343,7 +378,7 @@ export interface Config {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/llm/llm-deepseek/src/index.ts:43`](../packages/llm/llm-deepseek/src/index.ts)
|
|
|
+Source: [`packages/llm/llm-deepseek/src/index.ts:30`](../packages/llm/llm-deepseek/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-llm-pi-ai`
|
|
|
|
|
|
@@ -396,7 +431,90 @@ export interface Config {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/support/llm-replay/src/index.ts:429`](../packages/support/llm-replay/src/index.ts)
|
|
|
+Source: [`packages/support/llm-replay/src/index.ts:306`](../packages/support/llm-replay/src/index.ts)
|
|
|
+
|
|
|
+## `@deepseek-ai/dsh-mcp-client`
|
|
|
+
|
|
|
+Requires: `tools`
|
|
|
+
|
|
|
+```ts config-catalog
|
|
|
+/** Discriminated union of all supported MCP transport configurations. */
|
|
|
+export type Config = StdioConfig | StreamableHttpConfig
|
|
|
+
|
|
|
+/** Config for connecting to an MCP server via a spawned child process over stdio. */
|
|
|
+export interface StdioConfig {
|
|
|
+ /** Transport type: spawn a child process and communicate over stdio. */
|
|
|
+ transport: 'stdio'
|
|
|
+ /**
|
|
|
+ * 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
|
|
|
+ /** Executable to spawn. */
|
|
|
+ command: string
|
|
|
+ /** Arguments passed to the command. */
|
|
|
+ args: string[]
|
|
|
+ /** Extra env vars merged on top of scrubbed ambient env. */
|
|
|
+ env: Record<string, string>
|
|
|
+ /** Working directory for the child process. */
|
|
|
+ cwd: string
|
|
|
+ /** Timeout per callTool invocation (ms). */
|
|
|
+ toolCallTimeoutMs: number
|
|
|
+}
|
|
|
+
|
|
|
+/** Config for connecting to an MCP server over Streamable HTTP (SSE). */
|
|
|
+export interface StreamableHttpConfig {
|
|
|
+ /** Transport type: connect to an MCP server over Streamable HTTP (SSE). */
|
|
|
+ transport: 'streamable-http'
|
|
|
+ /**
|
|
|
+ * 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
|
|
|
+ /** MCP server URL. */
|
|
|
+ url: string
|
|
|
+ /** Extra headers (e.g. auth tokens). */
|
|
|
+ headers: Record<string, string>
|
|
|
+ /** Timeout per callTool invocation (ms). */
|
|
|
+ toolCallTimeoutMs: number
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+Source: [`packages/mcp/mcp-client/src/index.ts:91`](../packages/mcp/mcp-client/src/index.ts)
|
|
|
+
|
|
|
+## `@deepseek-ai/dsh-permission`
|
|
|
+
|
|
|
+Requires: `bash` · `approval`
|
|
|
+
|
|
|
+```ts config-catalog
|
|
|
+/** The {@link PermissionService} config: the deployment's preset table. */
|
|
|
+export interface Config {
|
|
|
+ /**
|
|
|
+ * The preset table: name → knob bundle. Defaults to `workspace-write`
|
|
|
+ * (workspace-write + ask) and `danger-full-access` (danger-full-access +
|
|
|
+ * never). The name `custom` is reserved for the derived not-a-preset state.
|
|
|
+ */
|
|
|
+ presets?: Record<string, PresetSpec>
|
|
|
+}
|
|
|
+
|
|
|
+/** One preset's sandbox/approval bundle and optional client presentation. */
|
|
|
+export interface PresetSpec {
|
|
|
+ /** The `bash/sandbox-mode` value the preset writes through. */
|
|
|
+ sandbox: SandboxMode
|
|
|
+ /** The `approval/policy` value the preset writes through. */
|
|
|
+ approval: ApprovalPolicy
|
|
|
+ /** The display label a client shows for this preset; the raw table key when omitted. */
|
|
|
+ name?: string
|
|
|
+ /** One user-facing sentence on what the preset means; omitted when not configured. */
|
|
|
+ description?: string
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+Depends on: [`ApprovalPolicy`](core-data-structures/approval.md) · [`SandboxMode`](core-data-structures/sandbox.md)
|
|
|
+
|
|
|
+Source: [`packages/ui/permission/src/index.ts:80`](../packages/ui/permission/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-repeat-tool-guard`
|
|
|
|
|
|
@@ -428,7 +546,35 @@ export interface Config {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/guard/repeat-tool-guard/src/index.ts:55`](../packages/guard/repeat-tool-guard/src/index.ts)
|
|
|
+Source: [`packages/guard/repeat-tool-guard/src/index.ts:27`](../packages/guard/repeat-tool-guard/src/index.ts)
|
|
|
+
|
|
|
+## `@deepseek-ai/dsh-sandbox-local`
|
|
|
+
|
|
|
+```ts config-catalog
|
|
|
+/** Plugin config. All optional — `static Config` supplies the defaults. */
|
|
|
+export interface Config {
|
|
|
+ /**
|
|
|
+ * Override the runner argv; bwrap-shaped profile arguments are appended. A
|
|
|
+ * non-empty override asserts full enforcement and skips built-in selection and
|
|
|
+ * probing; a broken runner then fails at execution and must be identifiable by
|
|
|
+ * {@link runnerFailureSignatures}.
|
|
|
+ */
|
|
|
+ runnerCommand?: string[]
|
|
|
+ /**
|
|
|
+ * Case-insensitive stderr substrings emitted when a configured
|
|
|
+ * {@link runnerCommand} refuses its profile before executing the wrapped
|
|
|
+ * command. Required and non-empty with `runnerCommand`; rejected without
|
|
|
+ * it. Missing/unexecutable runner errors are added automatically from
|
|
|
+ * `runnerCommand[0]`, while these signatures cover an executable runner's
|
|
|
+ * own failure dialect.
|
|
|
+ */
|
|
|
+ runnerFailureSignatures?: string[]
|
|
|
+ /** Positive timeout for each functional probe; zero would mean unbounded to Node. */
|
|
|
+ probeTimeoutMs?: number
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+Source: [`packages/sandbox/sandbox-local/src/index.ts:19`](../packages/sandbox/sandbox-local/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-session-persistence-jsonl`
|
|
|
|
|
|
@@ -446,7 +592,7 @@ export interface Config {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/session-persistence/session-persistence-jsonl/src/index.ts:35`](../packages/session-persistence/session-persistence-jsonl/src/index.ts)
|
|
|
+Source: [`packages/session-persistence/session-persistence-jsonl/src/index.ts:23`](../packages/session-persistence/session-persistence-jsonl/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-session-persistence-sqlite`
|
|
|
|
|
|
@@ -481,18 +627,80 @@ export interface Config {
|
|
|
export type JournalMode = 'wal' | 'delete' | 'truncate' | 'persist'
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/session-persistence/session-persistence-sqlite/src/index.ts:50`](../packages/session-persistence/session-persistence-sqlite/src/index.ts)
|
|
|
+Source: [`packages/session-persistence/session-persistence-sqlite/src/index.ts:38`](../packages/session-persistence/session-persistence-sqlite/src/index.ts)
|
|
|
|
|
|
-## `@deepseek-ai/dsh-stdio-agent`
|
|
|
+## `@deepseek-ai/dsh-session-query`
|
|
|
+
|
|
|
+Requires: `sessions`
|
|
|
+
|
|
|
+```ts config-catalog
|
|
|
+/** Configuration for exact session-query reads. */
|
|
|
+export interface Config {
|
|
|
+ /** Maximum accepted raw read context on either side. Defaults to 50. */
|
|
|
+ readWindowMax?: number
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+Source: [`packages/session-query/session-query/src/config.ts:9`](../packages/session-query/session-query/src/config.ts)
|
|
|
+
|
|
|
+## `@deepseek-ai/dsh-skill`
|
|
|
+
|
|
|
+```ts config-catalog
|
|
|
+/** Skill registry configuration. */
|
|
|
+export interface Config {
|
|
|
+ /** Maximum number of completed cwd/provider catalogs kept in memory. */
|
|
|
+ readonly collectCacheMaxEntries?: number
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+Source: [`packages/skill/skill/src/index.ts:113`](../packages/skill/skill/src/index.ts)
|
|
|
+
|
|
|
+## `@deepseek-ai/dsh-skill-local`
|
|
|
+
|
|
|
+Requires: `skills`
|
|
|
+
|
|
|
+```ts config-catalog
|
|
|
+/** Local filesystem skill provider configuration. */
|
|
|
+export interface Config {
|
|
|
+ /** DeepSeek Harness config root. Defaults to `$DSH_HOME` or `~/.dsh`. */
|
|
|
+ dshHome?: string
|
|
|
+ /** Shared agent config root. Defaults to `$DSH_AGENTS_HOME` or `~/.agents`. */
|
|
|
+ agentsHome?: string
|
|
|
+ /** Additional skill roots scanned after project roots and before user roots. */
|
|
|
+ customSkillDirs?: string[]
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+Source: [`packages/skill/skill-local/src/index.ts:39`](../packages/skill/skill-local/src/index.ts)
|
|
|
+
|
|
|
+## `@deepseek-ai/dsh-stdio`
|
|
|
+
|
|
|
+Requires: `agents` · `userInteraction`
|
|
|
+
|
|
|
+```ts config-catalog
|
|
|
+/** Serializable plugin configuration (cordis-native, schemastery). */
|
|
|
+export interface Config {
|
|
|
+ /** Banner printed once on start, before the first `> ` prompt. */
|
|
|
+ welcome?: string
|
|
|
+ /** Id of the agent stdin drives (`send`/`steer`) and whose status gates the EOF exit; rendering is global. Defaults to `'main'`. */
|
|
|
+ agent?: string
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+Source: [`packages/ui/stdio/src/index.ts:30`](../packages/ui/stdio/src/index.ts)
|
|
|
+
|
|
|
+## `@deepseek-ai/dsh-stdio-demo`
|
|
|
|
|
|
```ts config-catalog
|
|
|
/**
|
|
|
* App config: the swappable per-demo values, each routed to where the app wires
|
|
|
* it. `model`/`resumeSessionId` configure the pre-created `main` agent (through
|
|
|
- * {@link @deepseek-ai/dsh-agent-core}'s forwarded `agents` list); `persona` is
|
|
|
+ * {@link @deepseek-ai/dsh-agent-spine-demo}'s forwarded `agents` list); `persona` is
|
|
|
* the deployment persona (forwarded to the system-prompt plugin); `toolOrder`
|
|
|
* is the explicit model-facing tool order (forwarded to the system-prompt plugin);
|
|
|
- * `persistenceRoot` is the JSONL backend's directory; `welcome` is the UI banner.
|
|
|
+ * fresh sessions use `process.cwd()` as their workspace cwd; resumed sessions
|
|
|
+ * keep their persisted cwd. `persistenceRoot` is the JSONL backend's directory;
|
|
|
+ * `welcome` is the UI banner.
|
|
|
*/
|
|
|
export interface Config {
|
|
|
/** Model name for the `main` agent (must have a registered adapter). */
|
|
|
@@ -501,12 +709,18 @@ export interface Config {
|
|
|
persona?: string
|
|
|
/** Explicit model-facing tool order (the system-prompt plugin's `toolOrder` config; see dsh-system-prompt). */
|
|
|
toolOrder?: string[]
|
|
|
- /** Tool-registry config — its presentation `mode` (forwarded through agent-core; see dsh-tools). */
|
|
|
+ /** Tool-registry config — its presentation `mode` (forwarded through agent-spine-demo; see dsh-tools). */
|
|
|
tools?: ToolsConfig
|
|
|
/** Directory the JSONL session backend writes under. Defaults to `./.sessions`. */
|
|
|
persistenceRoot?: string
|
|
|
/** stdin-chat banner printed once on start. Defaults to `'ready.'`. */
|
|
|
welcome?: string
|
|
|
+ /** Skill registry, local-provider, and model-facing consumer config forwarded to agent-spine-demo. */
|
|
|
+ skills?: agentCore.SkillConfig
|
|
|
+ /** Model-facing bash tool config forwarded through agent-core. */
|
|
|
+ toolBash?: NonNullable<agentCore.Config['toolBash']>
|
|
|
+ /** Generic background-task control-tool config forwarded through agent-core. */
|
|
|
+ toolTasks?: NonNullable<agentCore.Config['toolTasks']>
|
|
|
/**
|
|
|
* If set, the `main` agent RESUMES this persisted session id instead of
|
|
|
* starting fresh. Sourced from an env var in the leaf `cordis.yml`
|
|
|
@@ -516,9 +730,9 @@ export interface Config {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-Depends on: [`ToolsConfig`](#deepseek-aidsh-tools)
|
|
|
+Depends on: [`agentCore`](../packages/examples/agent-spine-demo/src/index.ts) · [`ToolsConfig`](#deepseek-aidsh-tools)
|
|
|
|
|
|
-Source: [`packages/ui/stdio-agent/src/index.ts:63`](../packages/ui/stdio-agent/src/index.ts)
|
|
|
+Source: [`packages/examples/stdio-demo/src/index.ts:36`](../packages/examples/stdio-demo/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-subagent-acp`
|
|
|
|
|
|
@@ -561,24 +775,15 @@ export interface Config {
|
|
|
disposeGraceMs?: number
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * How the client answers a child's `session/request_permission`. The first cut
|
|
|
- * does not surface permission prompts to a human, so every request is
|
|
|
- * auto-answered by this fixed policy:
|
|
|
- *
|
|
|
- * - `reject` — decline every prompt (answer `cancelled`). Safe default: a child
|
|
|
- * that asks before a side effect does not get to take it.
|
|
|
- * - `allow` — approve every prompt by selecting its first `allow_*` option (or,
|
|
|
- * if none is offered, `cancelled`). Use when the child is trusted to act.
|
|
|
- */
|
|
|
+/** Fixed response to child permission requests: reject by default, or select the first allow option. */
|
|
|
export type PermissionPolicy = 'allow' | 'reject'
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/subagent/subagent-acp/src/index.ts:30`](../packages/subagent/subagent-acp/src/index.ts)
|
|
|
+Source: [`packages/subagent/subagent-acp/src/index.ts:18`](../packages/subagent/subagent-acp/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-subagent-fork`
|
|
|
|
|
|
-Requires: `subagents` · `agents`
|
|
|
+Requires: `subagents`
|
|
|
|
|
|
```ts config-catalog
|
|
|
/** Config: the registry name to register the provider under. */
|
|
|
@@ -588,7 +793,7 @@ export interface Config {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/subagent/subagent-fork/src/index.ts:38`](../packages/subagent/subagent-fork/src/index.ts)
|
|
|
+Source: [`packages/subagent/subagent-fork/src/index.ts:25`](../packages/subagent/subagent-fork/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-subagent-mock`
|
|
|
|
|
|
@@ -606,9 +811,11 @@ export interface Config {
|
|
|
/** Which start-time capabilities to advertise (default: all `true`). */
|
|
|
capabilities?: Partial<SubagentCapabilities>
|
|
|
/**
|
|
|
- * The context contract to declare ({@link SubagentProvider.inheritsParentContext});
|
|
|
- * default `false` (spawn-like). Set `true` to exercise the fork-shaped tool
|
|
|
- * wording in consumer tests.
|
|
|
+ * The conversation-history descriptor to declare
|
|
|
+ * ({@link SubagentProvider.inheritsParentContext}); default `false` (fresh
|
|
|
+ * conversation). Set `true` to exercise seeded/fork wording in consumer
|
|
|
+ * tests. This flag says nothing about tool, service, scope, or authority
|
|
|
+ * inheritance.
|
|
|
*/
|
|
|
inheritsParentContext?: boolean
|
|
|
/**
|
|
|
@@ -621,11 +828,11 @@ export interface Config {
|
|
|
|
|
|
Depends on: [`SubagentCapabilities`](../packages/subagent/subagent/src/index.ts) · [`SubagentStopReason`](../packages/subagent/subagent/src/index.ts)
|
|
|
|
|
|
-Source: [`packages/support/subagent-mock/src/index.ts:84`](../packages/support/subagent-mock/src/index.ts)
|
|
|
+Source: [`packages/support/subagent-mock/src/index.ts:86`](../packages/support/subagent-mock/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-subagent-spawn`
|
|
|
|
|
|
-Requires: `subagents` · `agents`
|
|
|
+Requires: `subagents`
|
|
|
|
|
|
```ts config-catalog
|
|
|
/** Config: the registry name to register the provider under. */
|
|
|
@@ -635,7 +842,7 @@ export interface Config {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/subagent/subagent-spawn/src/index.ts:36`](../packages/subagent/subagent-spawn/src/index.ts)
|
|
|
+Source: [`packages/subagent/subagent-spawn/src/index.ts:20`](../packages/subagent/subagent-spawn/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-system-prompt`
|
|
|
|
|
|
@@ -643,45 +850,50 @@ Source: [`packages/subagent/subagent-spawn/src/index.ts:36`](../packages/subagen
|
|
|
/** Plugin config: the deployment-authored fragment of the system prompt (see {@link Config.persona} for its contract). */
|
|
|
export interface Config {
|
|
|
/**
|
|
|
- * The deployment's persona — the ONE deployment-authored fragment of the
|
|
|
- * system prompt, rendered as the order-0 `deployment:persona` section
|
|
|
- * (after the harness identity, before all tool guidance). Every agent in
|
|
|
- * the context shares it, subagents included. Template, not free-form text:
|
|
|
- * every complete `{{…}}` group is interpreted strictly against the
|
|
|
- * registered prompt variables (the shipped agent loop registers `{{model}}`
|
|
|
- * and `{{cwd}}`), and there is no escape syntax for literal `{{…}}` prose
|
|
|
- * yet (a deliberate deferral; see the prompt-variables RFC). Defaults to
|
|
|
- * `''` — the empty section is dropped at render, so a persona-less
|
|
|
- * deployment opens with the harness identity alone.
|
|
|
+ * Deployment-wide order-0 persona template. A scoped section named
|
|
|
+ * `deployment:persona` shadows it; `{{variable}}` references are strict.
|
|
|
*/
|
|
|
persona?: string
|
|
|
/**
|
|
|
- * Explicit model-facing tool order, as a list of `ToolSchema.name`s: listed
|
|
|
- * tools take their listed position, and tools absent from the list are
|
|
|
- * inserted at the {@link TOOL_ORDER_REST} (`'<unlisted-tools>'`) entry in
|
|
|
- * lexicographic name order. A configured list must contain the rest entry
|
|
|
- * exactly once, no duplicate names, and no name without a registered tool —
|
|
|
- * a misconfigured order blocks work instead of silently reaching a model
|
|
|
- * request: shape violations throw at load, and an unregistered name rejects
|
|
|
- * every assembly. `TOOL_ORDER_REST` is reserved for the list marker and may
|
|
|
- * not be a collected tool name; such a provider output also rejects the
|
|
|
- * assembly. The single assembly-time validation rejects either failure
|
|
|
- * before any model request — the earliest moment the registered tool set
|
|
|
- * exists to check against, since tool plugins register after this service
|
|
|
- * constructs. When omitted, tools are ordered lexicographically by name.
|
|
|
- * Applied to the tools
|
|
|
- * {@link SystemPrompt.assemble} collects, BEFORE the
|
|
|
- * `system-prompt/assemble` waterfall — like the sections' `order` sort, it
|
|
|
- * canonicalizes what the registry contributed (registration order is a
|
|
|
- * plugin-load artifact); a waterfall listener that mutates the tool list
|
|
|
- * owns the determinism of what it emits. Rationale (and why not per-plugin
|
|
|
- * weights): docs/rfc/implemented/feature/2026-07-06-explicit-tool-order.md.
|
|
|
+ * Model-facing tool names in order, with {@link TOOL_ORDER_REST} exactly once.
|
|
|
+ * Shape errors fail at load and unknown names fail at assembly; known names
|
|
|
+ * hidden in one scope may be absent there. Omitted means lexicographic order.
|
|
|
*/
|
|
|
toolOrder?: string[]
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/core/system-prompt/src/index.ts:179`](../packages/core/system-prompt/src/index.ts)
|
|
|
+Source: [`packages/core/system-prompt/src/index.ts:143`](../packages/core/system-prompt/src/index.ts)
|
|
|
+
|
|
|
+## `@deepseek-ai/dsh-time-context`
|
|
|
+
|
|
|
+Requires: `systemPrompt`
|
|
|
+
|
|
|
+```ts config-catalog
|
|
|
+/** Request-time clock formatting and refresh policy. Invalid values fail plugin load. */
|
|
|
+export interface Config {
|
|
|
+ /** IANA time zone used for the rendered timestamp. Omit to resolve the Node process's system zone at plugin load. */
|
|
|
+ timeZone?: string
|
|
|
+ /** Maximum age of a reading within one turn, in milliseconds (default 60,000; `0` refreshes every step). */
|
|
|
+ refreshIntervalMs?: number
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+Source: [`packages/context/time-context/src/index.ts:22`](../packages/context/time-context/src/index.ts)
|
|
|
+
|
|
|
+## `@deepseek-ai/dsh-tool-bash`
|
|
|
+
|
|
|
+Requires: `tools` · `bash` · `systemPrompt`
|
|
|
+
|
|
|
+```ts config-catalog
|
|
|
+/** Configures whether the model may background commands. */
|
|
|
+export interface Config {
|
|
|
+ /** Expose `run_in_background` (default true); disabled calls are also rejected. */
|
|
|
+ enableRunInBackground?: boolean
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+Source: [`packages/bash/tool-bash/src/index.ts:30`](../packages/bash/tool-bash/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-tool-cordis`
|
|
|
|
|
|
@@ -699,7 +911,7 @@ export interface Config {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/cordis/tool-cordis/src/index.ts:53`](../packages/cordis/tool-cordis/src/index.ts)
|
|
|
+Source: [`packages/cordis/tool-cordis/src/index.ts:25`](../packages/cordis/tool-cordis/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-tool-fs`
|
|
|
|
|
|
@@ -719,7 +931,21 @@ export interface Config {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/fs/tool-fs/src/index.ts:48`](../packages/fs/tool-fs/src/index.ts)
|
|
|
+Source: [`packages/fs/tool-fs/src/index.ts:22`](../packages/fs/tool-fs/src/index.ts)
|
|
|
+
|
|
|
+## `@deepseek-ai/dsh-tool-skill`
|
|
|
+
|
|
|
+Requires: `tools` · `skills`
|
|
|
+
|
|
|
+```ts config-catalog
|
|
|
+/** Model-facing skill catalog configuration. */
|
|
|
+export interface Config {
|
|
|
+ /** Maximum normalized description length rendered in the session catalog; minimum 3. */
|
|
|
+ catalogDescriptionMaxLength?: number
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+Source: [`packages/skill/tool-skill/src/index.ts:19`](../packages/skill/tool-skill/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-tool-subagent`
|
|
|
|
|
|
@@ -731,26 +957,63 @@ export interface Config {
|
|
|
/** The `ctx.subagents` provider name to start runs on (e.g. `spawn`, `acp`). */
|
|
|
provider: string
|
|
|
/**
|
|
|
- * The model-facing tool name to register (default `subagent`). To expose more
|
|
|
- * than one transport, load this plugin once per provider — each load MUST set
|
|
|
- * a distinct `toolName` (the tool registry rejects a duplicate name), e.g.
|
|
|
- * `{ provider: 'spawn', toolName: 'subagent' }` and
|
|
|
- * `{ provider: 'acp', toolName: 'subagent_acp' }`.
|
|
|
+ * Model-facing tool name (default `subagent`). Each loaded instance must use
|
|
|
+ * a distinct name.
|
|
|
*/
|
|
|
toolName?: string
|
|
|
/**
|
|
|
- * Default per-child agent options (model) applied to every spawned child.
|
|
|
- * Omitted fields fall back to the child loop's own defaults. There is no
|
|
|
- * per-child persona: the deployment persona (the system-prompt plugin's
|
|
|
- * `persona` config) is a context-wide section every agent shares.
|
|
|
+ * Expose `run_in_background` (default true). Disabled instances omit the
|
|
|
+ * parameter and reject forced background calls.
|
|
|
+ */
|
|
|
+ enableRunInBackground?: boolean
|
|
|
+ /**
|
|
|
+ * Agent options applied to every child; omitted fields use child-loop defaults.
|
|
|
*/
|
|
|
agentOptions?: AgentOptions
|
|
|
+ /**
|
|
|
+ * Per-child persona that shadows `deployment:persona`. Requires the
|
|
|
+ * provider's `persona` capability; omission preserves the deployment persona.
|
|
|
+ */
|
|
|
+ persona?: string
|
|
|
+ /**
|
|
|
+ * Tool filter applied to every child. Filtered tools disappear from its
|
|
|
+ * prompt and reject execution. Requires the provider's `toolFilter`
|
|
|
+ * capability; unknown names fail startup. Children otherwise see this tool,
|
|
|
+ * so deny it or set `maxDepth` to bound recursion.
|
|
|
+ */
|
|
|
+ toolFilter?: {
|
|
|
+ /** Global tool names the child keeps; everything else is removed. */
|
|
|
+ allow?: string[]
|
|
|
+ /** Global tool names removed from the child. */
|
|
|
+ deny?: string[]
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * Maximum child depth. Requires the provider's `depthLimit` capability and a
|
|
|
+ * non-negative safe integer. Omission is unbounded.
|
|
|
+ */
|
|
|
+ maxDepth?: number
|
|
|
}
|
|
|
```
|
|
|
|
|
|
Depends on: [`AgentOptions`](../packages/core/agent/src/index.ts)
|
|
|
|
|
|
-Source: [`packages/subagent/tool-subagent/src/index.ts:44`](../packages/subagent/tool-subagent/src/index.ts)
|
|
|
+Source: [`packages/subagent/tool-subagent/src/index.ts:23`](../packages/subagent/tool-subagent/src/index.ts)
|
|
|
+
|
|
|
+## `@deepseek-ai/dsh-tool-tasks`
|
|
|
+
|
|
|
+Requires: `tools` · `tasks` · `systemPrompt`
|
|
|
+
|
|
|
+```ts config-catalog
|
|
|
+/** Configures bounded `task_output` waits. */
|
|
|
+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
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+Source: [`packages/tasks/tool-tasks/src/index.ts:21`](../packages/tasks/tool-tasks/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-tool-web`
|
|
|
|
|
|
@@ -772,7 +1035,7 @@ export interface Config {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/web/tool-web/src/index.ts:40`](../packages/web/tool-web/src/index.ts)
|
|
|
+Source: [`packages/web/tool-web/src/index.ts:29`](../packages/web/tool-web/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-tool-workflow`
|
|
|
|
|
|
@@ -788,7 +1051,7 @@ export interface Config {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/workflow/tool-workflow/src/index.ts:39`](../packages/workflow/tool-workflow/src/index.ts)
|
|
|
+Source: [`packages/workflow/tool-workflow/src/index.ts:26`](../packages/workflow/tool-workflow/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-tools`
|
|
|
|
|
|
@@ -798,18 +1061,10 @@ Requires: `systemPrompt`
|
|
|
/** Plugin config: how the registered tools are presented to the model. */
|
|
|
export interface Config {
|
|
|
/**
|
|
|
- * The presentation mode. `'native'` (the default) contributes every
|
|
|
- * registered tool as a wire function definition — byte-for-byte today's
|
|
|
- * behavior. `'code'` contributes exactly ONE wire tool, `run_code`, plus
|
|
|
- * the generated `tools:sdk` prompt section declaring every other tool as a
|
|
|
- * TypeScript API the program calls. `'both'` contributes every native
|
|
|
- * definition AND `run_code` + the SDK section. Non-native modes require a
|
|
|
- * loaded `ctx.codeRuntime` whose `language` is `'typescript'` — a missing
|
|
|
- * or mismatched runtime rejects every prompt assembly with an actionable
|
|
|
- * error (misconfiguration fails loud, before any model request). A
|
|
|
- * configured `systemPrompt.toolOrder` naming native tools likewise rejects
|
|
|
- * every assembly under `'code'` (those names are no longer contributed) —
|
|
|
- * a deployment switching modes updates its order config or drops it.
|
|
|
+ * Model presentation. `native` (default) sends every visible schema; `code`
|
|
|
+ * sends only `run_code` plus a generated SDK prompt; `both` sends both forms.
|
|
|
+ * Code modes require a TypeScript runtime and fail prompt assembly when it is
|
|
|
+ * absent or mismatched. Under `code`, native names in `toolOrder` are invalid.
|
|
|
*/
|
|
|
mode?: ToolPresentationMode
|
|
|
}
|
|
|
@@ -818,7 +1073,38 @@ export interface Config {
|
|
|
export type ToolPresentationMode = 'native' | 'code' | 'both'
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/core/tools/src/index.ts:319`](../packages/core/tools/src/index.ts)
|
|
|
+Source: [`packages/core/tools/src/index.ts:307`](../packages/core/tools/src/index.ts)
|
|
|
+
|
|
|
+## `@deepseek-ai/dsh-user-approval`
|
|
|
+
|
|
|
+```ts config-catalog
|
|
|
+/** Plugin config. All optional — `static Config` supplies the defaults. */
|
|
|
+export interface Config {
|
|
|
+ /**
|
|
|
+ * The deployment's default {@link ApprovalPolicy} for sessions without an
|
|
|
+ * `approval/policy` override — `'ask'` delegates to the composed answerers
|
|
|
+ * (fail-closed with none); `'never'` auto-rejects every ask without
|
|
|
+ * prompting (the deterministic CI/unattended stance).
|
|
|
+ */
|
|
|
+ readonly policy?: ApprovalPolicy
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * A session's approval policy — what happens to an {@link ApprovalService}
|
|
|
+ * ask BEFORE any interactive answerer sees it:
|
|
|
+ *
|
|
|
+ * - `'ask'` (the default) — delegate to the composed answerers; with none
|
|
|
+ * composed the chain falls through to the fail-closed `'unavailable'`
|
|
|
+ * (exactly today's behavior).
|
|
|
+ * - `'never'` — never prompt anyone: every ask resolves `'rejected'`
|
|
|
+ * deterministically. The strict headless stance (CI, unattended runs) and
|
|
|
+ * the only policy value stated in the system prompt — unlike `'ask'`, its
|
|
|
+ * outcome is knowable without asking, so stating it cannot overclaim.
|
|
|
+ */
|
|
|
+export type ApprovalPolicy = 'ask' | 'never'
|
|
|
+```
|
|
|
+
|
|
|
+Source: [`packages/ui/user-approval/src/index.ts:214`](../packages/ui/user-approval/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-web`
|
|
|
|
|
|
@@ -837,7 +1123,7 @@ export interface WebServiceConfig {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/web/web/src/index.ts:68`](../packages/web/web/src/index.ts)
|
|
|
+Source: [`packages/web/web/src/index.ts:55`](../packages/web/web/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-web-fetch-local`
|
|
|
|
|
|
@@ -852,10 +1138,8 @@ export interface Config {
|
|
|
maxResponseBytes?: number
|
|
|
/** Maximum decoded body length in characters. */
|
|
|
maxBodyChars?: number
|
|
|
- /** Default fetch timeout in milliseconds. */
|
|
|
+ /** Default fetch timeout in milliseconds, within Node's timer range. */
|
|
|
timeoutMs?: number
|
|
|
- /** Upper bound for a per-request timeout override. */
|
|
|
- maxTimeoutMs?: number
|
|
|
/** Maximum number of same-origin redirect hops to follow. */
|
|
|
maxRedirects?: number
|
|
|
/** `User-Agent` header sent on every request. */
|
|
|
@@ -887,7 +1171,7 @@ export interface Config {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/web/web-search-deepseek/src/index.ts:48`](../packages/web/web-search-deepseek/src/index.ts)
|
|
|
+Source: [`packages/web/web-search-deepseek/src/index.ts:38`](../packages/web/web-search-deepseek/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-web-search-exa`
|
|
|
|
|
|
@@ -909,7 +1193,7 @@ export interface Config {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/web/web-search-exa/src/index.ts:39`](../packages/web/web-search-exa/src/index.ts)
|
|
|
+Source: [`packages/web/web-search-exa/src/index.ts:37`](../packages/web/web-search-exa/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-web-search-perplexity`
|
|
|
|
|
|
@@ -931,7 +1215,7 @@ export interface Config {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/web/web-search-perplexity/src/index.ts:33`](../packages/web/web-search-perplexity/src/index.ts)
|
|
|
+Source: [`packages/web/web-search-perplexity/src/index.ts:31`](../packages/web/web-search-perplexity/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-workflow-workerthread`
|
|
|
|
|
|
@@ -959,7 +1243,7 @@ export interface Config {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/workflow/workflow-workerthread/src/index.ts:69`](../packages/workflow/workflow-workerthread/src/index.ts)
|
|
|
+Source: [`packages/workflow/workflow-workerthread/src/index.ts:32`](../packages/workflow/workflow-workerthread/src/index.ts)
|
|
|
|
|
|
## Loadable plugins with no config
|
|
|
|
|
|
@@ -967,12 +1251,13 @@ These load from a `cordis.yml` entry with no `config:` block; they declare no co
|
|
|
|
|
|
- `@deepseek-ai/dsh-agent` ([`packages/core/agent/src/index.ts`](../packages/core/agent/src/index.ts))
|
|
|
- `@deepseek-ai/dsh-fs-policy` ([`packages/fs/fs-policy/src/index.ts`](../packages/fs/fs-policy/src/index.ts))
|
|
|
+- `@deepseek-ai/dsh-invariants` — requires `sessions` ([`packages/support/invariants/src/index.ts`](../packages/support/invariants/src/index.ts))
|
|
|
- `@deepseek-ai/dsh-llm` ([`packages/llm/llm/src/index.ts`](../packages/llm/llm/src/index.ts))
|
|
|
- `@deepseek-ai/dsh-session` ([`packages/core/session/src/index.ts`](../packages/core/session/src/index.ts))
|
|
|
- `@deepseek-ai/dsh-subagent` ([`packages/subagent/subagent/src/index.ts`](../packages/subagent/subagent/src/index.ts))
|
|
|
+- `@deepseek-ai/dsh-tasks` ([`packages/tasks/tasks/src/index.ts`](../packages/tasks/tasks/src/index.ts))
|
|
|
- `@deepseek-ai/dsh-timeout-policy` — requires `tools` ([`packages/timeout/timeout-policy/src/index.ts`](../packages/timeout/timeout-policy/src/index.ts))
|
|
|
- `@deepseek-ai/dsh-tool-ask-user` — requires `tools` · `userInteraction` ([`packages/ui/tool-ask-user/src/index.ts`](../packages/ui/tool-ask-user/src/index.ts))
|
|
|
-- `@deepseek-ai/dsh-tool-bash` — requires `tools` · `bash` · `systemPrompt` ([`packages/bash/tool-bash/src/index.ts`](../packages/bash/tool-bash/src/index.ts))
|
|
|
- `@deepseek-ai/dsh-tool-todo` — requires `tools` ([`packages/todo/tool-todo/src/index.ts`](../packages/todo/tool-todo/src/index.ts))
|
|
|
- `@deepseek-ai/dsh-user-interaction` ([`packages/ui/user-interaction/src/index.ts`](../packages/ui/user-interaction/src/index.ts))
|
|
|
|
|
|
@@ -984,6 +1269,7 @@ Abstract service classes — a deployment loads a concrete implementation packag
|
|
|
- `@deepseek-ai/dsh-code-runtime` — abstract `CodeRuntime` ([`packages/code-runtime/code-runtime/src/index.ts`](../packages/code-runtime/code-runtime/src/index.ts))
|
|
|
- `@deepseek-ai/dsh-compact` — abstract `CompactService` ([`packages/compact/compact/src/index.ts`](../packages/compact/compact/src/index.ts))
|
|
|
- `@deepseek-ai/dsh-fs` — abstract `FileSystem` ([`packages/fs/fs/src/index.ts`](../packages/fs/fs/src/index.ts))
|
|
|
+- `@deepseek-ai/dsh-sandbox` — abstract `SandboxProvider` ([`packages/sandbox/sandbox/src/index.ts`](../packages/sandbox/sandbox/src/index.ts))
|
|
|
- `@deepseek-ai/dsh-session-persistence` — abstract `SessionPersistence` ([`packages/session-persistence/session-persistence/src/index.ts`](../packages/session-persistence/session-persistence/src/index.ts))
|
|
|
- `@deepseek-ai/dsh-workflow` — abstract `WorkflowService` ([`packages/workflow/workflow/src/index.ts`](../packages/workflow/workflow/src/index.ts))
|
|
|
|
|
|
@@ -991,10 +1277,16 @@ Abstract service classes — a deployment loads a concrete implementation packag
|
|
|
|
|
|
Imported as libraries by other packages; a `cordis.yml` cannot load them.
|
|
|
|
|
|
+- `@deepseek-ai/create-sdk` ([`packages/sdk/create-sdk/src/index.ts`](../packages/sdk/create-sdk/src/index.ts))
|
|
|
- `@deepseek-ai/dsh-acp-snapshot` ([`packages/support/acp-snapshot/src/index.ts`](../packages/support/acp-snapshot/src/index.ts))
|
|
|
- `@deepseek-ai/dsh-app-boot` ([`packages/ui/app-boot/src/index.ts`](../packages/ui/app-boot/src/index.ts))
|
|
|
- `@deepseek-ai/dsh-brand` ([`packages/util/brand/src/index.ts`](../packages/util/brand/src/index.ts))
|
|
|
+- `@deepseek-ai/dsh-helper` ([`packages/sdk/helper/src/index.ts`](../packages/sdk/helper/src/index.ts))
|
|
|
- `@deepseek-ai/dsh-hook-protocol` ([`packages/hooks/hook-protocol/src/index.ts`](../packages/hooks/hook-protocol/src/index.ts))
|
|
|
+- `@deepseek-ai/dsh-jsonrpc-demo` ([`packages/examples/jsonrpc-demo/src/index.ts`](../packages/examples/jsonrpc-demo/src/index.ts))
|
|
|
+- `@deepseek-ai/dsh-loader-smoke` ([`packages/support/loader-smoke/src/index.ts`](../packages/support/loader-smoke/src/index.ts))
|
|
|
+- `@deepseek-ai/dsh-scope` ([`packages/core/scope/src/index.ts`](../packages/core/scope/src/index.ts))
|
|
|
+- `@deepseek-ai/dsh-scripts` ([`packages/sdk/scripts/src/index.ts`](../packages/sdk/scripts/src/index.ts))
|
|
|
- `@deepseek-ai/dsh-subagent-inprocess` ([`packages/subagent/subagent-inprocess/src/index.ts`](../packages/subagent/subagent-inprocess/src/index.ts))
|
|
|
- `@deepseek-ai/dsh-subagent-subprocess` ([`packages/subagent/subagent-subprocess/src/index.ts`](../packages/subagent/subagent-subprocess/src/index.ts))
|
|
|
- `@deepseek-ai/dsh-timeout` ([`packages/util/timeout/src/index.ts`](../packages/util/timeout/src/index.ts))
|