@google/gemini-cli-core 0.1.14 → 0.1.15-nightly.250731.0c6f7884

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 (193) hide show
  1. package/README.md +28 -0
  2. package/dist/google-gemini-cli-core-0.1.15.tgz +0 -0
  3. package/dist/src/code_assist/oauth2.test.js +14 -14
  4. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  5. package/dist/src/config/config.d.ts +21 -7
  6. package/dist/src/config/config.js +35 -13
  7. package/dist/src/config/config.js.map +1 -1
  8. package/dist/src/config/config.test.js +33 -0
  9. package/dist/src/config/config.test.js.map +1 -1
  10. package/dist/src/config/flashFallback.test.js +23 -47
  11. package/dist/src/config/flashFallback.test.js.map +1 -1
  12. package/dist/src/config/models.d.ts +1 -0
  13. package/dist/src/config/models.js +1 -0
  14. package/dist/src/config/models.js.map +1 -1
  15. package/dist/src/core/client.js +37 -17
  16. package/dist/src/core/client.js.map +1 -1
  17. package/dist/src/core/client.test.js +162 -16
  18. package/dist/src/core/client.test.js.map +1 -1
  19. package/dist/src/core/coreToolScheduler.d.ts +1 -3
  20. package/dist/src/core/coreToolScheduler.js +1 -3
  21. package/dist/src/core/coreToolScheduler.js.map +1 -1
  22. package/dist/src/core/coreToolScheduler.test.js +76 -1
  23. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  24. package/dist/src/core/geminiChat.js +1 -0
  25. package/dist/src/core/geminiChat.js.map +1 -1
  26. package/dist/src/core/logger.d.ts +1 -0
  27. package/dist/src/core/logger.js +22 -8
  28. package/dist/src/core/logger.js.map +1 -1
  29. package/dist/src/core/logger.test.js +60 -9
  30. package/dist/src/core/logger.test.js.map +1 -1
  31. package/dist/src/core/prompts.js +1 -1
  32. package/dist/src/core/tokenLimits.js +1 -0
  33. package/dist/src/core/tokenLimits.js.map +1 -1
  34. package/dist/src/ide/detect-ide.d.ts +10 -0
  35. package/dist/src/ide/detect-ide.js +24 -0
  36. package/dist/src/ide/detect-ide.js.map +1 -0
  37. package/dist/src/ide/ide-client.d.ts +19 -7
  38. package/dist/src/ide/ide-client.js +110 -37
  39. package/dist/src/ide/ide-client.js.map +1 -1
  40. package/dist/src/ide/ide-installer.d.ts +15 -0
  41. package/dist/src/ide/ide-installer.js +111 -0
  42. package/dist/src/ide/ide-installer.js.map +1 -0
  43. package/dist/src/ide/ide-installer.test.d.ts +6 -0
  44. package/dist/src/ide/ide-installer.test.js +78 -0
  45. package/dist/src/ide/ide-installer.test.js.map +1 -0
  46. package/dist/src/ide/ideContext.d.ts +212 -107
  47. package/dist/src/ide/ideContext.js +45 -44
  48. package/dist/src/ide/ideContext.js.map +1 -1
  49. package/dist/src/ide/ideContext.test.js +254 -100
  50. package/dist/src/ide/ideContext.test.js.map +1 -1
  51. package/dist/src/index.d.ts +8 -0
  52. package/dist/src/index.js +10 -0
  53. package/dist/src/index.js.map +1 -1
  54. package/dist/src/mcp/oauth-provider.d.ts +5 -1
  55. package/dist/src/mcp/oauth-provider.js +36 -11
  56. package/dist/src/mcp/oauth-provider.js.map +1 -1
  57. package/dist/src/mcp/oauth-provider.test.js +2 -2
  58. package/dist/src/mcp/oauth-provider.test.js.map +1 -1
  59. package/dist/src/mcp/oauth-token-storage.d.ts +3 -1
  60. package/dist/src/mcp/oauth-token-storage.js +3 -1
  61. package/dist/src/mcp/oauth-token-storage.js.map +1 -1
  62. package/dist/src/mcp/oauth-utils.js +2 -2
  63. package/dist/src/mcp/oauth-utils.js.map +1 -1
  64. package/dist/src/mcp/oauth-utils.test.js +1 -1
  65. package/dist/src/mcp/oauth-utils.test.js.map +1 -1
  66. package/dist/src/prompts/mcp-prompts.d.ts +8 -0
  67. package/dist/src/prompts/mcp-prompts.js +13 -0
  68. package/dist/src/prompts/mcp-prompts.js.map +1 -0
  69. package/dist/src/prompts/prompt-registry.d.ts +26 -0
  70. package/dist/src/prompts/prompt-registry.js +47 -0
  71. package/dist/src/prompts/prompt-registry.js.map +1 -0
  72. package/dist/src/services/fileDiscoveryService.test.js +101 -60
  73. package/dist/src/services/fileDiscoveryService.test.js.map +1 -1
  74. package/dist/src/services/gitService.test.js +67 -86
  75. package/dist/src/services/gitService.test.js.map +1 -1
  76. package/dist/src/services/loopDetectionService.d.ts +3 -0
  77. package/dist/src/services/loopDetectionService.js +18 -0
  78. package/dist/src/services/loopDetectionService.js.map +1 -1
  79. package/dist/src/services/loopDetectionService.test.js +90 -11
  80. package/dist/src/services/loopDetectionService.test.js.map +1 -1
  81. package/dist/src/services/shellExecutionService.d.ts +70 -0
  82. package/dist/src/services/shellExecutionService.js +152 -0
  83. package/dist/src/services/shellExecutionService.js.map +1 -0
  84. package/dist/src/services/shellExecutionService.test.d.ts +6 -0
  85. package/dist/src/services/shellExecutionService.test.js +258 -0
  86. package/dist/src/services/shellExecutionService.test.js.map +1 -0
  87. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +2 -1
  88. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +58 -31
  89. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  90. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +3 -1
  91. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +7 -0
  92. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  93. package/dist/src/telemetry/constants.d.ts +1 -0
  94. package/dist/src/telemetry/constants.js +1 -0
  95. package/dist/src/telemetry/constants.js.map +1 -1
  96. package/dist/src/telemetry/index.d.ts +2 -2
  97. package/dist/src/telemetry/index.js +2 -2
  98. package/dist/src/telemetry/index.js.map +1 -1
  99. package/dist/src/telemetry/loggers.d.ts +2 -1
  100. package/dist/src/telemetry/loggers.js +17 -1
  101. package/dist/src/telemetry/loggers.js.map +1 -1
  102. package/dist/src/telemetry/telemetry.test.js +2 -0
  103. package/dist/src/telemetry/telemetry.test.js.map +1 -1
  104. package/dist/src/telemetry/types.d.ts +8 -1
  105. package/dist/src/telemetry/types.js +12 -0
  106. package/dist/src/telemetry/types.js.map +1 -1
  107. package/dist/src/test-utils/mockWorkspaceContext.d.ts +13 -0
  108. package/dist/src/test-utils/mockWorkspaceContext.js +24 -0
  109. package/dist/src/test-utils/mockWorkspaceContext.js.map +1 -0
  110. package/dist/src/tools/edit.js +4 -3
  111. package/dist/src/tools/edit.js.map +1 -1
  112. package/dist/src/tools/edit.test.js +25 -1
  113. package/dist/src/tools/edit.test.js.map +1 -1
  114. package/dist/src/tools/glob.js +53 -17
  115. package/dist/src/tools/glob.js.map +1 -1
  116. package/dist/src/tools/glob.test.js +32 -6
  117. package/dist/src/tools/glob.test.js.map +1 -1
  118. package/dist/src/tools/grep.d.ts +1 -1
  119. package/dist/src/tools/grep.js +81 -29
  120. package/dist/src/tools/grep.js.map +1 -1
  121. package/dist/src/tools/grep.test.js +76 -9
  122. package/dist/src/tools/grep.test.js.map +1 -1
  123. package/dist/src/tools/ls.js +4 -3
  124. package/dist/src/tools/ls.js.map +1 -1
  125. package/dist/src/tools/ls.test.d.ts +6 -0
  126. package/dist/src/tools/ls.test.js +356 -0
  127. package/dist/src/tools/ls.test.js.map +1 -0
  128. package/dist/src/tools/mcp-client.d.ts +26 -2
  129. package/dist/src/tools/mcp-client.js +64 -21
  130. package/dist/src/tools/mcp-client.js.map +1 -1
  131. package/dist/src/tools/mcp-client.test.js +53 -1
  132. package/dist/src/tools/mcp-client.test.js.map +1 -1
  133. package/dist/src/tools/memoryTool.d.ts +17 -2
  134. package/dist/src/tools/memoryTool.js +130 -13
  135. package/dist/src/tools/memoryTool.js.map +1 -1
  136. package/dist/src/tools/memoryTool.test.js +88 -3
  137. package/dist/src/tools/memoryTool.test.js.map +1 -1
  138. package/dist/src/tools/modifiable-tool.test.js +51 -62
  139. package/dist/src/tools/modifiable-tool.test.js.map +1 -1
  140. package/dist/src/tools/read-file.js +8 -6
  141. package/dist/src/tools/read-file.js.map +1 -1
  142. package/dist/src/tools/read-file.test.js +29 -1
  143. package/dist/src/tools/read-file.test.js.map +1 -1
  144. package/dist/src/tools/read-many-files.js +22 -12
  145. package/dist/src/tools/read-many-files.js.map +1 -1
  146. package/dist/src/tools/read-many-files.test.js +35 -2
  147. package/dist/src/tools/read-many-files.test.js.map +1 -1
  148. package/dist/src/tools/shell.d.ts +1 -0
  149. package/dist/src/tools/shell.js +145 -185
  150. package/dist/src/tools/shell.js.map +1 -1
  151. package/dist/src/tools/shell.test.js +275 -95
  152. package/dist/src/tools/shell.test.js.map +1 -1
  153. package/dist/src/tools/tool-registry.js +3 -3
  154. package/dist/src/tools/tool-registry.js.map +1 -1
  155. package/dist/src/tools/tool-registry.test.js +10 -2
  156. package/dist/src/tools/tool-registry.test.js.map +1 -1
  157. package/dist/src/tools/write-file.js +5 -3
  158. package/dist/src/tools/write-file.js.map +1 -1
  159. package/dist/src/tools/write-file.test.js +36 -2
  160. package/dist/src/tools/write-file.test.js.map +1 -1
  161. package/dist/src/utils/bfsFileSearch.js +51 -27
  162. package/dist/src/utils/bfsFileSearch.js.map +1 -1
  163. package/dist/src/utils/bfsFileSearch.test.js +57 -0
  164. package/dist/src/utils/bfsFileSearch.test.js.map +1 -1
  165. package/dist/src/utils/flashFallback.integration.test.js +8 -0
  166. package/dist/src/utils/flashFallback.integration.test.js.map +1 -1
  167. package/dist/src/utils/formatters.d.ts +6 -0
  168. package/dist/src/utils/formatters.js +16 -0
  169. package/dist/src/utils/formatters.js.map +1 -0
  170. package/dist/src/utils/nextSpeakerChecker.js +2 -2
  171. package/dist/src/utils/nextSpeakerChecker.js.map +1 -1
  172. package/dist/src/utils/nextSpeakerChecker.test.js +2 -2
  173. package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -1
  174. package/dist/src/utils/retry.d.ts +3 -0
  175. package/dist/src/utils/retry.js.map +1 -1
  176. package/dist/src/utils/retry.test.js.map +1 -1
  177. package/dist/src/utils/shell-utils.d.ts +37 -3
  178. package/dist/src/utils/shell-utils.js +110 -47
  179. package/dist/src/utils/shell-utils.js.map +1 -1
  180. package/dist/src/utils/shell-utils.test.js +146 -396
  181. package/dist/src/utils/shell-utils.test.js.map +1 -1
  182. package/dist/src/utils/textUtils.d.ts +13 -0
  183. package/dist/src/utils/textUtils.js +28 -0
  184. package/dist/src/utils/textUtils.js.map +1 -0
  185. package/dist/src/utils/workspaceContext.d.ts +47 -0
  186. package/dist/src/utils/workspaceContext.js +106 -0
  187. package/dist/src/utils/workspaceContext.js.map +1 -0
  188. package/dist/src/utils/workspaceContext.test.d.ts +6 -0
  189. package/dist/src/utils/workspaceContext.test.js +209 -0
  190. package/dist/src/utils/workspaceContext.test.js.map +1 -0
  191. package/dist/tsconfig.tsbuildinfo +1 -1
  192. package/package.json +1 -1
  193. package/dist/google-gemini-cli-core-0.1.13.tgz +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ls.js","sourceRoot":"","sources":["../../../src/tools/ls.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ls.js","sourceRoot":"","sources":["../../../src/tools/ls.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAc,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAU,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AAuD7E;;GAEG;AACH,MAAM,OAAO,MAAO,SAAQ,QAAkC;IAGxC;IAFpB,MAAM,CAAU,IAAI,GAAG,gBAAgB,CAAC;IAExC,YAAoB,MAAc;QAChC,KAAK,CACH,MAAM,CAAC,IAAI,EACX,YAAY,EACZ,wJAAwJ,EACxJ,IAAI,CAAC,MAAM,EACX;YACE,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,WAAW,EACT,6EAA6E;oBAC/E,IAAI,EAAE,IAAI,CAAC,MAAM;iBAClB;gBACD,MAAM,EAAE;oBACN,WAAW,EAAE,iCAAiC;oBAC9C,KAAK,EAAE;wBACL,IAAI,EAAE,IAAI,CAAC,MAAM;qBAClB;oBACD,IAAI,EAAE,IAAI,CAAC,KAAK;iBACjB;gBACD,sBAAsB,EAAE;oBACtB,WAAW,EACT,+EAA+E;oBACjF,IAAI,EAAE,IAAI,CAAC,MAAM;oBACjB,UAAU,EAAE;wBACV,kBAAkB,EAAE;4BAClB,WAAW,EACT,4HAA4H;4BAC9H,IAAI,EAAE,IAAI,CAAC,OAAO;yBACnB;wBACD,qBAAqB,EAAE;4BACrB,WAAW,EACT,2FAA2F;4BAC7F,IAAI,EAAE,IAAI,CAAC,OAAO;yBACnB;qBACF;iBACF;aACF;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;YAClB,IAAI,EAAE,IAAI,CAAC,MAAM;SAClB,CACF,CAAC;QAzCgB,WAAM,GAAN,MAAM,CAAQ;IA0ClC,CAAC;IAED;;;;OAIG;IACH,kBAAkB,CAAC,MAAoB;QACrC,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACxE,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO,0BAA0B,MAAM,CAAC,IAAI,EAAE,CAAC;QACjD,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAC3D,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACzD,MAAM,WAAW,GAAG,gBAAgB,CAAC,cAAc,EAAE,CAAC;YACtD,OAAO,yDAAyD,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3F,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACK,YAAY,CAAC,QAAgB,EAAE,QAAmB;QACxD,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,iCAAiC;YACjC,MAAM,YAAY,GAAG,OAAO;iBACzB,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC;iBACpC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;iBACpB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACvB,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,YAAY,GAAG,CAAC,CAAC;YAC9C,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzB,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,MAAoB;QACjC,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QAC3E,OAAO,WAAW,CAAC,YAAY,CAAC,CAAC;IACnC,CAAC;IAED,yCAAyC;IACjC,WAAW,CAAC,UAAkB,EAAE,aAAqB;QAC3D,OAAO;YACL,UAAU;YACV,2CAA2C;YAC3C,aAAa,EAAE,UAAU,aAAa,EAAE;SACzC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO,CACX,MAAoB,EACpB,OAAoB;QAEpB,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,WAAW,CACrB,+CAA+C,eAAe,EAAE,EAChE,yBAAyB,CAC1B,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,wEAAwE;gBACxE,mDAAmD;gBACnD,OAAO,IAAI,CAAC,WAAW,CACrB,+CAA+C,MAAM,CAAC,IAAI,EAAE,EAC5D,sCAAsC,CACvC,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACzB,OAAO,IAAI,CAAC,WAAW,CACrB,mCAAmC,MAAM,CAAC,IAAI,EAAE,EAChD,0BAA0B,CAC3B,CAAC;YACJ,CAAC;YAED,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAE1C,MAAM,kBAAkB,GACtB,IAAI,CAAC,MAAM,CAAC,uBAAuB,EAAE,IAAI,8BAA8B,CAAC;YAE1E,MAAM,oBAAoB,GAAG;gBAC3B,gBAAgB,EACd,MAAM,CAAC,sBAAsB,EAAE,kBAAkB;oBACjD,kBAAkB,CAAC,gBAAgB;gBACrC,mBAAmB,EACjB,MAAM,CAAC,sBAAsB,EAAE,qBAAqB;oBACpD,kBAAkB,CAAC,mBAAmB;aACzC,CAAC;YAEF,yCAAyC;YAEzC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAEnD,MAAM,OAAO,GAAgB,EAAE,CAAC;YAChC,IAAI,eAAe,GAAG,CAAC,CAAC;YACxB,IAAI,kBAAkB,GAAG,CAAC,CAAC;YAE3B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,mDAAmD;gBACnD,OAAO;oBACL,UAAU,EAAE,aAAa,MAAM,CAAC,IAAI,YAAY;oBAChD,aAAa,EAAE,qBAAqB;iBACrC,CAAC;YACJ,CAAC;YAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC3C,SAAS;gBACX,CAAC;gBAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAChC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,EAC1B,QAAQ,CACT,CAAC;gBAEF,2EAA2E;gBAC3E,IACE,oBAAoB,CAAC,gBAAgB;oBACrC,aAAa,CAAC,mBAAmB,CAAC,YAAY,CAAC,EAC/C,CAAC;oBACD,eAAe,EAAE,CAAC;oBAClB,SAAS;gBACX,CAAC;gBACD,IACE,oBAAoB,CAAC,mBAAmB;oBACxC,aAAa,CAAC,sBAAsB,CAAC,YAAY,CAAC,EAClD,CAAC;oBACD,kBAAkB,EAAE,CAAC;oBACrB,SAAS;gBACX,CAAC;gBAED,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACpC,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;oBAClC,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,IAAI;wBACV,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,KAAK;wBAClB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI;wBAC5B,YAAY,EAAE,KAAK,CAAC,KAAK;qBAC1B,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,wDAAwD;oBACxD,OAAO,CAAC,KAAK,CAAC,mBAAmB,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC;YAED,wDAAwD;YACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACpB,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,WAAW;oBAAE,OAAO,CAAC,CAAC,CAAC;gBAC/C,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW;oBAAE,OAAO,CAAC,CAAC;gBAC9C,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,mCAAmC;YACnC,MAAM,gBAAgB,GAAG,OAAO;iBAC7B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;iBACnE,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,IAAI,aAAa,GAAG,yBAAyB,MAAM,CAAC,IAAI,MAAM,gBAAgB,EAAE,CAAC;YACjF,MAAM,eAAe,GAAG,EAAE,CAAC;YAC3B,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;gBACxB,eAAe,CAAC,IAAI,CAAC,GAAG,eAAe,cAAc,CAAC,CAAC;YACzD,CAAC;YACD,IAAI,kBAAkB,GAAG,CAAC,EAAE,CAAC;gBAC3B,eAAe,CAAC,IAAI,CAAC,GAAG,kBAAkB,iBAAiB,CAAC,CAAC;YAC/D,CAAC;YAED,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,aAAa,IAAI,QAAQ,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YACzD,CAAC;YAED,IAAI,cAAc,GAAG,UAAU,OAAO,CAAC,MAAM,WAAW,CAAC;YACzD,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,cAAc,IAAI,KAAK,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YACvD,CAAC;YAED,OAAO;gBACL,UAAU,EAAE,aAAa;gBACzB,aAAa,EAAE,cAAc;aAC9B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACtG,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,2BAA2B,CAAC,CAAC;QACjE,CAAC;IACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -0,0 +1,356 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /* eslint-disable @typescript-eslint/no-explicit-any */
