@vheins/local-memory-mcp 0.4.8 → 0.4.11
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/dist/capabilities.d.ts +7 -7
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +7 -7
- package/dist/capabilities.js.map +1 -1
- package/dist/completion.d.ts +25 -0
- package/dist/completion.d.ts.map +1 -0
- package/dist/completion.js +127 -0
- package/dist/completion.js.map +1 -0
- package/dist/mcp/client.d.ts.map +1 -1
- package/dist/mcp/client.js +8 -1
- package/dist/mcp/client.js.map +1 -1
- package/dist/mcp/elicitation.d.ts +24 -0
- package/dist/mcp/elicitation.d.ts.map +1 -0
- package/dist/mcp/elicitation.js +13 -0
- package/dist/mcp/elicitation.js.map +1 -0
- package/dist/mcp/sampling.d.ts +69 -0
- package/dist/mcp/sampling.d.ts.map +1 -0
- package/dist/mcp/sampling.js +13 -0
- package/dist/mcp/sampling.js.map +1 -0
- package/dist/mcp/session.d.ts +28 -0
- package/dist/mcp/session.d.ts.map +1 -0
- package/dist/mcp/session.js +106 -0
- package/dist/mcp/session.js.map +1 -0
- package/dist/prompts/registry.d.ts +55 -0
- package/dist/prompts/registry.d.ts.map +1 -1
- package/dist/prompts/registry.js +455 -7
- package/dist/prompts/registry.js.map +1 -1
- package/dist/resources/index.d.ts +55 -4
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +222 -52
- package/dist/resources/index.js.map +1 -1
- package/dist/router.d.ts +11 -1
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +151 -34
- package/dist/router.js.map +1 -1
- package/dist/server.js +212 -13
- package/dist/server.js.map +1 -1
- package/dist/tests/client.test.d.ts +2 -0
- package/dist/tests/client.test.d.ts.map +1 -0
- package/dist/tests/client.test.js +130 -0
- package/dist/tests/client.test.js.map +1 -0
- package/dist/tests/dashboard.test.d.ts +2 -0
- package/dist/tests/dashboard.test.d.ts.map +1 -0
- package/dist/tests/dashboard.test.js +370 -0
- package/dist/tests/dashboard.test.js.map +1 -0
- package/dist/tests/e2e.test.d.ts +2 -0
- package/dist/tests/e2e.test.d.ts.map +1 -0
- package/dist/tests/e2e.test.js +250 -0
- package/dist/tests/e2e.test.js.map +1 -0
- package/dist/tests/index.test.d.ts +2 -0
- package/dist/tests/index.test.d.ts.map +1 -0
- package/dist/tests/index.test.js +185 -0
- package/dist/tests/index.test.js.map +1 -0
- package/dist/tests/logger.test.d.ts +2 -0
- package/dist/tests/logger.test.d.ts.map +1 -0
- package/dist/tests/logger.test.js +104 -0
- package/dist/tests/logger.test.js.map +1 -0
- package/dist/tests/memory.bulk.test.d.ts +2 -0
- package/dist/tests/memory.bulk.test.d.ts.map +1 -0
- package/dist/tests/memory.bulk.test.js +52 -0
- package/dist/tests/memory.bulk.test.js.map +1 -0
- package/dist/tests/memory.search.test.d.ts +2 -0
- package/dist/tests/memory.search.test.d.ts.map +1 -0
- package/dist/tests/memory.search.test.js +181 -0
- package/dist/tests/memory.search.test.js.map +1 -0
- package/dist/tests/normalize.test.d.ts +2 -0
- package/dist/tests/normalize.test.d.ts.map +1 -0
- package/dist/tests/normalize.test.js +181 -0
- package/dist/tests/normalize.test.js.map +1 -0
- package/dist/tests/query-expander.test.d.ts +2 -0
- package/dist/tests/query-expander.test.d.ts.map +1 -0
- package/dist/tests/query-expander.test.js +33 -0
- package/dist/tests/query-expander.test.js.map +1 -0
- package/dist/tests/router.test.d.ts +2 -0
- package/dist/tests/router.test.d.ts.map +1 -0
- package/dist/tests/router.test.js +470 -0
- package/dist/tests/router.test.js.map +1 -0
- package/dist/tests/sqlite.test.d.ts +2 -0
- package/dist/tests/sqlite.test.d.ts.map +1 -0
- package/dist/tests/sqlite.test.js +367 -0
- package/dist/tests/sqlite.test.js.map +1 -0
- package/dist/tests/tasks-search.test.d.ts +2 -0
- package/dist/tests/tasks-search.test.d.ts.map +1 -0
- package/dist/tests/tasks-search.test.js +154 -0
- package/dist/tests/tasks-search.test.js.map +1 -0
- package/dist/tests/tasks-transition.test.d.ts +2 -0
- package/dist/tests/tasks-transition.test.d.ts.map +1 -0
- package/dist/tests/tasks-transition.test.js +174 -0
- package/dist/tests/tasks-transition.test.js.map +1 -0
- package/dist/tests/tasks.bulk.test.d.ts +2 -0
- package/dist/tests/tasks.bulk.test.d.ts.map +1 -0
- package/dist/tests/tasks.bulk.test.js +254 -0
- package/dist/tests/tasks.bulk.test.js.map +1 -0
- package/dist/tests/tasks.e2e.test.d.ts +2 -0
- package/dist/tests/tasks.e2e.test.d.ts.map +1 -0
- package/dist/tests/tasks.e2e.test.js +289 -0
- package/dist/tests/tasks.e2e.test.js.map +1 -0
- package/dist/tests/tasks.pending-limit-refined.test.d.ts +2 -0
- package/dist/tests/tasks.pending-limit-refined.test.d.ts.map +1 -0
- package/dist/tests/tasks.pending-limit-refined.test.js +72 -0
- package/dist/tests/tasks.pending-limit-refined.test.js.map +1 -0
- package/dist/tests/v2-features.test.d.ts +2 -0
- package/dist/tests/v2-features.test.d.ts.map +1 -0
- package/dist/tests/v2-features.test.js +209 -0
- package/dist/tests/v2-features.test.js.map +1 -0
- package/dist/tools/memory.bulk-delete.d.ts +1 -7
- package/dist/tools/memory.bulk-delete.d.ts.map +1 -1
- package/dist/tools/memory.bulk-delete.js +30 -8
- package/dist/tools/memory.bulk-delete.js.map +1 -1
- package/dist/tools/memory.delete.d.ts.map +1 -1
- package/dist/tools/memory.delete.js +18 -1
- package/dist/tools/memory.delete.js.map +1 -1
- package/dist/tools/memory.recap.d.ts.map +1 -1
- package/dist/tools/memory.recap.js +24 -1
- package/dist/tools/memory.recap.js.map +1 -1
- package/dist/tools/memory.search.d.ts.map +1 -1
- package/dist/tools/memory.search.js +16 -1
- package/dist/tools/memory.search.js.map +1 -1
- package/dist/tools/memory.store.d.ts.map +1 -1
- package/dist/tools/memory.store.js +31 -1
- package/dist/tools/memory.store.js.map +1 -1
- package/dist/tools/memory.summarize.d.ts.map +1 -1
- package/dist/tools/memory.summarize.js +19 -1
- package/dist/tools/memory.summarize.js.map +1 -1
- package/dist/tools/memory.synthesize.d.ts +14 -0
- package/dist/tools/memory.synthesize.d.ts.map +1 -0
- package/dist/tools/memory.synthesize.js +228 -0
- package/dist/tools/memory.synthesize.js.map +1 -0
- package/dist/tools/memory.update.d.ts.map +1 -1
- package/dist/tools/memory.update.js +19 -1
- package/dist/tools/memory.update.js.map +1 -1
- package/dist/tools/schemas.d.ts +1750 -263
- package/dist/tools/schemas.d.ts.map +1 -1
- package/dist/tools/schemas.js +482 -14
- package/dist/tools/schemas.js.map +1 -1
- package/dist/tools/task.bulk-manage.d.ts +1 -7
- package/dist/tools/task.bulk-manage.d.ts.map +1 -1
- package/dist/tools/task.bulk-manage.js +60 -15
- package/dist/tools/task.bulk-manage.js.map +1 -1
- package/dist/tools/task.manage.d.ts +12 -28
- package/dist/tools/task.manage.d.ts.map +1 -1
- package/dist/tools/task.manage.js +198 -31
- package/dist/tools/task.manage.js.map +1 -1
- package/dist/utils/completion.d.ts +2 -0
- package/dist/utils/completion.d.ts.map +1 -0
- package/dist/utils/completion.js +28 -0
- package/dist/utils/completion.js.map +1 -0
- package/dist/utils/logger.d.ts +18 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +101 -29
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/mcp-response.d.ts +50 -0
- package/dist/utils/mcp-response.d.ts.map +1 -1
- package/dist/utils/mcp-response.js +54 -7
- package/dist/utils/mcp-response.js.map +1 -1
- package/dist/utils/normalize.d.ts +5 -0
- package/dist/utils/normalize.d.ts.map +1 -1
- package/dist/utils/normalize.js +11 -0
- package/dist/utils/normalize.js.map +1 -1
- package/dist/utils/pagination.d.ts +6 -0
- package/dist/utils/pagination.d.ts.map +1 -0
- package/dist/utils/pagination.js +32 -0
- package/dist/utils/pagination.js.map +1 -0
- package/package.json +1 -1
package/dist/capabilities.d.ts
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
+
export declare const MCP_PROTOCOL_VERSION = "2025-11-25";
|
|
1
2
|
export declare const CAPABILITIES: {
|
|
2
3
|
serverInfo: {
|
|
3
4
|
name: string;
|
|
4
5
|
version: string;
|
|
5
6
|
};
|
|
6
7
|
capabilities: {
|
|
8
|
+
completions: {};
|
|
9
|
+
logging: {};
|
|
7
10
|
resources: {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
templates: boolean;
|
|
11
|
+
subscribe: boolean;
|
|
12
|
+
listChanged: boolean;
|
|
11
13
|
};
|
|
12
14
|
tools: {
|
|
13
|
-
|
|
14
|
-
call: boolean;
|
|
15
|
+
listChanged: boolean;
|
|
15
16
|
};
|
|
16
17
|
prompts: {
|
|
17
|
-
|
|
18
|
-
get: boolean;
|
|
18
|
+
listChanged: boolean;
|
|
19
19
|
};
|
|
20
20
|
};
|
|
21
21
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,oBAAoB,eAAe,CAAC;AAEjD,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;CAmBxB,CAAC"}
|
package/dist/capabilities.js
CHANGED
|
@@ -14,24 +14,24 @@ catch (e) {
|
|
|
14
14
|
// Fallback to default version if reading fails
|
|
15
15
|
}
|
|
16
16
|
// MCP Server Capabilities
|
|
17
|
+
export const MCP_PROTOCOL_VERSION = "2025-11-25";
|
|
17
18
|
export const CAPABILITIES = {
|
|
18
19
|
serverInfo: {
|
|
19
20
|
name: "mcp-memory-local",
|
|
20
21
|
version: pkgVersion
|
|
21
22
|
},
|
|
22
23
|
capabilities: {
|
|
24
|
+
completions: {},
|
|
25
|
+
logging: {},
|
|
23
26
|
resources: {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
templates: true
|
|
27
|
+
subscribe: true,
|
|
28
|
+
listChanged: true
|
|
27
29
|
},
|
|
28
30
|
tools: {
|
|
29
|
-
|
|
30
|
-
call: true
|
|
31
|
+
listChanged: false
|
|
31
32
|
},
|
|
32
33
|
prompts: {
|
|
33
|
-
|
|
34
|
-
get: true
|
|
34
|
+
listChanged: true
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
};
|
package/dist/capabilities.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AACxD,IAAI,UAAU,GAAG,OAAO,CAAC;AAEzB,IAAI,CAAC;IACH,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QACzD,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC;IAC3B,CAAC;AACH,CAAC;AAAC,OAAO,CAAC,EAAE,CAAC;IACX,+CAA+C;AACjD,CAAC;AAED,0BAA0B;AAC1B,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,UAAU,EAAE;QACV,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,UAAU;KACpB;IACD,YAAY,EAAE;QACZ,
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AACxD,IAAI,UAAU,GAAG,OAAO,CAAC;AAEzB,IAAI,CAAC;IACH,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QACzD,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC;IAC3B,CAAC;AACH,CAAC;AAAC,OAAO,CAAC,EAAE,CAAC;IACX,+CAA+C;AACjD,CAAC;AAED,0BAA0B;AAC1B,MAAM,CAAC,MAAM,oBAAoB,GAAG,YAAY,CAAC;AAEjD,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,UAAU,EAAE;QACV,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,UAAU;KACpB;IACD,YAAY,EAAE;QACZ,WAAW,EAAE,EAAE;QACf,OAAO,EAAE,EAAE;QACX,SAAS,EAAE;YACT,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,IAAI;SAClB;QACD,KAAK,EAAE;YACL,WAAW,EAAE,KAAK;SACnB;QACD,OAAO,EAAE;YACP,WAAW,EAAE,IAAI;SAClB;KACF;CACF,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { SQLiteStore } from "./storage/sqlite.js";
|
|
2
|
+
import { SessionContext } from "./mcp/session.js";
|
|
3
|
+
type CompletionRequest = {
|
|
4
|
+
ref?: {
|
|
5
|
+
type?: string;
|
|
6
|
+
name?: string;
|
|
7
|
+
uri?: string;
|
|
8
|
+
};
|
|
9
|
+
argument?: {
|
|
10
|
+
name?: string;
|
|
11
|
+
value?: string;
|
|
12
|
+
};
|
|
13
|
+
context?: {
|
|
14
|
+
arguments?: Record<string, unknown>;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
export declare function complete(params: CompletionRequest, db: SQLiteStore, session?: SessionContext): {
|
|
18
|
+
completion: {
|
|
19
|
+
values: string[];
|
|
20
|
+
total: number;
|
|
21
|
+
hasMore: boolean;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=completion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../src/completion.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,cAAc,EAA4C,MAAM,kBAAkB,CAAC;AAK5F,KAAK,iBAAiB,GAAG;IACvB,GAAG,CAAC,EAAE;QACJ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACrC,CAAC;CACH,CAAC;AAKF,wBAAgB,QAAQ,CACtB,MAAM,EAAE,iBAAiB,EACzB,EAAE,EAAE,WAAW,EACf,OAAO,CAAC,EAAE,cAAc;;;;;;EA6CzB"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { getFilesystemRoots, inferRepoFromSession } from "./mcp/session.js";
|
|
4
|
+
import { completePromptArgument } from "./prompts/registry.js";
|
|
5
|
+
import { completeResourceArgument } from "./resources/index.js";
|
|
6
|
+
const MAX_COMPLETION_VALUES = 100;
|
|
7
|
+
const MAX_FILE_SCAN_RESULTS = 300;
|
|
8
|
+
export function complete(params, db, session) {
|
|
9
|
+
const refType = params?.ref?.type;
|
|
10
|
+
const argumentName = typeof params?.argument?.name === "string" ? params.argument.name : "";
|
|
11
|
+
const argumentValue = typeof params?.argument?.value === "string" ? params.argument.value : "";
|
|
12
|
+
const contextArguments = params?.context?.arguments ?? {};
|
|
13
|
+
if (!refType || !argumentName) {
|
|
14
|
+
throw invalidCompletionParams("completion/complete requires ref.type and argument.name");
|
|
15
|
+
}
|
|
16
|
+
const dataSources = {
|
|
17
|
+
repos: getSuggestedRepos(db, session),
|
|
18
|
+
tags: getSuggestedTags(db),
|
|
19
|
+
filePaths: getSuggestedFilePaths(session),
|
|
20
|
+
tasks: getSuggestedTasks(db, session, contextArguments),
|
|
21
|
+
};
|
|
22
|
+
if (refType === "ref/prompt") {
|
|
23
|
+
const promptName = typeof params?.ref?.name === "string" ? params.ref.name : "";
|
|
24
|
+
if (!promptName) {
|
|
25
|
+
throw invalidCompletionParams("Prompt completion requires ref.name");
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
completion: buildCompletionResult(completePromptArgument(promptName, argumentName, argumentValue, contextArguments, dataSources)),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
if (refType === "ref/resource") {
|
|
32
|
+
const resourceUri = typeof params?.ref?.uri === "string" ? params.ref.uri : "";
|
|
33
|
+
if (!resourceUri) {
|
|
34
|
+
throw invalidCompletionParams("Resource completion requires ref.uri");
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
completion: buildCompletionResult(completeResourceArgument(resourceUri, argumentName, argumentValue, contextArguments, dataSources)),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
throw invalidCompletionParams(`Unsupported completion ref type: ${refType}`);
|
|
41
|
+
}
|
|
42
|
+
function buildCompletionResult(values) {
|
|
43
|
+
const capped = values.slice(0, MAX_COMPLETION_VALUES);
|
|
44
|
+
return {
|
|
45
|
+
values: capped,
|
|
46
|
+
total: values.length,
|
|
47
|
+
hasMore: values.length > capped.length,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function getSuggestedRepos(db, session) {
|
|
51
|
+
const values = new Set();
|
|
52
|
+
const inferredRepo = inferRepoFromSession(session);
|
|
53
|
+
if (inferredRepo)
|
|
54
|
+
values.add(inferredRepo);
|
|
55
|
+
for (const rootPath of getFilesystemRoots(session)) {
|
|
56
|
+
values.add(path.basename(rootPath));
|
|
57
|
+
}
|
|
58
|
+
for (const repo of db.listRepos()) {
|
|
59
|
+
values.add(repo);
|
|
60
|
+
}
|
|
61
|
+
return [...values].sort((a, b) => a.localeCompare(b));
|
|
62
|
+
}
|
|
63
|
+
function getSuggestedTags(db) {
|
|
64
|
+
const values = new Set();
|
|
65
|
+
const memories = db.getAllMemoriesWithStats();
|
|
66
|
+
for (const memory of memories) {
|
|
67
|
+
for (const tag of memory.tags || []) {
|
|
68
|
+
if (typeof tag === "string" && tag.trim()) {
|
|
69
|
+
values.add(tag.trim());
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return [...values].sort((a, b) => a.localeCompare(b));
|
|
74
|
+
}
|
|
75
|
+
function getSuggestedTasks(db, session, contextArguments) {
|
|
76
|
+
const repo = typeof contextArguments.repo === "string" && contextArguments.repo.trim()
|
|
77
|
+
? contextArguments.repo.trim()
|
|
78
|
+
: inferRepoFromSession(session);
|
|
79
|
+
if (!repo)
|
|
80
|
+
return [];
|
|
81
|
+
return db.getTasksByRepo(repo, undefined, 100).map((task) => ({
|
|
82
|
+
id: task.id,
|
|
83
|
+
task_code: task.task_code,
|
|
84
|
+
title: task.title,
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
function getSuggestedFilePaths(session) {
|
|
88
|
+
const roots = getFilesystemRoots(session);
|
|
89
|
+
const results = [];
|
|
90
|
+
for (const rootPath of roots) {
|
|
91
|
+
collectFiles(rootPath, rootPath, results);
|
|
92
|
+
if (results.length >= MAX_FILE_SCAN_RESULTS)
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
return results.sort((a, b) => a.localeCompare(b));
|
|
96
|
+
}
|
|
97
|
+
function collectFiles(rootPath, currentPath, results) {
|
|
98
|
+
if (results.length >= MAX_FILE_SCAN_RESULTS)
|
|
99
|
+
return;
|
|
100
|
+
let entries;
|
|
101
|
+
try {
|
|
102
|
+
entries = fs.readdirSync(currentPath, { withFileTypes: true });
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
for (const entry of entries) {
|
|
108
|
+
if (results.length >= MAX_FILE_SCAN_RESULTS)
|
|
109
|
+
return;
|
|
110
|
+
if (entry.name === "node_modules" || entry.name === ".git" || entry.name === "dist")
|
|
111
|
+
continue;
|
|
112
|
+
const fullPath = path.join(currentPath, entry.name);
|
|
113
|
+
if (entry.isDirectory()) {
|
|
114
|
+
collectFiles(rootPath, fullPath, results);
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
if (!entry.isFile())
|
|
118
|
+
continue;
|
|
119
|
+
results.push(path.relative(rootPath, fullPath) || entry.name);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function invalidCompletionParams(message) {
|
|
123
|
+
const error = new Error(message);
|
|
124
|
+
error.code = -32602;
|
|
125
|
+
return error;
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=completion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../src/completion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAkB,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAkBhE,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAClC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAElC,MAAM,UAAU,QAAQ,CACtB,MAAyB,EACzB,EAAe,EACf,OAAwB;IAExB,MAAM,OAAO,GAAG,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC;IAClC,MAAM,YAAY,GAAG,OAAO,MAAM,EAAE,QAAQ,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5F,MAAM,aAAa,GAAG,OAAO,MAAM,EAAE,QAAQ,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/F,MAAM,gBAAgB,GAAG,MAAM,EAAE,OAAO,EAAE,SAAS,IAAI,EAAE,CAAC;IAE1D,IAAI,CAAC,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;QAC9B,MAAM,uBAAuB,CAAC,yDAAyD,CAAC,CAAC;IAC3F,CAAC;IAED,MAAM,WAAW,GAAG;QAClB,KAAK,EAAE,iBAAiB,CAAC,EAAE,EAAE,OAAO,CAAC;QACrC,IAAI,EAAE,gBAAgB,CAAC,EAAE,CAAC;QAC1B,SAAS,EAAE,qBAAqB,CAAC,OAAO,CAAC;QACzC,KAAK,EAAE,iBAAiB,CAAC,EAAE,EAAE,OAAO,EAAE,gBAAgB,CAAC;KACxD,CAAC;IAEF,IAAI,OAAO,KAAK,YAAY,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,OAAO,MAAM,EAAE,GAAG,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAChF,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,uBAAuB,CAAC,qCAAqC,CAAC,CAAC;QACvE,CAAC;QAED,OAAO;YACL,UAAU,EAAE,qBAAqB,CAC/B,sBAAsB,CAAC,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,CAAC,CAC/F;SACF,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,KAAK,cAAc,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,OAAO,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,uBAAuB,CAAC,sCAAsC,CAAC,CAAC;QACxE,CAAC;QAED,OAAO;YACL,UAAU,EAAE,qBAAqB,CAC/B,wBAAwB,CAAC,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,CAAC,CAClG;SACF,CAAC;IACJ,CAAC;IAED,MAAM,uBAAuB,CAAC,oCAAoC,OAAO,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAgB;IAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC;IACtD,OAAO;QACL,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,MAAM,CAAC,MAAM;QACpB,OAAO,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;KACvC,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,EAAe,EAAE,OAAwB;IAClE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,MAAM,YAAY,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,YAAY;QAAE,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAE3C,KAAK,MAAM,QAAQ,IAAI,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAe;IACvC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,MAAM,QAAQ,GAAG,EAAE,CAAC,uBAAuB,EAAE,CAAC;IAE9C,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;YACpC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC1C,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,iBAAiB,CACxB,EAAe,EACf,OAAmC,EACnC,gBAAyC;IAEzC,MAAM,IAAI,GAAG,OAAO,gBAAgB,CAAC,IAAI,KAAK,QAAQ,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE;QACpF,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE;QAC9B,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAElC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAErB,OAAO,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,CAAC;QACjE,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAwB;IACrD,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC7B,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC1C,IAAI,OAAO,CAAC,MAAM,IAAI,qBAAqB;YAAE,MAAM;IACrD,CAAC;IAED,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB,EAAE,WAAmB,EAAE,OAAiB;IAC5E,IAAI,OAAO,CAAC,MAAM,IAAI,qBAAqB;QAAE,OAAO;IAEpD,IAAI,OAAoB,CAAC;IACzB,IAAI,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,OAAO,CAAC,MAAM,IAAI,qBAAqB;YAAE,OAAO;QACpD,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,SAAS;QAE9F,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC1C,SAAS;QACX,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAAE,SAAS;QAC9B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAe;IAC9C,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,CAA8B,CAAC;IAC9D,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC;IACpB,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/mcp/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"AAeA,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,eAAe,CAGnB;IACJ,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,kBAAkB,CAAC,CAAS;IACpC,OAAO,CAAC,YAAY,CAAK;gBAEb,UAAU,CAAC,EAAE,MAAM;IAIzB,KAAK;IA2EX;;OAEG;IACH,OAAO,CAAC,QAAQ;IA0BhB;;;OAGG;YACW,aAAa;IAkCrB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,OAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAI5D,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAI3D,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIjD;;;OAGG;IACH,IAAI;IAgBJ,WAAW,IAAI,OAAO;IAItB;;;OAGG;IACH,eAAe,IAAI,MAAM;CAG1B"}
|
package/dist/mcp/client.js
CHANGED
|
@@ -2,6 +2,7 @@ import { spawn } from "child_process";
|
|
|
2
2
|
import { createInterface } from "readline";
|
|
3
3
|
import path from "path";
|
|
4
4
|
import { fileURLToPath } from "url";
|
|
5
|
+
import { MCP_PROTOCOL_VERSION } from "../capabilities.js";
|
|
5
6
|
import { logger } from "../utils/logger.js";
|
|
6
7
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
7
8
|
// Exponential backoff delays in ms: 1s, 2s, 4s
|
|
@@ -74,10 +75,16 @@ export class MCPClient {
|
|
|
74
75
|
}
|
|
75
76
|
});
|
|
76
77
|
await this.callWithRetry("initialize", {
|
|
77
|
-
protocolVersion:
|
|
78
|
+
protocolVersion: MCP_PROTOCOL_VERSION,
|
|
78
79
|
capabilities: {},
|
|
79
80
|
clientInfo: { name: "mcp-client", version: "1.0.0" },
|
|
80
81
|
});
|
|
82
|
+
if (this.process?.stdin) {
|
|
83
|
+
this.process.stdin.write(JSON.stringify({
|
|
84
|
+
jsonrpc: "2.0",
|
|
85
|
+
method: "notifications/initialized",
|
|
86
|
+
}) + "\n");
|
|
87
|
+
}
|
|
81
88
|
this.isInitialized = true;
|
|
82
89
|
}
|
|
83
90
|
/**
|
package/dist/mcp/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAgB,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,+CAA+C;AAC/C,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACxC,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,YAAY,GAAG,CAAC,CAAC;AACvB,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAEjC,MAAM,OAAO,SAAS;IACZ,OAAO,GAAwB,IAAI,CAAC;IACpC,SAAS,GAAG,CAAC,CAAC;IACd,eAAe,GAAG,IAAI,GAAG,EAG9B,CAAC;IACI,aAAa,GAAG,KAAK,CAAC;IACtB,kBAAkB,CAAU;IAC5B,YAAY,GAAG,CAAC,CAAC;IAEzB,YAAY,UAAmB;QAC7B,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QAEzB,MAAM,UAAU,GACd,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QAClE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE;YACzC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC;SACnC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QAED,sDAAsD;QACtD,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YAChC,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;gBAC1B,oCAAoC;gBACpC,OAAO;YACT,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,wCAAwC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;YAClG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAE3B,IAAI,IAAI,CAAC,YAAY,GAAG,YAAY,EAAE,CAAC;gBACrC,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;gBAChF,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oBACzB,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACvE,CAAC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,KAAK,CAAC,yCAAyC,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC;YACzF,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,EAAE,GAAG,eAAe,CAAC;YACzB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;YAC1B,SAAS,EAAE,QAAQ;SACpB,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACrB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAElC,IAAI,CAAC,QAAQ,CAAC,EAAE;oBAAE,OAAO;gBAEzB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACtD,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;oBACzC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;wBACnB,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;oBACpD,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;oBACnC,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACvE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;YACrC,eAAe,EAAE,oBAAoB;YACrC,YAAY,EAAE,EAAE;YAChB,UAAU,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE;SACrD,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;gBACtC,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,2BAA2B;aACpC,CAAC,GAAG,IAAI,CAAC,CAAC;QACb,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED;;OAEG;IACK,QAAQ,CAAC,MAAc,EAAE,SAAkB,EAAE;QACnD,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACzC,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC;QAC5B,MAAM,OAAO,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAEvD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAElD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;oBACjC,iDAAiD;oBACjD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBAChC,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC,EAAE,kBAAkB,CAAC,CAAC;YAEvB,8CAA8C;YAC9C,IAAI,KAAK,CAAC,KAAK;gBAAE,KAAK,CAAC,KAAK,EAAE,CAAC;YAE/B,IAAI,CAAC,OAAQ,CAAC,KAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,aAAa,CAAC,MAAc,EAAE,SAAkB,EAAE;QAC9D,IAAI,SAAkB,CAAC;QAEvB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;YACxD,IAAI,CAAC;gBACH,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC7C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,SAAS,GAAG,GAAG,CAAC;gBAChB,MAAM,SAAS,GACb,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,KAAK,iBAAiB,CAAC;gBAE5D,IAAI,CAAC,SAAS,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;oBAC1C,qDAAqD;oBACrD,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE;wBACjC,MAAM;wBACN,OAAO;wBACP,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;qBACnB,CAAC,CAAC;oBACH,MAAM,GAAG,CAAC;gBACZ,CAAC;gBAED,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;gBACpC,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE;oBAC7C,MAAM;oBACN,OAAO,EAAE,OAAO,GAAG,CAAC;oBACpB,OAAO,EAAE,KAAK;iBACf,CAAC,CAAC;gBACH,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,MAAM,SAAS,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAc,EAAE,SAAkB,EAAE;QAC7C,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAgB,EAAE,IAAa;QAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,GAAW;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED;;;OAGG;IACH,IAAI;QACF,yDAAyD;QACzD,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACjD,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC5C,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClC,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,0EAA0E;YAC1E,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;YAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC;IACrD,CAAC;IAED;;;OAGG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;IACnC,CAAC;CACF;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export type ElicitationAction = "accept" | "decline" | "cancel";
|
|
2
|
+
export type FormElicitationRequest = {
|
|
3
|
+
mode?: "form";
|
|
4
|
+
message: string;
|
|
5
|
+
requestedSchema: {
|
|
6
|
+
type: "object";
|
|
7
|
+
properties: Record<string, unknown>;
|
|
8
|
+
required?: string[];
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
export type UrlElicitationRequest = {
|
|
12
|
+
mode: "url";
|
|
13
|
+
message: string;
|
|
14
|
+
url: string;
|
|
15
|
+
elicitationId: string;
|
|
16
|
+
};
|
|
17
|
+
export type ElicitationCreateParams = FormElicitationRequest | UrlElicitationRequest;
|
|
18
|
+
export type ElicitationCreateResult = {
|
|
19
|
+
action: ElicitationAction;
|
|
20
|
+
content?: Record<string, unknown>;
|
|
21
|
+
};
|
|
22
|
+
export type ElicitationRequestHandler = (params: ElicitationCreateParams) => Promise<ElicitationCreateResult>;
|
|
23
|
+
export declare function extractAcceptedElicitationContent(result: ElicitationCreateResult | null | undefined): Record<string, unknown>;
|
|
24
|
+
//# sourceMappingURL=elicitation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elicitation.d.ts","sourceRoot":"","sources":["../../src/mcp/elicitation.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEhE,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE;QACf,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,KAAK,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,sBAAsB,GAAG,qBAAqB,CAAC;AAErF,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,CACtC,MAAM,EAAE,uBAAuB,KAC5B,OAAO,CAAC,uBAAuB,CAAC,CAAC;AAEtC,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,uBAAuB,GAAG,IAAI,GAAG,SAAS,GACjD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAczB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function extractAcceptedElicitationContent(result) {
|
|
2
|
+
if (result?.action === "accept" && result.content && typeof result.content === "object") {
|
|
3
|
+
return result.content;
|
|
4
|
+
}
|
|
5
|
+
if (result?.action === "decline") {
|
|
6
|
+
throw new Error("User declined the elicitation request");
|
|
7
|
+
}
|
|
8
|
+
if (result?.action === "cancel") {
|
|
9
|
+
throw new Error("User canceled the elicitation request");
|
|
10
|
+
}
|
|
11
|
+
throw new Error("Elicitation did not return accepted content");
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=elicitation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elicitation.js","sourceRoot":"","sources":["../../src/mcp/elicitation.ts"],"names":[],"mappings":"AA8BA,MAAM,UAAU,iCAAiC,CAC/C,MAAkD;IAElD,IAAI,MAAM,EAAE,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACxF,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,IAAI,MAAM,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,MAAM,EAAE,MAAM,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;AACjE,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
export type SamplingContent = {
|
|
2
|
+
type: "text";
|
|
3
|
+
text: string;
|
|
4
|
+
} | {
|
|
5
|
+
type: "image";
|
|
6
|
+
data: string;
|
|
7
|
+
mimeType: string;
|
|
8
|
+
} | {
|
|
9
|
+
type: "audio";
|
|
10
|
+
data: string;
|
|
11
|
+
mimeType: string;
|
|
12
|
+
} | {
|
|
13
|
+
type: "tool_use";
|
|
14
|
+
id: string;
|
|
15
|
+
name: string;
|
|
16
|
+
input: Record<string, unknown>;
|
|
17
|
+
};
|
|
18
|
+
export type SamplingMessage = {
|
|
19
|
+
role: "user" | "assistant";
|
|
20
|
+
content: SamplingContent | SamplingContent[] | {
|
|
21
|
+
type: "tool_result";
|
|
22
|
+
toolUseId: string;
|
|
23
|
+
content: Array<{
|
|
24
|
+
type: "text";
|
|
25
|
+
text: string;
|
|
26
|
+
}>;
|
|
27
|
+
isError?: boolean;
|
|
28
|
+
} | Array<{
|
|
29
|
+
type: "tool_result";
|
|
30
|
+
toolUseId: string;
|
|
31
|
+
content: Array<{
|
|
32
|
+
type: "text";
|
|
33
|
+
text: string;
|
|
34
|
+
}>;
|
|
35
|
+
isError?: boolean;
|
|
36
|
+
}>;
|
|
37
|
+
};
|
|
38
|
+
export type SamplingToolDefinition = {
|
|
39
|
+
name: string;
|
|
40
|
+
description: string;
|
|
41
|
+
inputSchema: Record<string, unknown>;
|
|
42
|
+
};
|
|
43
|
+
export type SamplingCreateMessageParams = {
|
|
44
|
+
messages: SamplingMessage[];
|
|
45
|
+
systemPrompt?: string;
|
|
46
|
+
maxTokens?: number;
|
|
47
|
+
modelPreferences?: Record<string, unknown>;
|
|
48
|
+
tools?: SamplingToolDefinition[];
|
|
49
|
+
toolChoice?: {
|
|
50
|
+
mode: "auto" | "required" | "none";
|
|
51
|
+
name?: string;
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
export type SamplingCreateMessageResult = {
|
|
55
|
+
role: "assistant";
|
|
56
|
+
content: SamplingContent | SamplingContent[];
|
|
57
|
+
model?: string;
|
|
58
|
+
stopReason?: string;
|
|
59
|
+
};
|
|
60
|
+
export type SamplingRequestHandler = (params: SamplingCreateMessageParams) => Promise<SamplingCreateMessageResult>;
|
|
61
|
+
export declare function asArray<T>(value: T | T[]): T[];
|
|
62
|
+
export declare function extractTextFromContent(content: SamplingContent | SamplingContent[]): string;
|
|
63
|
+
export declare function extractToolUses(content: SamplingContent | SamplingContent[]): {
|
|
64
|
+
type: "tool_use";
|
|
65
|
+
id: string;
|
|
66
|
+
name: string;
|
|
67
|
+
input: Record<string, unknown>;
|
|
68
|
+
}[];
|
|
69
|
+
//# sourceMappingURL=sampling.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sampling.d.ts","sourceRoot":"","sources":["../../src/mcp/sampling.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AAEnF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EACH,eAAe,GACf,eAAe,EAAE,GACjB;QACE,IAAI,EAAE,aAAa,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,GACD,KAAK,CAAC;QACJ,IAAI,EAAE,aAAa,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC,CAAC;CACR,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,KAAK,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACjC,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACpE,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,eAAe,GAAG,eAAe,EAAE,CAAC;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,CACnC,MAAM,EAAE,2BAA2B,KAChC,OAAO,CAAC,2BAA2B,CAAC,CAAC;AAE1C,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAE9C;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,eAAe,GAAG,eAAe,EAAE,GAAG,MAAM,CAK3F;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,eAAe,EAAE;UAE9C,UAAU;QAAM,MAAM;UAAQ,MAAM;WAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAGjG"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function asArray(value) {
|
|
2
|
+
return Array.isArray(value) ? value : [value];
|
|
3
|
+
}
|
|
4
|
+
export function extractTextFromContent(content) {
|
|
5
|
+
return asArray(content)
|
|
6
|
+
.filter((entry) => entry.type === "text")
|
|
7
|
+
.map((entry) => entry.text)
|
|
8
|
+
.join("\n");
|
|
9
|
+
}
|
|
10
|
+
export function extractToolUses(content) {
|
|
11
|
+
return asArray(content).filter((entry) => entry.type === "tool_use");
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=sampling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sampling.js","sourceRoot":"","sources":["../../src/mcp/sampling.ts"],"names":[],"mappings":"AAmDA,MAAM,UAAU,OAAO,CAAI,KAAc;IACvC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAA4C;IACjF,OAAO,OAAO,CAAC,OAAO,CAAC;SACpB,MAAM,CAAC,CAAC,KAAK,EAA2C,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;SACjF,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;SAC1B,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAA4C;IAC1E,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAC5B,CAAC,KAAK,EAA2F,EAAE,CACjG,KAAK,CAAC,IAAI,KAAK,UAAU,CAC5B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export type McpRoot = {
|
|
2
|
+
uri: string;
|
|
3
|
+
name?: string;
|
|
4
|
+
};
|
|
5
|
+
export type SessionContext = {
|
|
6
|
+
clientInfo?: {
|
|
7
|
+
name?: string;
|
|
8
|
+
version?: string;
|
|
9
|
+
};
|
|
10
|
+
clientCapabilities?: Record<string, any>;
|
|
11
|
+
roots: McpRoot[];
|
|
12
|
+
supportsRoots: boolean;
|
|
13
|
+
supportsSampling: boolean;
|
|
14
|
+
supportsSamplingTools: boolean;
|
|
15
|
+
supportsElicitation: boolean;
|
|
16
|
+
supportsElicitationForm: boolean;
|
|
17
|
+
supportsElicitationUrl: boolean;
|
|
18
|
+
};
|
|
19
|
+
export declare function createSessionContext(): SessionContext;
|
|
20
|
+
export declare function updateSessionFromInitialize(session: SessionContext, params: any): void;
|
|
21
|
+
export declare function updateSessionRoots(session: SessionContext, roots: McpRoot[]): boolean;
|
|
22
|
+
export declare function normalizeRoots(roots: unknown): McpRoot[];
|
|
23
|
+
export declare function extractRootsFromResult(result: any): McpRoot[];
|
|
24
|
+
export declare function getFilesystemRoots(session?: SessionContext): string[];
|
|
25
|
+
export declare function isPathWithinRoots(targetPath: string, session?: SessionContext): boolean;
|
|
26
|
+
export declare function findContainingRoot(targetPath: string, session?: SessionContext): string | null;
|
|
27
|
+
export declare function inferRepoFromSession(session?: SessionContext): string | undefined;
|
|
28
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/mcp/session.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,OAAO,GAAG;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,CAAC,EAAE;QACX,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACzC,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,uBAAuB,EAAE,OAAO,CAAC;IACjC,sBAAsB,EAAE,OAAO,CAAC;CACjC,CAAC;AAEF,wBAAgB,oBAAoB,IAAI,cAAc,CAUrD;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,GAAG,GACV,IAAI,CASN;AAcD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,OAAO,EAAE,GACf,OAAO,CAMT;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,CAkBxD;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,EAAE,CAE7D;AAED,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,MAAM,EAAE,CAarE;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CASvF;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI,CAa9F;AAED,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,CAMjF"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
export function createSessionContext() {
|
|
4
|
+
return {
|
|
5
|
+
roots: [],
|
|
6
|
+
supportsRoots: false,
|
|
7
|
+
supportsSampling: false,
|
|
8
|
+
supportsSamplingTools: false,
|
|
9
|
+
supportsElicitation: false,
|
|
10
|
+
supportsElicitationForm: false,
|
|
11
|
+
supportsElicitationUrl: false,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export function updateSessionFromInitialize(session, params) {
|
|
15
|
+
session.clientInfo = params?.clientInfo;
|
|
16
|
+
session.clientCapabilities = params?.capabilities ?? {};
|
|
17
|
+
session.supportsRoots = Boolean(params?.capabilities?.roots);
|
|
18
|
+
session.supportsSampling = Boolean(params?.capabilities?.sampling);
|
|
19
|
+
session.supportsSamplingTools = Boolean(params?.capabilities?.sampling?.tools);
|
|
20
|
+
session.supportsElicitation = Boolean(params?.capabilities?.elicitation);
|
|
21
|
+
session.supportsElicitationForm = supportsElicitationMode(params?.capabilities?.elicitation, "form");
|
|
22
|
+
session.supportsElicitationUrl = supportsElicitationMode(params?.capabilities?.elicitation, "url");
|
|
23
|
+
}
|
|
24
|
+
function supportsElicitationMode(capability, mode) {
|
|
25
|
+
if (!capability || typeof capability !== "object") {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
if (mode === "form") {
|
|
29
|
+
return Object.keys(capability).length === 0 || typeof capability.form === "object";
|
|
30
|
+
}
|
|
31
|
+
return typeof capability.url === "object";
|
|
32
|
+
}
|
|
33
|
+
export function updateSessionRoots(session, roots) {
|
|
34
|
+
const normalized = normalizeRoots(roots);
|
|
35
|
+
const previous = JSON.stringify(session.roots);
|
|
36
|
+
const next = JSON.stringify(normalized);
|
|
37
|
+
session.roots = normalized;
|
|
38
|
+
return previous !== next;
|
|
39
|
+
}
|
|
40
|
+
export function normalizeRoots(roots) {
|
|
41
|
+
if (!Array.isArray(roots))
|
|
42
|
+
return [];
|
|
43
|
+
const seen = new Set();
|
|
44
|
+
const normalized = [];
|
|
45
|
+
for (const root of roots) {
|
|
46
|
+
if (!root || typeof root !== "object")
|
|
47
|
+
continue;
|
|
48
|
+
const uri = typeof root.uri === "string" ? root.uri : undefined;
|
|
49
|
+
const name = typeof root.name === "string" ? root.name : undefined;
|
|
50
|
+
if (!uri || seen.has(uri))
|
|
51
|
+
continue;
|
|
52
|
+
seen.add(uri);
|
|
53
|
+
normalized.push({ uri, name });
|
|
54
|
+
}
|
|
55
|
+
return normalized;
|
|
56
|
+
}
|
|
57
|
+
export function extractRootsFromResult(result) {
|
|
58
|
+
return normalizeRoots(result?.roots);
|
|
59
|
+
}
|
|
60
|
+
export function getFilesystemRoots(session) {
|
|
61
|
+
if (!session)
|
|
62
|
+
return [];
|
|
63
|
+
const resolved = [];
|
|
64
|
+
for (const root of session.roots) {
|
|
65
|
+
if (!root.uri.startsWith("file://"))
|
|
66
|
+
continue;
|
|
67
|
+
try {
|
|
68
|
+
resolved.push(path.resolve(fileURLToPath(root.uri)));
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// Ignore malformed file URIs.
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return resolved;
|
|
75
|
+
}
|
|
76
|
+
export function isPathWithinRoots(targetPath, session) {
|
|
77
|
+
const roots = getFilesystemRoots(session);
|
|
78
|
+
if (roots.length === 0)
|
|
79
|
+
return true;
|
|
80
|
+
const normalizedTarget = path.resolve(targetPath);
|
|
81
|
+
return roots.some((rootPath) => {
|
|
82
|
+
const relative = path.relative(rootPath, normalizedTarget);
|
|
83
|
+
return relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative));
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
export function findContainingRoot(targetPath, session) {
|
|
87
|
+
const roots = getFilesystemRoots(session);
|
|
88
|
+
if (roots.length === 0)
|
|
89
|
+
return null;
|
|
90
|
+
const normalizedTarget = path.resolve(targetPath);
|
|
91
|
+
for (const rootPath of roots) {
|
|
92
|
+
const relative = path.relative(rootPath, normalizedTarget);
|
|
93
|
+
if (relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative))) {
|
|
94
|
+
return rootPath;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
export function inferRepoFromSession(session) {
|
|
100
|
+
const roots = getFilesystemRoots(session);
|
|
101
|
+
if (roots.length === 1) {
|
|
102
|
+
return path.basename(roots[0]);
|
|
103
|
+
}
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/mcp/session.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAsBzC,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,KAAK,EAAE,EAAE;QACT,aAAa,EAAE,KAAK;QACpB,gBAAgB,EAAE,KAAK;QACvB,qBAAqB,EAAE,KAAK;QAC5B,mBAAmB,EAAE,KAAK;QAC1B,uBAAuB,EAAE,KAAK;QAC9B,sBAAsB,EAAE,KAAK;KAC9B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,OAAuB,EACvB,MAAW;IAEX,OAAO,CAAC,UAAU,GAAG,MAAM,EAAE,UAAU,CAAC;IACxC,OAAO,CAAC,kBAAkB,GAAG,MAAM,EAAE,YAAY,IAAI,EAAE,CAAC;IACxD,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;IAC7D,OAAO,CAAC,gBAAgB,GAAG,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IACnE,OAAO,CAAC,qBAAqB,GAAG,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC/E,OAAO,CAAC,mBAAmB,GAAG,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IACzE,OAAO,CAAC,uBAAuB,GAAG,uBAAuB,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IACrG,OAAO,CAAC,sBAAsB,GAAG,uBAAuB,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;AACrG,CAAC;AAED,SAAS,uBAAuB,CAAC,UAAe,EAAE,IAAoB;IACpE,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QAClD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,UAAU,CAAC,IAAI,KAAK,QAAQ,CAAC;IACrF,CAAC;IAED,OAAO,OAAO,UAAU,CAAC,GAAG,KAAK,QAAQ,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,OAAuB,EACvB,KAAgB;IAEhB,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACxC,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC;IAC3B,OAAO,QAAQ,KAAK,IAAI,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,UAAU,GAAc,EAAE,CAAC;IAEjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,SAAS;QAEhD,MAAM,GAAG,GAAG,OAAQ,IAAY,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAE,IAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;QAClF,MAAM,IAAI,GAAG,OAAQ,IAAY,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAE,IAAY,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAErF,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QACpC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAW;IAChD,OAAO,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAwB;IACzD,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAExB,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,SAAS;QAC9C,IAAI,CAAC;YACH,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,8BAA8B;QAChC,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,UAAkB,EAAE,OAAwB;IAC5E,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpC,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAClD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QAC3D,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,UAAkB,EAAE,OAAwB;IAC7E,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpC,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAClD,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QAC3D,IAAI,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YAClF,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAwB;IAC3D,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|