claude-ide-bridge 1.1.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 +263 -0
- package/dist/activityLog.d.ts +26 -0
- package/dist/activityLog.js +76 -0
- package/dist/activityLog.js.map +1 -0
- package/dist/bridge.d.ts +19 -0
- package/dist/bridge.js +277 -0
- package/dist/bridge.js.map +1 -0
- package/dist/config.d.ts +22 -0
- package/dist/config.js +221 -0
- package/dist/config.js.map +1 -0
- package/dist/errors.d.ts +16 -0
- package/dist/errors.js +20 -0
- package/dist/errors.js.map +1 -0
- package/dist/extensionClient.d.ts +193 -0
- package/dist/extensionClient.js +698 -0
- package/dist/extensionClient.js.map +1 -0
- package/dist/fileLock.d.ts +12 -0
- package/dist/fileLock.js +30 -0
- package/dist/fileLock.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/lockfile.d.ts +12 -0
- package/dist/lockfile.js +127 -0
- package/dist/lockfile.js.map +1 -0
- package/dist/logger.d.ts +16 -0
- package/dist/logger.js +68 -0
- package/dist/logger.js.map +1 -0
- package/dist/probe.d.ts +22 -0
- package/dist/probe.js +45 -0
- package/dist/probe.js.map +1 -0
- package/dist/server.d.ts +25 -0
- package/dist/server.js +265 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/activityLog.d.ts +39 -0
- package/dist/tools/activityLog.js +49 -0
- package/dist/tools/activityLog.js.map +1 -0
- package/dist/tools/aiComments.d.ts +26 -0
- package/dist/tools/aiComments.js +196 -0
- package/dist/tools/aiComments.js.map +1 -0
- package/dist/tools/bridgeStatus.d.ts +21 -0
- package/dist/tools/bridgeStatus.js +41 -0
- package/dist/tools/bridgeStatus.js.map +1 -0
- package/dist/tools/checkDocumentDirty.d.ts +28 -0
- package/dist/tools/checkDocumentDirty.js +61 -0
- package/dist/tools/checkDocumentDirty.js.map +1 -0
- package/dist/tools/clipboard.d.ts +50 -0
- package/dist/tools/clipboard.js +82 -0
- package/dist/tools/clipboard.js.map +1 -0
- package/dist/tools/closeTabs.d.ts +49 -0
- package/dist/tools/closeTabs.js +77 -0
- package/dist/tools/closeTabs.js.map +1 -0
- package/dist/tools/debug.d.ts +154 -0
- package/dist/tools/debug.js +248 -0
- package/dist/tools/debug.js.map +1 -0
- package/dist/tools/decorations.d.ts +92 -0
- package/dist/tools/decorations.js +150 -0
- package/dist/tools/decorations.js.map +1 -0
- package/dist/tools/diffDebugger.d.ts +62 -0
- package/dist/tools/diffDebugger.js +245 -0
- package/dist/tools/diffDebugger.js.map +1 -0
- package/dist/tools/editText.d.ts +80 -0
- package/dist/tools/editText.js +274 -0
- package/dist/tools/editText.js.map +1 -0
- package/dist/tools/fileOperations.d.ts +111 -0
- package/dist/tools/fileOperations.js +280 -0
- package/dist/tools/fileOperations.js.map +1 -0
- package/dist/tools/fileWatcher.d.ts +54 -0
- package/dist/tools/fileWatcher.js +100 -0
- package/dist/tools/fileWatcher.js.map +1 -0
- package/dist/tools/findFiles.d.ts +31 -0
- package/dist/tools/findFiles.js +119 -0
- package/dist/tools/findFiles.js.map +1 -0
- package/dist/tools/fixAllLintErrors.d.ts +29 -0
- package/dist/tools/fixAllLintErrors.js +114 -0
- package/dist/tools/fixAllLintErrors.js.map +1 -0
- package/dist/tools/flowGuardian.d.ts +61 -0
- package/dist/tools/flowGuardian.js +311 -0
- package/dist/tools/flowGuardian.js.map +1 -0
- package/dist/tools/formatDocument.d.ts +30 -0
- package/dist/tools/formatDocument.js +132 -0
- package/dist/tools/formatDocument.js.map +1 -0
- package/dist/tools/formatFile.d.ts +28 -0
- package/dist/tools/formatFile.js +110 -0
- package/dist/tools/formatFile.js.map +1 -0
- package/dist/tools/getBufferContent.d.ts +38 -0
- package/dist/tools/getBufferContent.js +100 -0
- package/dist/tools/getBufferContent.js.map +1 -0
- package/dist/tools/getCurrentSelection.d.ts +43 -0
- package/dist/tools/getCurrentSelection.js +75 -0
- package/dist/tools/getCurrentSelection.js.map +1 -0
- package/dist/tools/getDiagnostics.d.ts +38 -0
- package/dist/tools/getDiagnostics.js +204 -0
- package/dist/tools/getDiagnostics.js.map +1 -0
- package/dist/tools/getDocumentSymbols.d.ts +27 -0
- package/dist/tools/getDocumentSymbols.js +133 -0
- package/dist/tools/getDocumentSymbols.js.map +1 -0
- package/dist/tools/getFileTree.d.ts +36 -0
- package/dist/tools/getFileTree.js +111 -0
- package/dist/tools/getFileTree.js.map +1 -0
- package/dist/tools/getGitDiff.d.ts +34 -0
- package/dist/tools/getGitDiff.js +57 -0
- package/dist/tools/getGitDiff.js.map +1 -0
- package/dist/tools/getGitLog.d.ts +30 -0
- package/dist/tools/getGitLog.js +65 -0
- package/dist/tools/getGitLog.js.map +1 -0
- package/dist/tools/getGitStatus.d.ts +26 -0
- package/dist/tools/getGitStatus.js +95 -0
- package/dist/tools/getGitStatus.js.map +1 -0
- package/dist/tools/getOpenEditors.d.ts +21 -0
- package/dist/tools/getOpenEditors.js +84 -0
- package/dist/tools/getOpenEditors.js.map +1 -0
- package/dist/tools/getProjectInfo.d.ts +20 -0
- package/dist/tools/getProjectInfo.js +315 -0
- package/dist/tools/getProjectInfo.js.map +1 -0
- package/dist/tools/getToolCapabilities.d.ts +23 -0
- package/dist/tools/getToolCapabilities.js +249 -0
- package/dist/tools/getToolCapabilities.js.map +1 -0
- package/dist/tools/getWorkspaceFolders.d.ts +21 -0
- package/dist/tools/getWorkspaceFolders.js +47 -0
- package/dist/tools/getWorkspaceFolders.js.map +1 -0
- package/dist/tools/gitHistory.d.ts +78 -0
- package/dist/tools/gitHistory.js +151 -0
- package/dist/tools/gitHistory.js.map +1 -0
- package/dist/tools/gitWrite.d.ts +335 -0
- package/dist/tools/gitWrite.js +859 -0
- package/dist/tools/gitWrite.js.map +1 -0
- package/dist/tools/github/actions.d.ts +67 -0
- package/dist/tools/github/actions.js +155 -0
- package/dist/tools/github/actions.js.map +1 -0
- package/dist/tools/github/index.d.ts +4 -0
- package/dist/tools/github/index.js +5 -0
- package/dist/tools/github/index.js.map +1 -0
- package/dist/tools/github/issues.d.ts +140 -0
- package/dist/tools/github/issues.js +279 -0
- package/dist/tools/github/issues.js.map +1 -0
- package/dist/tools/github/pr.d.ts +101 -0
- package/dist/tools/github/pr.js +215 -0
- package/dist/tools/github/pr.js.map +1 -0
- package/dist/tools/github/review.d.ts +101 -0
- package/dist/tools/github/review.js +292 -0
- package/dist/tools/github/review.js.map +1 -0
- package/dist/tools/github/shared.d.ts +4 -0
- package/dist/tools/github/shared.js +12 -0
- package/dist/tools/github/shared.js.map +1 -0
- package/dist/tools/github.d.ts +308 -0
- package/dist/tools/github.js +656 -0
- package/dist/tools/github.js.map +1 -0
- package/dist/tools/hoverAtCursor.d.ts +22 -0
- package/dist/tools/hoverAtCursor.js +51 -0
- package/dist/tools/hoverAtCursor.js.map +1 -0
- package/dist/tools/httpClient.d.ts +83 -0
- package/dist/tools/httpClient.js +335 -0
- package/dist/tools/httpClient.js.map +1 -0
- package/dist/tools/index.d.ts +7 -0
- package/dist/tools/index.js +246 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/inlayHints.d.ts +38 -0
- package/dist/tools/inlayHints.js +56 -0
- package/dist/tools/inlayHints.js.map +1 -0
- package/dist/tools/linters/biome.d.ts +2 -0
- package/dist/tools/linters/biome.js +44 -0
- package/dist/tools/linters/biome.js.map +1 -0
- package/dist/tools/linters/cargo.d.ts +2 -0
- package/dist/tools/linters/cargo.js +45 -0
- package/dist/tools/linters/cargo.js.map +1 -0
- package/dist/tools/linters/eslint.d.ts +2 -0
- package/dist/tools/linters/eslint.js +59 -0
- package/dist/tools/linters/eslint.js.map +1 -0
- package/dist/tools/linters/govet.d.ts +2 -0
- package/dist/tools/linters/govet.js +37 -0
- package/dist/tools/linters/govet.js.map +1 -0
- package/dist/tools/linters/pyright.d.ts +2 -0
- package/dist/tools/linters/pyright.js +34 -0
- package/dist/tools/linters/pyright.js.map +1 -0
- package/dist/tools/linters/ruff.d.ts +2 -0
- package/dist/tools/linters/ruff.js +30 -0
- package/dist/tools/linters/ruff.js.map +1 -0
- package/dist/tools/linters/types.d.ts +16 -0
- package/dist/tools/linters/types.js +2 -0
- package/dist/tools/linters/types.js.map +1 -0
- package/dist/tools/linters/typescript.d.ts +2 -0
- package/dist/tools/linters/typescript.js +38 -0
- package/dist/tools/linters/typescript.js.map +1 -0
- package/dist/tools/lsp.d.ts +310 -0
- package/dist/tools/lsp.js +684 -0
- package/dist/tools/lsp.js.map +1 -0
- package/dist/tools/notebook.d.ts +95 -0
- package/dist/tools/notebook.js +144 -0
- package/dist/tools/notebook.js.map +1 -0
- package/dist/tools/openDiff.d.ts +41 -0
- package/dist/tools/openDiff.js +116 -0
- package/dist/tools/openDiff.js.map +1 -0
- package/dist/tools/openFile.d.ts +34 -0
- package/dist/tools/openFile.js +102 -0
- package/dist/tools/openFile.js.map +1 -0
- package/dist/tools/organizeImports.d.ts +29 -0
- package/dist/tools/organizeImports.js +64 -0
- package/dist/tools/organizeImports.js.map +1 -0
- package/dist/tools/planPersistence.d.ts +196 -0
- package/dist/tools/planPersistence.js +437 -0
- package/dist/tools/planPersistence.js.map +1 -0
- package/dist/tools/replaceBlock.d.ts +40 -0
- package/dist/tools/replaceBlock.js +105 -0
- package/dist/tools/replaceBlock.js.map +1 -0
- package/dist/tools/runCommand.d.ts +43 -0
- package/dist/tools/runCommand.js +141 -0
- package/dist/tools/runCommand.js.map +1 -0
- package/dist/tools/runTests.d.ts +32 -0
- package/dist/tools/runTests.js +160 -0
- package/dist/tools/runTests.js.map +1 -0
- package/dist/tools/saveDocument.d.ts +28 -0
- package/dist/tools/saveDocument.js +58 -0
- package/dist/tools/saveDocument.js.map +1 -0
- package/dist/tools/searchAndReplace.d.ts +50 -0
- package/dist/tools/searchAndReplace.js +203 -0
- package/dist/tools/searchAndReplace.js.map +1 -0
- package/dist/tools/searchWorkspace.d.ts +52 -0
- package/dist/tools/searchWorkspace.js +159 -0
- package/dist/tools/searchWorkspace.js.map +1 -0
- package/dist/tools/setActiveWorkspaceFolder.d.ts +28 -0
- package/dist/tools/setActiveWorkspaceFolder.js +32 -0
- package/dist/tools/setActiveWorkspaceFolder.js.map +1 -0
- package/dist/tools/tasks.d.ts +56 -0
- package/dist/tools/tasks.js +89 -0
- package/dist/tools/tasks.js.map +1 -0
- package/dist/tools/terminal.d.ts +241 -0
- package/dist/tools/terminal.js +539 -0
- package/dist/tools/terminal.js.map +1 -0
- package/dist/tools/testRunners/cargoTest.d.ts +2 -0
- package/dist/tools/testRunners/cargoTest.js +123 -0
- package/dist/tools/testRunners/cargoTest.js.map +1 -0
- package/dist/tools/testRunners/goTest.d.ts +2 -0
- package/dist/tools/testRunners/goTest.js +106 -0
- package/dist/tools/testRunners/goTest.js.map +1 -0
- package/dist/tools/testRunners/pytest.d.ts +2 -0
- package/dist/tools/testRunners/pytest.js +133 -0
- package/dist/tools/testRunners/pytest.js.map +1 -0
- package/dist/tools/testRunners/types.d.ts +18 -0
- package/dist/tools/testRunners/types.js +2 -0
- package/dist/tools/testRunners/types.js.map +1 -0
- package/dist/tools/testRunners/vitestJest.d.ts +3 -0
- package/dist/tools/testRunners/vitestJest.js +178 -0
- package/dist/tools/testRunners/vitestJest.js.map +1 -0
- package/dist/tools/typeHierarchy.d.ts +45 -0
- package/dist/tools/typeHierarchy.js +65 -0
- package/dist/tools/typeHierarchy.js.map +1 -0
- package/dist/tools/utils.d.ts +54 -0
- package/dist/tools/utils.js +267 -0
- package/dist/tools/utils.js.map +1 -0
- package/dist/tools/vscodeCommands.d.ts +59 -0
- package/dist/tools/vscodeCommands.js +108 -0
- package/dist/tools/vscodeCommands.js.map +1 -0
- package/dist/tools/watchDiagnostics.d.ts +32 -0
- package/dist/tools/watchDiagnostics.js +87 -0
- package/dist/tools/watchDiagnostics.js.map +1 -0
- package/dist/tools/workspaceSettings.d.ts +67 -0
- package/dist/tools/workspaceSettings.js +102 -0
- package/dist/tools/workspaceSettings.js.map +1 -0
- package/dist/tools/workspaceSnapshots.d.ts +174 -0
- package/dist/tools/workspaceSnapshots.js +474 -0
- package/dist/tools/workspaceSnapshots.js.map +1 -0
- package/dist/transport.d.ts +57 -0
- package/dist/transport.js +417 -0
- package/dist/transport.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.js +3 -0
- package/dist/version.js.map +1 -0
- package/dist/wsUtils.d.ts +9 -0
- package/dist/wsUtils.js +54 -0
- package/dist/wsUtils.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flowGuardian.js","sourceRoot":"","sources":["../../src/tools/flowGuardian.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type ExtensionClient } from "../extensionClient.js";
|
|
2
|
+
import type { ProbeResults } from "../probe.js";
|
|
3
|
+
import type { ProgressFn } from "../transport.js";
|
|
4
|
+
export declare function createFormatDocumentTool(workspace: string, probes: ProbeResults, extensionClient: ExtensionClient): {
|
|
5
|
+
schema: {
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
annotations: {
|
|
9
|
+
destructiveHint: boolean;
|
|
10
|
+
idempotentHint: boolean;
|
|
11
|
+
};
|
|
12
|
+
inputSchema: {
|
|
13
|
+
type: "object";
|
|
14
|
+
properties: {
|
|
15
|
+
filePath: {
|
|
16
|
+
type: string;
|
|
17
|
+
description: string;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
required: string[];
|
|
21
|
+
additionalProperties: false;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
handler: (args: Record<string, unknown>, signal?: AbortSignal, progress?: ProgressFn) => Promise<{
|
|
25
|
+
content: Array<{
|
|
26
|
+
type: string;
|
|
27
|
+
text: string;
|
|
28
|
+
}>;
|
|
29
|
+
}>;
|
|
30
|
+
};
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { ExtensionTimeoutError, } from "../extensionClient.js";
|
|
4
|
+
import { error, execSafe, requireString, resolveFilePath, success, } from "./utils.js";
|
|
5
|
+
const JS_FORMATTERS = [
|
|
6
|
+
{ cmd: "prettier", args: (f) => ["--write", f], probe: "prettier" },
|
|
7
|
+
{ cmd: "biome", args: (f) => ["format", "--write", f], probe: "biome" },
|
|
8
|
+
];
|
|
9
|
+
const PY_FORMATTERS = [
|
|
10
|
+
{ cmd: "black", args: (f) => [f], probe: "black" },
|
|
11
|
+
{ cmd: "ruff", args: (f) => ["format", f], probe: "ruff" },
|
|
12
|
+
];
|
|
13
|
+
const GO_FORMATTERS = [
|
|
14
|
+
{ cmd: "gofmt", args: (f) => ["-w", f], probe: "gofmt" },
|
|
15
|
+
];
|
|
16
|
+
const RS_FORMATTERS = [
|
|
17
|
+
{ cmd: "rustfmt", args: (f) => [f], probe: "rustfmt" },
|
|
18
|
+
];
|
|
19
|
+
const EXT_FORMATTERS = {
|
|
20
|
+
".ts": JS_FORMATTERS,
|
|
21
|
+
".tsx": JS_FORMATTERS,
|
|
22
|
+
".js": JS_FORMATTERS,
|
|
23
|
+
".jsx": JS_FORMATTERS,
|
|
24
|
+
".py": PY_FORMATTERS,
|
|
25
|
+
".go": GO_FORMATTERS,
|
|
26
|
+
".rs": RS_FORMATTERS,
|
|
27
|
+
};
|
|
28
|
+
export function createFormatDocumentTool(workspace, probes, extensionClient) {
|
|
29
|
+
return {
|
|
30
|
+
schema: {
|
|
31
|
+
name: "formatDocument",
|
|
32
|
+
description: "Format a file using VS Code's configured formatter when the extension is connected, or falls back to CLI formatters (prettier, biome, black, gofmt, rustfmt). Returns whether changes were made and line counts before/after.",
|
|
33
|
+
annotations: { destructiveHint: true, idempotentHint: true },
|
|
34
|
+
inputSchema: {
|
|
35
|
+
type: "object",
|
|
36
|
+
properties: {
|
|
37
|
+
filePath: {
|
|
38
|
+
type: "string",
|
|
39
|
+
description: "Path to the file to format (relative to workspace or absolute)",
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
required: ["filePath"],
|
|
43
|
+
additionalProperties: false,
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
handler: async (args, signal, progress) => {
|
|
47
|
+
progress?.(0, 100);
|
|
48
|
+
const rawPath = requireString(args, "filePath");
|
|
49
|
+
const resolved = resolveFilePath(rawPath, workspace);
|
|
50
|
+
// Read file content before formatting
|
|
51
|
+
let contentBefore;
|
|
52
|
+
try {
|
|
53
|
+
contentBefore = fs.readFileSync(resolved, "utf-8");
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return error({ error: `File not found: ${rawPath}` });
|
|
57
|
+
}
|
|
58
|
+
// Try extension first
|
|
59
|
+
if (extensionClient.isConnected()) {
|
|
60
|
+
try {
|
|
61
|
+
const result = await extensionClient.formatDocument(resolved);
|
|
62
|
+
if (result !== null) {
|
|
63
|
+
// Read file content after formatting
|
|
64
|
+
const contentAfter = fs.readFileSync(resolved, "utf-8");
|
|
65
|
+
if (contentBefore === contentAfter) {
|
|
66
|
+
return success({
|
|
67
|
+
formatted: true,
|
|
68
|
+
source: "extension",
|
|
69
|
+
changes: "none",
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
return success({
|
|
73
|
+
formatted: true,
|
|
74
|
+
source: "extension",
|
|
75
|
+
changes: "modified",
|
|
76
|
+
linesBeforeCount: contentBefore.split("\n").length,
|
|
77
|
+
linesAfterCount: contentAfter.split("\n").length,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
if (!(err instanceof ExtensionTimeoutError))
|
|
83
|
+
throw err;
|
|
84
|
+
// Timeout — fall through to CLI fallback
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// CLI fallback
|
|
88
|
+
const ext = path.extname(resolved).toLowerCase();
|
|
89
|
+
const candidates = EXT_FORMATTERS[ext];
|
|
90
|
+
if (!candidates || candidates.length === 0) {
|
|
91
|
+
return error({
|
|
92
|
+
formatted: false,
|
|
93
|
+
source: "cli",
|
|
94
|
+
error: `No formatter configured for extension "${ext}"`,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
const formatter = candidates.find((f) => probes[f.probe]);
|
|
98
|
+
if (!formatter) {
|
|
99
|
+
const names = candidates.map((f) => f.cmd).join(", ");
|
|
100
|
+
return error({
|
|
101
|
+
formatted: false,
|
|
102
|
+
source: "cli",
|
|
103
|
+
error: `No available formatter found. Tried: ${names}`,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
const result = await execSafe(formatter.cmd, formatter.args(resolved), {
|
|
107
|
+
cwd: workspace,
|
|
108
|
+
timeout: 30_000,
|
|
109
|
+
signal,
|
|
110
|
+
});
|
|
111
|
+
if (result.exitCode !== 0) {
|
|
112
|
+
return error({
|
|
113
|
+
formatted: false,
|
|
114
|
+
source: "cli",
|
|
115
|
+
formatterUsed: formatter.cmd,
|
|
116
|
+
error: result.stderr,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
const contentAfter = fs.readFileSync(resolved, "utf-8");
|
|
120
|
+
progress?.(100, 100);
|
|
121
|
+
return success({
|
|
122
|
+
formatted: true,
|
|
123
|
+
source: "cli",
|
|
124
|
+
formatterUsed: formatter.cmd,
|
|
125
|
+
changes: contentBefore === contentAfter ? "none" : "modified",
|
|
126
|
+
linesBeforeCount: contentBefore.split("\n").length,
|
|
127
|
+
linesAfterCount: contentAfter.split("\n").length,
|
|
128
|
+
});
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=formatDocument.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatDocument.js","sourceRoot":"","sources":["../../src/tools/formatDocument.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ProbeResults } from "../probe.js";
|
|
2
|
+
export declare function createFormatFileTool(workspace: string, probes: ProbeResults): {
|
|
3
|
+
schema: {
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
annotations: {
|
|
7
|
+
destructiveHint: boolean;
|
|
8
|
+
idempotentHint: boolean;
|
|
9
|
+
};
|
|
10
|
+
inputSchema: {
|
|
11
|
+
type: "object";
|
|
12
|
+
properties: {
|
|
13
|
+
filePath: {
|
|
14
|
+
type: string;
|
|
15
|
+
description: string;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
required: string[];
|
|
19
|
+
additionalProperties: false;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
handler: (args: Record<string, unknown>, signal?: AbortSignal) => Promise<{
|
|
23
|
+
content: Array<{
|
|
24
|
+
type: string;
|
|
25
|
+
text: string;
|
|
26
|
+
}>;
|
|
27
|
+
}>;
|
|
28
|
+
};
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { execSafe, requireString, resolveFilePath, success } from "./utils.js";
|
|
3
|
+
const JS_FORMATTERS = [
|
|
4
|
+
{
|
|
5
|
+
cmd: "prettier",
|
|
6
|
+
args: (f) => ["--write", f],
|
|
7
|
+
probe: "prettier",
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
cmd: "biome",
|
|
11
|
+
args: (f) => ["format", "--write", f],
|
|
12
|
+
probe: "biome",
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
cmd: "eslint",
|
|
16
|
+
args: (f) => ["--fix", f],
|
|
17
|
+
probe: "eslint",
|
|
18
|
+
},
|
|
19
|
+
];
|
|
20
|
+
const PY_FORMATTERS = [
|
|
21
|
+
{
|
|
22
|
+
cmd: "black",
|
|
23
|
+
args: (f) => [f],
|
|
24
|
+
probe: "black",
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
cmd: "ruff",
|
|
28
|
+
args: (f) => ["format", f],
|
|
29
|
+
probe: "ruff",
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
const GO_FORMATTERS = [
|
|
33
|
+
{
|
|
34
|
+
cmd: "gofmt",
|
|
35
|
+
args: (f) => ["-w", f],
|
|
36
|
+
probe: "gofmt",
|
|
37
|
+
},
|
|
38
|
+
];
|
|
39
|
+
const RS_FORMATTERS = [
|
|
40
|
+
{
|
|
41
|
+
cmd: "rustfmt",
|
|
42
|
+
args: (f) => [f],
|
|
43
|
+
probe: "rustfmt",
|
|
44
|
+
},
|
|
45
|
+
];
|
|
46
|
+
const EXT_FORMATTERS = {
|
|
47
|
+
".ts": JS_FORMATTERS,
|
|
48
|
+
".tsx": JS_FORMATTERS,
|
|
49
|
+
".js": JS_FORMATTERS,
|
|
50
|
+
".jsx": JS_FORMATTERS,
|
|
51
|
+
".py": PY_FORMATTERS,
|
|
52
|
+
".go": GO_FORMATTERS,
|
|
53
|
+
".rs": RS_FORMATTERS,
|
|
54
|
+
};
|
|
55
|
+
export function createFormatFileTool(workspace, probes) {
|
|
56
|
+
return {
|
|
57
|
+
schema: {
|
|
58
|
+
name: "formatFile",
|
|
59
|
+
description: "Format a file in-place using the appropriate formatter for its language. Auto-detects the formatter based on file extension and available tools (e.g. prettier, biome, black, gofmt, rustfmt).",
|
|
60
|
+
annotations: { destructiveHint: true, idempotentHint: true },
|
|
61
|
+
inputSchema: {
|
|
62
|
+
type: "object",
|
|
63
|
+
properties: {
|
|
64
|
+
filePath: {
|
|
65
|
+
type: "string",
|
|
66
|
+
description: "Path to the file to format (relative to workspace)",
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
required: ["filePath"],
|
|
70
|
+
additionalProperties: false,
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
handler: async (args, signal) => {
|
|
74
|
+
const rawPath = requireString(args, "filePath");
|
|
75
|
+
const resolved = resolveFilePath(rawPath, workspace);
|
|
76
|
+
const ext = path.extname(resolved).toLowerCase();
|
|
77
|
+
const candidates = EXT_FORMATTERS[ext];
|
|
78
|
+
if (!candidates || candidates.length === 0) {
|
|
79
|
+
return success({
|
|
80
|
+
success: false,
|
|
81
|
+
formatterUsed: null,
|
|
82
|
+
stdout: "",
|
|
83
|
+
stderr: `No formatter configured for extension "${ext}"`,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
const formatter = candidates.find((f) => probes[f.probe]);
|
|
87
|
+
if (!formatter) {
|
|
88
|
+
const names = candidates.map((f) => f.cmd).join(", ");
|
|
89
|
+
return success({
|
|
90
|
+
success: false,
|
|
91
|
+
formatterUsed: null,
|
|
92
|
+
stdout: "",
|
|
93
|
+
stderr: `No available formatter found. Tried: ${names}`,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
const result = await execSafe(formatter.cmd, formatter.args(resolved), {
|
|
97
|
+
cwd: workspace,
|
|
98
|
+
timeout: 30_000,
|
|
99
|
+
signal,
|
|
100
|
+
});
|
|
101
|
+
return success({
|
|
102
|
+
success: result.exitCode === 0,
|
|
103
|
+
formatterUsed: formatter.cmd,
|
|
104
|
+
stdout: result.stdout,
|
|
105
|
+
stderr: result.stderr,
|
|
106
|
+
});
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=formatFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatFile.js","sourceRoot":"","sources":["../../src/tools/formatFile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type ExtensionClient } from "../extensionClient.js";
|
|
2
|
+
export declare function createGetBufferContentTool(workspace: string, extensionClient?: ExtensionClient): {
|
|
3
|
+
schema: {
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
annotations: {
|
|
7
|
+
readOnlyHint: boolean;
|
|
8
|
+
};
|
|
9
|
+
inputSchema: {
|
|
10
|
+
type: "object";
|
|
11
|
+
required: string[];
|
|
12
|
+
additionalProperties: false;
|
|
13
|
+
properties: {
|
|
14
|
+
filePath: {
|
|
15
|
+
type: "string";
|
|
16
|
+
description: string;
|
|
17
|
+
};
|
|
18
|
+
startLine: {
|
|
19
|
+
type: "integer";
|
|
20
|
+
description: string;
|
|
21
|
+
minimum: number;
|
|
22
|
+
};
|
|
23
|
+
endLine: {
|
|
24
|
+
type: "integer";
|
|
25
|
+
description: string;
|
|
26
|
+
minimum: number;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
timeoutMs: number;
|
|
32
|
+
handler(args: Record<string, unknown>): Promise<{
|
|
33
|
+
content: Array<{
|
|
34
|
+
type: string;
|
|
35
|
+
text: string;
|
|
36
|
+
}>;
|
|
37
|
+
}>;
|
|
38
|
+
};
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import { ExtensionTimeoutError, } from "../extensionClient.js";
|
|
3
|
+
import { error, optionalInt, requireString, resolveFilePath, success, } from "./utils.js";
|
|
4
|
+
const MAX_CONTENT_BYTES = 512 * 1024; // 512 KB hard cap
|
|
5
|
+
export function createGetBufferContentTool(workspace, extensionClient) {
|
|
6
|
+
return {
|
|
7
|
+
schema: {
|
|
8
|
+
name: "getBufferContent",
|
|
9
|
+
description: "Read the current content of a file from the VS Code editor buffer, including any unsaved changes. " +
|
|
10
|
+
"Use this instead of the standard Read tool when you need the live editor state — " +
|
|
11
|
+
"especially before calling editText, to ensure your line numbers are accurate. " +
|
|
12
|
+
"Returns isDirty:true when the buffer has unsaved changes that differ from disk. " +
|
|
13
|
+
"Falls back to disk content when the extension is not connected.",
|
|
14
|
+
annotations: { readOnlyHint: true },
|
|
15
|
+
inputSchema: {
|
|
16
|
+
type: "object",
|
|
17
|
+
required: ["filePath"],
|
|
18
|
+
additionalProperties: false,
|
|
19
|
+
properties: {
|
|
20
|
+
filePath: {
|
|
21
|
+
type: "string",
|
|
22
|
+
description: "Absolute or workspace-relative file path",
|
|
23
|
+
},
|
|
24
|
+
startLine: {
|
|
25
|
+
type: "integer",
|
|
26
|
+
description: "First line to include (1-based, default: 1)",
|
|
27
|
+
minimum: 1,
|
|
28
|
+
},
|
|
29
|
+
endLine: {
|
|
30
|
+
type: "integer",
|
|
31
|
+
description: "Last line to include (1-based, default: all lines)",
|
|
32
|
+
minimum: 1,
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
timeoutMs: 5_000,
|
|
38
|
+
async handler(args) {
|
|
39
|
+
const rawPath = requireString(args, "filePath");
|
|
40
|
+
const filePath = resolveFilePath(rawPath, workspace);
|
|
41
|
+
const startLine = optionalInt(args, "startLine", 1, 1_000_000) ?? 1;
|
|
42
|
+
const endLine = optionalInt(args, "endLine", 1, 1_000_000);
|
|
43
|
+
let content = null;
|
|
44
|
+
let meta = {};
|
|
45
|
+
// Try extension first — only source with unsaved buffer state
|
|
46
|
+
if (extensionClient?.isConnected()) {
|
|
47
|
+
try {
|
|
48
|
+
const result = await extensionClient.getFileContent(filePath);
|
|
49
|
+
if (result !== null && typeof result === "object") {
|
|
50
|
+
const r = result;
|
|
51
|
+
if (typeof r.content === "string") {
|
|
52
|
+
content = r.content;
|
|
53
|
+
meta = {
|
|
54
|
+
isDirty: r.isDirty ?? false,
|
|
55
|
+
languageId: r.languageId,
|
|
56
|
+
source: r.source ?? "vscode-buffer",
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
if (!(err instanceof ExtensionTimeoutError))
|
|
63
|
+
throw err;
|
|
64
|
+
// Timeout — fall through to disk
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Fallback: read from disk
|
|
68
|
+
if (content === null) {
|
|
69
|
+
try {
|
|
70
|
+
content = await fs.readFile(filePath, "utf-8");
|
|
71
|
+
meta = { isDirty: false, source: "disk" };
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return error(`File not found: ${filePath}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Enforce size cap before splitting
|
|
78
|
+
if (Buffer.byteLength(content, "utf-8") > MAX_CONTENT_BYTES) {
|
|
79
|
+
const lines = content.split("\n");
|
|
80
|
+
const sizeKb = Math.round(Buffer.byteLength(content, "utf-8") / 1024);
|
|
81
|
+
return error(`File too large (${lines.length} lines, ${sizeKb}KB). Use startLine/endLine to read in chunks — e.g. startLine:1, endLine:500.`);
|
|
82
|
+
}
|
|
83
|
+
const lines = content.split("\n");
|
|
84
|
+
const totalLines = lines.length;
|
|
85
|
+
// Apply line range
|
|
86
|
+
const start = startLine - 1; // 0-based
|
|
87
|
+
const end = endLine !== undefined ? endLine : totalLines; // exclusive
|
|
88
|
+
const sliced = lines.slice(start, end);
|
|
89
|
+
return success({
|
|
90
|
+
...meta,
|
|
91
|
+
filePath,
|
|
92
|
+
content: sliced.join("\n"),
|
|
93
|
+
startLine,
|
|
94
|
+
endLine: endLine ?? totalLines,
|
|
95
|
+
totalLines,
|
|
96
|
+
});
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=getBufferContent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getBufferContent.js","sourceRoot":"","sources":["../../src/tools/getBufferContent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { type ExtensionClient } from "../extensionClient.js";
|
|
2
|
+
export declare function createGetCurrentSelectionTool(extensionClient: ExtensionClient): {
|
|
3
|
+
schema: {
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
annotations: {
|
|
7
|
+
readOnlyHint: boolean;
|
|
8
|
+
};
|
|
9
|
+
inputSchema: {
|
|
10
|
+
$schema: string;
|
|
11
|
+
type: string;
|
|
12
|
+
additionalProperties: boolean;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
timeoutMs: number;
|
|
16
|
+
handler(): Promise<{
|
|
17
|
+
content: Array<{
|
|
18
|
+
type: string;
|
|
19
|
+
text: string;
|
|
20
|
+
}>;
|
|
21
|
+
}>;
|
|
22
|
+
};
|
|
23
|
+
export declare function createGetLatestSelectionTool(extensionClient: ExtensionClient): {
|
|
24
|
+
schema: {
|
|
25
|
+
name: string;
|
|
26
|
+
description: string;
|
|
27
|
+
annotations: {
|
|
28
|
+
readOnlyHint: boolean;
|
|
29
|
+
};
|
|
30
|
+
inputSchema: {
|
|
31
|
+
$schema: string;
|
|
32
|
+
type: string;
|
|
33
|
+
additionalProperties: boolean;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
timeoutMs: number;
|
|
37
|
+
handler(): Promise<{
|
|
38
|
+
content: Array<{
|
|
39
|
+
type: string;
|
|
40
|
+
text: string;
|
|
41
|
+
}>;
|
|
42
|
+
}>;
|
|
43
|
+
};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { ExtensionTimeoutError, } from "../extensionClient.js";
|
|
2
|
+
import { success } from "./utils.js";
|
|
3
|
+
const STUB_RESPONSE = {
|
|
4
|
+
success: false,
|
|
5
|
+
message: "Selection tracking not available in bridge mode. Use openFile with startText/endText to navigate to code.",
|
|
6
|
+
};
|
|
7
|
+
export function createGetCurrentSelectionTool(extensionClient) {
|
|
8
|
+
return {
|
|
9
|
+
schema: {
|
|
10
|
+
name: "getCurrentSelection",
|
|
11
|
+
description: "Get the current text selection in the editor",
|
|
12
|
+
annotations: { readOnlyHint: true },
|
|
13
|
+
inputSchema: {
|
|
14
|
+
$schema: "http://json-schema.org/draft-07/schema#",
|
|
15
|
+
type: "object",
|
|
16
|
+
additionalProperties: false,
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
timeoutMs: 5_000,
|
|
20
|
+
async handler() {
|
|
21
|
+
// Try extension first
|
|
22
|
+
try {
|
|
23
|
+
const selection = await extensionClient.getSelection();
|
|
24
|
+
if (selection !== null) {
|
|
25
|
+
return success({ success: true, selection, source: "extension" });
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
if (!(err instanceof ExtensionTimeoutError))
|
|
30
|
+
throw err;
|
|
31
|
+
// Timeout — fall through to stub
|
|
32
|
+
}
|
|
33
|
+
return success(STUB_RESPONSE);
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export function createGetLatestSelectionTool(extensionClient) {
|
|
38
|
+
return {
|
|
39
|
+
schema: {
|
|
40
|
+
name: "getLatestSelection",
|
|
41
|
+
description: "Get the most recent text selection (even if not in the active editor)",
|
|
42
|
+
annotations: { readOnlyHint: true },
|
|
43
|
+
inputSchema: {
|
|
44
|
+
$schema: "http://json-schema.org/draft-07/schema#",
|
|
45
|
+
type: "object",
|
|
46
|
+
additionalProperties: false,
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
timeoutMs: 5_000,
|
|
50
|
+
async handler() {
|
|
51
|
+
// Try cached selection from push notifications
|
|
52
|
+
if (extensionClient.latestSelection) {
|
|
53
|
+
return success({
|
|
54
|
+
success: true,
|
|
55
|
+
selection: extensionClient.latestSelection,
|
|
56
|
+
source: "extension-cached",
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
// Try live request
|
|
60
|
+
try {
|
|
61
|
+
const selection = await extensionClient.getSelection();
|
|
62
|
+
if (selection !== null) {
|
|
63
|
+
return success({ success: true, selection, source: "extension" });
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
if (!(err instanceof ExtensionTimeoutError))
|
|
68
|
+
throw err;
|
|
69
|
+
// Timeout — fall through to stub
|
|
70
|
+
}
|
|
71
|
+
return success(STUB_RESPONSE);
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=getCurrentSelection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getCurrentSelection.js","sourceRoot":"","sources":["../../src/tools/getCurrentSelection.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,MAAM,aAAa,GAAG;IACpB,OAAO,EAAE,KAAK;IACd,OAAO,EACL,2GAA2G;CAC9G,CAAC;AAEF,MAAM,UAAU,6BAA6B,CAC3C,eAAgC;IAEhC,OAAO;QACL,MAAM,EAAE;YACN,IAAI,EAAE,qBAAqB;YAC3B,WAAW,EAAE,8CAA8C;YAC3D,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;YACnC,WAAW,EAAE;gBACX,OAAO,EAAE,yCAAyC;gBAClD,IAAI,EAAE,QAAQ;gBACd,oBAAoB,EAAE,KAAK;aAC5B;SACF;QACD,SAAS,EAAE,KAAK;QAChB,KAAK,CAAC,OAAO;YACX,sBAAsB;YACtB,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,YAAY,EAAE,CAAC;gBACvD,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;oBACvB,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;gBACpE,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,CAAC,GAAG,YAAY,qBAAqB,CAAC;oBAAE,MAAM,GAAG,CAAC;gBACvD,iCAAiC;YACnC,CAAC;YACD,OAAO,OAAO,CAAC,aAAa,CAAC,CAAC;QAChC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,eAAgC;IAC3E,OAAO;QACL,MAAM,EAAE;YACN,IAAI,EAAE,oBAAoB;YAC1B,WAAW,EACT,uEAAuE;YACzE,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;YACnC,WAAW,EAAE;gBACX,OAAO,EAAE,yCAAyC;gBAClD,IAAI,EAAE,QAAQ;gBACd,oBAAoB,EAAE,KAAK;aAC5B;SACF;QACD,SAAS,EAAE,KAAK;QAChB,KAAK,CAAC,OAAO;YACX,+CAA+C;YAC/C,IAAI,eAAe,CAAC,eAAe,EAAE,CAAC;gBACpC,OAAO,OAAO,CAAC;oBACb,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE,eAAe,CAAC,eAAe;oBAC1C,MAAM,EAAE,kBAAkB;iBAC3B,CAAC,CAAC;YACL,CAAC;YACD,mBAAmB;YACnB,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,YAAY,EAAE,CAAC;gBACvD,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;oBACvB,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;gBACpE,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,CAAC,GAAG,YAAY,qBAAqB,CAAC;oBAAE,MAAM,GAAG,CAAC;gBACvD,iCAAiC;YACnC,CAAC;YACD,OAAO,OAAO,CAAC,aAAa,CAAC,CAAC;QAChC,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type ExtensionClient } from "../extensionClient.js";
|
|
2
|
+
import type { ProbeResults } from "../probe.js";
|
|
3
|
+
export declare function createGetDiagnosticsTool(workspace: string, probes?: ProbeResults, extensionClient?: ExtensionClient, linterFilter?: string[]): {
|
|
4
|
+
schema: {
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
annotations: {
|
|
8
|
+
readOnlyHint: boolean;
|
|
9
|
+
};
|
|
10
|
+
inputSchema: {
|
|
11
|
+
$schema: string;
|
|
12
|
+
type: string;
|
|
13
|
+
additionalProperties: boolean;
|
|
14
|
+
properties: {
|
|
15
|
+
uri: {
|
|
16
|
+
type: string;
|
|
17
|
+
description: string;
|
|
18
|
+
};
|
|
19
|
+
severity: {
|
|
20
|
+
type: string;
|
|
21
|
+
enum: string[];
|
|
22
|
+
description: string;
|
|
23
|
+
};
|
|
24
|
+
maxResults: {
|
|
25
|
+
type: string;
|
|
26
|
+
description: string;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
timeoutMs: number;
|
|
32
|
+
handler(args: Record<string, unknown>, signal?: AbortSignal): Promise<{
|
|
33
|
+
content: Array<{
|
|
34
|
+
type: string;
|
|
35
|
+
text: string;
|
|
36
|
+
}>;
|
|
37
|
+
}>;
|
|
38
|
+
};
|