7
+ import { describe, it, expect, beforeEach, vi } from 'vitest';
8
+ import fs from 'fs';
9
+ import path from 'path';
10
+ vi.mock('fs', () => ({
11
+ default: {
12
+ statSync: vi.fn(),
13
+ readdirSync: vi.fn(),
14
+ },
15
+ statSync: vi.fn(),
16
+ readdirSync: vi.fn(),
17
+ }));
18
+ import { LSTool } from './ls.js';
19
+ describe('LSTool', () => {
20
+ let lsTool;
21
+ let mockConfig;
22
+ let mockWorkspaceContext;
23
+ let mockFileService;
24
+ const mockPrimaryDir = '/home/user/project';
25
+ const mockSecondaryDir = '/home/user/other-project';
26
+ beforeEach(() => {
27
+ vi.resetAllMocks();
28
+ // Mock WorkspaceContext
29
+ mockWorkspaceContext = {
30
+ getDirectories: vi
31
+ .fn()
32
+ .mockReturnValue([mockPrimaryDir, mockSecondaryDir]),
33
+ isPathWithinWorkspace: vi
34
+ .fn()
35
+ .mockImplementation((path) => path.startsWith(mockPrimaryDir) ||
36
+ path.startsWith(mockSecondaryDir)),
37
+ addDirectory: vi.fn(),
38
+ };
39
+ // Mock FileService
40
+ mockFileService = {
41
+ shouldGitIgnoreFile: vi.fn().mockReturnValue(false),
42
+ shouldGeminiIgnoreFile: vi.fn().mockReturnValue(false),
43
+ };
44
+ // Mock Config
45
+ mockConfig = {
46
+ getTargetDir: vi.fn().mockReturnValue(mockPrimaryDir),
47
+ getWorkspaceContext: vi.fn().mockReturnValue(mockWorkspaceContext),
48
+ getFileService: vi.fn().mockReturnValue(mockFileService),
49
+ getFileFilteringOptions: vi.fn().mockReturnValue({
50
+ respectGitIgnore: true,
51
+ respectGeminiIgnore: true,
52
+ }),
53
+ };
54
+ lsTool = new LSTool(mockConfig);
55
+ });
56
+ describe('parameter validation', () => {
57
+ it('should accept valid absolute paths within workspace', () => {
58
+ const params = {
59
+ path: '/home/user/project/src',
60
+ };
61
+ const error = lsTool.validateToolParams(params);
62
+ expect(error).toBeNull();
63
+ });
64
+ it('should reject relative paths', () => {
65
+ const params = {
66
+ path: './src',
67
+ };
68
+ const error = lsTool.validateToolParams(params);
69
+ expect(error).toBe('Path must be absolute: ./src');
70
+ });
71
+ it('should reject paths outside workspace with clear error message', () => {
72
+ const params = {
73
+ path: '/etc/passwd',
74
+ };
75
+ const error = lsTool.validateToolParams(params);
76
+ expect(error).toBe('Path must be within one of the workspace directories: /home/user/project, /home/user/other-project');
77
+ });
78
+ it('should accept paths in secondary workspace directory', () => {
79
+ const params = {
80
+ path: '/home/user/other-project/lib',
81
+ };
82
+ const error = lsTool.validateToolParams(params);
83
+ expect(error).toBeNull();
84
+ });
85
+ });
86
+ describe('execute', () => {
87
+ it('should list files in a directory', async () => {
88
+ const testPath = '/home/user/project/src';
89
+ const mockFiles = ['file1.ts', 'file2.ts', 'subdir'];
90
+ const mockStats = {
91
+ isDirectory: vi.fn(),
92
+ mtime: new Date(),
93
+ size: 1024,
94
+ };
95
+ vi.mocked(fs.statSync).mockImplementation((path) => {
96
+ const pathStr = path.toString();
97
+ if (pathStr === testPath) {
98
+ return { isDirectory: () => true };
99
+ }
100
+ // For individual files
101
+ if (pathStr.toString().endsWith('subdir')) {
102
+ return { ...mockStats, isDirectory: () => true, size: 0 };
103
+ }
104
+ return { ...mockStats, isDirectory: () => false };
105
+ });
106
+ vi.mocked(fs.readdirSync).mockReturnValue(mockFiles);
107
+ const result = await lsTool.execute({ path: testPath }, new AbortController().signal);
108
+ expect(result.llmContent).toContain('[DIR] subdir');
109
+ expect(result.llmContent).toContain('file1.ts');
110
+ expect(result.llmContent).toContain('file2.ts');
111
+ expect(result.returnDisplay).toBe('Listed 3 item(s).');
112
+ });
113
+ it('should list files from secondary workspace directory', async () => {
114
+ const testPath = '/home/user/other-project/lib';
115
+ const mockFiles = ['module1.js', 'module2.js'];
116
+ vi.mocked(fs.statSync).mockImplementation((path) => {
117
+ if (path.toString() === testPath) {
118
+ return { isDirectory: () => true };
119
+ }
120
+ return {
121
+ isDirectory: () => false,
122
+ mtime: new Date(),
123
+ size: 2048,
124
+ };
125
+ });
126
+ vi.mocked(fs.readdirSync).mockReturnValue(mockFiles);
127
+ const result = await lsTool.execute({ path: testPath }, new AbortController().signal);
128
+ expect(result.llmContent).toContain('module1.js');
129
+ expect(result.llmContent).toContain('module2.js');
130
+ expect(result.returnDisplay).toBe('Listed 2 item(s).');
131
+ });
132
+ it('should handle empty directories', async () => {
133
+ const testPath = '/home/user/project/empty';
134
+ vi.mocked(fs.statSync).mockReturnValue({
135
+ isDirectory: () => true,
136
+ });
137
+ vi.mocked(fs.readdirSync).mockReturnValue([]);
138
+ const result = await lsTool.execute({ path: testPath }, new AbortController().signal);
139
+ expect(result.llmContent).toBe('Directory /home/user/project/empty is empty.');
140
+ expect(result.returnDisplay).toBe('Directory is empty.');
141
+ });
142
+ it('should respect ignore patterns', async () => {
143
+ const testPath = '/home/user/project/src';
144
+ const mockFiles = ['test.js', 'test.spec.js', 'index.js'];
145
+ vi.mocked(fs.statSync).mockImplementation((path) => {
146
+ const pathStr = path.toString();
147
+ if (pathStr === testPath) {
148
+ return { isDirectory: () => true };
149
+ }
150
+ return {
151
+ isDirectory: () => false,
152
+ mtime: new Date(),
153
+ size: 1024,
154
+ };
155
+ });
156
+ vi.mocked(fs.readdirSync).mockReturnValue(mockFiles);
157
+ const result = await lsTool.execute({ path: testPath, ignore: ['*.spec.js'] }, new AbortController().signal);
158
+ expect(result.llmContent).toContain('test.js');
159
+ expect(result.llmContent).toContain('index.js');
160
+ expect(result.llmContent).not.toContain('test.spec.js');
161
+ expect(result.returnDisplay).toBe('Listed 2 item(s).');
162
+ });
163
+ it('should respect gitignore patterns', async () => {
164
+ const testPath = '/home/user/project/src';
165
+ const mockFiles = ['file1.js', 'file2.js', 'ignored.js'];
166
+ vi.mocked(fs.statSync).mockImplementation((path) => {
167
+ const pathStr = path.toString();
168
+ if (pathStr === testPath) {
169
+ return { isDirectory: () => true };
170
+ }
171
+ return {
172
+ isDirectory: () => false,
173
+ mtime: new Date(),
174
+ size: 1024,
175
+ };
176
+ });
177
+ vi.mocked(fs.readdirSync).mockReturnValue(mockFiles);
178
+ mockFileService.shouldGitIgnoreFile.mockImplementation((path) => path.includes('ignored.js'));
179
+ const result = await lsTool.execute({ path: testPath }, new AbortController().signal);
180
+ expect(result.llmContent).toContain('file1.js');
181
+ expect(result.llmContent).toContain('file2.js');
182
+ expect(result.llmContent).not.toContain('ignored.js');
183
+ expect(result.returnDisplay).toBe('Listed 2 item(s). (1 git-ignored)');
184
+ });
185
+ it('should respect geminiignore patterns', async () => {
186
+ const testPath = '/home/user/project/src';
187
+ const mockFiles = ['file1.js', 'file2.js', 'private.js'];
188
+ vi.mocked(fs.statSync).mockImplementation((path) => {
189
+ const pathStr = path.toString();
190
+ if (pathStr === testPath) {
191
+ return { isDirectory: () => true };
192
+ }
193
+ return {
194
+ isDirectory: () => false,
195
+ mtime: new Date(),
196
+ size: 1024,
197
+ };
198
+ });
199
+ vi.mocked(fs.readdirSync).mockReturnValue(mockFiles);
200
+ mockFileService.shouldGeminiIgnoreFile.mockImplementation((path) => path.includes('private.js'));
201
+ const result = await lsTool.execute({ path: testPath }, new AbortController().signal);
202
+ expect(result.llmContent).toContain('file1.js');
203
+ expect(result.llmContent).toContain('file2.js');
204
+ expect(result.llmContent).not.toContain('private.js');
205
+ expect(result.returnDisplay).toBe('Listed 2 item(s). (1 gemini-ignored)');
206
+ });
207
+ it('should handle non-directory paths', async () => {
208
+ const testPath = '/home/user/project/file.txt';
209
+ vi.mocked(fs.statSync).mockReturnValue({
210
+ isDirectory: () => false,
211
+ });
212
+ const result = await lsTool.execute({ path: testPath }, new AbortController().signal);
213
+ expect(result.llmContent).toContain('Path is not a directory');
214
+ expect(result.returnDisplay).toBe('Error: Path is not a directory.');
215
+ });
216
+ it('should handle non-existent paths', async () => {
217
+ const testPath = '/home/user/project/does-not-exist';
218
+ vi.mocked(fs.statSync).mockImplementation(() => {
219
+ throw new Error('ENOENT: no such file or directory');
220
+ });
221
+ const result = await lsTool.execute({ path: testPath }, new AbortController().signal);
222
+ expect(result.llmContent).toContain('Error listing directory');
223
+ expect(result.returnDisplay).toBe('Error: Failed to list directory.');
224
+ });
225
+ it('should sort directories first, then files alphabetically', async () => {
226
+ const testPath = '/home/user/project/src';
227
+ const mockFiles = ['z-file.ts', 'a-dir', 'b-file.ts', 'c-dir'];
228
+ vi.mocked(fs.statSync).mockImplementation((path) => {
229
+ if (path.toString() === testPath) {
230
+ return { isDirectory: () => true };
231
+ }
232
+ if (path.toString().endsWith('-dir')) {
233
+ return {
234
+ isDirectory: () => true,
235
+ mtime: new Date(),
236
+ size: 0,
237
+ };
238
+ }
239
+ return {
240
+ isDirectory: () => false,
241
+ mtime: new Date(),
242
+ size: 1024,
243
+ };
244
+ });
245
+ vi.mocked(fs.readdirSync).mockReturnValue(mockFiles);
246
+ const result = await lsTool.execute({ path: testPath }, new AbortController().signal);
247
+ const lines = (typeof result.llmContent === 'string' ? result.llmContent : '').split('\n');
248
+ const entries = lines.slice(1).filter((line) => line.trim()); // Skip header
249
+ expect(entries[0]).toBe('[DIR] a-dir');
250
+ expect(entries[1]).toBe('[DIR] c-dir');
251
+ expect(entries[2]).toBe('b-file.ts');
252
+ expect(entries[3]).toBe('z-file.ts');
253
+ });
254
+ it('should handle permission errors gracefully', async () => {
255
+ const testPath = '/home/user/project/restricted';
256
+ vi.mocked(fs.statSync).mockReturnValue({
257
+ isDirectory: () => true,
258
+ });
259
+ vi.mocked(fs.readdirSync).mockImplementation(() => {
260
+ throw new Error('EACCES: permission denied');
261
+ });
262
+ const result = await lsTool.execute({ path: testPath }, new AbortController().signal);
263
+ expect(result.llmContent).toContain('Error listing directory');
264
+ expect(result.llmContent).toContain('permission denied');
265
+ expect(result.returnDisplay).toBe('Error: Failed to list directory.');
266
+ });
267
+ it('should validate parameters and return error for invalid params', async () => {
268
+ const result = await lsTool.execute({ path: '../outside' }, new AbortController().signal);
269
+ expect(result.llmContent).toContain('Invalid parameters provided');
270
+ expect(result.returnDisplay).toBe('Error: Failed to execute tool.');
271
+ });
272
+ it('should handle errors accessing individual files during listing', async () => {
273
+ const testPath = '/home/user/project/src';
274
+ const mockFiles = ['accessible.ts', 'inaccessible.ts'];
275
+ vi.mocked(fs.statSync).mockImplementation((path) => {
276
+ if (path.toString() === testPath) {
277
+ return { isDirectory: () => true };
278
+ }
279
+ if (path.toString().endsWith('inaccessible.ts')) {
280
+ throw new Error('EACCES: permission denied');
281
+ }
282
+ return {
283
+ isDirectory: () => false,
284
+ mtime: new Date(),
285
+ size: 1024,
286
+ };
287
+ });
288
+ vi.mocked(fs.readdirSync).mockReturnValue(mockFiles);
289
+ // Spy on console.error to verify it's called
290
+ const consoleErrorSpy = vi
291
+ .spyOn(console, 'error')
292
+ .mockImplementation(() => { });
293
+ const result = await lsTool.execute({ path: testPath }, new AbortController().signal);
294
+ // Should still list the accessible file
295
+ expect(result.llmContent).toContain('accessible.ts');
296
+ expect(result.llmContent).not.toContain('inaccessible.ts');
297
+ expect(result.returnDisplay).toBe('Listed 1 item(s).');
298
+ // Verify error was logged
299
+ expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('Error accessing'));
300
+ consoleErrorSpy.mockRestore();
301
+ });
302
+ });
303
+ describe('getDescription', () => {
304
+ it('should return shortened relative path', () => {
305
+ const params = {
306
+ path: path.join(mockPrimaryDir, 'deeply', 'nested', 'directory'),
307
+ };
308
+ const description = lsTool.getDescription(params);
309
+ expect(description).toBe(path.join('deeply', 'nested', 'directory'));
310
+ });
311
+ it('should handle paths in secondary workspace', () => {
312
+ const params = {
313
+ path: path.join(mockSecondaryDir, 'lib'),
314
+ };
315
+ const description = lsTool.getDescription(params);
316
+ expect(description).toBe(path.join('..', 'other-project', 'lib'));
317
+ });
318
+ });
319
+ describe('workspace boundary validation', () => {
320
+ it('should accept paths in primary workspace directory', () => {
321
+ const params = { path: `${mockPrimaryDir}/src` };
322
+ expect(lsTool.validateToolParams(params)).toBeNull();
323
+ });
324
+ it('should accept paths in secondary workspace directory', () => {
325
+ const params = { path: `${mockSecondaryDir}/lib` };
326
+ expect(lsTool.validateToolParams(params)).toBeNull();
327
+ });
328
+ it('should reject paths outside all workspace directories', () => {
329
+ const params = { path: '/etc/passwd' };
330
+ const error = lsTool.validateToolParams(params);
331
+ expect(error).toContain('Path must be within one of the workspace directories');
332
+ expect(error).toContain(mockPrimaryDir);
333
+ expect(error).toContain(mockSecondaryDir);
334
+ });
335
+ it('should list files from secondary workspace directory', async () => {
336
+ const testPath = `${mockSecondaryDir}/tests`;
337
+ const mockFiles = ['test1.spec.ts', 'test2.spec.ts'];
338
+ vi.mocked(fs.statSync).mockImplementation((path) => {
339
+ if (path.toString() === testPath) {
340
+ return { isDirectory: () => true };
341
+ }
342
+ return {
343
+ isDirectory: () => false,
344
+ mtime: new Date(),
345
+ size: 512,
346
+ };
347
+ });
348
+ vi.mocked(fs.readdirSync).mockReturnValue(mockFiles);
349
+ const result = await lsTool.execute({ path: testPath }, new AbortController().signal);
350
+ expect(result.llmContent).toContain('test1.spec.ts');
351
+ expect(result.llmContent).toContain('test2.spec.ts');
352
+ expect(result.returnDisplay).toBe('Listed 2 item(s).');
353
+ });
354
+ });
355
+ });
356
+ //# sourceMappingURL=ls.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ls.test.js","sourceRoot":"","sources":["../../../src/tools/ls.test.ts"],"names":[],"mappings":"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"}
@@ -5,11 +5,17 @@
5
5
  */
