|
|
@@ -18,20 +18,14 @@ 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:250`](../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`
|
|
|
|
|
|
@@ -63,22 +57,19 @@ export interface Config {
|
|
|
|
|
|
Depends on: [`agentCore`](../packages/core/agent-core/src/index.ts) · [`ToolsConfig`](#deepseek-aidsh-tools)
|
|
|
|
|
|
-Source: [`packages/ui/acp-agent/src/index.ts:52`](../packages/ui/acp-agent/src/index.ts)
|
|
|
+Source: [`packages/ui/acp-agent/src/index.ts:31`](../packages/ui/acp-agent/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-agent-core`
|
|
|
|
|
|
```ts config-catalog
|
|
|
/**
|
|
|
- * Bundle config: each field forwarded verbatim to the child that owns it —
|
|
|
- * `agents` to the agent loop (an app that pre-creates no agents, like the ACP
|
|
|
- * bridge, 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`),
|
|
|
- * and `skills` to the skill registry/local provider/tool consumer. Every field
|
|
|
- * is optional INPUT here because each owner's schema supplies the default;
|
|
|
- * the schema is the INTERSECTION of the owners' own schemas (with registry
|
|
|
- * schemas nested under their bundle keys), so validation and defaulting can
|
|
|
- * never drift from them.
|
|
|
+ * Bundle config: each field forwarded verbatim to the child that owns it — `agents` to the
|
|
|
+ * agent loop (an app that pre-creates no agents, like the ACP bridge, omits it),
|
|
|
+ * `persona` and `toolOrder` to the system-prompt plugin (the deployment's persona section and
|
|
|
+ * the explicit model-facing tool order), the `tools` object to the tool registry (its
|
|
|
+ * presentation `mode`), and `skills` to the skill registry/local provider/tool consumer.
|
|
|
+ * The schema intersects the owners' schemas, which supply defaults for every
|
|
|
+ * optional input and keep validation from drifting.
|
|
|
*/
|
|
|
export interface Config {
|
|
|
/** The agent-loop `agents` list (see dsh-agent-loop's `Config`). */
|
|
|
@@ -106,7 +97,7 @@ export interface SkillConfig {
|
|
|
|
|
|
Depends on: [`AgentLoopConfig`](#deepseek-aidsh-agent-loop) · [`SkillLocal`](../packages/skill/skill-local/src/index.ts) · [`SkillRegistryConfig`](#deepseek-aidsh-skill) · [`SystemPromptConfig`](#deepseek-aidsh-system-prompt) · [`ToolsConfig`](#deepseek-aidsh-tools) · [`toolSkill`](../packages/skill/tool-skill/src/index.ts)
|
|
|
|
|
|
-Source: [`packages/core/agent-core/src/index.ts:87`](../packages/core/agent-core/src/index.ts)
|
|
|
+Source: [`packages/core/agent-core/src/index.ts:46`](../packages/core/agent-core/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-agent-loop`
|
|
|
|
|
|
@@ -129,7 +120,7 @@ export interface Config {
|
|
|
|
|
|
Depends on: [`AgentId`](../packages/core/agent/src/index.ts) · [`AgentOptions`](../packages/core/agent/src/index.ts) · [`SessionId`](../packages/core/session/src/index.ts)
|
|
|
|
|
|
-Source: [`packages/core/agent-loop/src/index.ts:325`](../packages/core/agent-loop/src/index.ts)
|
|
|
+Source: [`packages/core/agent-loop/src/index.ts:322`](../packages/core/agent-loop/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-bash-local`
|
|
|
|
|
|
@@ -149,7 +140,7 @@ 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:18`](../packages/bash/bash-local/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-bash-sandbox`
|
|
|
|
|
|
@@ -176,7 +167,7 @@ export interface Config extends LocalConfig {
|
|
|
|
|
|
Depends on: [`LocalConfig`](#deepseek-aidsh-bash-local) · [`SandboxMode`](core-data-structures/sandbox.md)
|
|
|
|
|
|
-Source: [`packages/bash/bash-sandbox/src/index.ts:60`](../packages/bash/bash-sandbox/src/index.ts)
|
|
|
+Source: [`packages/bash/bash-sandbox/src/index.ts:26`](../packages/bash/bash-sandbox/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-code-runtime-worker`
|
|
|
|
|
|
@@ -212,7 +203,7 @@ export interface Config {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/code-runtime/code-runtime-worker/src/index.ts:30`](../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`
|
|
|
|
|
|
@@ -265,7 +256,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`
|
|
|
|
|
|
@@ -276,7 +267,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.
|
|
|
@@ -301,7 +292,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`
|
|
|
|
|
|
@@ -311,7 +302,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.
|
|
|
@@ -326,43 +317,27 @@ export interface Config {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/hooks/hooks-codex/src/index.ts:47`](../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-jsonrpc`
|
|
|
|
|
|
Requires: `agents`
|
|
|
|
|
|
```ts config-catalog
|
|
|
-/**
|
|
|
- * Plugin config. Every field is a runtime-only test seam — none is part of the
|
|
|
- * schemastery {@link Config}, so nothing here is settable from a `cordis.yml`
|
|
|
- * (production always serves the process stdio and exits via `process.exit`).
|
|
|
- */
|
|
|
+/** Runtime-only test seams; no field is configurable from `cordis.yml`. */
|
|
|
export interface JsonRpcConfig {
|
|
|
- /**
|
|
|
- * Transport input override. Production omits this (the plugin reads
|
|
|
- * `process.stdin`); tests inject an in-memory `Readable` to drive the server
|
|
|
- * without a subprocess.
|
|
|
- */
|
|
|
+ /** Transport input override; production uses `process.stdin`. */
|
|
|
input?: Readable
|
|
|
- /**
|
|
|
- * Transport output override. Production omits this (the plugin writes
|
|
|
- * `process.stdout` — the protocol channel); tests inject an in-memory
|
|
|
- * `Writable` to capture frames.
|
|
|
- */
|
|
|
+ /** Transport output override; production uses `process.stdout`. */
|
|
|
output?: Writable
|
|
|
- /**
|
|
|
- * Process-exit override for the `shutdown` request path. Production omits
|
|
|
- * this (`process.exit`); tests inject a recorder so a driven shutdown does
|
|
|
- * not kill the test process.
|
|
|
- */
|
|
|
+ /** Process-exit override; production uses `process.exit`. */
|
|
|
exit?: (code: number) => void
|
|
|
}
|
|
|
```
|
|
|
|
|
|
Depends on: `Readable` (`node:stream`) · `Writable` (`node:stream`)
|
|
|
|
|
|
-Source: [`packages/ui/jsonrpc/src/index.ts:55`](../packages/ui/jsonrpc/src/index.ts)
|
|
|
+Source: [`packages/ui/jsonrpc/src/index.ts:26`](../packages/ui/jsonrpc/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-llm-deepseek`
|
|
|
|
|
|
@@ -389,7 +364,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`
|
|
|
|
|
|
@@ -442,7 +417,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`
|
|
|
|
|
|
@@ -474,7 +532,7 @@ 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`
|
|
|
|
|
|
@@ -482,20 +540,10 @@ Source: [`packages/guard/repeat-tool-guard/src/index.ts:55`](../packages/guard/r
|
|
|
/** Plugin config. All optional — `static Config` supplies the defaults. */
|
|
|
export interface Config {
|
|
|
/**
|
|
|
- * Override the sandbox runner argv (the bwrap-shaped profile arguments are
|
|
|
- * appended). A NON-EMPTY argv is the operator's assertion that this runner
|
|
|
- * exists and FULLY enforces the profile (confinement reports
|
|
|
- * `enforcement: 'full'`, and — the runner's kernel mechanism being unknown
|
|
|
- * — carries both Linux file-denial dialects as its denial signatures) —
|
|
|
- * the runner chain and its probes are skipped,
|
|
|
- * and a broken runner fails loudly at execution time. The operator also
|
|
|
- * supplies {@link runnerFailureSignatures}, which distinguish the runner
|
|
|
- * refusing its profile from the wrapped command failing normally.
|
|
|
- * Absent (or empty — the schema normalizes an omitted array to `[]`): the
|
|
|
- * built-in platform chains — Linux `bwrap` then the Landlock launcher
|
|
|
- * (probed in that order), darwin `sandbox-exec` (the sole candidate,
|
|
|
- * selected without a probe). Used for custom/alternative runners and
|
|
|
- * for deterministic fake runners in keyless test tiers.
|
|
|
+ * 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[]
|
|
|
/**
|
|
|
@@ -507,21 +555,12 @@ export interface Config {
|
|
|
* own failure dialect.
|
|
|
*/
|
|
|
runnerFailureSignatures?: string[]
|
|
|
- /**
|
|
|
- * Per-probe timeout in milliseconds for the chain's functional probes
|
|
|
- * (default: 5000; must be a positive finite number — Node treats a 0
|
|
|
- * `spawnSync` timeout as UNBOUNDED, so 0 is rejected at construction). A
|
|
|
- * probe that exceeds it reads as an unusable rung, so a
|
|
|
- * host slow enough to trip the default — cold NFS mounts, heavily loaded
|
|
|
- * CI — would otherwise be misclassified `SANDBOX_UNAVAILABLE` with no
|
|
|
- * config escape. Bounds ONE probe, and the chain walk runs each at most once
|
|
|
- * per provider lifetime.
|
|
|
- */
|
|
|
+ /** Positive timeout for each functional probe; zero would mean unbounded to Node. */
|
|
|
probeTimeoutMs?: number
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/sandbox/sandbox-local/src/index.ts:36`](../packages/sandbox/sandbox-local/src/index.ts)
|
|
|
+Source: [`packages/sandbox/sandbox-local/src/index.ts:20`](../packages/sandbox/sandbox-local/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-session-persistence-jsonl`
|
|
|
|
|
|
@@ -539,7 +578,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`
|
|
|
|
|
|
@@ -574,7 +613,7 @@ export interface Config {
|
|
|
export type JournalMode = 'wal' | 'delete' | 'truncate' | 'persist'
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/session-persistence/session-persistence-sqlite/src/index.ts:51`](../packages/session-persistence/session-persistence-sqlite/src/index.ts)
|
|
|
+Source: [`packages/session-persistence/session-persistence-sqlite/src/index.ts:39`](../packages/session-persistence/session-persistence-sqlite/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-session-query`
|
|
|
|
|
|
@@ -645,6 +684,22 @@ export interface Config {
|
|
|
|
|
|
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-agent`
|
|
|
|
|
|
```ts config-catalog
|
|
|
@@ -684,7 +739,7 @@ export interface Config {
|
|
|
|
|
|
Depends on: [`agentCore`](../packages/core/agent-core/src/index.ts) · [`ToolsConfig`](#deepseek-aidsh-tools)
|
|
|
|
|
|
-Source: [`packages/ui/stdio-agent/src/index.ts:65`](../packages/ui/stdio-agent/src/index.ts)
|
|
|
+Source: [`packages/ui/stdio-agent/src/index.ts:36`](../packages/ui/stdio-agent/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-subagent-acp`
|
|
|
|
|
|
@@ -727,20 +782,11 @@ 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`
|
|
|
|
|
|
@@ -754,7 +800,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`
|
|
|
|
|
|
@@ -789,7 +835,7 @@ 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:97`](../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`
|
|
|
|
|
|
@@ -803,7 +849,7 @@ export interface Config {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/subagent/subagent-spawn/src/index.ts:35`](../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`
|
|
|
|
|
|
@@ -811,48 +857,36 @@ Source: [`packages/subagent/subagent-spawn/src/index.ts:35`](../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 by default; a per-agent persona is a SCOPED section
|
|
|
- * of the same name registered through that agent's `agent.ctx` (it shadows
|
|
|
- * this one for that agent — the subagent seam's `persona` request field does
|
|
|
- * exactly that). 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:227`](../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-cordis`
|
|
|
|
|
|
@@ -870,7 +904,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`
|
|
|
|
|
|
@@ -890,7 +924,7 @@ 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`
|
|
|
|
|
|
@@ -965,7 +999,7 @@ export interface Config {
|
|
|
|
|
|
Depends on: [`AgentOptions`](../packages/core/agent/src/index.ts)
|
|
|
|
|
|
-Source: [`packages/subagent/tool-subagent/src/index.ts:47`](../packages/subagent/tool-subagent/src/index.ts)
|
|
|
+Source: [`packages/subagent/tool-subagent/src/index.ts:24`](../packages/subagent/tool-subagent/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-tool-web`
|
|
|
|
|
|
@@ -987,7 +1021,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`
|
|
|
|
|
|
@@ -1003,7 +1037,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`
|
|
|
|
|
|
@@ -1013,18 +1047,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
|
|
|
- * visible end capability as a native wire function definition. Under
|
|
|
- * `'code'` this registry 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
|
|
|
}
|
|
|
@@ -1033,7 +1059,7 @@ export interface Config {
|
|
|
export type ToolPresentationMode = 'native' | 'code' | 'both'
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/core/tools/src/index.ts:401`](../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`
|
|
|
|
|
|
@@ -1064,7 +1090,7 @@ export interface Config {
|
|
|
export type ApprovalPolicy = 'ask' | 'never'
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/ui/user-approval/src/index.ts:270`](../packages/ui/user-approval/src/index.ts)
|
|
|
+Source: [`packages/ui/user-approval/src/index.ts:214`](../packages/ui/user-approval/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-web`
|
|
|
|
|
|
@@ -1083,7 +1109,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`
|
|
|
|
|
|
@@ -1098,10 +1124,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. */
|
|
|
@@ -1109,7 +1133,7 @@ export interface Config {
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-Source: [`packages/web/web-fetch-local/src/index.ts:34`](../packages/web/web-fetch-local/src/index.ts)
|
|
|
+Source: [`packages/web/web-fetch-local/src/index.ts:36`](../packages/web/web-fetch-local/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-web-search-deepseek`
|
|
|
|
|
|
@@ -1133,7 +1157,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:40`](../packages/web/web-search-deepseek/src/index.ts)
|
|
|
|
|
|
## `@deepseek-ai/dsh-web-search-exa`
|
|
|
|
|
|
@@ -1205,7 +1229,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
|
|
|
|
|
|
@@ -1244,6 +1268,7 @@ Imported as libraries by other packages; a `cordis.yml` cannot load them.
|
|
|
- `@deepseek-ai/dsh-brand` ([`packages/util/brand/src/index.ts`](../packages/util/brand/src/index.ts))
|
|
|
- `@deepseek-ai/dsh-hook-protocol` ([`packages/hooks/hook-protocol/src/index.ts`](../packages/hooks/hook-protocol/src/index.ts))
|
|
|
- `@deepseek-ai/dsh-jsonrpc-agent` ([`packages/ui/jsonrpc-agent/src/index.ts`](../packages/ui/jsonrpc-agent/src/index.ts))
|
|
|
+- `@deepseek-ai/dsh-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-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))
|