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.
Files changed (273) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +263 -0
  3. package/dist/activityLog.d.ts +26 -0
  4. package/dist/activityLog.js +76 -0
  5. package/dist/activityLog.js.map +1 -0
  6. package/dist/bridge.d.ts +19 -0
  7. package/dist/bridge.js +277 -0
  8. package/dist/bridge.js.map +1 -0
  9. package/dist/config.d.ts +22 -0
  10. package/dist/config.js +221 -0
  11. package/dist/config.js.map +1 -0
  12. package/dist/errors.d.ts +16 -0
  13. package/dist/errors.js +20 -0
  14. package/dist/errors.js.map +1 -0
  15. package/dist/extensionClient.d.ts +193 -0
  16. package/dist/extensionClient.js +698 -0
  17. package/dist/extensionClient.js.map +1 -0
  18. package/dist/fileLock.d.ts +12 -0
  19. package/dist/fileLock.js +30 -0
  20. package/dist/fileLock.js.map +1 -0
  21. package/dist/index.d.ts +2 -0
  22. package/dist/index.js +38 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/lockfile.d.ts +12 -0
  25. package/dist/lockfile.js +127 -0
  26. package/dist/lockfile.js.map +1 -0
  27. package/dist/logger.d.ts +16 -0
  28. package/dist/logger.js +68 -0
  29. package/dist/logger.js.map +1 -0
  30. package/dist/probe.d.ts +22 -0
  31. package/dist/probe.js +45 -0
  32. package/dist/probe.js.map +1 -0
  33. package/dist/server.d.ts +25 -0
  34. package/dist/server.js +265 -0
  35. package/dist/server.js.map +1 -0
  36. package/dist/tools/activityLog.d.ts +39 -0
  37. package/dist/tools/activityLog.js +49 -0
  38. package/dist/tools/activityLog.js.map +1 -0
  39. package/dist/tools/aiComments.d.ts +26 -0
  40. package/dist/tools/aiComments.js +196 -0
  41. package/dist/tools/aiComments.js.map +1 -0
  42. package/dist/tools/bridgeStatus.d.ts +21 -0
  43. package/dist/tools/bridgeStatus.js +41 -0
  44. package/dist/tools/bridgeStatus.js.map +1 -0
  45. package/dist/tools/checkDocumentDirty.d.ts +28 -0
  46. package/dist/tools/checkDocumentDirty.js +61 -0
  47. package/dist/tools/checkDocumentDirty.js.map +1 -0
  48. package/dist/tools/clipboard.d.ts +50 -0
  49. package/dist/tools/clipboard.js +82 -0
  50. package/dist/tools/clipboard.js.map +1 -0
  51. package/dist/tools/closeTabs.d.ts +49 -0
  52. package/dist/tools/closeTabs.js +77 -0
  53. package/dist/tools/closeTabs.js.map +1 -0
  54. package/dist/tools/debug.d.ts +154 -0
  55. package/dist/tools/debug.js +248 -0
  56. package/dist/tools/debug.js.map +1 -0
  57. package/dist/tools/decorations.d.ts +92 -0
  58. package/dist/tools/decorations.js +150 -0
  59. package/dist/tools/decorations.js.map +1 -0
  60. package/dist/tools/diffDebugger.d.ts +62 -0
  61. package/dist/tools/diffDebugger.js +245 -0
  62. package/dist/tools/diffDebugger.js.map +1 -0
  63. package/dist/tools/editText.d.ts +80 -0
  64. package/dist/tools/editText.js +274 -0
  65. package/dist/tools/editText.js.map +1 -0
  66. package/dist/tools/fileOperations.d.ts +111 -0
  67. package/dist/tools/fileOperations.js +280 -0
  68. package/dist/tools/fileOperations.js.map +1 -0
  69. package/dist/tools/fileWatcher.d.ts +54 -0
  70. package/dist/tools/fileWatcher.js +100 -0
  71. package/dist/tools/fileWatcher.js.map +1 -0
  72. package/dist/tools/findFiles.d.ts +31 -0
  73. package/dist/tools/findFiles.js +119 -0
  74. package/dist/tools/findFiles.js.map +1 -0
  75. package/dist/tools/fixAllLintErrors.d.ts +29 -0
  76. package/dist/tools/fixAllLintErrors.js +114 -0
  77. package/dist/tools/fixAllLintErrors.js.map +1 -0
  78. package/dist/tools/flowGuardian.d.ts +61 -0
  79. package/dist/tools/flowGuardian.js +311 -0
  80. package/dist/tools/flowGuardian.js.map +1 -0
  81. package/dist/tools/formatDocument.d.ts +30 -0
  82. package/dist/tools/formatDocument.js +132 -0
  83. package/dist/tools/formatDocument.js.map +1 -0
  84. package/dist/tools/formatFile.d.ts +28 -0
  85. package/dist/tools/formatFile.js +110 -0
  86. package/dist/tools/formatFile.js.map +1 -0
  87. package/dist/tools/getBufferContent.d.ts +38 -0
  88. package/dist/tools/getBufferContent.js +100 -0
  89. package/dist/tools/getBufferContent.js.map +1 -0
  90. package/dist/tools/getCurrentSelection.d.ts +43 -0
  91. package/dist/tools/getCurrentSelection.js +75 -0
  92. package/dist/tools/getCurrentSelection.js.map +1 -0
  93. package/dist/tools/getDiagnostics.d.ts +38 -0
  94. package/dist/tools/getDiagnostics.js +204 -0
  95. package/dist/tools/getDiagnostics.js.map +1 -0
  96. package/dist/tools/getDocumentSymbols.d.ts +27 -0
  97. package/dist/tools/getDocumentSymbols.js +133 -0
  98. package/dist/tools/getDocumentSymbols.js.map +1 -0
  99. package/dist/tools/getFileTree.d.ts +36 -0
  100. package/dist/tools/getFileTree.js +111 -0
  101. package/dist/tools/getFileTree.js.map +1 -0
  102. package/dist/tools/getGitDiff.d.ts +34 -0
  103. package/dist/tools/getGitDiff.js +57 -0
  104. package/dist/tools/getGitDiff.js.map +1 -0
  105. package/dist/tools/getGitLog.d.ts +30 -0
  106. package/dist/tools/getGitLog.js +65 -0
  107. package/dist/tools/getGitLog.js.map +1 -0
  108. package/dist/tools/getGitStatus.d.ts +26 -0
  109. package/dist/tools/getGitStatus.js +95 -0
  110. package/dist/tools/getGitStatus.js.map +1 -0
  111. package/dist/tools/getOpenEditors.d.ts +21 -0
  112. package/dist/tools/getOpenEditors.js +84 -0
  113. package/dist/tools/getOpenEditors.js.map +1 -0
  114. package/dist/tools/getProjectInfo.d.ts +20 -0
  115. package/dist/tools/getProjectInfo.js +315 -0
  116. package/dist/tools/getProjectInfo.js.map +1 -0
  117. package/dist/tools/getToolCapabilities.d.ts +23 -0
  118. package/dist/tools/getToolCapabilities.js +249 -0
  119. package/dist/tools/getToolCapabilities.js.map +1 -0
  120. package/dist/tools/getWorkspaceFolders.d.ts +21 -0
  121. package/dist/tools/getWorkspaceFolders.js +47 -0
  122. package/dist/tools/getWorkspaceFolders.js.map +1 -0
  123. package/dist/tools/gitHistory.d.ts +78 -0
  124. package/dist/tools/gitHistory.js +151 -0
  125. package/dist/tools/gitHistory.js.map +1 -0
  126. package/dist/tools/gitWrite.d.ts +335 -0
  127. package/dist/tools/gitWrite.js +859 -0
  128. package/dist/tools/gitWrite.js.map +1 -0
  129. package/dist/tools/github/actions.d.ts +67 -0
  130. package/dist/tools/github/actions.js +155 -0
  131. package/dist/tools/github/actions.js.map +1 -0
  132. package/dist/tools/github/index.d.ts +4 -0
  133. package/dist/tools/github/index.js +5 -0
  134. package/dist/tools/github/index.js.map +1 -0
  135. package/dist/tools/github/issues.d.ts +140 -0
  136. package/dist/tools/github/issues.js +279 -0
  137. package/dist/tools/github/issues.js.map +1 -0
  138. package/dist/tools/github/pr.d.ts +101 -0
  139. package/dist/tools/github/pr.js +215 -0
  140. package/dist/tools/github/pr.js.map +1 -0
  141. package/dist/tools/github/review.d.ts +101 -0
  142. package/dist/tools/github/review.js +292 -0
  143. package/dist/tools/github/review.js.map +1 -0
  144. package/dist/tools/github/shared.d.ts +4 -0
  145. package/dist/tools/github/shared.js +12 -0
  146. package/dist/tools/github/shared.js.map +1 -0
  147. package/dist/tools/github.d.ts +308 -0
  148. package/dist/tools/github.js +656 -0
  149. package/dist/tools/github.js.map +1 -0
  150. package/dist/tools/hoverAtCursor.d.ts +22 -0
  151. package/dist/tools/hoverAtCursor.js +51 -0
  152. package/dist/tools/hoverAtCursor.js.map +1 -0
  153. package/dist/tools/httpClient.d.ts +83 -0
  154. package/dist/tools/httpClient.js +335 -0
  155. package/dist/tools/httpClient.js.map +1 -0
  156. package/dist/tools/index.d.ts +7 -0
  157. package/dist/tools/index.js +246 -0
  158. package/dist/tools/index.js.map +1 -0
  159. package/dist/tools/inlayHints.d.ts +38 -0
  160. package/dist/tools/inlayHints.js +56 -0
  161. package/dist/tools/inlayHints.js.map +1 -0
  162. package/dist/tools/linters/biome.d.ts +2 -0
  163. package/dist/tools/linters/biome.js +44 -0
  164. package/dist/tools/linters/biome.js.map +1 -0
  165. package/dist/tools/linters/cargo.d.ts +2 -0
  166. package/dist/tools/linters/cargo.js +45 -0
  167. package/dist/tools/linters/cargo.js.map +1 -0
  168. package/dist/tools/linters/eslint.d.ts +2 -0
  169. package/dist/tools/linters/eslint.js +59 -0
  170. package/dist/tools/linters/eslint.js.map +1 -0
  171. package/dist/tools/linters/govet.d.ts +2 -0
  172. package/dist/tools/linters/govet.js +37 -0
  173. package/dist/tools/linters/govet.js.map +1 -0
  174. package/dist/tools/linters/pyright.d.ts +2 -0
  175. package/dist/tools/linters/pyright.js +34 -0
  176. package/dist/tools/linters/pyright.js.map +1 -0
  177. package/dist/tools/linters/ruff.d.ts +2 -0
  178. package/dist/tools/linters/ruff.js +30 -0
  179. package/dist/tools/linters/ruff.js.map +1 -0
  180. package/dist/tools/linters/types.d.ts +16 -0
  181. package/dist/tools/linters/types.js +2 -0
  182. package/dist/tools/linters/types.js.map +1 -0
  183. package/dist/tools/linters/typescript.d.ts +2 -0
  184. package/dist/tools/linters/typescript.js +38 -0
  185. package/dist/tools/linters/typescript.js.map +1 -0
  186. package/dist/tools/lsp.d.ts +310 -0
  187. package/dist/tools/lsp.js +684 -0
  188. package/dist/tools/lsp.js.map +1 -0
  189. package/dist/tools/notebook.d.ts +95 -0
  190. package/dist/tools/notebook.js +144 -0
  191. package/dist/tools/notebook.js.map +1 -0
  192. package/dist/tools/openDiff.d.ts +41 -0
  193. package/dist/tools/openDiff.js +116 -0
  194. package/dist/tools/openDiff.js.map +1 -0
  195. package/dist/tools/openFile.d.ts +34 -0
  196. package/dist/tools/openFile.js +102 -0
  197. package/dist/tools/openFile.js.map +1 -0
  198. package/dist/tools/organizeImports.d.ts +29 -0
  199. package/dist/tools/organizeImports.js +64 -0
  200. package/dist/tools/organizeImports.js.map +1 -0
  201. package/dist/tools/planPersistence.d.ts +196 -0
  202. package/dist/tools/planPersistence.js +437 -0
  203. package/dist/tools/planPersistence.js.map +1 -0
  204. package/dist/tools/replaceBlock.d.ts +40 -0
  205. package/dist/tools/replaceBlock.js +105 -0
  206. package/dist/tools/replaceBlock.js.map +1 -0
  207. package/dist/tools/runCommand.d.ts +43 -0
  208. package/dist/tools/runCommand.js +141 -0
  209. package/dist/tools/runCommand.js.map +1 -0
  210. package/dist/tools/runTests.d.ts +32 -0
  211. package/dist/tools/runTests.js +160 -0
  212. package/dist/tools/runTests.js.map +1 -0
  213. package/dist/tools/saveDocument.d.ts +28 -0
  214. package/dist/tools/saveDocument.js +58 -0
  215. package/dist/tools/saveDocument.js.map +1 -0
  216. package/dist/tools/searchAndReplace.d.ts +50 -0
  217. package/dist/tools/searchAndReplace.js +203 -0
  218. package/dist/tools/searchAndReplace.js.map +1 -0
  219. package/dist/tools/searchWorkspace.d.ts +52 -0
  220. package/dist/tools/searchWorkspace.js +159 -0
  221. package/dist/tools/searchWorkspace.js.map +1 -0
  222. package/dist/tools/setActiveWorkspaceFolder.d.ts +28 -0
  223. package/dist/tools/setActiveWorkspaceFolder.js +32 -0
  224. package/dist/tools/setActiveWorkspaceFolder.js.map +1 -0
  225. package/dist/tools/tasks.d.ts +56 -0
  226. package/dist/tools/tasks.js +89 -0
  227. package/dist/tools/tasks.js.map +1 -0
  228. package/dist/tools/terminal.d.ts +241 -0
  229. package/dist/tools/terminal.js +539 -0
  230. package/dist/tools/terminal.js.map +1 -0
  231. package/dist/tools/testRunners/cargoTest.d.ts +2 -0
  232. package/dist/tools/testRunners/cargoTest.js +123 -0
  233. package/dist/tools/testRunners/cargoTest.js.map +1 -0
  234. package/dist/tools/testRunners/goTest.d.ts +2 -0
  235. package/dist/tools/testRunners/goTest.js +106 -0
  236. package/dist/tools/testRunners/goTest.js.map +1 -0
  237. package/dist/tools/testRunners/pytest.d.ts +2 -0
  238. package/dist/tools/testRunners/pytest.js +133 -0
  239. package/dist/tools/testRunners/pytest.js.map +1 -0
  240. package/dist/tools/testRunners/types.d.ts +18 -0
  241. package/dist/tools/testRunners/types.js +2 -0
  242. package/dist/tools/testRunners/types.js.map +1 -0
  243. package/dist/tools/testRunners/vitestJest.d.ts +3 -0
  244. package/dist/tools/testRunners/vitestJest.js +178 -0
  245. package/dist/tools/testRunners/vitestJest.js.map +1 -0
  246. package/dist/tools/typeHierarchy.d.ts +45 -0
  247. package/dist/tools/typeHierarchy.js +65 -0
  248. package/dist/tools/typeHierarchy.js.map +1 -0
  249. package/dist/tools/utils.d.ts +54 -0
  250. package/dist/tools/utils.js +267 -0
  251. package/dist/tools/utils.js.map +1 -0
  252. package/dist/tools/vscodeCommands.d.ts +59 -0
  253. package/dist/tools/vscodeCommands.js +108 -0
  254. package/dist/tools/vscodeCommands.js.map +1 -0
  255. package/dist/tools/watchDiagnostics.d.ts +32 -0
  256. package/dist/tools/watchDiagnostics.js +87 -0
  257. package/dist/tools/watchDiagnostics.js.map +1 -0
  258. package/dist/tools/workspaceSettings.d.ts +67 -0
  259. package/dist/tools/workspaceSettings.js +102 -0
  260. package/dist/tools/workspaceSettings.js.map +1 -0
  261. package/dist/tools/workspaceSnapshots.d.ts +174 -0
  262. package/dist/tools/workspaceSnapshots.js +474 -0
  263. package/dist/tools/workspaceSnapshots.js.map +1 -0
  264. package/dist/transport.d.ts +57 -0
  265. package/dist/transport.js +417 -0
  266. package/dist/transport.js.map +1 -0
  267. package/dist/version.d.ts +2 -0
  268. package/dist/version.js +3 -0
  269. package/dist/version.js.map +1 -0
  270. package/dist/wsUtils.d.ts +9 -0
  271. package/dist/wsUtils.js +54 -0
  272. package/dist/wsUtils.js.map +1 -0
  273. package/package.json +69 -0