6
6
  import { Client } from '@modelcontextprotocol/sdk/client/index.js';
7
7
  import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';
8
+ import { Prompt, GetPromptResult } from '@modelcontextprotocol/sdk/types.js';
8
9
  import { MCPServerConfig } from '../config/config.js';
9
10
  import { DiscoveredMCPTool } from './mcp-tool.js';
10
11
  import { FunctionDeclaration } from '@google/genai';
11
12
  import { ToolRegistry } from './tool-registry.js';
13
+ import { PromptRegistry } from '../prompts/prompt-registry.js';
12
14
  export declare const MCP_DEFAULT_TIMEOUT_MSEC: number;
15
+ export type DiscoveredMCPPrompt = Prompt & {
16
+ serverName: string;
17
+ invoke: (params: Record<string, unknown>) => Promise<GetPromptResult>;
18
+ };
13
19
  /**
14
20
  * Enum representing the connection status of an MCP server
15
21
  */
@@ -70,7 +76,7 @@ export declare function getMCPDiscoveryState(): MCPDiscoveryState;
70
76
  * @param toolRegistry The central registry where discovered tools will be registered.
71
77
  * @returns A promise that resolves when the discovery process has been attempted for all servers.
72
78
  */
73
- export declare function discoverMcpTools(mcpServers: Record<string, MCPServerConfig>, mcpServerCommand: string | undefined, toolRegistry: ToolRegistry, debugMode: boolean): Promise<void>;
79
+ export declare function discoverMcpTools(mcpServers: Record<string, MCPServerConfig>, mcpServerCommand: string | undefined, toolRegistry: ToolRegistry, promptRegistry: PromptRegistry, debugMode: boolean): Promise<void>;
74
80
  /** Visible for Testing */
