@structured-world/gitlab-mcp 6.62.1 → 6.62.2

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 (414) hide show
  1. package/README.md +1 -1
  2. package/dist/generated/prisma/client.js.map +1 -1
  3. package/dist/generated/prisma/internal/class.js +2 -2
  4. package/dist/generated/prisma/internal/class.js.map +1 -1
  5. package/dist/generated/prisma/internal/prismaNamespace.js +2 -2
  6. package/dist/src/cli/docker/container-runtime.d.ts +1 -1
  7. package/dist/src/cli/docker/container-runtime.js +14 -14
  8. package/dist/src/cli/docker/docker-command.d.ts +1 -1
  9. package/dist/src/cli/docker/docker-command.js +113 -113
  10. package/dist/src/cli/docker/docker-command.js.map +1 -1
  11. package/dist/src/cli/docker/docker-utils.d.ts +3 -3
  12. package/dist/src/cli/docker/docker-utils.js +74 -74
  13. package/dist/src/cli/docker/docker-utils.js.map +1 -1
  14. package/dist/src/cli/docker/index.d.ts +4 -4
  15. package/dist/src/cli/docker/types.d.ts +3 -3
  16. package/dist/src/cli/docker/types.js +5 -5
  17. package/dist/src/cli/init/browser.js +2 -2
  18. package/dist/src/cli/init/config-generator.d.ts +2 -2
  19. package/dist/src/cli/init/config-generator.js +22 -22
  20. package/dist/src/cli/init/connection.d.ts +1 -1
  21. package/dist/src/cli/init/connection.js +17 -17
  22. package/dist/src/cli/init/index.d.ts +4 -4
  23. package/dist/src/cli/init/types.d.ts +3 -3
  24. package/dist/src/cli/init/types.js +36 -36
  25. package/dist/src/cli/init/wizard.js +80 -80
  26. package/dist/src/cli/init/wizard.js.map +1 -1
  27. package/dist/src/cli/inject-tool-refs.js +47 -47
  28. package/dist/src/cli/inject-tool-refs.js.map +1 -1
  29. package/dist/src/cli/install/backup.d.ts +1 -1
  30. package/dist/src/cli/install/backup.js +3 -3
  31. package/dist/src/cli/install/detector.d.ts +2 -2
  32. package/dist/src/cli/install/detector.js +18 -18
  33. package/dist/src/cli/install/detector.js.map +1 -1
  34. package/dist/src/cli/install/index.d.ts +5 -5
  35. package/dist/src/cli/install/install-command.d.ts +2 -2
  36. package/dist/src/cli/install/install-command.js +68 -68
  37. package/dist/src/cli/install/install-command.js.map +1 -1
  38. package/dist/src/cli/install/installers.d.ts +2 -2
  39. package/dist/src/cli/install/installers.js +55 -55
  40. package/dist/src/cli/install/installers.js.map +1 -1
  41. package/dist/src/cli/install/types.d.ts +4 -4
  42. package/dist/src/cli/install/types.js +48 -48
  43. package/dist/src/cli/instances/index.d.ts +2 -2
  44. package/dist/src/cli/instances/instances-command.d.ts +1 -1
  45. package/dist/src/cli/instances/instances-command.js +65 -65
  46. package/dist/src/cli/instances/instances-command.js.map +1 -1
  47. package/dist/src/cli/list-tools.js +396 -396
  48. package/dist/src/cli/list-tools.js.map +1 -1
  49. package/dist/src/cli/setup/discovery.d.ts +1 -1
  50. package/dist/src/cli/setup/discovery.js +10 -10
  51. package/dist/src/cli/setup/discovery.js.map +1 -1
  52. package/dist/src/cli/setup/flows/configure-existing.d.ts +1 -1
  53. package/dist/src/cli/setup/flows/configure-existing.js +57 -57
  54. package/dist/src/cli/setup/flows/configure-existing.js.map +1 -1
  55. package/dist/src/cli/setup/flows/local-setup.d.ts +1 -1
  56. package/dist/src/cli/setup/flows/local-setup.js +51 -51
  57. package/dist/src/cli/setup/flows/local-setup.js.map +1 -1
  58. package/dist/src/cli/setup/flows/server-setup.d.ts +1 -1
  59. package/dist/src/cli/setup/flows/server-setup.js +50 -50
  60. package/dist/src/cli/setup/flows/server-setup.js.map +1 -1
  61. package/dist/src/cli/setup/flows/tool-selection.d.ts +1 -1
  62. package/dist/src/cli/setup/flows/tool-selection.js +94 -94
  63. package/dist/src/cli/setup/flows/tool-selection.js.map +1 -1
  64. package/dist/src/cli/setup/index.d.ts +4 -4
  65. package/dist/src/cli/setup/presets.d.ts +1 -1
  66. package/dist/src/cli/setup/presets.js +157 -157
  67. package/dist/src/cli/setup/presets.js.map +1 -1
  68. package/dist/src/cli/setup/types.d.ts +7 -7
  69. package/dist/src/cli/setup/wizard.d.ts +1 -1
  70. package/dist/src/cli/setup/wizard.js +25 -25
  71. package/dist/src/cli/utils/index.d.ts +1 -1
  72. package/dist/src/cli/utils/path-utils.js +3 -3
  73. package/dist/src/cli-utils.d.ts +2 -2
  74. package/dist/src/cli-utils.js +46 -46
  75. package/dist/src/config/index.d.ts +4 -4
  76. package/dist/src/config/instances-loader.d.ts +3 -3
  77. package/dist/src/config/instances-loader.js +53 -53
  78. package/dist/src/config/instances-loader.js.map +1 -1
  79. package/dist/src/config/instances-schema.d.ts +1 -1
  80. package/dist/src/config/instances-schema.js +33 -33
  81. package/dist/src/config/instances-schema.js.map +1 -1
  82. package/dist/src/config.d.ts +4 -4
  83. package/dist/src/config.js +89 -89
  84. package/dist/src/config.js.map +1 -1
  85. package/dist/src/dashboard/handler.d.ts +2 -2
  86. package/dist/src/dashboard/handler.js +7 -7
  87. package/dist/src/dashboard/html-template.d.ts +1 -1
  88. package/dist/src/dashboard/html-template.js +44 -44
  89. package/dist/src/dashboard/html-template.js.map +1 -1
  90. package/dist/src/dashboard/index.d.ts +4 -4
  91. package/dist/src/dashboard/metrics.d.ts +3 -3
  92. package/dist/src/dashboard/metrics.js +42 -42
  93. package/dist/src/discovery/auto.d.ts +3 -3
  94. package/dist/src/discovery/auto.js +28 -28
  95. package/dist/src/discovery/git-remote.d.ts +2 -2
  96. package/dist/src/discovery/git-remote.js +18 -18
  97. package/dist/src/discovery/index.d.ts +3 -3
  98. package/dist/src/discovery/profile-matcher.d.ts +2 -2
  99. package/dist/src/discovery/profile-matcher.js +8 -8
  100. package/dist/src/discovery/profile-matcher.js.map +1 -1
  101. package/dist/src/entities/context/context-manager.d.ts +3 -3
  102. package/dist/src/entities/context/context-manager.js +34 -34
  103. package/dist/src/entities/context/context-manager.js.map +1 -1
  104. package/dist/src/entities/context/handlers.d.ts +2 -2
  105. package/dist/src/entities/context/handlers.js +8 -8
  106. package/dist/src/entities/context/index.d.ts +8 -8
  107. package/dist/src/entities/context/index.js +1 -1
  108. package/dist/src/entities/context/registry.d.ts +1 -1
  109. package/dist/src/entities/context/registry.js +4 -4
  110. package/dist/src/entities/context/schema.d.ts +1 -1
  111. package/dist/src/entities/context/schema.js +19 -19
  112. package/dist/src/entities/context/types.d.ts +9 -9
  113. package/dist/src/entities/context/whoami.d.ts +1 -1
  114. package/dist/src/entities/context/whoami.js +31 -31
  115. package/dist/src/entities/context/whoami.js.map +1 -1
  116. package/dist/src/entities/core/index.d.ts +5 -5
  117. package/dist/src/entities/core/index.js +1 -1
  118. package/dist/src/entities/core/registry.d.ts +1 -1
  119. package/dist/src/entities/core/registry.js +194 -194
  120. package/dist/src/entities/core/registry.js.map +1 -1
  121. package/dist/src/entities/core/schema-readonly.d.ts +1 -1
  122. package/dist/src/entities/core/schema-readonly.js +117 -117
  123. package/dist/src/entities/core/schema.d.ts +1 -1
  124. package/dist/src/entities/core/schema.js +67 -67
  125. package/dist/src/entities/files/index.d.ts +5 -5
  126. package/dist/src/entities/files/index.js +1 -1
  127. package/dist/src/entities/files/registry.d.ts +1 -1
  128. package/dist/src/entities/files/registry.js +45 -45
  129. package/dist/src/entities/files/registry.js.map +1 -1
  130. package/dist/src/entities/files/schema-readonly.d.ts +1 -1
  131. package/dist/src/entities/files/schema-readonly.js +13 -13
  132. package/dist/src/entities/files/schema.d.ts +1 -1
  133. package/dist/src/entities/files/schema.js +29 -29
  134. package/dist/src/entities/index.d.ts +17 -17
  135. package/dist/src/entities/integrations/index.d.ts +4 -4
  136. package/dist/src/entities/integrations/registry.d.ts +1 -1
  137. package/dist/src/entities/integrations/registry.js +17 -17
  138. package/dist/src/entities/integrations/registry.js.map +1 -1
  139. package/dist/src/entities/integrations/schema-readonly.d.ts +1 -1
  140. package/dist/src/entities/integrations/schema-readonly.js +5 -5
  141. package/dist/src/entities/integrations/schema.d.ts +1 -1
  142. package/dist/src/entities/integrations/schema.js +69 -69
  143. package/dist/src/entities/iterations/index.d.ts +2 -2
  144. package/dist/src/entities/iterations/registry.d.ts +1 -1
  145. package/dist/src/entities/iterations/registry.js +13 -13
  146. package/dist/src/entities/iterations/registry.js.map +1 -1
  147. package/dist/src/entities/iterations/schema-readonly.d.ts +1 -1
  148. package/dist/src/entities/iterations/schema-readonly.js +9 -9
  149. package/dist/src/entities/labels/index.d.ts +5 -5
  150. package/dist/src/entities/labels/index.js +1 -1
  151. package/dist/src/entities/labels/registry.d.ts +1 -1
  152. package/dist/src/entities/labels/registry.js +19 -19
  153. package/dist/src/entities/labels/registry.js.map +1 -1
  154. package/dist/src/entities/labels/schema-readonly.d.ts +1 -1
  155. package/dist/src/entities/labels/schema-readonly.js +8 -8
  156. package/dist/src/entities/labels/schema.d.ts +1 -1
  157. package/dist/src/entities/labels/schema.js +11 -11
  158. package/dist/src/entities/members/index.d.ts +3 -3
  159. package/dist/src/entities/members/registry.d.ts +1 -1
  160. package/dist/src/entities/members/registry.js +26 -26
  161. package/dist/src/entities/members/registry.js.map +1 -1
  162. package/dist/src/entities/members/schema-readonly.d.ts +1 -1
  163. package/dist/src/entities/members/schema-readonly.js +32 -32
  164. package/dist/src/entities/members/schema-readonly.js.map +1 -1
  165. package/dist/src/entities/members/schema.d.ts +1 -1
  166. package/dist/src/entities/members/schema.js +28 -28
  167. package/dist/src/entities/milestones/index.d.ts +5 -5
  168. package/dist/src/entities/milestones/index.js +1 -1
  169. package/dist/src/entities/milestones/registry.d.ts +1 -1
  170. package/dist/src/entities/milestones/registry.js +25 -25
  171. package/dist/src/entities/milestones/registry.js.map +1 -1
  172. package/dist/src/entities/milestones/schema-readonly.d.ts +2 -2
  173. package/dist/src/entities/milestones/schema-readonly.js +15 -15
  174. package/dist/src/entities/milestones/schema.d.ts +1 -1
  175. package/dist/src/entities/milestones/schema.js +16 -16
  176. package/dist/src/entities/milestones/schema.js.map +1 -1
  177. package/dist/src/entities/mrs/index.d.ts +5 -5
  178. package/dist/src/entities/mrs/index.js +1 -1
  179. package/dist/src/entities/mrs/registry.d.ts +1 -1
  180. package/dist/src/entities/mrs/registry.js +102 -102
  181. package/dist/src/entities/mrs/registry.js.map +1 -1
  182. package/dist/src/entities/mrs/schema-readonly.d.ts +1 -1
  183. package/dist/src/entities/mrs/schema-readonly.js +126 -126
  184. package/dist/src/entities/mrs/schema-readonly.js.map +1 -1
  185. package/dist/src/entities/mrs/schema.d.ts +1 -1
  186. package/dist/src/entities/mrs/schema.js +111 -111
  187. package/dist/src/entities/mrs/schema.js.map +1 -1
  188. package/dist/src/entities/pipelines/index.d.ts +5 -5
  189. package/dist/src/entities/pipelines/index.js +1 -1
  190. package/dist/src/entities/pipelines/registry.d.ts +1 -1
  191. package/dist/src/entities/pipelines/registry.js +45 -45
  192. package/dist/src/entities/pipelines/registry.js.map +1 -1
  193. package/dist/src/entities/pipelines/schema-readonly.d.ts +1 -1
  194. package/dist/src/entities/pipelines/schema-readonly.js +73 -73
  195. package/dist/src/entities/pipelines/schema.d.ts +1 -1
  196. package/dist/src/entities/pipelines/schema.js +21 -21
  197. package/dist/src/entities/refs/index.d.ts +3 -3
  198. package/dist/src/entities/refs/registry.d.ts +1 -1
  199. package/dist/src/entities/refs/registry.js +31 -31
  200. package/dist/src/entities/refs/registry.js.map +1 -1
  201. package/dist/src/entities/refs/schema-readonly.d.ts +1 -1
  202. package/dist/src/entities/refs/schema-readonly.js +21 -21
  203. package/dist/src/entities/refs/schema.d.ts +1 -1
  204. package/dist/src/entities/refs/schema.js +56 -56
  205. package/dist/src/entities/releases/index.d.ts +3 -3
  206. package/dist/src/entities/releases/registry.d.ts +1 -1
  207. package/dist/src/entities/releases/registry.js +21 -21
  208. package/dist/src/entities/releases/registry.js.map +1 -1
  209. package/dist/src/entities/releases/schema-readonly.d.ts +1 -1
  210. package/dist/src/entities/releases/schema-readonly.js +13 -13
  211. package/dist/src/entities/releases/schema.d.ts +1 -1
  212. package/dist/src/entities/releases/schema.js +21 -21
  213. package/dist/src/entities/search/index.d.ts +2 -2
  214. package/dist/src/entities/search/registry.d.ts +1 -1
  215. package/dist/src/entities/search/registry.js +13 -13
  216. package/dist/src/entities/search/schema-readonly.d.ts +1 -1
  217. package/dist/src/entities/search/schema-readonly.js +23 -23
  218. package/dist/src/entities/shared.d.ts +1 -1
  219. package/dist/src/entities/shared.js +5 -5
  220. package/dist/src/entities/snippets/index.d.ts +5 -5
  221. package/dist/src/entities/snippets/index.js +1 -1
  222. package/dist/src/entities/snippets/registry.d.ts +1 -1
  223. package/dist/src/entities/snippets/registry.js +24 -24
  224. package/dist/src/entities/snippets/registry.js.map +1 -1
  225. package/dist/src/entities/snippets/schema-readonly.d.ts +1 -1
  226. package/dist/src/entities/snippets/schema-readonly.js +11 -11
  227. package/dist/src/entities/snippets/schema.d.ts +1 -1
  228. package/dist/src/entities/snippets/schema.js +27 -27
  229. package/dist/src/entities/snippets/schema.js.map +1 -1
  230. package/dist/src/entities/utils.d.ts +2 -2
  231. package/dist/src/entities/utils.js +8 -8
  232. package/dist/src/entities/utils.js.map +1 -1
  233. package/dist/src/entities/variables/index.d.ts +5 -5
  234. package/dist/src/entities/variables/index.js +1 -1
  235. package/dist/src/entities/variables/registry.d.ts +1 -1
  236. package/dist/src/entities/variables/registry.js +22 -22
  237. package/dist/src/entities/variables/registry.js.map +1 -1
  238. package/dist/src/entities/variables/schema-readonly.d.ts +1 -1
  239. package/dist/src/entities/variables/schema-readonly.js +6 -6
  240. package/dist/src/entities/variables/schema.d.ts +1 -1
  241. package/dist/src/entities/variables/schema.js +21 -21
  242. package/dist/src/entities/variables/schema.js.map +1 -1
  243. package/dist/src/entities/webhooks/index.d.ts +4 -4
  244. package/dist/src/entities/webhooks/registry.d.ts +1 -1
  245. package/dist/src/entities/webhooks/registry.js +29 -29
  246. package/dist/src/entities/webhooks/registry.js.map +1 -1
  247. package/dist/src/entities/webhooks/schema-readonly.d.ts +1 -1
  248. package/dist/src/entities/webhooks/schema-readonly.js +9 -9
  249. package/dist/src/entities/webhooks/schema.d.ts +1 -1
  250. package/dist/src/entities/webhooks/schema.js +59 -59
  251. package/dist/src/entities/wiki/index.d.ts +5 -5
  252. package/dist/src/entities/wiki/index.js +1 -1
  253. package/dist/src/entities/wiki/registry.d.ts +1 -1
  254. package/dist/src/entities/wiki/registry.js +19 -19
  255. package/dist/src/entities/wiki/registry.js.map +1 -1
  256. package/dist/src/entities/wiki/schema-readonly.d.ts +1 -1
  257. package/dist/src/entities/wiki/schema-readonly.js +6 -6
  258. package/dist/src/entities/wiki/schema.d.ts +1 -1
  259. package/dist/src/entities/wiki/schema.js +12 -12
  260. package/dist/src/entities/workitems/index.d.ts +5 -5
  261. package/dist/src/entities/workitems/index.js +1 -1
  262. package/dist/src/entities/workitems/registry.d.ts +1 -1
  263. package/dist/src/entities/workitems/registry.js +101 -101
  264. package/dist/src/entities/workitems/registry.js.map +1 -1
  265. package/dist/src/entities/workitems/schema-readonly.d.ts +1 -1
  266. package/dist/src/entities/workitems/schema-readonly.js +27 -27
  267. package/dist/src/entities/workitems/schema-readonly.js.map +1 -1
  268. package/dist/src/entities/workitems/schema.d.ts +1 -1
  269. package/dist/src/entities/workitems/schema.js +58 -58
  270. package/dist/src/graphql/DynamicWorkItemsQuery.d.ts +2 -2
  271. package/dist/src/graphql/DynamicWorkItemsQuery.js +47 -47
  272. package/dist/src/graphql/DynamicWorkItemsQuery.js.map +1 -1
  273. package/dist/src/graphql/client.d.ts +1 -1
  274. package/dist/src/graphql/client.js +4 -4
  275. package/dist/src/graphql/client.js.map +1 -1
  276. package/dist/src/graphql/index.d.ts +2 -2
  277. package/dist/src/graphql/workItems.d.ts +38 -38
  278. package/dist/src/graphql/workItems.js +30 -30
  279. package/dist/src/handlers.d.ts +1 -1
  280. package/dist/src/handlers.js +55 -55
  281. package/dist/src/handlers.js.map +1 -1
  282. package/dist/src/http-client.js +3 -3
  283. package/dist/src/logger.js +25 -25
  284. package/dist/src/logging/access-log.d.ts +2 -2
  285. package/dist/src/logging/access-log.js +25 -25
  286. package/dist/src/logging/connection-tracker.d.ts +1 -1
  287. package/dist/src/logging/connection-tracker.js +3 -3
  288. package/dist/src/logging/index.d.ts +5 -5
  289. package/dist/src/logging/request-tracker.d.ts +3 -3
  290. package/dist/src/logging/request-tracker.js +4 -4
  291. package/dist/src/logging/types.d.ts +3 -3
  292. package/dist/src/logging/types.js +1 -1
  293. package/dist/src/main.js +28 -28
  294. package/dist/src/middleware/index.d.ts +2 -2
  295. package/dist/src/middleware/oauth-auth.d.ts +1 -1
  296. package/dist/src/middleware/oauth-auth.js +17 -17
  297. package/dist/src/middleware/rate-limiter.d.ts +1 -1
  298. package/dist/src/middleware/rate-limiter.js +32 -32
  299. package/dist/src/oauth/config.d.ts +1 -1
  300. package/dist/src/oauth/config.js +18 -18
  301. package/dist/src/oauth/config.js.map +1 -1
  302. package/dist/src/oauth/endpoints/authorize.d.ts +1 -1
  303. package/dist/src/oauth/endpoints/authorize.js +32 -32
  304. package/dist/src/oauth/endpoints/callback.d.ts +1 -1
  305. package/dist/src/oauth/endpoints/callback.js +26 -26
  306. package/dist/src/oauth/endpoints/index.d.ts +5 -5
  307. package/dist/src/oauth/endpoints/metadata.d.ts +1 -1
  308. package/dist/src/oauth/endpoints/metadata.js +12 -12
  309. package/dist/src/oauth/endpoints/register.d.ts +1 -1
  310. package/dist/src/oauth/endpoints/register.js +9 -9
  311. package/dist/src/oauth/endpoints/token.d.ts +1 -1
  312. package/dist/src/oauth/endpoints/token.js +28 -28
  313. package/dist/src/oauth/gitlab-device-flow.d.ts +2 -2
  314. package/dist/src/oauth/gitlab-device-flow.js +46 -46
  315. package/dist/src/oauth/gitlab-device-flow.js.map +1 -1
  316. package/dist/src/oauth/index.d.ts +10 -10
  317. package/dist/src/oauth/session-store.d.ts +2 -2
  318. package/dist/src/oauth/session-store.js +40 -40
  319. package/dist/src/oauth/session-store.js.map +1 -1
  320. package/dist/src/oauth/storage/factory.d.ts +2 -2
  321. package/dist/src/oauth/storage/factory.js +16 -16
  322. package/dist/src/oauth/storage/file.d.ts +2 -2
  323. package/dist/src/oauth/storage/file.js +22 -22
  324. package/dist/src/oauth/storage/file.js.map +1 -1
  325. package/dist/src/oauth/storage/index.d.ts +5 -5
  326. package/dist/src/oauth/storage/memory.d.ts +2 -2
  327. package/dist/src/oauth/storage/memory.js +18 -18
  328. package/dist/src/oauth/storage/memory.js.map +1 -1
  329. package/dist/src/oauth/storage/postgresql.d.ts +2 -2
  330. package/dist/src/oauth/storage/postgresql.js +11 -11
  331. package/dist/src/oauth/storage/postgresql.js.map +1 -1
  332. package/dist/src/oauth/storage/types.d.ts +3 -3
  333. package/dist/src/oauth/token-context.d.ts +1 -1
  334. package/dist/src/oauth/token-context.js +1 -1
  335. package/dist/src/oauth/token-utils.d.ts +1 -1
  336. package/dist/src/oauth/token-utils.js +20 -20
  337. package/dist/src/oauth/types.d.ts +3 -3
  338. package/dist/src/profiles/applicator.d.ts +1 -1
  339. package/dist/src/profiles/applicator.js +48 -48
  340. package/dist/src/profiles/index.d.ts +5 -5
  341. package/dist/src/profiles/loader.d.ts +3 -3
  342. package/dist/src/profiles/loader.js +25 -25
  343. package/dist/src/profiles/loader.js.map +1 -1
  344. package/dist/src/profiles/project-loader.d.ts +1 -1
  345. package/dist/src/profiles/project-loader.js +23 -23
  346. package/dist/src/profiles/project-loader.js.map +1 -1
  347. package/dist/src/profiles/scope-enforcer.d.ts +2 -2
  348. package/dist/src/profiles/scope-enforcer.js +25 -25
  349. package/dist/src/profiles/scope-enforcer.js.map +1 -1
  350. package/dist/src/profiles/types.d.ts +2 -2
  351. package/dist/src/profiles/types.js +50 -48
  352. package/dist/src/profiles/types.js.map +1 -1
  353. package/dist/src/registry-manager.d.ts +1 -1
  354. package/dist/src/registry-manager.js +64 -64
  355. package/dist/src/registry-manager.js.map +1 -1
  356. package/dist/src/server.js +136 -136
  357. package/dist/src/server.js.map +1 -1
  358. package/dist/src/services/ConnectionManager.d.ts +5 -5
  359. package/dist/src/services/ConnectionManager.js +45 -45
  360. package/dist/src/services/ConnectionManager.js.map +1 -1
  361. package/dist/src/services/GitLabVersionDetector.d.ts +2 -2
  362. package/dist/src/services/GitLabVersionDetector.js +45 -45
  363. package/dist/src/services/GitLabVersionDetector.js.map +1 -1
  364. package/dist/src/services/InstanceConnectionPool.d.ts +2 -2
  365. package/dist/src/services/InstanceConnectionPool.js +13 -13
  366. package/dist/src/services/InstanceConnectionPool.js.map +1 -1
  367. package/dist/src/services/InstanceRateLimiter.js +6 -6
  368. package/dist/src/services/InstanceRateLimiter.js.map +1 -1
  369. package/dist/src/services/InstanceRegistry.d.ts +4 -4
  370. package/dist/src/services/InstanceRegistry.js +23 -23
  371. package/dist/src/services/InstanceRegistry.js.map +1 -1
  372. package/dist/src/services/NamespaceTierDetector.d.ts +2 -2
  373. package/dist/src/services/NamespaceTierDetector.js +30 -30
  374. package/dist/src/services/NamespaceTierDetector.js.map +1 -1
  375. package/dist/src/services/SchemaIntrospector.d.ts +1 -1
  376. package/dist/src/services/SchemaIntrospector.js +42 -42
  377. package/dist/src/services/SchemaIntrospector.js.map +1 -1
  378. package/dist/src/services/TokenScopeDetector.d.ts +2 -2
  379. package/dist/src/services/TokenScopeDetector.js +80 -80
  380. package/dist/src/services/TokenScopeDetector.js.map +1 -1
  381. package/dist/src/services/ToolAvailability.d.ts +6 -6
  382. package/dist/src/services/ToolAvailability.js +122 -122
  383. package/dist/src/services/ToolAvailability.js.map +1 -1
  384. package/dist/src/services/WidgetAvailability.d.ts +2 -2
  385. package/dist/src/services/WidgetAvailability.js +34 -34
  386. package/dist/src/session-manager.d.ts +3 -2
  387. package/dist/src/session-manager.js +17 -14
  388. package/dist/src/session-manager.js.map +1 -1
  389. package/dist/src/types.js +4 -4
  390. package/dist/src/utils/description-utils.js +4 -4
  391. package/dist/src/utils/description-utils.js.map +1 -1
  392. package/dist/src/utils/error-handler.d.ts +9 -9
  393. package/dist/src/utils/error-handler.js +187 -187
  394. package/dist/src/utils/error-handler.js.map +1 -1
  395. package/dist/src/utils/fetch.js +85 -85
  396. package/dist/src/utils/fetch.js.map +1 -1
  397. package/dist/src/utils/gitlab-api.d.ts +1 -1
  398. package/dist/src/utils/gitlab-api.js +24 -24
  399. package/dist/src/utils/idConversion.js +47 -47
  400. package/dist/src/utils/idConversion.js.map +1 -1
  401. package/dist/src/utils/namespace.d.ts +2 -2
  402. package/dist/src/utils/namespace.js +15 -15
  403. package/dist/src/utils/projectIdentifier.js +4 -4
  404. package/dist/src/utils/request-logger.d.ts +4 -4
  405. package/dist/src/utils/request-logger.js +5 -5
  406. package/dist/src/utils/schema-utils.js +24 -24
  407. package/dist/src/utils/schema-utils.js.map +1 -1
  408. package/dist/src/utils/smart-user-search.d.ts +1 -1
  409. package/dist/src/utils/smart-user-search.js +10 -10
  410. package/dist/src/utils/version.js +1 -1
  411. package/dist/structured-world-gitlab-mcp-6.62.2.tgz +0 -0
  412. package/dist/tsconfig.build.tsbuildinfo +1 -1
  413. package/package.json +18 -21
  414. package/dist/structured-world-gitlab-mcp-6.62.1.tgz +0 -0