@@ -0,0 +1,315 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { execSafe, success } from "./utils.js";
4
+ function readJsonSafe(filePath) {
5
+ try {
6
+ return JSON.parse(fs.readFileSync(filePath, "utf-8"));
7
+ }
8
+ catch {
9
+ return null;
10
+ }
11
+ }
12
+ function readFileSafe(filePath) {
13
+ try {
14
+ return fs.readFileSync(filePath, "utf-8");
15
+ }
16
+ catch {
17
+ return null;
18
+ }
19
+ }
20
+ function existsFile(filePath) {
21
+ try {
22
+ return fs.statSync(filePath).isFile();
23
+ }
24
+ catch {
25
+ return false;
26
+ }
27
+ }
28
+ function detectConfigFiles(workspace) {
29
+ const candidates = [
30
+ // Build & bundle
31
+ "tsconfig.json",
32
+ "tsconfig.base.json",
33
+ "vite.config.ts",
34
+ "vite.config.js",
35
+ "webpack.config.js",
36
+ "webpack.config.ts",
37
+ "rollup.config.js",
38
+ "rollup.config.ts",
39
+ "esbuild.mjs",
40
+ "esbuild.js",
41
+ // Test
42
+ "vitest.config.ts",
43
+ "vitest.config.js",
44
+ "jest.config.ts",
45
+ "jest.config.js",
46
+ "pytest.ini",
47
+ "pyproject.toml",
48
+ // Lint & format
49
+ ".eslintrc.json",
50
+ ".eslintrc.js",
51
+ "eslint.config.js",
52
+ "eslint.config.mjs",
53
+ ".prettierrc",
54
+ ".prettierrc.json",
55
+ "biome.json",
56
+ // Runtime & framework
57
+ "next.config.js",
58
+ "next.config.ts",
59
+ "next.config.mjs",
60
+ "astro.config.mjs",
61
+ "svelte.config.js",
62
+ "nuxt.config.ts",
63
+ // Container & infra
64
+ "Dockerfile",
65
+ "docker-compose.yml",
66
+ "docker-compose.yaml",
67
+ ".env.example",
68
+ // CI
69
+ ".github/workflows",
70
+ ];
71
+ return candidates.filter((c) => {
72
+ const p = path.join(workspace, c);
73
+ try {
74
+ fs.statSync(p);
75
+ return true;
76
+ }
77
+ catch {
78
+ return false;
79
+ }
80
+ });
81
+ }
82
+ function getTopLevelDirs(workspace) {
83
+ const ignored = new Set([
84
+ "node_modules",
85
+ ".git",
86
+ ".next",
87
+ "dist",
88
+ "build",
89
+ "out",
90
+ ".cache",
91
+ "__pycache__",
92
+ ".venv",
93
+ "venv",
94
+ "target",
95
+ ".turbo",
96
+ "coverage",
97
+ ".nyc_output",
98
+ ]);
99
+ try {
100
+ return fs
101
+ .readdirSync(workspace)
102
+ .filter((entry) => {
103
+ if (ignored.has(entry))
104
+ return false;
105
+ try {
106
+ return fs.statSync(path.join(workspace, entry)).isDirectory();
107
+ }
108
+ catch {
109
+ return false;
110
+ }
111
+ })
112
+ .sort();
113
+ }
114
+ catch {
115
+ return [];
116
+ }
117
+ }
118
+ async function getGitInfo(workspace) {
119
+ const check = await execSafe("git", ["rev-parse", "--git-dir"], {
120
+ cwd: workspace,
121
+ timeout: 3000,
122
+ });
123
+ if (check.exitCode !== 0)
124
+ return null;
125
+ const branchResult = await execSafe("git", ["rev-parse", "--abbrev-ref", "HEAD"], { cwd: workspace, timeout: 3000 });
126
+ const branch = branchResult.stdout.trim() || null;
127
+ let ahead = 0;
128
+ let behind = 0;
129
+ const rl = await execSafe("git", ["rev-list", "--count", "--left-right", "HEAD...@{u}"], { cwd: workspace, timeout: 3000 });
130
+ if (rl.exitCode === 0) {
131
+ const parts = rl.stdout.trim().split(/\s+/);
132
+ ahead = Number.parseInt(parts[0] ?? "0", 10);
133
+ behind = Number.parseInt(parts[1] ?? "0", 10);
134
+ }
135
+ const statusResult = await execSafe("git", ["status", "--porcelain"], {
136
+ cwd: workspace,
137
+ timeout: 3000,
138
+ });
139
+ const hasUncommittedChanges = statusResult.stdout.trim().length > 0;
140
+ return { branch, ahead, behind, hasUncommittedChanges };
141
+ }
142
+ export function createGetProjectInfoTool(workspace) {
143
+ return {
144
+ schema: {
145
+ name: "getProjectInfo",
146
+ description: "Get a compact overview of the project at session start. " +
147
+ "Returns: project name/version, detected languages, package manager, key scripts, " +
148
+ "important dependencies, config files present, top-level directory structure, and git status. " +
149
+ "Use this as the first call in a new session instead of manually reading package.json, " +
150
+ "running getFileTree, and calling getGitStatus separately.",
151
+ annotations: { readOnlyHint: true },
152
+ inputSchema: {
153
+ type: "object",
154
+ properties: {},
155
+ additionalProperties: false,
156
+ },
157
+ },
158
+ handler: async () => {
159
+ const projects = [];
160
+ // --- Node.js / TypeScript ---
161
+ const pkgPath = path.join(workspace, "package.json");
162
+ if (existsFile(pkgPath)) {
163
+ const pkg = readJsonSafe(pkgPath);
164
+ if (pkg) {
165
+ const allDeps = {
166
+ ...pkg.dependencies,
167
+ ...pkg.devDependencies,
168
+ };
169
+ const hasTypeScript = "typescript" in allDeps ||
170
+ existsFile(path.join(workspace, "tsconfig.json"));
171
+ // Detect package manager
172
+ let packageManager = "npm";
173
+ if (existsFile(path.join(workspace, "pnpm-lock.yaml")))
174
+ packageManager = "pnpm";
175
+ else if (existsFile(path.join(workspace, "yarn.lock")))
176
+ packageManager = "yarn";
177
+ else if (existsFile(path.join(workspace, "bun.lockb")) ||
178
+ existsFile(path.join(workspace, "bun.lock")))
179
+ packageManager = "bun";
180
+ // Key framework detection
181
+ const frameworks = [];
182
+ const fwMap = {
183
+ next: "Next.js",
184
+ react: "React",
185
+ vue: "Vue",
186
+ svelte: "Svelte",
187
+ astro: "Astro",
188
+ express: "Express",
189
+ fastify: "Fastify",
190
+ hono: "Hono",
191
+ vitest: "Vitest",
192
+ jest: "Jest",
193
+ };
194
+ for (const [dep, label] of Object.entries(fwMap)) {
195
+ if (dep in allDeps)
196
+ frameworks.push(label);
197
+ }
198
+ // Condense scripts — skip boilerplate
199
+ const scripts = pkg.scripts ?? {};
200
+ const importantScripts = Object.fromEntries(Object.entries(scripts).filter(([k]) => [
201
+ "build",
202
+ "dev",
203
+ "start",
204
+ "test",
205
+ "lint",
206
+ "check",
207
+ "typecheck",
208
+ "format",
209
+ ].includes(k)));
210
+ projects.push({
211
+ type: hasTypeScript ? "typescript" : "javascript",
212
+ name: pkg.name ?? path.basename(workspace),
213
+ version: pkg.version ?? null,
214
+ description: pkg.description ?? null,
215
+ packageManager,
216
+ scripts: importantScripts,
217
+ allScripts: Object.keys(scripts),
218
+ frameworks,
219
+ isMonorepo: !!pkg.workspaces,
220
+ });
221
+ }
222
+ }
223
+ // --- Rust ---
224
+ const cargoPath = path.join(workspace, "Cargo.toml");
225
+ if (existsFile(cargoPath)) {
226
+ const content = readFileSafe(cargoPath);
227
+ if (content) {
228
+ const nameMatch = content.match(/^\s*name\s*=\s*"([^"]+)"/m);
229
+ const versionMatch = content.match(/^\s*version\s*=\s*"([^"]+)"/m);
230
+ const editionMatch = content.match(/^\s*edition\s*=\s*"([^"]+)"/m);
231
+ projects.push({
232
+ type: "rust",
233
+ name: nameMatch?.[1] ?? path.basename(workspace),
234
+ version: versionMatch?.[1] ?? null,
235
+ edition: editionMatch?.[1] ?? null,
236
+ isWorkspace: content.includes("[workspace]"),
237
+ });
238
+ }
239
+ }
240
+ // --- Go ---
241
+ const goModPath = path.join(workspace, "go.mod");
242
+ if (existsFile(goModPath)) {
243
+ const content = readFileSafe(goModPath);
244
+ if (content) {
245
+ const moduleMatch = content.match(/^module\s+(\S+)/m);
246
+ const goMatch = content.match(/^go\s+(\S+)/m);
247
+ projects.push({
248
+ type: "go",
249
+ module: moduleMatch?.[1] ?? null,
250
+ goVersion: goMatch?.[1] ?? null,
251
+ });
252
+ }
253
+ }
254
+ // --- Python ---
255
+ const pyprojectPath = path.join(workspace, "pyproject.toml");
256
+ const requirementsPath = path.join(workspace, "requirements.txt");
257
+ const setupPyPath = path.join(workspace, "setup.py");
258
+ if (existsFile(pyprojectPath) ||
259
+ existsFile(requirementsPath) ||
260
+ existsFile(setupPyPath)) {
261
+ const pyproject = existsFile(pyprojectPath)
262
+ ? readFileSafe(pyprojectPath)
263
+ : null;
264
+ const nameMatch = pyproject?.match(/^\s*name\s*=\s*"([^"]+)"/m);
265
+ const versionMatch = pyproject?.match(/^\s*version\s*=\s*"([^"]+)"/m);
266
+ // Detect test framework
267
+ const testFramework = pyproject?.includes("pytest") ||
268
+ existsFile(path.join(workspace, "pytest.ini"))
269
+ ? "pytest"
270
+ : null;
271
+ projects.push({
272
+ type: "python",
273
+ name: nameMatch?.[1] ?? path.basename(workspace),
274
+ version: versionMatch?.[1] ?? null,
275
+ testFramework,
276
+ hasPyproject: existsFile(pyprojectPath),
277
+ hasRequirements: existsFile(requirementsPath),
278
+ });
279
+ }
280
+ // No recognized project type
281
+ if (projects.length === 0) {
282
+ projects.push({ type: "unknown", name: path.basename(workspace) });
283
+ }
284
+ // --- Shared context ---
285
+ const topLevelDirs = getTopLevelDirs(workspace);
286
+ const configFiles = detectConfigFiles(workspace);
287
+ const gitInfo = await getGitInfo(workspace);
288
+ // Count files by extension (top level + one level deep, fast estimate)
289
+ const fileTypeCounts = {};
290
+ try {
291
+ const entries = fs.readdirSync(workspace);
292
+ for (const entry of entries) {
293
+ if (entry.startsWith(".") || entry === "node_modules")
294
+ continue;
295
+ const ext = path.extname(entry);
296
+ if (ext) {
297
+ fileTypeCounts[ext] = (fileTypeCounts[ext] ?? 0) + 1;
298
+ }
299
+ }
300
+ }
301
+ catch {
302
+ // ignore
303
+ }
304
+ return success({
305
+ workspace,
306
+ project: projects.length === 1 ? projects[0] : projects,
307
+ directories: topLevelDirs,
308
+ configFiles,
309
+ git: gitInfo,
310
+ tip: "Use getFileTree for deep directory exploration, getGitStatus for staged/unstaged details, getToolCapabilities for available tools.",
311
+ });
312
+ },
313
+ };
314
+ }
315
+ //# sourceMappingURL=getProjectInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getProjectInfo.js","sourceRoot":"","sources":["../../src/tools/getProjectInfo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { Config } from "../config.js";
2
+ import type { ExtensionClient } from "../extensionClient.js";
3
+ import type { ProbeResults } from "../probe.js";
4
+ export declare function createGetToolCapabilitiesTool(probes: ProbeResults, extensionClient: ExtensionClient, config: Config): {
5
+ schema: {
6
+ name: string;
7
+ description: string;
8
+ annotations: {
9
+ readOnlyHint: boolean;
10
+ };
11
+ inputSchema: {
12
+ type: "object";
13
+ properties: {};
14
+ additionalProperties: false;
15
+ };
16
+ };
17
+ handler: () => Promise<{
18
+ content: Array<{
19
+ type: string;
20
+ text: string;
21
+ }>;
22
+ }>;
23
+ };
@@ -0,0 +1,249 @@
1
+ import { success } from "./utils.js";
2
+ export function createGetToolCapabilitiesTool(probes, extensionClient, config) {
3
+ return {
4
+ schema: {
5
+ name: "getToolCapabilities",
6
+ description: "Returns the actual capabilities of this IDE bridge — which CLI tools are available, whether the VS Code extension is connected, and which features are functional vs stub-only.",
7
+ annotations: { readOnlyHint: true },
8
+ inputSchema: {
9
+ type: "object",
10
+ properties: {},
11
+ additionalProperties: false,
12
+ },
13
+ },
14
+ handler: async () => {
15
+ return success({
16
+ extensionConnected: extensionClient.isConnected(),
17
+ editor: config.editorCommand ?? "none",
18
+ cliTools: {
19
+ rg: probes.rg,
20
+ fd: probes.fd,
21
+ git: probes.git,
22
+ codex: probes.codex,
23
+ },
24
+ linters: {
25
+ tsc: probes.tsc,
26
+ eslint: probes.eslint,
27
+ pyright: probes.pyright,
28
+ ruff: probes.ruff,
29
+ cargo: probes.cargo,
30
+ go: probes.go,
31
+ biome: probes.biome,
32
+ },
33
+ formatters: {
34
+ prettier: probes.prettier,
35
+ black: probes.black,
36
+ gofmt: probes.gofmt,
37
+ rustfmt: probes.rustfmt,
38
+ },
39
+ testRunners: {
40
+ vitest: probes.vitest,
41
+ jest: probes.jest,
42
+ pytest: probes.pytest,
43
+ cargo: probes.cargo,
44
+ go: probes.go,
45
+ },
46
+ features: {
47
+ diagnostics: extensionClient.isConnected() ||
48
+ probes.tsc ||
49
+ probes.eslint ||
50
+ probes.pyright ||
51
+ probes.ruff ||
52
+ probes.cargo ||
53
+ probes.go ||
54
+ probes.biome
55
+ ? "available"
56
+ : "unavailable",
57
+ search: probes.rg ? "rg" : "grep-fallback",
58
+ fileSearch: probes.fd
59
+ ? "fd"
60
+ : probes.git
61
+ ? "git-ls-files"
62
+ : "find-fallback",
63
+ fileOps: extensionClient.isConnected()
64
+ ? "available (VS Code)"
65
+ : "available (native fs fallback — no trash, no undo buffer)",
66
+ editText: extensionClient.isConnected()
67
+ ? "available (VS Code WorkspaceEdit)"
68
+ : "available (native fs fallback — no undo buffer)",
69
+ selection: extensionClient.isConnected() ? "available" : "stub-only",
70
+ dirtyCheck: extensionClient.isConnected()
71
+ ? "real-time"
72
+ : "mtime-heuristic",
73
+ save: extensionClient.isConnected()
74
+ ? "real-buffer-save (VS Code)"
75
+ : config.editorCommand
76
+ ? "editor-cli-reopen (edits already on disk)"
77
+ : "no-op (edits already on disk via editText)",
78
+ lsp: extensionClient.isConnected()
79
+ ? "available (VS Code LSP)"
80
+ : "partial (lexical grep fallback for goToDefinition, findReferences, searchWorkspaceSymbols — hover, code actions, rename still require extension)",
81
+ terminalOutput: extensionClient.isConnected()
82
+ ? "available (runInTerminal uses VS Code shell integration; getTerminalOutput uses proposed API)"
83
+ : "unavailable (requires extension)",
84
+ },
85
+ commandAllowlist: config.commandAllowlist,
86
+ availableTools: {
87
+ // Always available (work with or without extension)
88
+ files: [
89
+ "openFile",
90
+ "createFile",
91
+ "deleteFile",
92
+ "renameFile",
93
+ "findFiles",
94
+ "getFileTree",
95
+ "getOpenEditors",
96
+ "checkDocumentDirty",
97
+ "saveDocument",
98
+ "getBufferContent",
99
+ ...(extensionClient.isConnected()
100
+ ? ["watchFiles", "unwatchFiles"]
101
+ : []),
102
+ ],
103
+ editing: [
104
+ "replaceBlock",
105
+ "editText",
106
+ "openDiff",
107
+ "closeAllDiffTabs",
108
+ "formatDocument",
109
+ "fixAllLintErrors",
110
+ ...(extensionClient.isConnected()
111
+ ? ["closeTab", "organizeImports"]
112
+ : []),
113
+ ],
114
+ git: [
115
+ "getGitStatus",
116
+ "getGitDiff",
117
+ "getGitLog",
118
+ "gitAdd",
119
+ "gitCommit",
120
+ "gitCheckout",
121
+ "gitBlame",
122
+ "gitFetch",
123
+ "gitPull",
124
+ "gitPush",
125
+ "gitListBranches",
126
+ "gitStash",
127
+ "gitStashPop",
128
+ "gitStashList",
129
+ "getCommitDetails",
130
+ "getDiffBetweenRefs",
131
+ ],
132
+ diagnostics: [
133
+ "getDiagnostics",
134
+ "diffDebug",
135
+ "runTests",
136
+ ...(extensionClient.isConnected() ? ["watchDiagnostics"] : []),
137
+ ],
138
+ search: ["searchWorkspace", "searchAndReplace"],
139
+ lsp: extensionClient.isConnected()
140
+ ? [
141
+ "getDocumentSymbols",
142
+ "goToDefinition",
143
+ "findReferences",
144
+ "getHover",
145
+ "getCodeActions",
146
+ "applyCodeAction",
147
+ "renameSymbol",
148
+ "searchWorkspaceSymbols",
149
+ "getCallHierarchy",
150
+ "getTypeHierarchy",
151
+ "getInlayHints",
152
+ "getHoverAtCursor",
153
+ ]
154
+ : [
155
+ "getDocumentSymbols (grep fallback)",
156
+ "goToDefinition (grep fallback)",
157
+ "findReferences (grep fallback)",
158
+ "searchWorkspaceSymbols (grep fallback)",
159
+ ],
160
+ planning: [
161
+ "checkScope",
162
+ "expandScope",
163
+ "createPlan",
164
+ "updatePlan",
165
+ "getPlan",
166
+ "deletePlan",
167
+ "listPlans",
168
+ ],
169
+ snapshots: [
170
+ "createSnapshot",
171
+ "listSnapshots",
172
+ "restoreSnapshot",
173
+ "deleteSnapshot",
174
+ "showSnapshot",
175
+ "diffSnapshot",
176
+ ],
177
+ terminal: extensionClient.isConnected()
178
+ ? [
179
+ "listTerminals",
180
+ "getTerminalOutput",
181
+ "createTerminal",
182
+ "sendTerminalCommand",
183
+ "runInTerminal",
184
+ "waitForTerminalOutput",
185
+ "disposeTerminal",
186
+ ]
187
+ : [],
188
+ debug: extensionClient.isConnected()
189
+ ? [
190
+ "getDebugState",
191
+ "evaluateInDebugger",
192
+ "setDebugBreakpoints",
193
+ "startDebugging",
194
+ "stopDebugging",
195
+ ]
196
+ : [],
197
+ http: ["sendHttpRequest", "parseHttpFile"],
198
+ ...(probes.gh
199
+ ? {
200
+ github: [
201
+ "githubCreatePR",
202
+ "githubListPRs",
203
+ "githubViewPR",
204
+ "githubGetPRDiff",
205
+ "githubPostPRReview",
206
+ "githubListIssues",
207
+ "githubGetIssue",
208
+ "githubCreateIssue",
209
+ "githubCommentIssue",
210
+ "githubListRuns",
211
+ "githubGetRunLogs",
212
+ ],
213
+ }
214
+ : {}),
215
+ other: [
216
+ "runCommand",
217
+ "getToolCapabilities",
218
+ "getProjectInfo",
219
+ "getAIComments",
220
+ "getActivityLog",
221
+ "getCurrentSelection",
222
+ "getLatestSelection",
223
+ "getWorkspaceFolders",
224
+ "setActiveWorkspaceFolder",
225
+ "bridgeStatus",
226
+ ...(extensionClient.isConnected()
227
+ ? [
228
+ "readClipboard",
229
+ "writeClipboard",
230
+ "getWorkspaceSettings",
231
+ "setWorkspaceSetting",
232
+ "executeVSCodeCommand",
233
+ "listVSCodeCommands",
234
+ "getNotebookCells",
235
+ "runNotebookCell",
236
+ "getNotebookOutput",
237
+ "setEditorDecorations",
238
+ "clearEditorDecorations",
239
+ "listTasks",
240
+ "runTask",
241
+ ]
242
+ : []),
243
+ ],
244
+ },
245
+ });
246
+ },
247
+ };
248
+ }
249
+ //# sourceMappingURL=getToolCapabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getToolCapabilities.js","sourceRoot":"","sources":["../../src/tools/getToolCapabilities.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,MAAM,UAAU,6BAA6B,CAC3C,MAAoB,EACpB,eAAgC,EAChC,MAAc;IAEd,OAAO;QACL,MAAM,EAAE;YACN,IAAI,EAAE,qBAAqB;YAC3B,WAAW,EACT,iLAAiL;YACnL,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;YACnC,WAAW,EAAE;gBACX,IAAI,EAAE,QAAiB;gBACvB,UAAU,EAAE,EAAE;gBACd,oBAAoB,EAAE,KAAc;aACrC;SACF;QACD,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,OAAO,OAAO,CAAC;gBACb,kBAAkB,EAAE,eAAe,CAAC,WAAW,EAAE;gBACjD,MAAM,EAAE,MAAM,CAAC,aAAa,IAAI,MAAM;gBACtC,QAAQ,EAAE;oBACR,EAAE,EAAE,MAAM,CAAC,EAAE;oBACb,EAAE,EAAE,MAAM,CAAC,EAAE;oBACb,GAAG,EAAE,MAAM,CAAC,GAAG;oBACf,KAAK,EAAE,MAAM,CAAC,KAAK;iBACpB;gBACD,OAAO,EAAE;oBACP,GAAG,EAAE,MAAM,CAAC,GAAG;oBACf,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,EAAE,EAAE,MAAM,CAAC,EAAE;oBACb,KAAK,EAAE,MAAM,CAAC,KAAK;iBACpB;gBACD,UAAU,EAAE;oBACV,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,OAAO,EAAE,MAAM,CAAC,OAAO;iBACxB;gBACD,WAAW,EAAE;oBACX,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,EAAE,EAAE,MAAM,CAAC,EAAE;iBACd;gBACD,QAAQ,EAAE;oBACR,WAAW,EACT,eAAe,CAAC,WAAW,EAAE;wBAC7B,MAAM,CAAC,GAAG;wBACV,MAAM,CAAC,MAAM;wBACb,MAAM,CAAC,OAAO;wBACd,MAAM,CAAC,IAAI;wBACX,MAAM,CAAC,KAAK;wBACZ,MAAM,CAAC,EAAE;wBACT,MAAM,CAAC,KAAK;wBACV,CAAC,CAAC,WAAW;wBACb,CAAC,CAAC,aAAa;oBACnB,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe;oBAC1C,UAAU,EAAE,MAAM,CAAC,EAAE;wBACnB,CAAC,CAAC,IAAI;wBACN,CAAC,CAAC,MAAM,CAAC,GAAG;4BACV,CAAC,CAAC,cAAc;4BAChB,CAAC,CAAC,eAAe;oBACrB,OAAO,EAAE,eAAe,CAAC,WAAW,EAAE;wBACpC,CAAC,CAAC,qBAAqB;wBACvB,CAAC,CAAC,2DAA2D;oBAC/D,QAAQ,EAAE,eAAe,CAAC,WAAW,EAAE;wBACrC,CAAC,CAAC,mCAAmC;wBACrC,CAAC,CAAC,iDAAiD;oBACrD,SAAS,EAAE,eAAe,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW;oBACpE,UAAU,EAAE,eAAe,CAAC,WAAW,EAAE;wBACvC,CAAC,CAAC,WAAW;wBACb,CAAC,CAAC,iBAAiB;oBACrB,IAAI,EAAE,eAAe,CAAC,WAAW,EAAE;wBACjC,CAAC,CAAC,4BAA4B;wBAC9B,CAAC,CAAC,MAAM,CAAC,aAAa;4BACpB,CAAC,CAAC,2CAA2C;4BAC7C,CAAC,CAAC,4CAA4C;oBAClD,GAAG,EAAE,eAAe,CAAC,WAAW,EAAE;wBAChC,CAAC,CAAC,yBAAyB;wBAC3B,CAAC,CAAC,kJAAkJ;oBACtJ,cAAc,EAAE,eAAe,CAAC,WAAW,EAAE;wBAC3C,CAAC,CAAC,+FAA+F;wBACjG,CAAC,CAAC,kCAAkC;iBACvC;gBACD,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;gBACzC,cAAc,EAAE;oBACd,oDAAoD;oBACpD,KAAK,EAAE;wBACL,UAAU;wBACV,YAAY;wBACZ,YAAY;wBACZ,YAAY;wBACZ,WAAW;wBACX,aAAa;wBACb,gBAAgB;wBAChB,oBAAoB;wBACpB,cAAc;wBACd,kBAAkB;wBAClB,GAAG,CAAC,eAAe,CAAC,WAAW,EAAE;4BAC/B,CAAC,CAAC,CAAC,YAAY,EAAE,cAAc,CAAC;4BAChC,CAAC,CAAC,EAAE,CAAC;qBACR;oBACD,OAAO,EAAE;wBACP,cAAc;wBACd,UAAU;wBACV,UAAU;wBACV,kBAAkB;wBAClB,gBAAgB;wBAChB,kBAAkB;wBAClB,GAAG,CAAC,eAAe,CAAC,WAAW,EAAE;4BAC/B,CAAC,CAAC,CAAC,UAAU,EAAE,iBAAiB,CAAC;4BACjC,CAAC,CAAC,EAAE,CAAC;qBACR;oBACD,GAAG,EAAE;wBACH,cAAc;wBACd,YAAY;wBACZ,WAAW;wBACX,QAAQ;wBACR,WAAW;wBACX,aAAa;wBACb,UAAU;wBACV,UAAU;wBACV,SAAS;wBACT,SAAS;wBACT,iBAAiB;wBACjB,UAAU;wBACV,aAAa;wBACb,cAAc;wBACd,kBAAkB;wBAClB,oBAAoB;qBACrB;oBACD,WAAW,EAAE;wBACX,gBAAgB;wBAChB,WAAW;wBACX,UAAU;wBACV,GAAG,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC/D;oBACD,MAAM,EAAE,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;oBAC/C,GAAG,EAAE,eAAe,CAAC,WAAW,EAAE;wBAChC,CAAC,CAAC;4BACE,oBAAoB;4BACpB,gBAAgB;4BAChB,gBAAgB;4BAChB,UAAU;4BACV,gBAAgB;4BAChB,iBAAiB;4BACjB,cAAc;4BACd,wBAAwB;4BACxB,kBAAkB;4BAClB,kBAAkB;4BAClB,eAAe;4BACf,kBAAkB;yBACnB;wBACH,CAAC,CAAC;4BACE,oCAAoC;4BACpC,gCAAgC;4BAChC,gCAAgC;4BAChC,wCAAwC;yBACzC;oBACL,QAAQ,EAAE;wBACR,YAAY;wBACZ,aAAa;wBACb,YAAY;wBACZ,YAAY;wBACZ,SAAS;wBACT,YAAY;wBACZ,WAAW;qBACZ;oBACD,SAAS,EAAE;wBACT,gBAAgB;wBAChB,eAAe;wBACf,iBAAiB;wBACjB,gBAAgB;wBAChB,cAAc;wBACd,cAAc;qBACf;oBACD,QAAQ,EAAE,eAAe,CAAC,WAAW,EAAE;wBACrC,CAAC,CAAC;4BACE,eAAe;4BACf,mBAAmB;4BACnB,gBAAgB;4BAChB,qBAAqB;4BACrB,eAAe;4BACf,uBAAuB;4BACvB,iBAAiB;yBAClB;wBACH,CAAC,CAAC,EAAE;oBACN,KAAK,EAAE,eAAe,CAAC,WAAW,EAAE;wBAClC,CAAC,CAAC;4BACE,eAAe;4BACf,oBAAoB;4BACpB,qBAAqB;4BACrB,gBAAgB;4BAChB,eAAe;yBAChB;wBACH,CAAC,CAAC,EAAE;oBACN,IAAI,EAAE,CAAC,iBAAiB,EAAE,eAAe,CAAC;oBAC1C,GAAG,CAAC,MAAM,CAAC,EAAE;wBACX,CAAC,CAAC;4BACE,MAAM,EAAE;gCACN,gBAAgB;gCAChB,eAAe;gCACf,cAAc;gCACd,iBAAiB;gCACjB,oBAAoB;gCACpB,kBAAkB;gCAClB,gBAAgB;gCAChB,mBAAmB;gCACnB,oBAAoB;gCACpB,gBAAgB;gCAChB,kBAAkB;6BACnB;yBACF;wBACH,CAAC,CAAC,EAAE,CAAC;oBACP,KAAK,EAAE;wBACL,YAAY;wBACZ,qBAAqB;wBACrB,gBAAgB;wBAChB,eAAe;wBACf,gBAAgB;wBAChB,qBAAqB;wBACrB,oBAAoB;wBACpB,qBAAqB;wBACrB,0BAA0B;wBAC1B,cAAc;wBACd,GAAG,CAAC,eAAe,CAAC,WAAW,EAAE;4BAC/B,CAAC,CAAC;gCACE,eAAe;gCACf,gBAAgB;gCAChB,sBAAsB;gCACtB,qBAAqB;gCACrB,sBAAsB;gCACtB,oBAAoB;gCACpB,kBAAkB;gCAClB,iBAAiB;gCACjB,mBAAmB;gCACnB,sBAAsB;gCACtB,wBAAwB;gCACxB,WAAW;gCACX,SAAS;6BACV;4BACH,CAAC,CAAC,EAAE,CAAC;qBACR;iBACF;aACF,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { ExtensionClient } from "../extensionClient.js";
2
+ export declare function createGetWorkspaceFoldersTool(workspaceFolders: string[], 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
+ handler(): Promise<{
16
+ content: Array<{
17
+ type: string;
18
+ text: string;
19
+ }>;
20
+ }>;
21
+ };