75
81
  export declare function populateMcpServerCommand(mcpServers: Record<string, MCPServerConfig>, mcpServerCommand: string | undefined): Record<string, MCPServerConfig>;
76
82
  /**
@@ -83,7 +89,7 @@ export declare function populateMcpServerCommand(mcpServers: Record<string, MCPS
83
89
  * @param toolRegistry The registry to register discovered tools with
84
90
  * @returns Promise that resolves when discovery is complete
85
91
  */
86
- export declare function connectAndDiscover(mcpServerName: string, mcpServerConfig: MCPServerConfig, toolRegistry: ToolRegistry, debugMode: boolean): Promise<void>;
92
+ export declare function connectAndDiscover(mcpServerName: string, mcpServerConfig: MCPServerConfig, toolRegistry: ToolRegistry, promptRegistry: PromptRegistry, debugMode: boolean): Promise<void>;
87
93
  /**
88
94
  * Discovers and sanitizes tools from a connected MCP client.
89
95
  * It retrieves function declarations from the client, filters out disabled tools,
@@ -96,6 +102,24 @@ export declare function connectAndDiscover(mcpServerName: string, mcpServerConfi
96
102
  * @throws An error if no enabled tools are found or if the server provides invalid function declarations.
97
103
  */
98
104
  export declare function discoverTools(mcpServerName: string, mcpServerConfig: MCPServerConfig, mcpClient: Client): Promise<DiscoveredMCPTool[]>;