@@ -47,45 +47,45 @@ const idConversion_1 = require("../../utils/idConversion");
47
47
  const config_1 = require("../../config");
48
48
  exports.coreToolRegistry = new Map([
49
49
  [
50
- "browse_projects",
50
+ 'browse_projects',
51
51
  {
52
- name: "browse_projects",
53
- description: "Find, list, or inspect GitLab projects. Actions: search (find by name/topic across GitLab), list (browse accessible projects or group projects), get (retrieve full project details). Related: manage_project to create/update/delete projects.",
52
+ name: 'browse_projects',
53
+ description: 'Find, list, or inspect GitLab projects. Actions: search (find by name/topic across GitLab), list (browse accessible projects or group projects), get (retrieve full project details). Related: manage_project to create/update/delete projects.',
54
54
  inputSchema: z.toJSONSchema(schema_readonly_1.BrowseProjectsSchema),
55
55
  handler: async (args) => {
56
56
  const input = schema_readonly_1.BrowseProjectsSchema.parse(args);
57
- if ((0, config_1.isActionDenied)("browse_projects", input.action)) {
57
+ if ((0, config_1.isActionDenied)('browse_projects', input.action)) {
58
58
  throw new Error(`Action '${input.action}' is not allowed for browse_projects tool`);
59
59
  }
60
60
  switch (input.action) {
61
- case "search": {
61
+ case 'search': {
62
62
  const { q, with_programming_language, visibility, order_by, sort, per_page, page } = input;
63
63
  const queryParams = new URLSearchParams();
64
64
  if (q) {
65
65
  let finalSearchTerms = q;
66
66
  const topicMatches = q.match(/topic:(\w+)/g);
67
67
  if (topicMatches) {
68
- const topics = topicMatches.map(match => match.replace("topic:", ""));
69
- queryParams.set("topic", topics.join(","));
70
- finalSearchTerms = finalSearchTerms.replace(/topic:\w+/g, "").trim();
68
+ const topics = topicMatches.map((match) => match.replace('topic:', ''));
69
+ queryParams.set('topic', topics.join(','));
70
+ finalSearchTerms = finalSearchTerms.replace(/topic:\w+/g, '').trim();
71
71
  }
72
72
  if (finalSearchTerms) {
73
- queryParams.set("search", finalSearchTerms);
73
+ queryParams.set('search', finalSearchTerms);
74
74
  }
75
75
  }
76
76
  if (with_programming_language)
77
- queryParams.set("with_programming_language", with_programming_language);
77
+ queryParams.set('with_programming_language', with_programming_language);
78
78
  if (visibility)
79
- queryParams.set("visibility", visibility);
79
+ queryParams.set('visibility', visibility);
80
80
  if (order_by)
81
- queryParams.set("order_by", order_by);
81
+ queryParams.set('order_by', order_by);
82
82
  if (sort)
83
- queryParams.set("sort", sort);
83
+ queryParams.set('sort', sort);
84
84
  if (per_page)
85
- queryParams.set("per_page", String(per_page));
85
+ queryParams.set('per_page', String(per_page));
86
86
  if (page)
87
- queryParams.set("page", String(page));
88
- queryParams.set("active", "true");
87
+ queryParams.set('page', String(page));
88
+ queryParams.set('active', 'true');
89
89
  const apiUrl = `${process.env.GITLAB_API_URL}/api/v4/projects?${queryParams}`;
90
90
  const response = await (0, fetch_1.enhancedFetch)(apiUrl);
91
91
  if (!response.ok) {
@@ -94,51 +94,51 @@ exports.coreToolRegistry = new Map([
94
94
  const projects = await response.json();
95
95
  return (0, idConversion_1.cleanGidsFromObject)(projects);
96
96
  }
97
- case "list": {
97
+ case 'list': {
98
98
  const { group_id, search, owned, starred, membership, simple, with_programming_language, include_subgroups, with_shared, visibility, archived, order_by, sort, per_page, page, } = input;
99
99
  const queryParams = new URLSearchParams();
100
100
  if (visibility)
101
- queryParams.set("visibility", visibility);
101
+ queryParams.set('visibility', visibility);
102
102
  if (archived !== undefined)
103
- queryParams.set("archived", String(archived));
103
+ queryParams.set('archived', String(archived));
104
104
  if (owned !== undefined)
105
- queryParams.set("owned", String(owned));
105
+ queryParams.set('owned', String(owned));
106
106
  if (starred !== undefined)
107
- queryParams.set("starred", String(starred));
107
+ queryParams.set('starred', String(starred));
108
108
  if (membership !== undefined)
109
- queryParams.set("membership", String(membership));
109
+ queryParams.set('membership', String(membership));
110
110
  if (search)
111
- queryParams.set("search", search);
111
+ queryParams.set('search', search);
112
112
  if (simple !== undefined)
113
- queryParams.set("simple", String(simple));
113
+ queryParams.set('simple', String(simple));
114
114
  if (order_by)
115
- queryParams.set("order_by", order_by);
115
+ queryParams.set('order_by', order_by);
116
116
  if (sort)
117
- queryParams.set("sort", sort);
117
+ queryParams.set('sort', sort);
118
118
  if (per_page)
119
- queryParams.set("per_page", String(per_page));
119
+ queryParams.set('per_page', String(per_page));
120
120
  if (page)
121
- queryParams.set("page", String(page));
121
+ queryParams.set('page', String(page));
122
122
  if (include_subgroups !== undefined)
123
- queryParams.set("include_subgroups", String(include_subgroups));
123
+ queryParams.set('include_subgroups', String(include_subgroups));
124
124
  if (with_shared !== undefined)
125
- queryParams.set("with_shared", String(with_shared));
125
+ queryParams.set('with_shared', String(with_shared));
126
126
  if (with_programming_language)
127
- queryParams.set("with_programming_language", with_programming_language);
128
- if (!queryParams.has("order_by"))
129
- queryParams.set("order_by", "created_at");
130
- if (!queryParams.has("sort"))
131
- queryParams.set("sort", "desc");
132
- if (!queryParams.has("simple"))
133
- queryParams.set("simple", "true");
134
- if (!queryParams.has("per_page"))
135
- queryParams.set("per_page", "20");
127
+ queryParams.set('with_programming_language', with_programming_language);
128
+ if (!queryParams.has('order_by'))
129
+ queryParams.set('order_by', 'created_at');
130
+ if (!queryParams.has('sort'))
131
+ queryParams.set('sort', 'desc');
132
+ if (!queryParams.has('simple'))
133
+ queryParams.set('simple', 'true');
134
+ if (!queryParams.has('per_page'))
135
+ queryParams.set('per_page', '20');
136
136
  let apiUrl;
137
137
  if (group_id) {
138
138
  apiUrl = `${process.env.GITLAB_API_URL}/api/v4/groups/${encodeURIComponent(group_id)}/projects?${queryParams}`;
139
139
  }
140
140
  else {
141
- queryParams.set("active", "true");
141
+ queryParams.set('active', 'true');
142
142
  apiUrl = `${process.env.GITLAB_API_URL}/api/v4/projects?${queryParams}`;
143
143
  }
144
144
  const response = await (0, fetch_1.enhancedFetch)(apiUrl);
@@ -148,13 +148,13 @@ exports.coreToolRegistry = new Map([
148
148
  const projects = await response.json();
149
149
  return (0, idConversion_1.cleanGidsFromObject)(projects);
150
150
  }
151
- case "get": {
151
+ case 'get': {
152
152
  const { project_id, statistics, license } = input;
153
153
  const queryParams = new URLSearchParams();
154
154
  if (statistics)
155
- queryParams.set("statistics", "true");
155
+ queryParams.set('statistics', 'true');
156
156
  if (license)
157
- queryParams.set("license", "true");
157
+ queryParams.set('license', 'true');
158
158
  const apiUrl = `${process.env.GITLAB_API_URL}/api/v4/projects/${(0, projectIdentifier_1.normalizeProjectId)(project_id)}?${queryParams}`;
159
159
  const response = await (0, fetch_1.enhancedFetch)(apiUrl);
160
160
  if (!response.ok) {
@@ -170,34 +170,34 @@ exports.coreToolRegistry = new Map([
170
170
  },
171
171
  ],
172
172
  [
173
- "browse_namespaces",
173
+ 'browse_namespaces',
174
174
  {
175
- name: "browse_namespaces",
176
- description: "Explore GitLab groups and user namespaces. Actions: list (discover available namespaces), get (retrieve details with storage stats), verify (check if path exists). Related: manage_namespace to create/update/delete groups.",
175
+ name: 'browse_namespaces',
176
+ description: 'Explore GitLab groups and user namespaces. Actions: list (discover available namespaces), get (retrieve details with storage stats), verify (check if path exists). Related: manage_namespace to create/update/delete groups.',
177
177
  inputSchema: z.toJSONSchema(schema_readonly_1.BrowseNamespacesSchema),
178
178
  handler: async (args) => {
179
179
  const input = schema_readonly_1.BrowseNamespacesSchema.parse(args);
180
- if ((0, config_1.isActionDenied)("browse_namespaces", input.action)) {
180
+ if ((0, config_1.isActionDenied)('browse_namespaces', input.action)) {
181
181
  throw new Error(`Action '${input.action}' is not allowed for browse_namespaces tool`);
182
182
  }
183
183
  switch (input.action) {
184
- case "list": {
184
+ case 'list': {
185
185
  const { search, owned_only, top_level_only, with_statistics, min_access_level, per_page, page, } = input;
186
186
  const queryParams = new URLSearchParams();
187
187
  if (search)
188
- queryParams.set("search", search);
188
+ queryParams.set('search', search);
189
189
  if (owned_only !== undefined)
190
- queryParams.set("owned_only", String(owned_only));
190
+ queryParams.set('owned_only', String(owned_only));
191
191
  if (top_level_only !== undefined)
192
- queryParams.set("top_level_only", String(top_level_only));
192
+ queryParams.set('top_level_only', String(top_level_only));
193
193
  if (with_statistics !== undefined)
194
- queryParams.set("with_statistics", String(with_statistics));
194
+ queryParams.set('with_statistics', String(with_statistics));
195
195
  if (min_access_level !== undefined)
196
- queryParams.set("min_access_level", String(min_access_level));
196
+ queryParams.set('min_access_level', String(min_access_level));
197
197
  if (per_page)
198
- queryParams.set("per_page", String(per_page));
198
+ queryParams.set('per_page', String(per_page));
199
199
  if (page)
200
- queryParams.set("page", String(page));
200
+ queryParams.set('page', String(page));
201
201
  const apiUrl = `${process.env.GITLAB_API_URL}/api/v4/namespaces?${queryParams}`;
202
202
  const response = await (0, fetch_1.enhancedFetch)(apiUrl);
203
203
  if (!response.ok) {
@@ -206,7 +206,7 @@ exports.coreToolRegistry = new Map([
206
206
  const namespaces = await response.json();
207
207
  return (0, idConversion_1.cleanGidsFromObject)(namespaces);
208
208
  }
209
- case "get": {
209
+ case 'get': {
210
210
  const { namespace_id } = input;
211
211
  const apiUrl = `${process.env.GITLAB_API_URL}/api/v4/namespaces/${encodeURIComponent(namespace_id)}`;
212
212
  const response = await (0, fetch_1.enhancedFetch)(apiUrl);
@@ -216,7 +216,7 @@ exports.coreToolRegistry = new Map([
216
216
  const namespace = await response.json();
217
217
  return (0, idConversion_1.cleanGidsFromObject)(namespace);
218
218
  }
219
- case "verify": {
219
+ case 'verify': {
220
220
  const { namespace_id } = input;
221
221
  const apiUrl = `${process.env.GITLAB_API_URL}/api/v4/namespaces/${encodeURIComponent(namespace_id)}`;
222
222
  const response = await (0, fetch_1.enhancedFetch)(apiUrl);
@@ -234,44 +234,44 @@ exports.coreToolRegistry = new Map([
234
234
  },
235
235
  ],
236
236
  [
237
- "browse_commits",
237
+ 'browse_commits',
238
238
  {
239
- name: "browse_commits",
240
- description: "Explore repository commit history and diffs. Actions: list (browse commits with filters), get (retrieve commit metadata and stats), diff (view code changes). Related: browse_refs for branch/tag info.",
239
+ name: 'browse_commits',
240
+ description: 'Explore repository commit history and diffs. Actions: list (browse commits with filters), get (retrieve commit metadata and stats), diff (view code changes). Related: browse_refs for branch/tag info.',
241
241
  inputSchema: z.toJSONSchema(schema_readonly_1.BrowseCommitsSchema),
242
242
  handler: async (args) => {
243
243
  const input = schema_readonly_1.BrowseCommitsSchema.parse(args);
244
- if ((0, config_1.isActionDenied)("browse_commits", input.action)) {
244
+ if ((0, config_1.isActionDenied)('browse_commits', input.action)) {
245
245
  throw new Error(`Action '${input.action}' is not allowed for browse_commits tool`);
246
246
  }
247
247
  switch (input.action) {
248
- case "list": {
248
+ case 'list': {
249
249
  const { project_id, ref_name, since, until, path, author, all, with_stats, first_parent, order, trailers, per_page, page, } = input;
250
250
  const queryParams = new URLSearchParams();
251
251
  if (ref_name)
252
- queryParams.set("ref_name", ref_name);
252
+ queryParams.set('ref_name', ref_name);
253
253
  if (since)
254
- queryParams.set("since", since);
254
+ queryParams.set('since', since);
255
255
  if (until)
256
- queryParams.set("until", until);
256
+ queryParams.set('until', until);
257
257
  if (path)
258
- queryParams.set("path", path);
258
+ queryParams.set('path', path);
259
259
  if (author)
260
- queryParams.set("author", author);
260
+ queryParams.set('author', author);
261
261
  if (all !== undefined)
262
- queryParams.set("all", String(all));
262
+ queryParams.set('all', String(all));
263
263
  if (with_stats !== undefined)
264
- queryParams.set("with_stats", String(with_stats));
264
+ queryParams.set('with_stats', String(with_stats));
265
265
  if (first_parent !== undefined)
266
- queryParams.set("first_parent", String(first_parent));
266
+ queryParams.set('first_parent', String(first_parent));
267
267
  if (order)
268
- queryParams.set("order", order);
268
+ queryParams.set('order', order);
269
269
  if (trailers !== undefined)
270
- queryParams.set("trailers", String(trailers));
270
+ queryParams.set('trailers', String(trailers));
271
271
  if (per_page)
272
- queryParams.set("per_page", String(per_page));
272
+ queryParams.set('per_page', String(per_page));
273
273
  if (page)
274
- queryParams.set("page", String(page));
274
+ queryParams.set('page', String(page));
275
275
  const apiUrl = `${process.env.GITLAB_API_URL}/api/v4/projects/${encodeURIComponent(project_id)}/repository/commits?${queryParams}`;
276
276
  const response = await (0, fetch_1.enhancedFetch)(apiUrl);
277
277
  if (!response.ok) {
@@ -279,11 +279,11 @@ exports.coreToolRegistry = new Map([
279
279
  }
280
280
  return await response.json();
281
281
  }
282
- case "get": {
282
+ case 'get': {
283
283
  const { project_id, sha, stats } = input;
284
284
  const queryParams = new URLSearchParams();
285
285
  if (stats)
286
- queryParams.set("stats", "true");
286
+ queryParams.set('stats', 'true');
287
287
  const apiUrl = `${process.env.GITLAB_API_URL}/api/v4/projects/${encodeURIComponent(project_id)}/repository/commits/${encodeURIComponent(sha)}?${queryParams}`;
288
288
  const response = await (0, fetch_1.enhancedFetch)(apiUrl);
289
289
  if (!response.ok) {
@@ -291,15 +291,15 @@ exports.coreToolRegistry = new Map([
291
291
  }
292
292
  return await response.json();
293
293
  }
294
- case "diff": {
294
+ case 'diff': {
295
295
  const { project_id, sha, unidiff, per_page, page } = input;
296
296
  const queryParams = new URLSearchParams();
297
297
  if (unidiff)
298
- queryParams.set("unidiff", "true");
298
+ queryParams.set('unidiff', 'true');
299
299
  if (per_page)
300
- queryParams.set("per_page", String(per_page));
300
+ queryParams.set('per_page', String(per_page));
301
301
  if (page)
302
- queryParams.set("page", String(page));
302
+ queryParams.set('page', String(page));
303
303
  const apiUrl = `${process.env.GITLAB_API_URL}/api/v4/projects/${encodeURIComponent(project_id)}/repository/commits/${encodeURIComponent(sha)}/diff?${queryParams}`;
304
304
  const response = await (0, fetch_1.enhancedFetch)(apiUrl);
305
305
  if (!response.ok) {
@@ -314,36 +314,36 @@ exports.coreToolRegistry = new Map([
314
314
  },
315
315
  ],
316
316
  [
317
- "browse_events",
317
+ 'browse_events',
318
318
  {
319
- name: "browse_events",
320
- description: "Track GitLab activity and events. Actions: user (your activity across all projects), project (specific project activity feed). Filter by date range, action type, or target type.",
319
+ name: 'browse_events',
320
+ description: 'Track GitLab activity and events. Actions: user (your activity across all projects), project (specific project activity feed). Filter by date range, action type, or target type.',
321
321
  inputSchema: z.toJSONSchema(schema_readonly_1.BrowseEventsSchema),
322
322
  handler: async (args) => {
323
323
  const input = schema_readonly_1.BrowseEventsSchema.parse(args);
324
- if ((0, config_1.isActionDenied)("browse_events", input.action)) {
324
+ if ((0, config_1.isActionDenied)('browse_events', input.action)) {
325
325
  throw new Error(`Action '${input.action}' is not allowed for browse_events tool`);
326
326
  }
327
327
  const buildQueryParams = (opts) => {
328
328
  const queryParams = new URLSearchParams();
329
329
  if (opts.target_type)
330
- queryParams.set("target_type", opts.target_type);
330
+ queryParams.set('target_type', opts.target_type);
331
331
  if (opts.event_action)
332
- queryParams.set("action", opts.event_action);
332
+ queryParams.set('action', opts.event_action);
333
333
  if (opts.before)
334
- queryParams.set("before", opts.before);
334
+ queryParams.set('before', opts.before);
335
335
  if (opts.after)
336
- queryParams.set("after", opts.after);
336
+ queryParams.set('after', opts.after);
337
337
  if (opts.sort)
338
- queryParams.set("sort", opts.sort);
338
+ queryParams.set('sort', opts.sort);
339
339
  if (opts.per_page)
340
- queryParams.set("per_page", String(opts.per_page));
340
+ queryParams.set('per_page', String(opts.per_page));
341
341
  if (opts.page)
342
- queryParams.set("page", String(opts.page));
342
+ queryParams.set('page', String(opts.page));
343
343
  return queryParams;
344
344
  };
345
345
  switch (input.action) {
346
- case "user": {
346
+ case 'user': {
347
347
  const queryParams = buildQueryParams(input);
348
348
  const apiUrl = `${process.env.GITLAB_API_URL}/api/v4/events?${queryParams}`;
349
349
  const response = await (0, fetch_1.enhancedFetch)(apiUrl);
@@ -352,7 +352,7 @@ exports.coreToolRegistry = new Map([
352
352
  }
353
353
  return await response.json();
354
354
  }
355
- case "project": {
355
+ case 'project': {
356
356
  const { project_id } = input;
357
357
  const queryParams = buildQueryParams(input);
358
358
  const apiUrl = `${process.env.GITLAB_API_URL}/api/v4/projects/${encodeURIComponent(project_id)}/events?${queryParams}`;
@@ -369,27 +369,27 @@ exports.coreToolRegistry = new Map([
369
369
  },
370
370
  ],
371
371
  [
372
- "browse_users",
372
+ 'browse_users',
373
373
  {
374
- name: "browse_users",
375
- description: "Find GitLab users with smart pattern detection. Actions: search (find users by name/email/username with transliteration support), get (retrieve specific user by ID). Related: browse_members for project/group membership.",
374
+ name: 'browse_users',
375
+ description: 'Find GitLab users with smart pattern detection. Actions: search (find users by name/email/username with transliteration support), get (retrieve specific user by ID). Related: browse_members for project/group membership.',
376
376
  inputSchema: z.toJSONSchema(schema_readonly_1.BrowseUsersSchema),
377
377
  handler: async (args) => {
378
378
  const input = schema_readonly_1.BrowseUsersSchema.parse(args);
379
- if ((0, config_1.isActionDenied)("browse_users", input.action)) {
379
+ if ((0, config_1.isActionDenied)('browse_users', input.action)) {
380
380
  throw new Error(`Action '${input.action}' is not allowed for browse_users tool`);
381
381
  }
382
382
  switch (input.action) {
383
- case "search": {
383
+ case 'search': {
384
384
  const { smart_search, search, username, public_email, ...otherParams } = input;
385
385
  const hasUsernameOrEmail = Boolean(username) || Boolean(public_email);
386
386
  const hasOnlySearch = Boolean(search) && !hasUsernameOrEmail;
387
387
  const shouldUseSmartSearch = smart_search === false ? false : smart_search === true || hasOnlySearch;
388
388
  if (shouldUseSmartSearch && (search || username || public_email)) {
389
- const query = search ?? username ?? public_email ?? "";
389
+ const query = search ?? username ?? public_email ?? '';
390
390
  const additionalParams = {};
391
391
  Object.entries(otherParams).forEach(([key, value]) => {
392
- if (value !== undefined && key !== "smart_search" && key !== "action") {
392
+ if (value !== undefined && key !== 'smart_search' && key !== 'action') {
393
393
  additionalParams[key] = value;
394
394
  }
395
395
  });
@@ -398,7 +398,7 @@ exports.coreToolRegistry = new Map([
398
398
  else {
399
399
  const queryParams = new URLSearchParams();
400
400
  Object.entries(input).forEach(([key, value]) => {
401
- if (value !== undefined && key !== "smart_search" && key !== "action") {
401
+ if (value !== undefined && key !== 'smart_search' && key !== 'action') {
402
402
  queryParams.set(key, String(value));
403
403
  }
404
404
  });
@@ -411,7 +411,7 @@ exports.coreToolRegistry = new Map([
411
411
  return (0, idConversion_1.cleanGidsFromObject)(users);
412
412
  }
413
413
  }
414
- case "get": {
414
+ case 'get': {
415
415
  const { user_id } = input;
416
416
  const apiUrl = `${process.env.GITLAB_API_URL}/api/v4/users/${encodeURIComponent(user_id)}`;
417
417
  const response = await (0, fetch_1.enhancedFetch)(apiUrl);
@@ -428,22 +428,22 @@ exports.coreToolRegistry = new Map([
428
428
  },
429
429
  ],
430
430
  [
431
- "browse_todos",
431
+ 'browse_todos',
432
432
  {
433
- name: "browse_todos",
434
- description: "View your GitLab todo queue (notifications requiring action). Actions: list (filter by state, action type, target type). Todos are auto-created for assignments, mentions, reviews, and pipeline failures. Related: manage_todos to mark done/restore.",
433
+ name: 'browse_todos',
434
+ description: 'View your GitLab todo queue (notifications requiring action). Actions: list (filter by state, action type, target type). Todos are auto-created for assignments, mentions, reviews, and pipeline failures. Related: manage_todos to mark done/restore.',
435
435
  inputSchema: z.toJSONSchema(schema_readonly_1.BrowseTodosSchema),
436
436
  handler: async (args) => {
437
437
  const input = schema_readonly_1.BrowseTodosSchema.parse(args);
438
- if ((0, config_1.isActionDenied)("browse_todos", input.action)) {
438
+ if ((0, config_1.isActionDenied)('browse_todos', input.action)) {
439
439
  throw new Error(`Action '${input.action}' is not allowed for browse_todos tool`);
440
440
  }
441
441
  switch (input.action) {
442
- case "list": {
442
+ case 'list': {
443
443
  const queryParams = new URLSearchParams();
444
444
  const { action: _action, todo_action, ...rest } = input;
445
445
  if (todo_action)
446
- queryParams.set("action", todo_action);
446
+ queryParams.set('action', todo_action);
447
447
  Object.entries(rest).forEach(([key, value]) => {
448
448
  if (value !== undefined) {
449
449
  queryParams.set(key, String(value));
@@ -464,18 +464,18 @@ exports.coreToolRegistry = new Map([
464
464
  },
465
465
  ],
466
466
  [
467
- "manage_project",
467
+ 'manage_project',
468
468
  {
469
- name: "manage_project",
470
- description: "Create, update, or manage GitLab projects. Actions: create (new project with settings), fork (copy existing project), update (modify settings), delete (remove permanently), archive/unarchive (toggle read-only), transfer (move to different namespace). Related: browse_projects for discovery.",
469
+ name: 'manage_project',
470
+ description: 'Create, update, or manage GitLab projects. Actions: create (new project with settings), fork (copy existing project), update (modify settings), delete (remove permanently), archive/unarchive (toggle read-only), transfer (move to different namespace). Related: browse_projects for discovery.',
471
471
  inputSchema: z.toJSONSchema(schema_1.ManageProjectSchema),
472
472
  handler: async (args) => {
473
473
  const input = schema_1.ManageProjectSchema.parse(args);
474
- if ((0, config_1.isActionDenied)("manage_project", input.action)) {
474
+ if ((0, config_1.isActionDenied)('manage_project', input.action)) {
475
475
  throw new Error(`Action '${input.action}' is not allowed for manage_project tool`);
476
476
  }
477
477
  switch (input.action) {
478
- case "create": {
478
+ case 'create': {
479
479
  const { name, namespace, description, visibility, initialize_with_readme, issues_enabled, merge_requests_enabled, jobs_enabled, wiki_enabled, snippets_enabled, lfs_enabled, request_access_enabled, only_allow_merge_if_pipeline_succeeds, only_allow_merge_if_all_discussions_are_resolved, } = input;
480
480
  let namespaceId;
481
481
  let resolvedNamespace = null;
@@ -492,7 +492,7 @@ exports.coreToolRegistry = new Map([
492
492
  }
493
493
  const targetNamespacePath = resolvedNamespace
494
494
  ? resolvedNamespace.full_path
495
- : "current-user";
495
+ : 'current-user';
496
496
  const projectPath = `${targetNamespacePath}/${name}`;
497
497
  const checkProjectUrl = `${process.env.GITLAB_API_URL}/api/v4/projects/${encodeURIComponent(projectPath)}`;
498
498
  const checkResponse = await (0, fetch_1.enhancedFetch)(checkProjectUrl);
@@ -501,43 +501,43 @@ exports.coreToolRegistry = new Map([
501
501
  throw new Error(`Project '${projectPath}' already exists (ID: ${existingProject.id}).`);
502
502
  }
503
503
  const body = new URLSearchParams();
504
- body.set("name", name);
504
+ body.set('name', name);
505
505
  const generatedPath = name
506
506
  .toLowerCase()
507
- .replace(/[^a-z0-9-]/g, "-")
508
- .replace(/-+/g, "-")
509
- .replace(/^-|-$/g, "");
510
- body.set("path", generatedPath);
507
+ .replace(/[^a-z0-9-]/g, '-')
508
+ .replace(/-+/g, '-')
509
+ .replace(/^-|-$/g, '');
510
+ body.set('path', generatedPath);
511
511
  if (namespaceId)
512
- body.set("namespace_id", namespaceId);
512
+ body.set('namespace_id', namespaceId);
513
513
  if (description)
514
- body.set("description", description);
514
+ body.set('description', description);
515
515
  if (visibility)
516
- body.set("visibility", visibility);
516
+ body.set('visibility', visibility);
517
517
  if (initialize_with_readme)
518
- body.set("initialize_with_readme", "true");
518
+ body.set('initialize_with_readme', 'true');
519
519
  if (issues_enabled !== undefined)
520
- body.set("issues_enabled", String(issues_enabled));
520
+ body.set('issues_enabled', String(issues_enabled));
521
521
  if (merge_requests_enabled !== undefined)
522
- body.set("merge_requests_enabled", String(merge_requests_enabled));
522
+ body.set('merge_requests_enabled', String(merge_requests_enabled));
523
523
  if (jobs_enabled !== undefined)
524
- body.set("jobs_enabled", String(jobs_enabled));
524
+ body.set('jobs_enabled', String(jobs_enabled));
525
525
  if (wiki_enabled !== undefined)
526
- body.set("wiki_enabled", String(wiki_enabled));
526
+ body.set('wiki_enabled', String(wiki_enabled));
527
527
  if (snippets_enabled !== undefined)
528
- body.set("snippets_enabled", String(snippets_enabled));
528
+ body.set('snippets_enabled', String(snippets_enabled));
529
529
  if (lfs_enabled !== undefined)
530
- body.set("lfs_enabled", String(lfs_enabled));
530
+ body.set('lfs_enabled', String(lfs_enabled));
531
531
  if (request_access_enabled !== undefined)
532
- body.set("request_access_enabled", String(request_access_enabled));
532
+ body.set('request_access_enabled', String(request_access_enabled));
533
533
  if (only_allow_merge_if_pipeline_succeeds !== undefined)
534
- body.set("only_allow_merge_if_pipeline_succeeds", String(only_allow_merge_if_pipeline_succeeds));
534
+ body.set('only_allow_merge_if_pipeline_succeeds', String(only_allow_merge_if_pipeline_succeeds));
535
535
  if (only_allow_merge_if_all_discussions_are_resolved !== undefined)
536
- body.set("only_allow_merge_if_all_discussions_are_resolved", String(only_allow_merge_if_all_discussions_are_resolved));
536
+ body.set('only_allow_merge_if_all_discussions_are_resolved', String(only_allow_merge_if_all_discussions_are_resolved));
537
537
  const createApiUrl = `${process.env.GITLAB_API_URL}/api/v4/projects`;
538
538
  const createResponse = await (0, fetch_1.enhancedFetch)(createApiUrl, {
539
- method: "POST",
540
- headers: { "Content-Type": "application/x-www-form-urlencoded" },
539
+ method: 'POST',
540
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
541
541
  body: body.toString(),
542
542
  });
543
543
  if (!createResponse.ok) {
@@ -547,26 +547,26 @@ exports.coreToolRegistry = new Map([
547
547
  return {
548
548
  ...project,
549
549
  validation: {
550
- namespace_resolved: namespace ? `${namespace} -> ${namespaceId}` : "current-user",
550
+ namespace_resolved: namespace ? `${namespace} -> ${namespaceId}` : 'current-user',
551
551
  generated_path: generatedPath,
552
552
  },
553
553
  };
554
554
  }
555
- case "fork": {
555
+ case 'fork': {
556
556
  const { project_id, namespace, namespace_path, fork_name, fork_path } = input;
557
557
  const body = new URLSearchParams();
558
558
  if (namespace)
559
- body.set("namespace", namespace);
559
+ body.set('namespace', namespace);
560
560
  if (namespace_path)
561
- body.set("namespace_path", namespace_path);
561
+ body.set('namespace_path', namespace_path);
562
562
  if (fork_name)
563
- body.set("name", fork_name);
563
+ body.set('name', fork_name);
564
564
  if (fork_path)
565
- body.set("path", fork_path);
565
+ body.set('path', fork_path);
566
566
  const apiUrl = `${process.env.GITLAB_API_URL}/api/v4/projects/${encodeURIComponent(project_id)}/fork`;
567
567
  const response = await (0, fetch_1.enhancedFetch)(apiUrl, {
568
- method: "POST",
569
- headers: { "Content-Type": "application/x-www-form-urlencoded" },
568
+ method: 'POST',
569
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
570
570
  body: body.toString(),
571
571
  });
572
572
  if (!response.ok) {
@@ -574,7 +574,7 @@ exports.coreToolRegistry = new Map([
574
574
  }
575
575
  return await response.json();
576
576
  }
577
- case "update": {
577
+ case 'update': {
578
578
  const { project_id, action: _action, ...updateParams } = input;
579
579
  const body = new URLSearchParams();
580
580
  Object.entries(updateParams).forEach(([key, value]) => {
@@ -584,8 +584,8 @@ exports.coreToolRegistry = new Map([
584
584
  });
585
585
  const apiUrl = `${process.env.GITLAB_API_URL}/api/v4/projects/${(0, projectIdentifier_1.normalizeProjectId)(project_id)}`;
586
586
  const response = await (0, fetch_1.enhancedFetch)(apiUrl, {
587
- method: "PUT",
588
- headers: { "Content-Type": "application/x-www-form-urlencoded" },
587
+ method: 'PUT',
588
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
589
589
  body: body.toString(),
590
590
  });
591
591
  if (!response.ok) {
@@ -593,41 +593,41 @@ exports.coreToolRegistry = new Map([
593
593
  }
594
594
  return await response.json();
595
595
  }
596
- case "delete": {
596
+ case 'delete': {
597
597
  const { project_id } = input;
598
598
  const apiUrl = `${process.env.GITLAB_API_URL}/api/v4/projects/${(0, projectIdentifier_1.normalizeProjectId)(project_id)}`;
599
- const response = await (0, fetch_1.enhancedFetch)(apiUrl, { method: "DELETE" });
599
+ const response = await (0, fetch_1.enhancedFetch)(apiUrl, { method: 'DELETE' });
600
600
  if (!response.ok) {
601
601
  throw new Error(`GitLab API error: ${response.status} ${response.statusText}`);
602
602
  }
603
603
  return { success: true, message: `Project ${project_id} deleted` };
604
604
  }
605
- case "archive": {
605
+ case 'archive': {
606
606
  const { project_id } = input;
607
607
  const apiUrl = `${process.env.GITLAB_API_URL}/api/v4/projects/${(0, projectIdentifier_1.normalizeProjectId)(project_id)}/archive`;
608
- const response = await (0, fetch_1.enhancedFetch)(apiUrl, { method: "POST" });
608
+ const response = await (0, fetch_1.enhancedFetch)(apiUrl, { method: 'POST' });
609
609
  if (!response.ok) {
610
610
  throw new Error(`GitLab API error: ${response.status} ${response.statusText}`);
611
611
  }
612
612
  return await response.json();
613
613
  }
614
- case "unarchive": {
614
+ case 'unarchive': {
615
615
  const { project_id } = input;
616
616
  const apiUrl = `${process.env.GITLAB_API_URL}/api/v4/projects/${(0, projectIdentifier_1.normalizeProjectId)(project_id)}/unarchive`;
617
- const response = await (0, fetch_1.enhancedFetch)(apiUrl, { method: "POST" });
617
+ const response = await (0, fetch_1.enhancedFetch)(apiUrl, { method: 'POST' });
618
618
  if (!response.ok) {
619
619
  throw new Error(`GitLab API error: ${response.status} ${response.statusText}`);
620
620
  }
621
621
  return await response.json();
622
622
  }
623
- case "transfer": {
623
+ case 'transfer': {
624
624
  const { project_id, namespace } = input;
625
625
  const body = new URLSearchParams();
626
- body.set("namespace", namespace);
626
+ body.set('namespace', namespace);
627
627
  const apiUrl = `${process.env.GITLAB_API_URL}/api/v4/projects/${(0, projectIdentifier_1.normalizeProjectId)(project_id)}/transfer`;
628
628
  const response = await (0, fetch_1.enhancedFetch)(apiUrl, {
629
- method: "PUT",
630
- headers: { "Content-Type": "application/x-www-form-urlencoded" },
629
+ method: 'PUT',
630
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
631
631
  body: body.toString(),
632
632
  });
633
633
  if (!response.ok) {
@@ -642,39 +642,39 @@ exports.coreToolRegistry = new Map([
642
642
  },
643
643
  ],
644
644
  [
645
- "manage_namespace",
645
+ 'manage_namespace',
646
646
  {
647
- name: "manage_namespace",
648
- description: "Create, update, or delete GitLab groups/namespaces. Actions: create (new group with visibility/settings), update (modify group settings), delete (remove permanently). Related: browse_namespaces for discovery.",
647
+ name: 'manage_namespace',
648
+ description: 'Create, update, or delete GitLab groups/namespaces. Actions: create (new group with visibility/settings), update (modify group settings), delete (remove permanently). Related: browse_namespaces for discovery.',
649
649
  inputSchema: z.toJSONSchema(schema_1.ManageNamespaceSchema),
650
650
  handler: async (args) => {
651
651
  const input = schema_1.ManageNamespaceSchema.parse(args);
652
- if ((0, config_1.isActionDenied)("manage_namespace", input.action)) {
652
+ if ((0, config_1.isActionDenied)('manage_namespace', input.action)) {
653
653
  throw new Error(`Action '${input.action}' is not allowed for manage_namespace tool`);
654
654
  }
655
655
  switch (input.action) {
656
- case "create": {
656
+ case 'create': {
657
657
  const body = new URLSearchParams();
658
- body.set("name", input.name);
659
- body.set("path", input.path);
658
+ body.set('name', input.name);
659
+ body.set('path', input.path);
660
660
  if (input.description)
661
- body.set("description", input.description);
661
+ body.set('description', input.description);
662
662
  if (input.visibility)
663
- body.set("visibility", input.visibility);
663
+ body.set('visibility', input.visibility);
664
664
  if (input.parent_id !== undefined)
665
- body.set("parent_id", String(input.parent_id));
665
+ body.set('parent_id', String(input.parent_id));
666
666
  if (input.lfs_enabled !== undefined)
667
- body.set("lfs_enabled", String(input.lfs_enabled));
667
+ body.set('lfs_enabled', String(input.lfs_enabled));
668
668
  if (input.request_access_enabled !== undefined)
669
- body.set("request_access_enabled", String(input.request_access_enabled));
669
+ body.set('request_access_enabled', String(input.request_access_enabled));
670
670
  if (input.default_branch_protection !== undefined)
671
- body.set("default_branch_protection", String(input.default_branch_protection));
671
+ body.set('default_branch_protection', String(input.default_branch_protection));
672
672
  if (input.avatar)
673
- body.set("avatar", input.avatar);
673
+ body.set('avatar', input.avatar);
674
674
  const apiUrl = `${process.env.GITLAB_API_URL}/api/v4/groups`;
675
675
  const response = await (0, fetch_1.enhancedFetch)(apiUrl, {
676
- method: "POST",
677
- headers: { "Content-Type": "application/x-www-form-urlencoded" },
676
+ method: 'POST',
677
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
678
678
  body: body.toString(),
679
679
  });
680
680
  if (!response.ok) {
@@ -682,7 +682,7 @@ exports.coreToolRegistry = new Map([
682
682
  }
683
683
  return await response.json();
684
684
  }
685
- case "update": {
685
+ case 'update': {
686
686
  const { group_id, action: _action, ...updateParams } = input;
687
687
  const body = new URLSearchParams();
688
688
  Object.entries(updateParams).forEach(([key, value]) => {
@@ -692,8 +692,8 @@ exports.coreToolRegistry = new Map([
692
692
  });
693
693
  const apiUrl = `${process.env.GITLAB_API_URL}/api/v4/groups/${encodeURIComponent(group_id)}`;
694
694
  const response = await (0, fetch_1.enhancedFetch)(apiUrl, {
695
- method: "PUT",
696
- headers: { "Content-Type": "application/x-www-form-urlencoded" },
695
+ method: 'PUT',
696
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
697
697
  body: body.toString(),
698
698
  });
699
699
  if (!response.ok) {
@@ -701,10 +701,10 @@ exports.coreToolRegistry = new Map([
701
701
  }
702
702
  return await response.json();
703
703
  }
704
- case "delete": {
704
+ case 'delete': {
705
705
  const { group_id } = input;
706
706
  const apiUrl = `${process.env.GITLAB_API_URL}/api/v4/groups/${encodeURIComponent(group_id)}`;
707
- const response = await (0, fetch_1.enhancedFetch)(apiUrl, { method: "DELETE" });
707
+ const response = await (0, fetch_1.enhancedFetch)(apiUrl, { method: 'DELETE' });
708
708
  if (!response.ok) {
709
709
  throw new Error(`GitLab API error: ${response.status} ${response.statusText}`);
710
710
  }
@@ -717,37 +717,37 @@ exports.coreToolRegistry = new Map([
717
717
  },
718
718
  ],
719
719
  [
720
- "manage_todos",
720
+ 'manage_todos',
721
721
  {
722
- name: "manage_todos",
723
- description: "Manage your GitLab todo queue. Actions: mark_done (complete a single todo), mark_all_done (clear entire queue), restore (undo completion). Related: browse_todos to view your todo list.",
722
+ name: 'manage_todos',
723
+ description: 'Manage your GitLab todo queue. Actions: mark_done (complete a single todo), mark_all_done (clear entire queue), restore (undo completion). Related: browse_todos to view your todo list.',
724
724
  inputSchema: z.toJSONSchema(schema_1.ManageTodosSchema),
725
725
  handler: async (args) => {
726
726
  const input = schema_1.ManageTodosSchema.parse(args);
727
- if ((0, config_1.isActionDenied)("manage_todos", input.action)) {
727
+ if ((0, config_1.isActionDenied)('manage_todos', input.action)) {
728
728
  throw new Error(`Action '${input.action}' is not allowed for manage_todos tool`);
729
729
  }
730
730
  switch (input.action) {
731
- case "mark_done": {
731
+ case 'mark_done': {
732
732
  const apiUrl = `${process.env.GITLAB_API_URL}/api/v4/todos/${input.id}/mark_as_done`;
733
- const response = await (0, fetch_1.enhancedFetch)(apiUrl, { method: "POST" });
733
+ const response = await (0, fetch_1.enhancedFetch)(apiUrl, { method: 'POST' });
734
734
  if (!response.ok) {
735
735
  throw new Error(`GitLab API error: ${response.status} ${response.statusText}`);
736
736
  }
737
737
  const todo = await response.json();
738
738
  return (0, idConversion_1.cleanGidsFromObject)(todo);
739
739
  }
740
- case "mark_all_done": {
740
+ case 'mark_all_done': {
741
741
  const apiUrl = `${process.env.GITLAB_API_URL}/api/v4/todos/mark_all_as_done`;
742
- const response = await (0, fetch_1.enhancedFetch)(apiUrl, { method: "POST" });
742
+ const response = await (0, fetch_1.enhancedFetch)(apiUrl, { method: 'POST' });
743
743
  if (!response.ok) {
744
744
  throw new Error(`GitLab API error: ${response.status} ${response.statusText}`);
745
745
  }
746
- return { success: true, message: "All todos marked as done" };
746
+ return { success: true, message: 'All todos marked as done' };
747
747
  }
748
- case "restore": {
748
+ case 'restore': {
749
749
  const apiUrl = `${process.env.GITLAB_API_URL}/api/v4/todos/${input.id}/mark_as_pending`;
750
- const response = await (0, fetch_1.enhancedFetch)(apiUrl, { method: "POST" });
750
+ const response = await (0, fetch_1.enhancedFetch)(apiUrl, { method: 'POST' });
751
751
  if (!response.ok) {
752
752
  throw new Error(`GitLab API error: ${response.status} ${response.statusText}`);
753
753
  }
@@ -763,12 +763,12 @@ exports.coreToolRegistry = new Map([
763
763
  ]);
764
764
  function getCoreReadOnlyToolNames() {
765
765
  return [
766
- "browse_projects",
767
- "browse_namespaces",
768
- "browse_commits",
769
- "browse_events",
770
- "browse_users",
771
- "browse_todos",
766
+ 'browse_projects',
767
+ 'browse_namespaces',
768
+ 'browse_commits',
769
+ 'browse_events',
770
+ 'browse_users',
771
+ 'browse_todos',
772
772
  ];
773
773
  }
774
774
  function getCoreToolDefinitions() {
@@ -777,7 +777,7 @@ function getCoreToolDefinitions() {
777
777
  function getFilteredCoreTools(readOnlyMode = false) {
778
778
  if (readOnlyMode) {
779
779
  const readOnlyNames = getCoreReadOnlyToolNames();
780
- return Array.from(exports.coreToolRegistry.values()).filter(tool => readOnlyNames.includes(tool.name));
780
+ return Array.from(exports.coreToolRegistry.values()).filter((tool) => readOnlyNames.includes(tool.name));
781
781
  }
782
782
  return getCoreToolDefinitions();
783
783
  }