@crazx/dsh-mcp-client 0.1.0-rc.7.zw.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.i18n.yaml +6 -0
- package/README.md +125 -0
- package/README.zh.md +125 -0
- package/lib/index.js +829 -0
- package/lib/invariant.js +23 -0
- package/lib/types/connection.d.ts +101 -0
- package/lib/types/index.d.ts +83 -0
- package/lib/types/invariant.d.ts +16 -0
- package/lib/types/tools.d.ts +71 -0
- package/lib/types/transport.d.ts +17 -0
- package/lib/types/types.d.ts +28 -0
- package/package.json +60 -0
package/lib/invariant.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region lib/types/invariant.js
|
|
2
|
+
/**
|
|
3
|
+
* Package-owned invariant companion for `@deepseek-ai/dsh-mcp-client`.
|
|
4
|
+
* @module @deepseek-ai/dsh-mcp-client/invariant
|
|
5
|
+
*/
|
|
6
|
+
const PACKAGE_NAME = "@deepseek-ai/dsh-mcp-client";
|
|
7
|
+
/** Cordis companion plugin name. */
|
|
8
|
+
const name = "mcp-client-invariant";
|
|
9
|
+
/** Service required before the companion can reserve package ownership. */
|
|
10
|
+
const inject = ["invariants"];
|
|
11
|
+
/**
|
|
12
|
+
* No runtime invariant: MCP generations contribute through the tool registry, but the bridge
|
|
13
|
+
* exposes no independent server-to-tool snapshot after an asynchronous resync.
|
|
14
|
+
*/
|
|
15
|
+
const install = () => {};
|
|
16
|
+
/**
|
|
17
|
+
* Register this package's invariant companion.
|
|
18
|
+
* @param ctx - Cordis context carrying the invariant service.
|
|
19
|
+
* @returns the installed registration's disposer after setup succeeds.
|
|
20
|
+
*/
|
|
21
|
+
const apply = (ctx) => Promise.resolve(ctx.invariants.register(PACKAGE_NAME, install));
|
|
22
|
+
//#endregion
|
|
23
|
+
export { apply, inject, name };
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Connection supervisor: owns the MCP client/transport generations for one
|
|
3
|
+
* plugin instance, keeps the harness tool registry in sync with the live
|
|
4
|
+
* generation, and — when the connection drops — restarts the configured
|
|
5
|
+
* server with bounded exponential backoff.
|
|
6
|
+
*
|
|
7
|
+
* One outage shares one attempt budget (`maxAttempts` consecutive failed
|
|
8
|
+
* attempts, delays doubling from `initialDelayMs` up to `maxDelayMs`). A
|
|
9
|
+
* connection that stays up past the stability window closes the outage, so
|
|
10
|
+
* the next disconnect starts a fresh budget while a crash-looping server —
|
|
11
|
+
* even one whose connects briefly succeed — still exhausts the cap instead of
|
|
12
|
+
* restarting forever. Exhaustion unregisters the server's tools and stops;
|
|
13
|
+
* disposal (including HMR) is the only way back from that state.
|
|
14
|
+
*
|
|
15
|
+
* @module
|
|
16
|
+
*/
|
|
17
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
18
|
+
import type { Config } from './index.ts';
|
|
19
|
+
import type { McpClientStatus } from './types.ts';
|
|
20
|
+
/** Automatic reconnect policy for one MCP server connection. */
|
|
21
|
+
export interface ReconnectConfig {
|
|
22
|
+
/** Reconnect automatically after a lost connection (default true). */
|
|
23
|
+
enabled?: boolean;
|
|
24
|
+
/** First reconnect delay in milliseconds; doubles per consecutive failed attempt (default 500). */
|
|
25
|
+
initialDelayMs?: number;
|
|
26
|
+
/** Backoff ceiling in milliseconds; also the uptime after which the attempt budget resets (default 30000). */
|
|
27
|
+
maxDelayMs?: number;
|
|
28
|
+
/** Consecutive failed attempts per outage before giving up for good (default 10). */
|
|
29
|
+
maxAttempts?: number;
|
|
30
|
+
}
|
|
31
|
+
/** Defaults shared by the Config schema and {@link resolveReconnectPolicy}. */
|
|
32
|
+
export declare const RECONNECT_DEFAULTS: Required<ReconnectConfig>;
|
|
33
|
+
/** Fully resolved reconnect policy captured at plugin load. */
|
|
34
|
+
export type ResolvedReconnectPolicy = Readonly<Required<ReconnectConfig>>;
|
|
35
|
+
/**
|
|
36
|
+
* The one explicit resolve step from raw reconnect config to the policy the
|
|
37
|
+
* supervisor runs. Programmatic construction may bypass Schemastery
|
|
38
|
+
* normalization, so every default and bound is re-judged here — misconfiguration
|
|
39
|
+
* fails the plugin instance at load.
|
|
40
|
+
*
|
|
41
|
+
* @param config - Raw `reconnect` config; omission uses the defaults.
|
|
42
|
+
* @param path - Diagnostic prefix naming the config location in thrown messages.
|
|
43
|
+
* @returns The frozen resolved policy.
|
|
44
|
+
*/
|
|
45
|
+
export declare function resolveReconnectPolicy(config: ReconnectConfig | undefined, path: string): ResolvedReconnectPolicy;
|
|
46
|
+
/** Result from the initial connection attempt, for startup-await semantics. */
|
|
47
|
+
export interface ConnectionOutcome {
|
|
48
|
+
/** If the initial connection or tool sync failed, the error; otherwise absent. */
|
|
49
|
+
error?: unknown;
|
|
50
|
+
}
|
|
51
|
+
/** Handle for one plugin instance's supervised connection. */
|
|
52
|
+
export interface ConnectionHandle {
|
|
53
|
+
/**
|
|
54
|
+
* Settles when the first connection attempt completes (success or failure).
|
|
55
|
+
* The supervisor enters its reconnect loop regardless; the caller decides
|
|
56
|
+
* whether a failed startup is fatal via `failOnStartupError`.
|
|
57
|
+
*/
|
|
58
|
+
ready: Promise<ConnectionOutcome>;
|
|
59
|
+
/**
|
|
60
|
+
* Stop reconnection, close the live client, wait for the in-flight attempt
|
|
61
|
+
* and queued tool syncs to quiesce, then unregister every tool this server
|
|
62
|
+
* still owns.
|
|
63
|
+
*/
|
|
64
|
+
dispose(): Promise<void>;
|
|
65
|
+
}
|
|
66
|
+
/** Supervisor state facts {@link computeMcpClientStatus} derives a status from. */
|
|
67
|
+
export interface McpStatusFacts {
|
|
68
|
+
/** Disposal started; the supervisor makes no further transitions. */
|
|
69
|
+
readonly disposed: boolean;
|
|
70
|
+
/** A client generation currently holds the connection slot. */
|
|
71
|
+
readonly hasClient: boolean;
|
|
72
|
+
/** A reconnect backoff timer is armed. */
|
|
73
|
+
readonly hasTimer: boolean;
|
|
74
|
+
/** The current generation finished connect plus its initial tool sync. */
|
|
75
|
+
readonly connected: boolean;
|
|
76
|
+
/** Consecutive failed attempts within the current outage. */
|
|
77
|
+
readonly failedAttempts: number;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Derive the observable connection status from supervisor state facts.
|
|
81
|
+
*
|
|
82
|
+
* Evaluation order is load-bearing: `failed` is judged before `reconnecting`
|
|
83
|
+
* because a give-up leaves `failedAttempts` above zero with no client and no
|
|
84
|
+
* timer, and `connected` is judged before the in-flight branches because the
|
|
85
|
+
* outage budget resets from that mark.
|
|
86
|
+
*
|
|
87
|
+
* @param facts - the supervisor's current state facts.
|
|
88
|
+
* @returns the committed status those facts represent.
|
|
89
|
+
*/
|
|
90
|
+
export declare function computeMcpClientStatus(facts: McpStatusFacts): McpClientStatus;
|
|
91
|
+
/**
|
|
92
|
+
* Start the supervised connection for one MCP server and keep it alive per
|
|
93
|
+
* the reconnect policy.
|
|
94
|
+
*
|
|
95
|
+
* @param ctx - Cordis context providing the `tools` registry and logger.
|
|
96
|
+
* @param config - Resolved plugin config selecting the transport and server identity.
|
|
97
|
+
* @param policy - Resolved reconnect policy from {@link resolveReconnectPolicy}.
|
|
98
|
+
* @returns Handle with a `ready` promise for startup-await and a `dispose` for teardown.
|
|
99
|
+
*/
|
|
100
|
+
export declare function startConnection(ctx: Context, config: Config, policy: ResolvedReconnectPolicy): ConnectionHandle;
|
|
101
|
+
//# sourceMappingURL=connection.d.ts.map
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP client bridge plugin: connects to an external MCP server and registers
|
|
3
|
+
* its tools on `ctx.tools` under server-qualified public names
|
|
4
|
+
* (`mcp__<serverName>__<rawName>`). Each plugin instance connects to one MCP
|
|
5
|
+
* server; load multiple instances in `cordis.yml` for multiple servers.
|
|
6
|
+
*
|
|
7
|
+
* Namespace plugin (named exports, no default export). Lifecycle is
|
|
8
|
+
* effect-scoped: disposal disconnects from the server, unregisters all tools,
|
|
9
|
+
* and releases the `serverName` namespace reservation. HMR hot-swaps by
|
|
10
|
+
* disposing the old instance and creating a new one; identical `serverName`
|
|
11
|
+
* reproduces identical public tool names.
|
|
12
|
+
*
|
|
13
|
+
* @module @deepseek-ai/dsh-mcp-client
|
|
14
|
+
*/
|
|
15
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
16
|
+
import z from '@deepseek-ai/schemastery';
|
|
17
|
+
import type { ReconnectConfig } from './connection.ts';
|
|
18
|
+
export type { McpResult } from './tools.ts';
|
|
19
|
+
export type { ReconnectConfig, ResolvedReconnectPolicy } from './connection.ts';
|
|
20
|
+
export type { McpClientStatus } from './types.ts';
|
|
21
|
+
/** Cordis plugin name used by loader diagnostics. */
|
|
22
|
+
export declare const name = "mcp-client";
|
|
23
|
+
/** Services required by this plugin. */
|
|
24
|
+
export declare const inject: string[];
|
|
25
|
+
/** Config for connecting to an MCP server via a spawned child process over stdio. */
|
|
26
|
+
export interface StdioConfig {
|
|
27
|
+
/** Selects child-process stdio transport. */
|
|
28
|
+
transport: 'stdio';
|
|
29
|
+
/**
|
|
30
|
+
* Stable local namespace for this server's model-facing tool names
|
|
31
|
+
* (`mcp__<serverName>__<rawName>`). Must match `[A-Za-z0-9_-]{1,32}` and be
|
|
32
|
+
* unique across live mcp-client instances.
|
|
33
|
+
*/
|
|
34
|
+
serverName: string;
|
|
35
|
+
/** Executable used to start the server. */
|
|
36
|
+
command: string;
|
|
37
|
+
/** Arguments passed directly, without shell interpolation. */
|
|
38
|
+
args: string[];
|
|
39
|
+
/** Extra env vars merged on top of scrubbed ambient env. */
|
|
40
|
+
env: Record<string, string>;
|
|
41
|
+
/** Working directory for the child process. */
|
|
42
|
+
cwd: string;
|
|
43
|
+
/** Per-tool-call timeout in milliseconds. */
|
|
44
|
+
toolCallTimeoutMs: number;
|
|
45
|
+
/** Fail plugin activation when the initial connection or tool synchronization fails. */
|
|
46
|
+
failOnStartupError: boolean;
|
|
47
|
+
/** Automatic reconnect policy after a lost connection; omission uses the defaults. */
|
|
48
|
+
reconnect?: ReconnectConfig;
|
|
49
|
+
}
|
|
50
|
+
/** Config for connecting to an MCP server over Streamable HTTP (SSE). */
|
|
51
|
+
export interface StreamableHttpConfig {
|
|
52
|
+
/** Selects Streamable HTTP transport. */
|
|
53
|
+
transport: 'streamable-http';
|
|
54
|
+
/**
|
|
55
|
+
* Stable local namespace for this server's model-facing tool names
|
|
56
|
+
* (`mcp__<serverName>__<rawName>`). Must match `[A-Za-z0-9_-]{1,32}` and be
|
|
57
|
+
* unique across live mcp-client instances.
|
|
58
|
+
*/
|
|
59
|
+
serverName: string;
|
|
60
|
+
/** MCP endpoint URL. */
|
|
61
|
+
url: string;
|
|
62
|
+
/** Additional headers attached to MCP requests. */
|
|
63
|
+
headers: Record<string, string>;
|
|
64
|
+
/** Per-tool-call timeout in milliseconds. */
|
|
65
|
+
toolCallTimeoutMs: number;
|
|
66
|
+
/** Fail plugin activation when the initial connection or tool synchronization fails. */
|
|
67
|
+
failOnStartupError: boolean;
|
|
68
|
+
/** Automatic reconnect policy after a lost connection; omission uses the defaults. */
|
|
69
|
+
reconnect?: ReconnectConfig;
|
|
70
|
+
}
|
|
71
|
+
/** Configuration for one stdio or Streamable HTTP MCP server. */
|
|
72
|
+
export type Config = StdioConfig | StreamableHttpConfig;
|
|
73
|
+
export declare const Config: z<Config>;
|
|
74
|
+
/**
|
|
75
|
+
* Connect one MCP server and publish its initial tool generation before activation.
|
|
76
|
+
* This entry remains explicitly `async`: Cordis treats a prototype-bearing
|
|
77
|
+
* ordinary function as a constructor, whose returned Promise is not startup work.
|
|
78
|
+
* @param ctx - plugin context carrying the tool registry.
|
|
79
|
+
* @param config - resolved transport and server namespace configuration.
|
|
80
|
+
* @returns startup readiness after connection and initial tool discovery settle.
|
|
81
|
+
*/
|
|
82
|
+
export declare function apply(ctx: Context, config: Config): Promise<void>;
|
|
83
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package-owned invariant companion for `@deepseek-ai/dsh-mcp-client`.
|
|
3
|
+
* @module @deepseek-ai/dsh-mcp-client/invariant
|
|
4
|
+
*/
|
|
5
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
6
|
+
/** Cordis companion plugin name. */
|
|
7
|
+
export declare const name = "mcp-client-invariant";
|
|
8
|
+
/** Service required before the companion can reserve package ownership. */
|
|
9
|
+
export declare const inject: string[];
|
|
10
|
+
/**
|
|
11
|
+
* Register this package's invariant companion.
|
|
12
|
+
* @param ctx - Cordis context carrying the invariant service.
|
|
13
|
+
* @returns the installed registration's disposer after setup succeeds.
|
|
14
|
+
*/
|
|
15
|
+
export declare const apply: (ctx: Context) => Promise<() => void>;
|
|
16
|
+
//# sourceMappingURL=invariant.d.ts.map
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool bridge: discovers MCP tools, registers them on the harness ToolRuntime
|
|
3
|
+
* under deterministic server-qualified public names, and handles re-sync when
|
|
4
|
+
* the server's tool list changes.
|
|
5
|
+
*
|
|
6
|
+
* Naming contract (see the mcp-client Agent Note "Naming invariants"): every MCP tool
|
|
7
|
+
* has the stable identity `(serverName, rawName)`; the model-facing public name
|
|
8
|
+
* is `mcp__<serverName>__<rawName>`, normalized to the DeepSeek function-name
|
|
9
|
+
* constraints. The raw name is only ever sent on the wire (`tools/call`); the
|
|
10
|
+
* public name is never parsed to recover it.
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
import type { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
15
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
16
|
+
import type { JsonValue } from '@deepseek-ai/dsh-tools';
|
|
17
|
+
/** Resolved options relevant to tool bridging. */
|
|
18
|
+
export interface ToolBridgeOptions {
|
|
19
|
+
/** Whether a registry conflict is contained or rejects this synchronization. */
|
|
20
|
+
registrationFailure: 'contain' | 'throw';
|
|
21
|
+
serverName: string;
|
|
22
|
+
toolCallTimeoutMs: number;
|
|
23
|
+
}
|
|
24
|
+
/** State for one sync generation: the current set of disposers keyed by public name. */
|
|
25
|
+
export type ToolDisposers = Map<string, () => void>;
|
|
26
|
+
/** Canonical MCP result exposed to Code Mode without discarding protocol blocks. */
|
|
27
|
+
export type McpResult<Structured extends JsonValue = JsonValue> = {
|
|
28
|
+
content: JsonValue[];
|
|
29
|
+
structuredContent?: Structured;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Derive the model-facing public name for one MCP tool.
|
|
33
|
+
*
|
|
34
|
+
* Deterministic pure function of `(serverName, rawName)`: the clean case is
|
|
35
|
+
* `mcp__<serverName>__<rawName>` verbatim. When character replacement or
|
|
36
|
+
* truncation to the DeepSeek function-name contract (64 chars,
|
|
37
|
+
* `[A-Za-z0-9_-]`) changes the name, a 12-hex-char SHA-256 hash of the
|
|
38
|
+
* identity is appended so distinct MCP identities never collapse into the
|
|
39
|
+
* same public name.
|
|
40
|
+
*
|
|
41
|
+
* @param serverName - Stable local namespace from plugin config.
|
|
42
|
+
* @param rawName - The MCP server's own tool name.
|
|
43
|
+
* @returns The globally unique, model-facing ToolRuntime name.
|
|
44
|
+
*/
|
|
45
|
+
export declare function publicToolName(serverName: string, rawName: string): string;
|
|
46
|
+
/**
|
|
47
|
+
* Sync the MCP server's tool list into the harness ToolRuntime.
|
|
48
|
+
*
|
|
49
|
+
* Two phases keep the swap safe:
|
|
50
|
+
*
|
|
51
|
+
* 1. Fetch: drain uncached `tools/list` pagination and build the full next
|
|
52
|
+
* generation of `ToolDefinition`s under public names. Any failure here
|
|
53
|
+
* (network error, duplicate raw name in the server's list) rejects and
|
|
54
|
+
* leaves the previous generation registered untouched.
|
|
55
|
+
* 2. Swap: dispose the previous generation, register the new one. A registry
|
|
56
|
+
* conflict here can only mean a foreign registration squats on this
|
|
57
|
+
* server's `mcp__<serverName>__` namespace — the partial generation is
|
|
58
|
+
* rolled back (zero tools from this server) and logged. Initial strict
|
|
59
|
+
* synchronization may propagate the conflict so its parent transaction
|
|
60
|
+
* rejects; ordinary clients and later re-syncs return an empty map.
|
|
61
|
+
*
|
|
62
|
+
* @param client - Connected MCP Client instance used to list and call tools.
|
|
63
|
+
* @param ctx - Cordis context providing the `tools` service for registration.
|
|
64
|
+
* @param opts - Bridge options: server namespace and per-call timeout.
|
|
65
|
+
* @param previous - Disposer map from the prior sync generation; disposed
|
|
66
|
+
* during the swap phase (only after the fetch phase succeeded).
|
|
67
|
+
* @returns A map of registered public tool names to their unregister
|
|
68
|
+
* disposers — the exact set of live registrations owned by this server.
|
|
69
|
+
*/
|
|
70
|
+
export declare function syncTools(client: Client, ctx: Context, opts: ToolBridgeOptions, previous: ToolDisposers): Promise<ToolDisposers>;
|
|
71
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transport factory: creates the appropriate MCP transport based on the
|
|
3
|
+
* plugin's resolved config. Stdio spawns a child process (with credential
|
|
4
|
+
* scrubbing); Streamable HTTP connects to a URL.
|
|
5
|
+
*
|
|
6
|
+
* @module
|
|
7
|
+
*/
|
|
8
|
+
import type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';
|
|
9
|
+
import type { Config } from './index.ts';
|
|
10
|
+
/**
|
|
11
|
+
* Create an MCP transport from the resolved plugin config.
|
|
12
|
+
*
|
|
13
|
+
* @param config - Resolved plugin config discriminated on `transport`.
|
|
14
|
+
* @returns A connected-ready MCP Transport (stdio or Streamable HTTP).
|
|
15
|
+
*/
|
|
16
|
+
export declare function createTransport(config: Config): Transport;
|
|
17
|
+
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Observable connection state of one mcp-client instance and the Cordis event
|
|
3
|
+
* that publishes it. Types only — the connection supervisor in `connection.ts`
|
|
4
|
+
* owns the runtime state and emits at each commit point.
|
|
5
|
+
*
|
|
6
|
+
* @module @deepseek-ai/dsh-mcp-client
|
|
7
|
+
*/
|
|
8
|
+
/** Connection state of one supervised MCP server connection. */
|
|
9
|
+
export type McpClientStatus = 'connecting' | 'connected' | 'reconnecting' | 'failed' | 'disposed';
|
|
10
|
+
declare module '@deepseek-ai/cordis' {
|
|
11
|
+
interface Events {
|
|
12
|
+
/**
|
|
13
|
+
* One MCP server connection reached a new committed state, or its live
|
|
14
|
+
* tool registration count changed. Emitted only after the supervisor
|
|
15
|
+
* mutated its state, never before. The emitting fiber's context and every
|
|
16
|
+
* ancestor context observe this through the shared event bus; `serverName`
|
|
17
|
+
* disambiguates concurrent instances. Listener failures are contained and
|
|
18
|
+
* logged by the emitter, so an observer defect cannot disrupt the
|
|
19
|
+
* supervisor's own state machine.
|
|
20
|
+
* @param serverName - the configured namespace of the emitting instance.
|
|
21
|
+
* @param status - the connection state at this commit point.
|
|
22
|
+
* @param toolCount - number of tools this server currently has registered on `ctx.tools`.
|
|
23
|
+
* @mode emit
|
|
24
|
+
*/
|
|
25
|
+
'mcp-client/status'(serverName: string, status: McpClientStatus, toolCount: number): void;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=types.d.ts.map
|
package/package.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@crazx/dsh-mcp-client",
|
|
3
|
+
"description": "MCP client bridge: connects to MCP servers and registers their tools on ctx.tools",
|
|
4
|
+
"version": "0.1.0-rc.7.zw.2",
|
|
5
|
+
"publishConfig": {
|
|
6
|
+
"access": "public"
|
|
7
|
+
},
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/aka-danielZhang/deepseek-harness.git",
|
|
11
|
+
"directory": "packages/mcp/mcp-client"
|
|
12
|
+
},
|
|
13
|
+
"type": "module",
|
|
14
|
+
"main": "lib/index.js",
|
|
15
|
+
"types": "lib/types/index.d.ts",
|
|
16
|
+
"exports": {
|
|
17
|
+
".": {
|
|
18
|
+
"types": "./lib/types/index.d.ts",
|
|
19
|
+
"default": "./lib/index.js"
|
|
20
|
+
},
|
|
21
|
+
"./invariant": {
|
|
22
|
+
"types": "./lib/types/invariant.d.ts",
|
|
23
|
+
"default": "./lib/invariant.js"
|
|
24
|
+
},
|
|
25
|
+
"./src/*": "./src/*",
|
|
26
|
+
"./package.json": "./package.json"
|
|
27
|
+
},
|
|
28
|
+
"files": [
|
|
29
|
+
"lib/index.js",
|
|
30
|
+
"lib/invariant.js",
|
|
31
|
+
"lib/types/**/*.d.ts"
|
|
32
|
+
],
|
|
33
|
+
"license": "MIT",
|
|
34
|
+
"peerDependencies": {
|
|
35
|
+
"@deepseek-ai/dsh-attachment": "^0.1.0-rc.7",
|
|
36
|
+
"@deepseek-ai/dsh-invariants": "^0.1.0-rc.7",
|
|
37
|
+
"@deepseek-ai/dsh-llm": "^0.1.0-rc.7",
|
|
38
|
+
"@deepseek-ai/dsh-subprocess": "^0.1.0-rc.7",
|
|
39
|
+
"@deepseek-ai/dsh-timeout": "^0.1.0-rc.7",
|
|
40
|
+
"@deepseek-ai/dsh-tools": "^0.1.0-rc.7",
|
|
41
|
+
"@deepseek-ai/cordis": "^0.1.0-rc.7"
|
|
42
|
+
},
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
45
|
+
"@deepseek-ai/schemastery": "^0.1.0-rc.7",
|
|
46
|
+
"zod": "^4.4.3"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@deepseek-ai/dsh-attachment": "^0.1.0-rc.7",
|
|
50
|
+
"@deepseek-ai/dsh-attachment-local": "^0.1.0-rc.7",
|
|
51
|
+
"@deepseek-ai/dsh-invariants": "^0.1.0-rc.7",
|
|
52
|
+
"@deepseek-ai/dsh-llm": "^0.1.0-rc.7",
|
|
53
|
+
"@deepseek-ai/dsh-subprocess": "^0.1.0-rc.7",
|
|
54
|
+
"@deepseek-ai/dsh-timeout": "^0.1.0-rc.7",
|
|
55
|
+
"@deepseek-ai/dsh-tools": "^0.1.0-rc.7",
|
|
56
|
+
"@modelcontextprotocol/server-everything": "^2026.7.4",
|
|
57
|
+
"@modelcontextprotocol/server-filesystem": "^2026.7.4",
|
|
58
|
+
"@deepseek-ai/cordis": "^0.1.0-rc.7"
|
|
59
|
+
}
|
|
60
|
+
}
|