105
+ /**
106
+ * Discovers and logs prompts from a connected MCP client.
107
+ * It retrieves prompt declarations from the client and logs their names.
108
+ *
109
+ * @param mcpServerName The name of the MCP server.
110
+ * @param mcpClient The active MCP client instance.
111
+ */
112
+ export declare function discoverPrompts(mcpServerName: string, mcpClient: Client, promptRegistry: PromptRegistry): Promise<void>;
113
+ /**
114
+ * Invokes a prompt on a connected MCP client.
115
+ *
116
+ * @param mcpServerName The name of the MCP server.
117
+ * @param mcpClient The active MCP client instance.
118
+ * @param promptName The name of the prompt to invoke.
119
+ * @param promptParams The parameters to pass to the prompt.
120
+ * @returns A promise that resolves to the result of the prompt invocation.
121
+ */
122
+ export declare function invokeMcpPrompt(mcpServerName: string, mcpClient: Client, promptName: string, promptParams: Record<string, unknown>): Promise<GetPromptResult>;
99
123
  /**
100
124
  * Creates and connects an MCP client to a server based on the provided configuration.
101
125
  * It determines the appropriate transport (Stdio, SSE, or Streamable HTTP) and
@@ -7,6 +7,7 @@ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
7
7
  import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
8
8
  import { SSEClientTransport, } from '@modelcontextprotocol/sdk/client/sse.js';
9
9
  import { StreamableHTTPClientTransport, } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
10
+ import { ListPromptsResultSchema, GetPromptResultSchema, } from '@modelcontextprotocol/sdk/types.js';
10
11
  import { parse } from 'shell-quote';
11
12
  import { AuthProviderType } from '../config/config.js';
12
13
  import { GoogleCredentialProvider } from '../mcp/google-auth-provider.js';
@@ -44,7 +45,7 @@ export var MCPDiscoveryState;
44
45
  /**
45
46
  * Map to track the status of each MCP server within the core package
46
47
  */
