@dsh-ft/dsh-fft-ftshare 0.0.0-stage → 0.4.0
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.md +82 -2
- package/catalog.json +9762 -0
- package/catalog.meta.json +7 -0
- package/catalog.txt +250 -0
- package/cordis.patch.yml +27 -0
- package/lib/capabilities.d.ts +47 -0
- package/lib/capabilities.d.ts.map +1 -0
- package/lib/capabilities.js +145 -0
- package/lib/capabilities.js.map +1 -0
- package/lib/catalog-host.d.ts +19 -0
- package/lib/catalog-host.d.ts.map +1 -0
- package/lib/catalog-host.js +31 -0
- package/lib/catalog-host.js.map +1 -0
- package/lib/catalog.d.ts +51 -0
- package/lib/catalog.d.ts.map +1 -0
- package/lib/catalog.js +60 -0
- package/lib/catalog.js.map +1 -0
- package/lib/client.d.ts +55 -0
- package/lib/client.d.ts.map +1 -0
- package/lib/client.js +184 -0
- package/lib/client.js.map +1 -0
- package/lib/contract.d.ts +143 -0
- package/lib/contract.d.ts.map +1 -0
- package/lib/contract.js +26 -0
- package/lib/contract.js.map +1 -0
- package/lib/errors.d.ts +87 -0
- package/lib/errors.d.ts.map +1 -0
- package/lib/errors.js +271 -0
- package/lib/errors.js.map +1 -0
- package/lib/index.d.ts +89 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +271 -0
- package/lib/index.js.map +1 -0
- package/lib/mask.d.ts +66 -0
- package/lib/mask.d.ts.map +1 -0
- package/lib/mask.js +106 -0
- package/lib/mask.js.map +1 -0
- package/lib/project.d.ts +101 -0
- package/lib/project.d.ts.map +1 -0
- package/lib/project.js +335 -0
- package/lib/project.js.map +1 -0
- package/lib/route.d.ts +48 -0
- package/lib/route.d.ts.map +1 -0
- package/lib/route.js +90 -0
- package/lib/route.js.map +1 -0
- package/lib/status.d.ts +103 -0
- package/lib/status.d.ts.map +1 -0
- package/lib/status.js +134 -0
- package/lib/status.js.map +1 -0
- package/lib/tools.d.ts +38 -0
- package/lib/tools.d.ts.map +1 -0
- package/lib/tools.js +178 -0
- package/lib/tools.js.map +1 -0
- package/lib/transport.d.ts +65 -0
- package/lib/transport.d.ts.map +1 -0
- package/lib/transport.js +161 -0
- package/lib/transport.js.map +1 -0
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +93 -4
package/lib/tools.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 出站传输:到 FTShare 网关的 StreamableHTTP MCP 会话。
|
|
3
|
+
*
|
|
4
|
+
* 两件事值得记下来:
|
|
5
|
+
*
|
|
6
|
+
* 1. **凭据只从 `ctx.ftshareSettings.apiKey.resolve()` 取**,绝不自己读
|
|
7
|
+
* `~/.dsh/.credentials.yaml`。设置服务是凭据的唯一入口,它还要负责把「用户
|
|
8
|
+
* 在设置页填的 Key」和「环境变量回退」按同一优先级合起来;绕过它就会出现
|
|
9
|
+
* 「设置页显示已配置、实际取数用的是另一个 Key」这类无法排查的分歧。
|
|
10
|
+
* 2. **每次调用开一个新会话**(`initialize` → `callTool` → `close`)。会话里带
|
|
11
|
+
* 着凭据,缓存会话就等于缓存秘密,而设置契约要求「每次操作重新 resolve」;
|
|
12
|
+
* 连接成本换正确性是划算的,这条与投研舱的既有做法一致。
|
|
13
|
+
*
|
|
14
|
+
* 本层只做传输,不解释失败:错误原样抛出(保留 `code`/`status`),由
|
|
15
|
+
* `./errors` 观测;日志也只留一行原始报文,分类与节流在上层做。
|
|
16
|
+
* @module @dsh-ft/dsh-fft-ftshare/transport
|
|
17
|
+
*/
|
|
18
|
+
import type { Logger } from '@deepseek-ai/cordis';
|
|
19
|
+
import type { FtshareToolInfo } from './contract.js';
|
|
20
|
+
/** 默认网关地址:FTShare 的 MCP StreamableHTTP 入口。 */
|
|
21
|
+
export declare const FTSHARE_GATEWAY_ENDPOINT = "https://market.ft.tech/gateway/mcp";
|
|
22
|
+
/** 承载 API Key 的请求头名。 */
|
|
23
|
+
export declare const FTSHARE_API_KEY_HEADER = "FTSHARE_API_KEY";
|
|
24
|
+
/**
|
|
25
|
+
* 单次 `callTool` 的默认上限。
|
|
26
|
+
*
|
|
27
|
+
* 实测会话失效/服务端超时会拖到约 950 s 才返回(见 `docs/thirdparty/
|
|
28
|
+
* ftshare-gateway-contract.md`),没有上限时一次取数能挂住 16 分钟。
|
|
29
|
+
*/
|
|
30
|
+
export declare const FTSHARE_CALL_DEADLINE_MS = 60000;
|
|
31
|
+
/** 一次上游调用的原始结果。`value` 是上游自己的结构化载荷,未做任何解释。 */
|
|
32
|
+
export interface FtshareTransportResult {
|
|
33
|
+
value: unknown;
|
|
34
|
+
}
|
|
35
|
+
/** 传输层:与传输实现无关的最小面,便于测试注入假实现。 */
|
|
36
|
+
export interface FtshareTransport {
|
|
37
|
+
/** 调一个上游工具;上游报错时抛异常(由调用方归一)。 */
|
|
38
|
+
call(tool: string, args: Record<string, unknown>, options?: {
|
|
39
|
+
signal?: AbortSignal;
|
|
40
|
+
}): Promise<FtshareTransportResult>;
|
|
41
|
+
/** 上游工具清单;上游不可达时抛异常。 */
|
|
42
|
+
listTools(): Promise<readonly FtshareToolInfo[]>;
|
|
43
|
+
}
|
|
44
|
+
/** 建传输层所需的依赖。 */
|
|
45
|
+
export interface FtshareTransportOptions {
|
|
46
|
+
/** 网关地址,默认 {@link FTSHARE_GATEWAY_ENDPOINT}。 */
|
|
47
|
+
endpoint?: string;
|
|
48
|
+
/** 每次操作重新取凭据;返回空串/undefined 表示未配置。 */
|
|
49
|
+
resolveApiKey: () => Promise<string | undefined>;
|
|
50
|
+
/** 具名 logger;不传则不记录。 */
|
|
51
|
+
logger?: Logger;
|
|
52
|
+
/** MCP 客户端自称的名字,只影响上游日志。 */
|
|
53
|
+
clientName?: string;
|
|
54
|
+
/** MCP 客户端版本。 */
|
|
55
|
+
clientVersion?: string;
|
|
56
|
+
/** 单次 `callTool` 的上限,默认 {@link FTSHARE_CALL_DEADLINE_MS};0 表示不设。 */
|
|
57
|
+
deadlineMs?: number;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 建一个到 FTShare 网关的传输层。
|
|
61
|
+
* @param options - 见 {@link FtshareTransportOptions}。
|
|
62
|
+
* @returns 传输层实现。
|
|
63
|
+
*/
|
|
64
|
+
export declare function createFtshareTransport(options: FtshareTransportOptions): FtshareTransport;
|
|
65
|
+
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAKjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAGpD,8CAA8C;AAC9C,eAAO,MAAM,wBAAwB,uCAAuC,CAAA;AAE5E,wBAAwB;AACxB,eAAO,MAAM,sBAAsB,oBAAoB,CAAA;AAEvD;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,QAAS,CAAA;AAE9C,8CAA8C;AAC9C,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,OAAO,CAAA;CACf;AAED,iCAAiC;AACjC,MAAM,WAAW,gBAAgB;IAC/B,gCAAgC;IAChC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAA;IACtH,wBAAwB;IACxB,SAAS,IAAI,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC,CAAA;CACjD;AAED,iBAAiB;AACjB,MAAM,WAAW,uBAAuB;IACtC,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,sCAAsC;IACtC,aAAa,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAChD,wBAAwB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,iBAAiB;IACjB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAsDD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,uBAAuB,GAAG,gBAAgB,CAoEzF"}
|
package/lib/transport.js
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 出站传输:到 FTShare 网关的 StreamableHTTP MCP 会话。
|
|
3
|
+
*
|
|
4
|
+
* 两件事值得记下来:
|
|
5
|
+
*
|
|
6
|
+
* 1. **凭据只从 `ctx.ftshareSettings.apiKey.resolve()` 取**,绝不自己读
|
|
7
|
+
* `~/.dsh/.credentials.yaml`。设置服务是凭据的唯一入口,它还要负责把「用户
|
|
8
|
+
* 在设置页填的 Key」和「环境变量回退」按同一优先级合起来;绕过它就会出现
|
|
9
|
+
* 「设置页显示已配置、实际取数用的是另一个 Key」这类无法排查的分歧。
|
|
10
|
+
* 2. **每次调用开一个新会话**(`initialize` → `callTool` → `close`)。会话里带
|
|
11
|
+
* 着凭据,缓存会话就等于缓存秘密,而设置契约要求「每次操作重新 resolve」;
|
|
12
|
+
* 连接成本换正确性是划算的,这条与投研舱的既有做法一致。
|
|
13
|
+
*
|
|
14
|
+
* 本层只做传输,不解释失败:错误原样抛出(保留 `code`/`status`),由
|
|
15
|
+
* `./errors` 观测;日志也只留一行原始报文,分类与节流在上层做。
|
|
16
|
+
* @module @dsh-ft/dsh-fft-ftshare/transport
|
|
17
|
+
*/
|
|
18
|
+
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
19
|
+
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
|
20
|
+
import { asText, isRecord } from './errors.js';
|
|
21
|
+
/** 默认网关地址:FTShare 的 MCP StreamableHTTP 入口。 */
|
|
22
|
+
export const FTSHARE_GATEWAY_ENDPOINT = 'https://market.ft.tech/gateway/mcp';
|
|
23
|
+
/** 承载 API Key 的请求头名。 */
|
|
24
|
+
export const FTSHARE_API_KEY_HEADER = 'FTSHARE_API_KEY';
|
|
25
|
+
/**
|
|
26
|
+
* 单次 `callTool` 的默认上限。
|
|
27
|
+
*
|
|
28
|
+
* 实测会话失效/服务端超时会拖到约 950 s 才返回(见 `docs/thirdparty/
|
|
29
|
+
* ftshare-gateway-contract.md`),没有上限时一次取数能挂住 16 分钟。
|
|
30
|
+
*/
|
|
31
|
+
export const FTSHARE_CALL_DEADLINE_MS = 60_000;
|
|
32
|
+
/**
|
|
33
|
+
* 从 MCP 调用的错误结果里取出可读文本。
|
|
34
|
+
* @param content - `callTool` 返回的 content 数组。
|
|
35
|
+
* @param fallback - 取不到文本时的说明。
|
|
36
|
+
* @returns 多块文本以换行拼接。
|
|
37
|
+
*/
|
|
38
|
+
function errorTextFromContent(content, fallback) {
|
|
39
|
+
if (!Array.isArray(content))
|
|
40
|
+
return fallback;
|
|
41
|
+
const text = content
|
|
42
|
+
.filter((block) => isRecord(block) && block.type === 'text' && typeof block.text === 'string')
|
|
43
|
+
.map(block => block.text)
|
|
44
|
+
.join('\n')
|
|
45
|
+
.trim();
|
|
46
|
+
return text === '' ? fallback : text;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 选一次调用的结构化载荷:优先 `structuredContent`,缺失时退回把文本当 JSON 解析。
|
|
50
|
+
*
|
|
51
|
+
* `dsh-kline` 两个都给;只给文本的上游也不该被判成空结果。
|
|
52
|
+
* @param result - `callTool` 的返回。
|
|
53
|
+
* @param tool - 工具名,仅用于日志。
|
|
54
|
+
* @param logger - 具名 logger。
|
|
55
|
+
* @returns 结构化载荷;两者都没有时为 undefined。
|
|
56
|
+
*/
|
|
57
|
+
function payloadOf(result, tool, logger) {
|
|
58
|
+
const record = isRecord(result) ? result : {};
|
|
59
|
+
if (isRecord(record.structuredContent))
|
|
60
|
+
return record.structuredContent;
|
|
61
|
+
const text = errorTextFromContent(record.content, '');
|
|
62
|
+
if (text !== '' && /^[[{]/u.test(text)) {
|
|
63
|
+
try {
|
|
64
|
+
return JSON.parse(text);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
logger?.warn('ftshare.invalid_json_payload', { tool });
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return record.structuredContent ?? undefined;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* 把调用方取消信号与 deadline 合成一个信号。
|
|
74
|
+
* @param caller - 调用方信号。
|
|
75
|
+
* @param deadlineMs - 上限毫秒;0 表示不设。
|
|
76
|
+
* @returns 合并后的信号;两者都没有时 undefined。
|
|
77
|
+
*/
|
|
78
|
+
function callSignal(caller, deadlineMs) {
|
|
79
|
+
const timeout = deadlineMs > 0 ? AbortSignal.timeout(deadlineMs) : undefined;
|
|
80
|
+
if (caller === undefined)
|
|
81
|
+
return timeout;
|
|
82
|
+
if (timeout === undefined)
|
|
83
|
+
return caller;
|
|
84
|
+
return AbortSignal.any([caller, timeout]);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* 建一个到 FTShare 网关的传输层。
|
|
88
|
+
* @param options - 见 {@link FtshareTransportOptions}。
|
|
89
|
+
* @returns 传输层实现。
|
|
90
|
+
*/
|
|
91
|
+
export function createFtshareTransport(options) {
|
|
92
|
+
const endpoint = options.endpoint?.trim() || FTSHARE_GATEWAY_ENDPOINT;
|
|
93
|
+
const clientName = options.clientName ?? 'dsh-fft-ftshare';
|
|
94
|
+
const clientVersion = options.clientVersion ?? '0.1.0';
|
|
95
|
+
const deadlineMs = options.deadlineMs ?? FTSHARE_CALL_DEADLINE_MS;
|
|
96
|
+
/**
|
|
97
|
+
* 开一个已握手的会话;调用方负责关闭。
|
|
98
|
+
* @returns 已连接的 MCP 客户端。
|
|
99
|
+
*/
|
|
100
|
+
async function connect() {
|
|
101
|
+
const headers = {};
|
|
102
|
+
const apiKey = asText(await options.resolveApiKey());
|
|
103
|
+
// 未配置时不带该头:网关会以「未携带 API Key」拒绝,比伪造一个空 Key 更可诊断。
|
|
104
|
+
if (apiKey !== undefined)
|
|
105
|
+
headers[FTSHARE_API_KEY_HEADER] = apiKey;
|
|
106
|
+
const client = new Client({ name: clientName, version: clientVersion });
|
|
107
|
+
const transport = new StreamableHTTPClientTransport(new URL(endpoint), { requestInit: { headers } });
|
|
108
|
+
await client.connect(transport);
|
|
109
|
+
return client;
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
async call(tool, args, callOptions) {
|
|
113
|
+
if (callOptions?.signal?.aborted === true)
|
|
114
|
+
throw new Error(`FTShare ${tool} 调用前已被取消`);
|
|
115
|
+
const client = await connect();
|
|
116
|
+
try {
|
|
117
|
+
const signal = callSignal(callOptions?.signal, deadlineMs);
|
|
118
|
+
const result = await client.callTool({ name: tool, arguments: args }, undefined, signal === undefined ? {} : { signal });
|
|
119
|
+
if (result.isError === true) {
|
|
120
|
+
// 抛出一段文本:归一器既能读其中的 JSON 码,也能读纯文案。
|
|
121
|
+
throw new Error(errorTextFromContent(result.content, `${tool} 返回 MCP 错误`));
|
|
122
|
+
}
|
|
123
|
+
const value = payloadOf(result, tool, options.logger);
|
|
124
|
+
if (value === undefined)
|
|
125
|
+
throw new Error(`${tool} 未返回 structuredContent,也没有可解析的文本载荷`);
|
|
126
|
+
return { value };
|
|
127
|
+
}
|
|
128
|
+
finally {
|
|
129
|
+
await client.close().catch(() => undefined);
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
async listTools() {
|
|
133
|
+
const client = await connect();
|
|
134
|
+
try {
|
|
135
|
+
const listed = await client.listTools();
|
|
136
|
+
const tools = [];
|
|
137
|
+
for (const entry of Array.isArray(listed.tools) ? listed.tools : []) {
|
|
138
|
+
if (!isRecord(entry))
|
|
139
|
+
continue;
|
|
140
|
+
const tool = asText(entry.name);
|
|
141
|
+
if (tool === undefined)
|
|
142
|
+
continue;
|
|
143
|
+
const description = asText(entry.description);
|
|
144
|
+
tools.push({
|
|
145
|
+
tool,
|
|
146
|
+
title: asText(entry.title) ?? tool,
|
|
147
|
+
// 目录产物(`catalog.json` / `catalog.txt`)就是这两项生成的:少了它们
|
|
148
|
+
// 目录只能给名字,模型没法判断该调哪个接口、要传什么。
|
|
149
|
+
...description !== undefined ? { description } : {},
|
|
150
|
+
...entry.inputSchema !== undefined ? { inputSchema: entry.inputSchema } : {},
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
return tools;
|
|
154
|
+
}
|
|
155
|
+
finally {
|
|
156
|
+
await client.close().catch(() => undefined);
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
|
package/locale/en.json
ADDED
package/locale/zh.json
ADDED
package/package.json
CHANGED
|
@@ -1,6 +1,95 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dsh-ft/dsh-fft-ftshare",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"description": "FTShare 数据底座:全 bundle 唯一出站、一处四态归一、一处模型可见面,并随包发布上游接口目录。",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "lib/index.js",
|
|
7
|
+
"types": "lib/index.d.ts",
|
|
8
|
+
"license": "MIT",
|
|
9
|
+
"homepage": "https://github.com/gigaflw/dsh-fft-bundle/tree/dev/packages/dsh-fft-ftshare#readme",
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "git+https://github.com/gigaflw/dsh-fft-bundle.git",
|
|
13
|
+
"directory": "packages/dsh-fft-ftshare"
|
|
14
|
+
},
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/gigaflw/dsh-fft-bundle/issues"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"dsh-plugin",
|
|
20
|
+
"deepseek-harness",
|
|
21
|
+
"ftshare",
|
|
22
|
+
"mcp"
|
|
23
|
+
],
|
|
24
|
+
"exports": {
|
|
25
|
+
".": {
|
|
26
|
+
"types": "./lib/index.d.ts",
|
|
27
|
+
"default": "./lib/index.js"
|
|
28
|
+
},
|
|
29
|
+
"./contract": {
|
|
30
|
+
"types": "./lib/contract.d.ts",
|
|
31
|
+
"default": "./lib/contract.js"
|
|
32
|
+
},
|
|
33
|
+
"./catalog": {
|
|
34
|
+
"types": "./lib/catalog.d.ts",
|
|
35
|
+
"default": "./lib/catalog.js"
|
|
36
|
+
},
|
|
37
|
+
"./tools": {
|
|
38
|
+
"types": "./lib/tools.d.ts",
|
|
39
|
+
"default": "./lib/tools.js"
|
|
40
|
+
},
|
|
41
|
+
"./mask": {
|
|
42
|
+
"types": "./lib/mask.d.ts",
|
|
43
|
+
"default": "./lib/mask.js"
|
|
44
|
+
},
|
|
45
|
+
"./project": {
|
|
46
|
+
"types": "./lib/project.d.ts",
|
|
47
|
+
"default": "./lib/project.js"
|
|
48
|
+
},
|
|
49
|
+
"./route": {
|
|
50
|
+
"types": "./lib/route.d.ts",
|
|
51
|
+
"default": "./lib/route.js"
|
|
52
|
+
},
|
|
53
|
+
"./client": {
|
|
54
|
+
"types": "./lib/client.d.ts",
|
|
55
|
+
"default": "./lib/client.js"
|
|
56
|
+
},
|
|
57
|
+
"./catalog.json": "./catalog.json",
|
|
58
|
+
"./cordis.patch.yml": "./cordis.patch.yml",
|
|
59
|
+
"./package.json": "./package.json",
|
|
60
|
+
"./locale/*.json": "./locale/*.json"
|
|
61
|
+
},
|
|
62
|
+
"files": [
|
|
63
|
+
"lib",
|
|
64
|
+
"catalog.json",
|
|
65
|
+
"catalog.txt",
|
|
66
|
+
"catalog.meta.json",
|
|
67
|
+
"README.md",
|
|
68
|
+
"LICENSE",
|
|
69
|
+
"cordis.patch.yml",
|
|
70
|
+
"locale/*.json",
|
|
71
|
+
"package.json"
|
|
72
|
+
],
|
|
73
|
+
"publishConfig": {
|
|
74
|
+
"access": "public"
|
|
75
|
+
},
|
|
76
|
+
"dependencies": {
|
|
77
|
+
"@modelcontextprotocol/sdk": "^1.30.0"
|
|
78
|
+
},
|
|
79
|
+
"peerDependencies": {
|
|
80
|
+
"@deepseek-ai/cordis": "^4.0.2",
|
|
81
|
+
"@deepseek-ai/dsh-llm": ">=0.2.0-rc.2",
|
|
82
|
+
"@deepseek-ai/dsh-tools": ">=0.2.0-rc.2"
|
|
83
|
+
},
|
|
84
|
+
"engines": {
|
|
85
|
+
"node": ">=22.19.0"
|
|
86
|
+
},
|
|
87
|
+
"dsh": {
|
|
88
|
+
"bundle": {
|
|
89
|
+
"patch": "./cordis.patch.yml"
|
|
90
|
+
},
|
|
91
|
+
"engines": {
|
|
92
|
+
"dsh": ">=0.2.0-rc.2"
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|