47
- const mcpServerStatusesInternal = new Map();
48
+ const serverStatuses = new Map();
48
49
  /**
49
50
  * Track the overall MCP discovery state
50
51
  */
@@ -73,7 +74,7 @@ export function removeMCPStatusChangeListener(listener) {
73
74
  * Update the status of an MCP server
74
75
  */
75
76
  function updateMCPServerStatus(serverName, status) {
76
- mcpServerStatusesInternal.set(serverName, status);
77
+ serverStatuses.set(serverName, status);
77
78
  // Notify all listeners
78
79
  for (const listener of statusChangeListeners) {
79
80
  listener(serverName, status);
@@ -83,13 +84,13 @@ function updateMCPServerStatus(serverName, status) {
83
84
  * Get the current status of an MCP server
84
85
  */
85
86
  export function getMCPServerStatus(serverName) {
86
- return (mcpServerStatusesInternal.get(serverName) || MCPServerStatus.DISCONNECTED);
87
+ return serverStatuses.get(serverName) || MCPServerStatus.DISCONNECTED;
87
88
  }
88
89
  /**
89
90
  * Get all MCP server statuses
90
91
  */
91
92
  export function getAllMCPServerStatuses() {
92
- return new Map(mcpServerStatusesInternal);
93
+ return new Map(serverStatuses);
93
94
  }
94
95
  /**
95
96
  * Get the current MCP discovery state
@@ -97,17 +98,6 @@ export function getAllMCPServerStatuses() {
97
98
  export function getMCPDiscoveryState() {
98
99
  return mcpDiscoveryState;
99
100
  }
100
- /**
101
- * Parse www-authenticate header to extract OAuth metadata URI.
102
- *
103
- * @param wwwAuthenticate The www-authenticate header value
104
- * @returns The resource metadata URI if found, null otherwise
105
- */
106
- function _parseWWWAuthenticate(wwwAuthenticate) {
107
- // Parse header like: Bearer realm="MCP Server", resource_metadata_uri="https://..."
108
- const resourceMetadataMatch = wwwAuthenticate.match(/resource_metadata_uri="([^"]+)"/);
109
- return resourceMetadataMatch ? resourceMetadataMatch[1] : null;
110
- }
111
101
  /**
112
102
  * Extract WWW-Authenticate header from error message string.
113
103
  * This is a more robust approach than regex matching.
@@ -233,11 +223,11 @@ async function createTransportWithOAuth(mcpServerName, mcpServerConfig, accessTo
233
223
  * @param toolRegistry The central registry where discovered tools will be registered.
234
224
  * @returns A promise that resolves when the discovery process has been attempted for all servers.
235
225
  */
236
- export async function discoverMcpTools(mcpServers, mcpServerCommand, toolRegistry, debugMode) {
226
+ export async function discoverMcpTools(mcpServers, mcpServerCommand, toolRegistry, promptRegistry, debugMode) {
237
227
  mcpDiscoveryState = MCPDiscoveryState.IN_PROGRESS;
238
228
  try {
239
229
  mcpServers = populateMcpServerCommand(mcpServers, mcpServerCommand);
240
- const discoveryPromises = Object.entries(mcpServers).map(([mcpServerName, mcpServerConfig]) => connectAndDiscover(mcpServerName, mcpServerConfig, toolRegistry, debugMode));
230
+ const discoveryPromises = Object.entries(mcpServers).map(([mcpServerName, mcpServerConfig]) => connectAndDiscover(mcpServerName, mcpServerConfig, toolRegistry, promptRegistry, debugMode));
241
231
  await Promise.all(discoveryPromises);
242
232
  }
243
233
  finally {
@@ -270,7 +260,7 @@ export function populateMcpServerCommand(mcpServers, mcpServerCommand) {
270
260
  * @param toolRegistry The registry to register discovered tools with
271
261
  * @returns Promise that resolves when discovery is complete
272
262
  */
273
- export async function connectAndDiscover(mcpServerName, mcpServerConfig, toolRegistry, debugMode) {
263
+ export async function connectAndDiscover(mcpServerName, mcpServerConfig, toolRegistry, promptRegistry, debugMode) {
274
264
  updateMCPServerStatus(mcpServerName, MCPServerStatus.CONNECTING);
275
265
  try {
276
266
  const mcpClient = await connectToMcpServer(mcpServerName, mcpServerConfig, debugMode);
@@ -280,6 +270,7 @@ export async function connectAndDiscover(mcpServerName, mcpServerConfig, toolReg
280
270
  console.error(`MCP ERROR (${mcpServerName}):`, error.toString());
281
271
  updateMCPServerStatus(mcpServerName, MCPServerStatus.DISCONNECTED);
282
272
  };
273
+ await discoverPrompts(mcpServerName, mcpClient, promptRegistry);
283
274
  const tools = await discoverTools(mcpServerName, mcpServerConfig, mcpClient);
284
275
  for (const tool of tools) {
285
276
  toolRegistry.registerTool(tool);
@@ -320,15 +311,67 @@ export async function discoverTools(mcpServerName, mcpServerConfig, mcpClient) {
320
311
  }
321
312
  discoveredTools.push(new DiscoveredMCPTool(mcpCallableTool, mcpServerName, funcDecl.name, funcDecl.description ?? '', funcDecl.parametersJsonSchema ?? { type: 'object', properties: {} }, mcpServerConfig.timeout ?? MCP_DEFAULT_TIMEOUT_MSEC, mcpServerConfig.trust));
322
313
  }
323
- if (discoveredTools.length === 0) {
324
- throw Error('No enabled tools found');
325
- }
326
314
  return discoveredTools;
327
315
  }
328
316
  catch (error) {
329
317
  throw new Error(`Error discovering tools: ${error}`);
330
318
  }
331
319
  }
320
+ /**
321
+ * Discovers and logs prompts from a connected MCP client.
322
+ * It retrieves prompt declarations from the client and logs their names.
323
+ *
324
+ * @param mcpServerName The name of the MCP server.
325
+ * @param mcpClient The active MCP client instance.
326
+ */
327
+ export async function discoverPrompts(mcpServerName, mcpClient, promptRegistry) {
328
+ try {
329
+ const response = await mcpClient.request({ method: 'prompts/list', params: {} }, ListPromptsResultSchema);
330
+ for (const prompt of response.prompts) {
331
+ promptRegistry.registerPrompt({
332
+ ...prompt,
333
+ serverName: mcpServerName,
334
+ invoke: (params) => invokeMcpPrompt(mcpServerName, mcpClient, prompt.name, params),
335
+ });
336
+ }
337
+ }
338
+ catch (error) {
339
+ // It's okay if this fails, not all servers will have prompts.
340
+ // Don't log an error if the method is not found, which is a common case.
341
+ if (error instanceof Error &&
342
+ !error.message?.includes('Method not found')) {
343
+ console.error(`Error discovering prompts from ${mcpServerName}: ${getErrorMessage(error)}`);
344
+ }
345
+ }
346
+ }
347
+ /**
348
+ * Invokes a prompt on a connected MCP client.
349
+ *
350
+ * @param mcpServerName The name of the MCP server.
351
+ * @param mcpClient The active MCP client instance.
352
+ * @param promptName The name of the prompt to invoke.
353
+ * @param promptParams The parameters to pass to the prompt.
354
+ * @returns A promise that resolves to the result of the prompt invocation.
355
+ */
356
+ export async function invokeMcpPrompt(mcpServerName, mcpClient, promptName, promptParams) {
357
+ try {
358
+ const response = await mcpClient.request({
359
+ method: 'prompts/get',
360
+ params: {
361
+ name: promptName,
362
+ arguments: promptParams,
363
+ },
364
+ }, GetPromptResultSchema);
365
+ return response;
366
+ }
367
+ catch (error) {
368
+ if (error instanceof Error &&
369
+ !error.message?.includes('Method not found')) {
370
+ console.error(`Error invoking prompt '${promptName}' from ${mcpServerName} ${promptParams}: ${getErrorMessage(error)}`);
371
+ }
372
+ throw error;
373
+ }
374
+ }
332
375
  /**
333
376
  * Creates and connects an MCP client to a server based on the provided configuration.
334
377
  * It determines the appropriate transport (Stdio, SSE, or Streamable HTTP) and