@structured-world/gitlab-mcp 6.62.1 → 7.0.1

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 (435) hide show
  1. package/README.md +22 -1
  2. package/README.md.in +21 -0
  3. package/dist/generated/prisma/client.js.map +1 -1
  4. package/dist/generated/prisma/internal/class.js +2 -2
  5. package/dist/generated/prisma/internal/class.js.map +1 -1
  6. package/dist/generated/prisma/internal/prismaNamespace.js +2 -2
  7. package/dist/generated/prisma/models/AuthCodeFlowState.d.ts +1 -2
  8. package/dist/generated/prisma/models/AuthorizationCode.d.ts +1 -2
  9. package/dist/generated/prisma/models/DeviceFlowState.d.ts +1 -2
  10. package/dist/generated/prisma/models/McpSessionMapping.d.ts +1 -2
  11. package/dist/generated/prisma/models/OAuthSession.d.ts +1 -2
  12. package/dist/src/cli/docker/container-runtime.d.ts +1 -1
  13. package/dist/src/cli/docker/container-runtime.js +14 -14
  14. package/dist/src/cli/docker/docker-command.d.ts +1 -1
  15. package/dist/src/cli/docker/docker-command.js +113 -113
  16. package/dist/src/cli/docker/docker-command.js.map +1 -1
  17. package/dist/src/cli/docker/docker-utils.d.ts +3 -3
  18. package/dist/src/cli/docker/docker-utils.js +74 -74
  19. package/dist/src/cli/docker/docker-utils.js.map +1 -1
  20. package/dist/src/cli/docker/index.d.ts +4 -4
  21. package/dist/src/cli/docker/types.d.ts +3 -3
  22. package/dist/src/cli/docker/types.js +5 -5
  23. package/dist/src/cli/init/browser.js +2 -2
  24. package/dist/src/cli/init/config-generator.d.ts +2 -2
  25. package/dist/src/cli/init/config-generator.js +22 -22
  26. package/dist/src/cli/init/connection.d.ts +1 -1
  27. package/dist/src/cli/init/connection.js +27 -27
  28. package/dist/src/cli/init/connection.js.map +1 -1
  29. package/dist/src/cli/init/index.d.ts +4 -4
  30. package/dist/src/cli/init/types.d.ts +3 -3
  31. package/dist/src/cli/init/types.js +36 -36
  32. package/dist/src/cli/init/wizard.js +80 -80
  33. package/dist/src/cli/init/wizard.js.map +1 -1
  34. package/dist/src/cli/inject-tool-refs.js +47 -47
  35. package/dist/src/cli/inject-tool-refs.js.map +1 -1
  36. package/dist/src/cli/install/backup.d.ts +1 -1
  37. package/dist/src/cli/install/backup.js +3 -3
  38. package/dist/src/cli/install/detector.d.ts +2 -2
  39. package/dist/src/cli/install/detector.js +18 -18
  40. package/dist/src/cli/install/detector.js.map +1 -1
  41. package/dist/src/cli/install/index.d.ts +5 -5
  42. package/dist/src/cli/install/install-command.d.ts +2 -2
  43. package/dist/src/cli/install/install-command.js +68 -68
  44. package/dist/src/cli/install/install-command.js.map +1 -1
  45. package/dist/src/cli/install/installers.d.ts +2 -2
  46. package/dist/src/cli/install/installers.js +55 -55
  47. package/dist/src/cli/install/installers.js.map +1 -1
  48. package/dist/src/cli/install/types.d.ts +4 -4
  49. package/dist/src/cli/install/types.js +48 -48
  50. package/dist/src/cli/instances/index.d.ts +2 -2
  51. package/dist/src/cli/instances/instances-command.d.ts +1 -1
  52. package/dist/src/cli/instances/instances-command.js +70 -66
  53. package/dist/src/cli/instances/instances-command.js.map +1 -1
  54. package/dist/src/cli/list-tools.js +396 -396
  55. package/dist/src/cli/list-tools.js.map +1 -1
  56. package/dist/src/cli/setup/discovery.d.ts +1 -1
  57. package/dist/src/cli/setup/discovery.js +10 -10
  58. package/dist/src/cli/setup/discovery.js.map +1 -1
  59. package/dist/src/cli/setup/flows/configure-existing.d.ts +1 -1
  60. package/dist/src/cli/setup/flows/configure-existing.js +57 -57
  61. package/dist/src/cli/setup/flows/configure-existing.js.map +1 -1
  62. package/dist/src/cli/setup/flows/local-setup.d.ts +1 -1
  63. package/dist/src/cli/setup/flows/local-setup.js +51 -51
  64. package/dist/src/cli/setup/flows/local-setup.js.map +1 -1
  65. package/dist/src/cli/setup/flows/server-setup.d.ts +1 -1
  66. package/dist/src/cli/setup/flows/server-setup.js +50 -50
  67. package/dist/src/cli/setup/flows/server-setup.js.map +1 -1
  68. package/dist/src/cli/setup/flows/tool-selection.d.ts +1 -1
  69. package/dist/src/cli/setup/flows/tool-selection.js +94 -94
  70. package/dist/src/cli/setup/flows/tool-selection.js.map +1 -1
  71. package/dist/src/cli/setup/index.d.ts +4 -4
  72. package/dist/src/cli/setup/presets.d.ts +1 -1
  73. package/dist/src/cli/setup/presets.js +157 -157
  74. package/dist/src/cli/setup/presets.js.map +1 -1
  75. package/dist/src/cli/setup/types.d.ts +7 -7
  76. package/dist/src/cli/setup/wizard.d.ts +1 -1
  77. package/dist/src/cli/setup/wizard.js +25 -25
  78. package/dist/src/cli/utils/index.d.ts +1 -1
  79. package/dist/src/cli/utils/path-utils.js +3 -3
  80. package/dist/src/cli-utils.d.ts +2 -2
  81. package/dist/src/cli-utils.js +46 -46
  82. package/dist/src/config/index.d.ts +4 -4
  83. package/dist/src/config/instances-loader.d.ts +3 -3
  84. package/dist/src/config/instances-loader.js +53 -53
  85. package/dist/src/config/instances-loader.js.map +1 -1
  86. package/dist/src/config/instances-schema.d.ts +1 -1
  87. package/dist/src/config/instances-schema.js +33 -33
  88. package/dist/src/config/instances-schema.js.map +1 -1
  89. package/dist/src/config.d.ts +11 -4
  90. package/dist/src/config.js +112 -111
  91. package/dist/src/config.js.map +1 -1
  92. package/dist/src/dashboard/handler.d.ts +2 -2
  93. package/dist/src/dashboard/handler.js +7 -7
  94. package/dist/src/dashboard/html-template.d.ts +1 -1
  95. package/dist/src/dashboard/html-template.js +44 -44
  96. package/dist/src/dashboard/html-template.js.map +1 -1
  97. package/dist/src/dashboard/index.d.ts +4 -4
  98. package/dist/src/dashboard/metrics.d.ts +3 -3
  99. package/dist/src/dashboard/metrics.js +42 -42
  100. package/dist/src/discovery/auto.d.ts +3 -3
  101. package/dist/src/discovery/auto.js +28 -28
  102. package/dist/src/discovery/git-remote.d.ts +2 -2
  103. package/dist/src/discovery/git-remote.js +18 -18
  104. package/dist/src/discovery/index.d.ts +3 -3
  105. package/dist/src/discovery/profile-matcher.d.ts +2 -2
  106. package/dist/src/discovery/profile-matcher.js +8 -8
  107. package/dist/src/discovery/profile-matcher.js.map +1 -1
  108. package/dist/src/entities/context/context-manager.d.ts +3 -3
  109. package/dist/src/entities/context/context-manager.js +34 -34
  110. package/dist/src/entities/context/context-manager.js.map +1 -1
  111. package/dist/src/entities/context/handlers.d.ts +2 -2
  112. package/dist/src/entities/context/handlers.js +8 -8
  113. package/dist/src/entities/context/index.d.ts +8 -8
  114. package/dist/src/entities/context/index.js +1 -1
  115. package/dist/src/entities/context/registry.d.ts +1 -1
  116. package/dist/src/entities/context/registry.js +4 -4
  117. package/dist/src/entities/context/schema.d.ts +1 -1
  118. package/dist/src/entities/context/schema.js +19 -19
  119. package/dist/src/entities/context/types.d.ts +9 -9
  120. package/dist/src/entities/context/whoami.d.ts +1 -1
  121. package/dist/src/entities/context/whoami.js +31 -31
  122. package/dist/src/entities/context/whoami.js.map +1 -1
  123. package/dist/src/entities/core/index.d.ts +5 -5
  124. package/dist/src/entities/core/index.js +1 -1
  125. package/dist/src/entities/core/registry.d.ts +1 -1
  126. package/dist/src/entities/core/registry.js +194 -194
  127. package/dist/src/entities/core/registry.js.map +1 -1
  128. package/dist/src/entities/core/schema-readonly.d.ts +1 -1
  129. package/dist/src/entities/core/schema-readonly.js +117 -117
  130. package/dist/src/entities/core/schema.d.ts +1 -1
  131. package/dist/src/entities/core/schema.js +67 -67
  132. package/dist/src/entities/files/index.d.ts +5 -5
  133. package/dist/src/entities/files/index.js +1 -1
  134. package/dist/src/entities/files/registry.d.ts +1 -1
  135. package/dist/src/entities/files/registry.js +45 -45
  136. package/dist/src/entities/files/registry.js.map +1 -1
  137. package/dist/src/entities/files/schema-readonly.d.ts +1 -1
  138. package/dist/src/entities/files/schema-readonly.js +13 -13
  139. package/dist/src/entities/files/schema.d.ts +1 -1
  140. package/dist/src/entities/files/schema.js +29 -29
  141. package/dist/src/entities/index.d.ts +17 -17
  142. package/dist/src/entities/integrations/index.d.ts +4 -4
  143. package/dist/src/entities/integrations/registry.d.ts +1 -1
  144. package/dist/src/entities/integrations/registry.js +17 -17
  145. package/dist/src/entities/integrations/registry.js.map +1 -1
  146. package/dist/src/entities/integrations/schema-readonly.d.ts +1 -1
  147. package/dist/src/entities/integrations/schema-readonly.js +5 -5
  148. package/dist/src/entities/integrations/schema.d.ts +1 -1
  149. package/dist/src/entities/integrations/schema.js +69 -69
  150. package/dist/src/entities/iterations/index.d.ts +2 -2
  151. package/dist/src/entities/iterations/registry.d.ts +1 -1
  152. package/dist/src/entities/iterations/registry.js +13 -13
  153. package/dist/src/entities/iterations/registry.js.map +1 -1
  154. package/dist/src/entities/iterations/schema-readonly.d.ts +1 -1
  155. package/dist/src/entities/iterations/schema-readonly.js +9 -9
  156. package/dist/src/entities/labels/index.d.ts +5 -5
  157. package/dist/src/entities/labels/index.js +1 -1
  158. package/dist/src/entities/labels/registry.d.ts +1 -1
  159. package/dist/src/entities/labels/registry.js +19 -19
  160. package/dist/src/entities/labels/registry.js.map +1 -1
  161. package/dist/src/entities/labels/schema-readonly.d.ts +1 -1
  162. package/dist/src/entities/labels/schema-readonly.js +8 -8
  163. package/dist/src/entities/labels/schema.d.ts +1 -1
  164. package/dist/src/entities/labels/schema.js +11 -11
  165. package/dist/src/entities/members/index.d.ts +3 -3
  166. package/dist/src/entities/members/registry.d.ts +1 -1
  167. package/dist/src/entities/members/registry.js +26 -26
  168. package/dist/src/entities/members/registry.js.map +1 -1
  169. package/dist/src/entities/members/schema-readonly.d.ts +1 -1
  170. package/dist/src/entities/members/schema-readonly.js +32 -32
  171. package/dist/src/entities/members/schema-readonly.js.map +1 -1
  172. package/dist/src/entities/members/schema.d.ts +1 -1
  173. package/dist/src/entities/members/schema.js +28 -28
  174. package/dist/src/entities/milestones/index.d.ts +5 -5
  175. package/dist/src/entities/milestones/index.js +1 -1
  176. package/dist/src/entities/milestones/registry.d.ts +1 -1
  177. package/dist/src/entities/milestones/registry.js +25 -25
  178. package/dist/src/entities/milestones/registry.js.map +1 -1
  179. package/dist/src/entities/milestones/schema-readonly.d.ts +2 -2
  180. package/dist/src/entities/milestones/schema-readonly.js +15 -15
  181. package/dist/src/entities/milestones/schema.d.ts +1 -1
  182. package/dist/src/entities/milestones/schema.js +16 -16
  183. package/dist/src/entities/milestones/schema.js.map +1 -1
  184. package/dist/src/entities/mrs/index.d.ts +5 -5
  185. package/dist/src/entities/mrs/index.js +1 -1
  186. package/dist/src/entities/mrs/registry.d.ts +1 -1
  187. package/dist/src/entities/mrs/registry.js +102 -102
  188. package/dist/src/entities/mrs/registry.js.map +1 -1
  189. package/dist/src/entities/mrs/schema-readonly.d.ts +1 -1
  190. package/dist/src/entities/mrs/schema-readonly.js +126 -126
  191. package/dist/src/entities/mrs/schema-readonly.js.map +1 -1
  192. package/dist/src/entities/mrs/schema.d.ts +1 -1
  193. package/dist/src/entities/mrs/schema.js +111 -111
  194. package/dist/src/entities/mrs/schema.js.map +1 -1
  195. package/dist/src/entities/pipelines/index.d.ts +5 -5
  196. package/dist/src/entities/pipelines/index.js +1 -1
  197. package/dist/src/entities/pipelines/registry.d.ts +1 -1
  198. package/dist/src/entities/pipelines/registry.js +45 -45
  199. package/dist/src/entities/pipelines/registry.js.map +1 -1
  200. package/dist/src/entities/pipelines/schema-readonly.d.ts +2 -2
  201. package/dist/src/entities/pipelines/schema-readonly.js +73 -73
  202. package/dist/src/entities/pipelines/schema.d.ts +1 -1
  203. package/dist/src/entities/pipelines/schema.js +21 -21
  204. package/dist/src/entities/refs/index.d.ts +3 -3
  205. package/dist/src/entities/refs/registry.d.ts +1 -1
  206. package/dist/src/entities/refs/registry.js +31 -31
  207. package/dist/src/entities/refs/registry.js.map +1 -1
  208. package/dist/src/entities/refs/schema-readonly.d.ts +1 -1
  209. package/dist/src/entities/refs/schema-readonly.js +21 -21
  210. package/dist/src/entities/refs/schema.d.ts +1 -1
  211. package/dist/src/entities/refs/schema.js +56 -56
  212. package/dist/src/entities/releases/index.d.ts +3 -3
  213. package/dist/src/entities/releases/registry.d.ts +1 -1
  214. package/dist/src/entities/releases/registry.js +21 -21
  215. package/dist/src/entities/releases/registry.js.map +1 -1
  216. package/dist/src/entities/releases/schema-readonly.d.ts +1 -1
  217. package/dist/src/entities/releases/schema-readonly.js +13 -13
  218. package/dist/src/entities/releases/schema.d.ts +1 -1
  219. package/dist/src/entities/releases/schema.js +21 -21
  220. package/dist/src/entities/search/index.d.ts +2 -2
  221. package/dist/src/entities/search/registry.d.ts +1 -1
  222. package/dist/src/entities/search/registry.js +13 -13
  223. package/dist/src/entities/search/schema-readonly.d.ts +1 -1
  224. package/dist/src/entities/search/schema-readonly.js +23 -23
  225. package/dist/src/entities/shared.d.ts +1 -1
  226. package/dist/src/entities/shared.js +5 -5
  227. package/dist/src/entities/snippets/index.d.ts +5 -5
  228. package/dist/src/entities/snippets/index.js +1 -1
  229. package/dist/src/entities/snippets/registry.d.ts +1 -1
  230. package/dist/src/entities/snippets/registry.js +24 -24
  231. package/dist/src/entities/snippets/registry.js.map +1 -1
  232. package/dist/src/entities/snippets/schema-readonly.d.ts +1 -1
  233. package/dist/src/entities/snippets/schema-readonly.js +11 -11
  234. package/dist/src/entities/snippets/schema.d.ts +1 -1
  235. package/dist/src/entities/snippets/schema.js +27 -27
  236. package/dist/src/entities/snippets/schema.js.map +1 -1
  237. package/dist/src/entities/utils.d.ts +2 -2
  238. package/dist/src/entities/utils.js +8 -8
  239. package/dist/src/entities/utils.js.map +1 -1
  240. package/dist/src/entities/variables/index.d.ts +5 -5
  241. package/dist/src/entities/variables/index.js +1 -1
  242. package/dist/src/entities/variables/registry.d.ts +1 -1
  243. package/dist/src/entities/variables/registry.js +22 -22
  244. package/dist/src/entities/variables/registry.js.map +1 -1
  245. package/dist/src/entities/variables/schema-readonly.d.ts +1 -1
  246. package/dist/src/entities/variables/schema-readonly.js +6 -6
  247. package/dist/src/entities/variables/schema.d.ts +1 -1
  248. package/dist/src/entities/variables/schema.js +21 -21
  249. package/dist/src/entities/variables/schema.js.map +1 -1
  250. package/dist/src/entities/webhooks/index.d.ts +4 -4
  251. package/dist/src/entities/webhooks/registry.d.ts +1 -1
  252. package/dist/src/entities/webhooks/registry.js +29 -29
  253. package/dist/src/entities/webhooks/registry.js.map +1 -1
  254. package/dist/src/entities/webhooks/schema-readonly.d.ts +1 -1
  255. package/dist/src/entities/webhooks/schema-readonly.js +9 -9
  256. package/dist/src/entities/webhooks/schema.d.ts +1 -1
  257. package/dist/src/entities/webhooks/schema.js +59 -59
  258. package/dist/src/entities/wiki/index.d.ts +5 -5
  259. package/dist/src/entities/wiki/index.js +1 -1
  260. package/dist/src/entities/wiki/registry.d.ts +1 -1
  261. package/dist/src/entities/wiki/registry.js +19 -19
  262. package/dist/src/entities/wiki/registry.js.map +1 -1
  263. package/dist/src/entities/wiki/schema-readonly.d.ts +1 -1
  264. package/dist/src/entities/wiki/schema-readonly.js +6 -6
  265. package/dist/src/entities/wiki/schema.d.ts +1 -1
  266. package/dist/src/entities/wiki/schema.js +12 -12
  267. package/dist/src/entities/workitems/index.d.ts +5 -5
  268. package/dist/src/entities/workitems/index.js +1 -1
  269. package/dist/src/entities/workitems/registry.d.ts +1 -1
  270. package/dist/src/entities/workitems/registry.js +101 -101
  271. package/dist/src/entities/workitems/registry.js.map +1 -1
  272. package/dist/src/entities/workitems/schema-readonly.d.ts +1 -1
  273. package/dist/src/entities/workitems/schema-readonly.js +27 -27
  274. package/dist/src/entities/workitems/schema-readonly.js.map +1 -1
  275. package/dist/src/entities/workitems/schema.d.ts +1 -1
  276. package/dist/src/entities/workitems/schema.js +58 -58
  277. package/dist/src/graphql/DynamicWorkItemsQuery.d.ts +2 -2
  278. package/dist/src/graphql/DynamicWorkItemsQuery.js +47 -47
  279. package/dist/src/graphql/DynamicWorkItemsQuery.js.map +1 -1
  280. package/dist/src/graphql/client.d.ts +1 -1
  281. package/dist/src/graphql/client.js +4 -4
  282. package/dist/src/graphql/client.js.map +1 -1
  283. package/dist/src/graphql/index.d.ts +2 -2
  284. package/dist/src/graphql/workItems.d.ts +38 -38
  285. package/dist/src/graphql/workItems.js +30 -30
  286. package/dist/src/handlers.d.ts +2 -1
  287. package/dist/src/handlers.js +258 -86
  288. package/dist/src/handlers.js.map +1 -1
  289. package/dist/src/http-client.js +3 -3
  290. package/dist/src/logger.js +25 -25
  291. package/dist/src/logging/access-log.d.ts +2 -2
  292. package/dist/src/logging/access-log.js +25 -25
  293. package/dist/src/logging/connection-tracker.d.ts +1 -1
  294. package/dist/src/logging/connection-tracker.js +3 -3
  295. package/dist/src/logging/index.d.ts +5 -5
  296. package/dist/src/logging/request-tracker.d.ts +3 -3
  297. package/dist/src/logging/request-tracker.js +4 -4
  298. package/dist/src/logging/types.d.ts +3 -3
  299. package/dist/src/logging/types.js +1 -1
  300. package/dist/src/logging/types.js.map +1 -1
  301. package/dist/src/main.js +28 -28
  302. package/dist/src/middleware/index.d.ts +3 -2
  303. package/dist/src/middleware/index.js +3 -1
  304. package/dist/src/middleware/index.js.map +1 -1
  305. package/dist/src/middleware/oauth-auth.d.ts +1 -1
  306. package/dist/src/middleware/oauth-auth.js +17 -17
  307. package/dist/src/middleware/rate-limiter.d.ts +1 -1
  308. package/dist/src/middleware/rate-limiter.js +32 -32
  309. package/dist/src/middleware/response-write-timeout.d.ts +2 -0
  310. package/dist/src/middleware/response-write-timeout.js +62 -0
  311. package/dist/src/middleware/response-write-timeout.js.map +1 -0
  312. package/dist/src/oauth/config.d.ts +1 -1
  313. package/dist/src/oauth/config.js +18 -18
  314. package/dist/src/oauth/config.js.map +1 -1
  315. package/dist/src/oauth/endpoints/authorize.d.ts +1 -1
  316. package/dist/src/oauth/endpoints/authorize.js +32 -32
  317. package/dist/src/oauth/endpoints/callback.d.ts +1 -1
  318. package/dist/src/oauth/endpoints/callback.js +26 -26
  319. package/dist/src/oauth/endpoints/index.d.ts +5 -5
  320. package/dist/src/oauth/endpoints/metadata.d.ts +1 -1
  321. package/dist/src/oauth/endpoints/metadata.js +12 -12
  322. package/dist/src/oauth/endpoints/register.d.ts +1 -1
  323. package/dist/src/oauth/endpoints/register.js +9 -9
  324. package/dist/src/oauth/endpoints/token.d.ts +1 -1
  325. package/dist/src/oauth/endpoints/token.js +28 -28
  326. package/dist/src/oauth/gitlab-device-flow.d.ts +2 -2
  327. package/dist/src/oauth/gitlab-device-flow.js +73 -68
  328. package/dist/src/oauth/gitlab-device-flow.js.map +1 -1
  329. package/dist/src/oauth/index.d.ts +10 -10
  330. package/dist/src/oauth/session-store.d.ts +2 -2
  331. package/dist/src/oauth/session-store.js +40 -40
  332. package/dist/src/oauth/session-store.js.map +1 -1
  333. package/dist/src/oauth/storage/factory.d.ts +2 -2
  334. package/dist/src/oauth/storage/factory.js +16 -16
  335. package/dist/src/oauth/storage/file.d.ts +2 -2
  336. package/dist/src/oauth/storage/file.js +22 -22
  337. package/dist/src/oauth/storage/file.js.map +1 -1
  338. package/dist/src/oauth/storage/index.d.ts +5 -5
  339. package/dist/src/oauth/storage/memory.d.ts +2 -2
  340. package/dist/src/oauth/storage/memory.js +18 -18
  341. package/dist/src/oauth/storage/memory.js.map +1 -1
  342. package/dist/src/oauth/storage/postgresql.d.ts +2 -2
  343. package/dist/src/oauth/storage/postgresql.js +11 -11
  344. package/dist/src/oauth/storage/postgresql.js.map +1 -1
  345. package/dist/src/oauth/storage/types.d.ts +3 -3
  346. package/dist/src/oauth/token-context.d.ts +1 -1
  347. package/dist/src/oauth/token-context.js +1 -1
  348. package/dist/src/oauth/token-utils.d.ts +1 -1
  349. package/dist/src/oauth/token-utils.js +20 -20
  350. package/dist/src/oauth/types.d.ts +3 -3
  351. package/dist/src/profiles/applicator.d.ts +1 -1
  352. package/dist/src/profiles/applicator.js +48 -48
  353. package/dist/src/profiles/index.d.ts +5 -5
  354. package/dist/src/profiles/loader.d.ts +3 -3
  355. package/dist/src/profiles/loader.js +25 -25
  356. package/dist/src/profiles/loader.js.map +1 -1
  357. package/dist/src/profiles/project-loader.d.ts +1 -1
  358. package/dist/src/profiles/project-loader.js +23 -23
  359. package/dist/src/profiles/project-loader.js.map +1 -1
  360. package/dist/src/profiles/scope-enforcer.d.ts +2 -2
  361. package/dist/src/profiles/scope-enforcer.js +25 -25
  362. package/dist/src/profiles/scope-enforcer.js.map +1 -1
  363. package/dist/src/profiles/types.d.ts +2 -2
  364. package/dist/src/profiles/types.js +50 -48
  365. package/dist/src/profiles/types.js.map +1 -1
  366. package/dist/src/registry-manager.d.ts +19 -11
  367. package/dist/src/registry-manager.js +257 -172
  368. package/dist/src/registry-manager.js.map +1 -1
  369. package/dist/src/server.js +165 -149
  370. package/dist/src/server.js.map +1 -1
  371. package/dist/src/services/ConnectionManager.d.ts +33 -24
  372. package/dist/src/services/ConnectionManager.js +304 -179
  373. package/dist/src/services/ConnectionManager.js.map +1 -1
  374. package/dist/src/services/GitLabVersionDetector.d.ts +2 -2
  375. package/dist/src/services/GitLabVersionDetector.js +45 -45
  376. package/dist/src/services/GitLabVersionDetector.js.map +1 -1
  377. package/dist/src/services/HealthMonitor.d.ts +42 -0
  378. package/dist/src/services/HealthMonitor.js +544 -0
  379. package/dist/src/services/HealthMonitor.js.map +1 -0
  380. package/dist/src/services/InstanceConnectionPool.d.ts +2 -2
  381. package/dist/src/services/InstanceConnectionPool.js +13 -13
  382. package/dist/src/services/InstanceConnectionPool.js.map +1 -1
  383. package/dist/src/services/InstanceRateLimiter.js +6 -6
  384. package/dist/src/services/InstanceRateLimiter.js.map +1 -1
  385. package/dist/src/services/InstanceRegistry.d.ts +4 -5
  386. package/dist/src/services/InstanceRegistry.js +29 -41
  387. package/dist/src/services/InstanceRegistry.js.map +1 -1
  388. package/dist/src/services/NamespaceTierDetector.d.ts +2 -2
  389. package/dist/src/services/NamespaceTierDetector.js +30 -30
  390. package/dist/src/services/NamespaceTierDetector.js.map +1 -1
  391. package/dist/src/services/SchemaIntrospector.d.ts +2 -1
  392. package/dist/src/services/SchemaIntrospector.js +45 -42
  393. package/dist/src/services/SchemaIntrospector.js.map +1 -1
  394. package/dist/src/services/TokenScopeDetector.d.ts +4 -4
  395. package/dist/src/services/TokenScopeDetector.js +133 -110
  396. package/dist/src/services/TokenScopeDetector.js.map +1 -1
  397. package/dist/src/services/ToolAvailability.d.ts +15 -11
  398. package/dist/src/services/ToolAvailability.js +150 -130
  399. package/dist/src/services/ToolAvailability.js.map +1 -1
  400. package/dist/src/services/WidgetAvailability.d.ts +5 -5
  401. package/dist/src/services/WidgetAvailability.js +40 -39
  402. package/dist/src/services/WidgetAvailability.js.map +1 -1
  403. package/dist/src/session-manager.d.ts +3 -2
  404. package/dist/src/session-manager.js +17 -14
  405. package/dist/src/session-manager.js.map +1 -1
  406. package/dist/src/types.js +4 -4
  407. package/dist/src/utils/description-utils.js +4 -4
  408. package/dist/src/utils/description-utils.js.map +1 -1
  409. package/dist/src/utils/error-handler.d.ts +19 -10
  410. package/dist/src/utils/error-handler.js +272 -187
  411. package/dist/src/utils/error-handler.js.map +1 -1
  412. package/dist/src/utils/fetch.d.ts +7 -0
  413. package/dist/src/utils/fetch.js +136 -122
  414. package/dist/src/utils/fetch.js.map +1 -1
  415. package/dist/src/utils/gitlab-api.d.ts +1 -1
  416. package/dist/src/utils/gitlab-api.js +29 -26
  417. package/dist/src/utils/gitlab-api.js.map +1 -1
  418. package/dist/src/utils/idConversion.js +47 -47
  419. package/dist/src/utils/idConversion.js.map +1 -1
  420. package/dist/src/utils/namespace.d.ts +2 -2
  421. package/dist/src/utils/namespace.js +15 -15
  422. package/dist/src/utils/projectIdentifier.js +4 -4
  423. package/dist/src/utils/request-logger.d.ts +4 -4
  424. package/dist/src/utils/request-logger.js +5 -5
  425. package/dist/src/utils/schema-utils.js +24 -24
  426. package/dist/src/utils/schema-utils.js.map +1 -1
  427. package/dist/src/utils/smart-user-search.d.ts +1 -1
  428. package/dist/src/utils/smart-user-search.js +10 -10
  429. package/dist/src/utils/url.d.ts +1 -0
  430. package/dist/src/utils/url.js +38 -0
  431. package/dist/src/utils/url.js.map +1 -0
  432. package/dist/src/utils/version.js +1 -1
  433. package/dist/tsconfig.build.tsbuildinfo +1 -1
  434. package/package.json +22 -31
  435. package/dist/structured-world-gitlab-mcp-6.62.1.tgz +0 -0
@@ -12,228 +12,230 @@ exports.createVersionRestrictedError = createVersionRestrictedError;
12
12
  exports.parseGitLabApiError = parseGitLabApiError;
13
13
  exports.parseTimeoutError = parseTimeoutError;
14
14
  exports.isStructuredToolError = isStructuredToolError;
15
+ exports.classifyError = classifyError;
16
+ exports.createConnectionFailedError = createConnectionFailedError;
15
17
  const ConnectionManager_js_1 = require("../services/ConnectionManager.js");
16
18
  const version_js_1 = require("./version.js");
17
19
  const FEATURE_METADATA = {
18
20
  workItems: {
19
- name: "Work Items",
20
- requiredTier: "Free",
21
- docsUrl: "https://docs.gitlab.com/ee/user/project/work_items/",
21
+ name: 'Work Items',
22
+ requiredTier: 'Free',
23
+ docsUrl: 'https://docs.gitlab.com/ee/user/project/work_items/',
22
24
  alternatives: [],
23
25
  },
24
26
  epics: {
25
- name: "Epics",
26
- requiredTier: "Premium",
27
- docsUrl: "https://docs.gitlab.com/ee/user/group/epics/",
27
+ name: 'Epics',
28
+ requiredTier: 'Premium',
29
+ docsUrl: 'https://docs.gitlab.com/ee/user/group/epics/',
28
30
  alternatives: [
29
31
  {
30
- action: "Use issues for tracking",
31
- description: "Create issues with labels to organize work instead of epics",
32
- available_on: "Free",
32
+ action: 'Use issues for tracking',
33
+ description: 'Create issues with labels to organize work instead of epics',
34
+ available_on: 'Free',
33
35
  },
34
36
  {
35
- action: "Use milestones",
36
- description: "Group related issues under milestones for release planning",
37
- available_on: "Free",
37
+ action: 'Use milestones',
38
+ description: 'Group related issues under milestones for release planning',
39
+ available_on: 'Free',
38
40
  },
39
41
  ],
40
42
  },
41
43
  iterations: {
42
- name: "Iterations",
43
- requiredTier: "Premium",
44
- docsUrl: "https://docs.gitlab.com/ee/user/group/iterations/",
44
+ name: 'Iterations',
45
+ requiredTier: 'Premium',
46
+ docsUrl: 'https://docs.gitlab.com/ee/user/group/iterations/',
45
47
  alternatives: [
46
48
  {
47
- action: "Use milestones",
48
- description: "Use milestones to track time-boxed work periods",
49
- available_on: "Free",
49
+ action: 'Use milestones',
50
+ description: 'Use milestones to track time-boxed work periods',
51
+ available_on: 'Free',
50
52
  },
51
53
  ],
52
54
  },
53
55
  roadmaps: {
54
- name: "Roadmaps",
55
- requiredTier: "Premium",
56
- docsUrl: "https://docs.gitlab.com/ee/user/group/roadmap/",
56
+ name: 'Roadmaps',
57
+ requiredTier: 'Premium',
58
+ docsUrl: 'https://docs.gitlab.com/ee/user/group/roadmap/',
57
59
  alternatives: [
58
60
  {
59
- action: "Use milestone views",
60
- description: "View milestones timeline for basic roadmap functionality",
61
- available_on: "Free",
61
+ action: 'Use milestone views',
62
+ description: 'View milestones timeline for basic roadmap functionality',
63
+ available_on: 'Free',
62
64
  },
63
65
  ],
64
66
  },
65
67
  portfolioManagement: {
66
- name: "Portfolio Management",
67
- requiredTier: "Ultimate",
68
- docsUrl: "https://docs.gitlab.com/ee/user/group/planning_hierarchy/",
68
+ name: 'Portfolio Management',
69
+ requiredTier: 'Ultimate',
70
+ docsUrl: 'https://docs.gitlab.com/ee/user/group/planning_hierarchy/',
69
71
  alternatives: [
70
72
  {
71
- action: "Use group-level milestones",
72
- description: "Track progress across projects using group milestones",
73
- available_on: "Free",
73
+ action: 'Use group-level milestones',
74
+ description: 'Track progress across projects using group milestones',
75
+ available_on: 'Free',
74
76
  },
75
77
  ],
76
78
  },
77
79
  advancedSearch: {
78
- name: "Advanced Search",
79
- requiredTier: "Premium",
80
- docsUrl: "https://docs.gitlab.com/ee/user/search/advanced_search.html",
80
+ name: 'Advanced Search',
81
+ requiredTier: 'Premium',
82
+ docsUrl: 'https://docs.gitlab.com/ee/user/search/advanced_search.html',
81
83
  alternatives: [
82
84
  {
83
- action: "Use basic search",
84
- description: "Use standard GitLab search functionality",
85
- available_on: "Free",
85
+ action: 'Use basic search',
86
+ description: 'Use standard GitLab search functionality',
87
+ available_on: 'Free',
86
88
  },
87
89
  ],
88
90
  },
89
91
  codeReview: {
90
- name: "Code Review Analytics",
91
- requiredTier: "Premium",
92
- docsUrl: "https://docs.gitlab.com/ee/user/analytics/code_review_analytics.html",
92
+ name: 'Code Review Analytics',
93
+ requiredTier: 'Premium',
94
+ docsUrl: 'https://docs.gitlab.com/ee/user/analytics/code_review_analytics.html',
93
95
  alternatives: [],
94
96
  },
95
97
  securityDashboard: {
96
- name: "Security Dashboard",
97
- requiredTier: "Ultimate",
98
- docsUrl: "https://docs.gitlab.com/ee/user/application_security/security_dashboard/",
98
+ name: 'Security Dashboard',
99
+ requiredTier: 'Ultimate',
100
+ docsUrl: 'https://docs.gitlab.com/ee/user/application_security/security_dashboard/',
99
101
  alternatives: [],
100
102
  },
101
103
  complianceFramework: {
102
- name: "Compliance Framework",
103
- requiredTier: "Ultimate",
104
- docsUrl: "https://docs.gitlab.com/ee/user/project/settings/compliance_frameworks.html",
104
+ name: 'Compliance Framework',
105
+ requiredTier: 'Ultimate',
106
+ docsUrl: 'https://docs.gitlab.com/ee/user/project/settings/compliance_frameworks.html',
105
107
  alternatives: [],
106
108
  },
107
109
  valueStreamAnalytics: {
108
- name: "Value Stream Analytics",
109
- requiredTier: "Premium",
110
- docsUrl: "https://docs.gitlab.com/ee/user/group/value_stream_analytics/",
110
+ name: 'Value Stream Analytics',
111
+ requiredTier: 'Premium',
112
+ docsUrl: 'https://docs.gitlab.com/ee/user/group/value_stream_analytics/',
111
113
  alternatives: [],
112
114
  },
113
115
  customFields: {
114
- name: "Custom Fields",
115
- requiredTier: "Ultimate",
116
- docsUrl: "https://docs.gitlab.com/ee/user/project/working_with_projects.html",
116
+ name: 'Custom Fields',
117
+ requiredTier: 'Ultimate',
118
+ docsUrl: 'https://docs.gitlab.com/ee/user/project/working_with_projects.html',
117
119
  alternatives: [
118
120
  {
119
- action: "Use labels",
120
- description: "Use labels to categorize and tag work items",
121
- available_on: "Free",
121
+ action: 'Use labels',
122
+ description: 'Use labels to categorize and tag work items',
123
+ available_on: 'Free',
122
124
  },
123
125
  ],
124
126
  },
125
127
  okrs: {
126
- name: "OKRs (Objectives and Key Results)",
127
- requiredTier: "Ultimate",
128
- docsUrl: "https://docs.gitlab.com/ee/user/okrs/",
128
+ name: 'OKRs (Objectives and Key Results)',
129
+ requiredTier: 'Ultimate',
130
+ docsUrl: 'https://docs.gitlab.com/ee/user/okrs/',
129
131
  alternatives: [
130
132
  {
131
- action: "Use issues with labels",
132
- description: "Track objectives as issues with specific labels",
133
- available_on: "Free",
133
+ action: 'Use issues with labels',
134
+ description: 'Track objectives as issues with specific labels',
135
+ available_on: 'Free',
134
136
  },
135
137
  ],
136
138
  },
137
139
  healthStatus: {
138
- name: "Health Status",
139
- requiredTier: "Ultimate",
140
- docsUrl: "https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#health-status",
140
+ name: 'Health Status',
141
+ requiredTier: 'Ultimate',
142
+ docsUrl: 'https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#health-status',
141
143
  alternatives: [
142
144
  {
143
- action: "Use labels for status",
145
+ action: 'Use labels for status',
144
146
  description: "Create labels like 'on-track', 'at-risk', 'needs-attention'",
145
- available_on: "Free",
147
+ available_on: 'Free',
146
148
  },
147
149
  ],
148
150
  },
149
151
  weight: {
150
- name: "Issue Weight",
151
- requiredTier: "Premium",
152
- docsUrl: "https://docs.gitlab.com/ee/user/project/issues/issue_weight.html",
152
+ name: 'Issue Weight',
153
+ requiredTier: 'Premium',
154
+ docsUrl: 'https://docs.gitlab.com/ee/user/project/issues/issue_weight.html',
153
155
  alternatives: [
154
156
  {
155
- action: "Use labels for estimation",
157
+ action: 'Use labels for estimation',
156
158
  description: "Create labels like 'size::S', 'size::M', 'size::L' for estimation",
157
- available_on: "Free",
159
+ available_on: 'Free',
158
160
  },
159
161
  ],
160
162
  },
161
163
  multiLevelEpics: {
162
- name: "Multi-level Epics",
163
- requiredTier: "Ultimate",
164
- docsUrl: "https://docs.gitlab.com/ee/user/group/epics/manage_epics.html#multi-level-child-epics",
164
+ name: 'Multi-level Epics',
165
+ requiredTier: 'Ultimate',
166
+ docsUrl: 'https://docs.gitlab.com/ee/user/group/epics/manage_epics.html#multi-level-child-epics',
165
167
  alternatives: [
166
168
  {
167
- action: "Use flat epics",
168
- description: "Organize work with single-level epics (Premium)",
169
- available_on: "Premium",
169
+ action: 'Use flat epics',
170
+ description: 'Organize work with single-level epics (Premium)',
171
+ available_on: 'Premium',
170
172
  },
171
173
  ],
172
174
  },
173
175
  serviceDesk: {
174
- name: "Service Desk",
175
- requiredTier: "Premium",
176
- docsUrl: "https://docs.gitlab.com/ee/user/project/service_desk/",
176
+ name: 'Service Desk',
177
+ requiredTier: 'Premium',
178
+ docsUrl: 'https://docs.gitlab.com/ee/user/project/service_desk/',
177
179
  alternatives: [],
178
180
  },
179
181
  requirements: {
180
- name: "Requirements Management",
181
- requiredTier: "Ultimate",
182
- docsUrl: "https://docs.gitlab.com/ee/user/project/requirements/",
182
+ name: 'Requirements Management',
183
+ requiredTier: 'Ultimate',
184
+ docsUrl: 'https://docs.gitlab.com/ee/user/project/requirements/',
183
185
  alternatives: [
184
186
  {
185
- action: "Use issues",
186
- description: "Track requirements as issues with a dedicated label",
187
- available_on: "Free",
187
+ action: 'Use issues',
188
+ description: 'Track requirements as issues with a dedicated label',
189
+ available_on: 'Free',
188
190
  },
189
191
  ],
190
192
  },
191
193
  qualityManagement: {
192
- name: "Quality Management",
193
- requiredTier: "Ultimate",
194
- docsUrl: "https://docs.gitlab.com/ee/ci/testing/",
194
+ name: 'Quality Management',
195
+ requiredTier: 'Ultimate',
196
+ docsUrl: 'https://docs.gitlab.com/ee/ci/testing/',
195
197
  alternatives: [],
196
198
  },
197
199
  timeTracking: {
198
- name: "Time Tracking",
199
- requiredTier: "Premium",
200
- docsUrl: "https://docs.gitlab.com/ee/user/project/time_tracking.html",
200
+ name: 'Time Tracking',
201
+ requiredTier: 'Premium',
202
+ docsUrl: 'https://docs.gitlab.com/ee/user/project/time_tracking.html',
201
203
  alternatives: [],
202
204
  },
203
205
  crmContacts: {
204
- name: "CRM Contacts",
205
- requiredTier: "Ultimate",
206
- docsUrl: "https://docs.gitlab.com/ee/user/crm/",
206
+ name: 'CRM Contacts',
207
+ requiredTier: 'Ultimate',
208
+ docsUrl: 'https://docs.gitlab.com/ee/user/crm/',
207
209
  alternatives: [],
208
210
  },
209
211
  vulnerabilities: {
210
- name: "Vulnerability Management",
211
- requiredTier: "Ultimate",
212
- docsUrl: "https://docs.gitlab.com/ee/user/application_security/vulnerabilities/",
212
+ name: 'Vulnerability Management',
213
+ requiredTier: 'Ultimate',
214
+ docsUrl: 'https://docs.gitlab.com/ee/user/application_security/vulnerabilities/',
213
215
  alternatives: [],
214
216
  },
215
217
  errorTracking: {
216
- name: "Error Tracking",
217
- requiredTier: "Ultimate",
218
- docsUrl: "https://docs.gitlab.com/ee/operations/error_tracking.html",
218
+ name: 'Error Tracking',
219
+ requiredTier: 'Ultimate',
220
+ docsUrl: 'https://docs.gitlab.com/ee/operations/error_tracking.html',
219
221
  alternatives: [],
220
222
  },
221
223
  designManagement: {
222
- name: "Design Management",
223
- requiredTier: "Premium",
224
- docsUrl: "https://docs.gitlab.com/ee/user/project/issues/design_management.html",
224
+ name: 'Design Management',
225
+ requiredTier: 'Premium',
226
+ docsUrl: 'https://docs.gitlab.com/ee/user/project/issues/design_management.html',
225
227
  alternatives: [],
226
228
  },
227
229
  linkedResources: {
228
- name: "Linked Resources",
229
- requiredTier: "Premium",
230
- docsUrl: "https://docs.gitlab.com/ee/user/project/issues/related_issues.html",
230
+ name: 'Linked Resources',
231
+ requiredTier: 'Premium',
232
+ docsUrl: 'https://docs.gitlab.com/ee/user/project/issues/related_issues.html',
231
233
  alternatives: [],
232
234
  },
233
235
  emailParticipants: {
234
- name: "Email Participants",
235
- requiredTier: "Premium",
236
- docsUrl: "https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#add-an-email-participant",
236
+ name: 'Email Participants',
237
+ requiredTier: 'Premium',
238
+ docsUrl: 'https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#add-an-email-participant',
237
239
  alternatives: [],
238
240
  },
239
241
  };
@@ -247,31 +249,31 @@ function detectTierRestriction(tool, action, toolArgs) {
247
249
  }
248
250
  const currentTierRaw = connectionManager.getTier();
249
251
  const currentTier = normalizeTier(currentTierRaw);
250
- if (tool === "browse_work_items" || tool === "manage_work_item") {
252
+ if (tool === 'browse_work_items' || tool === 'manage_work_item') {
251
253
  const restriction = checkWorkItemTypeRestriction(connectionManager, toolArgs, currentTier);
252
254
  if (restriction)
253
255
  return restriction;
254
256
  }
255
- if (tool === "browse_iterations") {
256
- if (!connectionManager.isFeatureAvailable("iterations")) {
257
- return createRestrictionInfo("iterations", currentTier);
257
+ if (tool === 'browse_iterations') {
258
+ if (!connectionManager.isFeatureAvailable('iterations')) {
259
+ return createRestrictionInfo('iterations', currentTier);
258
260
  }
259
261
  }
260
- if ((tool === "browse_webhooks" || tool === "manage_webhook") && toolArgs?.scope === "group") {
261
- if (!connectionManager.isFeatureAvailable("serviceDesk")) {
262
+ if ((tool === 'browse_webhooks' || tool === 'manage_webhook') && toolArgs?.scope === 'group') {
263
+ if (!connectionManager.isFeatureAvailable('serviceDesk')) {
262
264
  return {
263
- feature: "serviceDesk",
264
- name: "Group Webhooks",
265
- requiredTier: "Premium",
265
+ feature: 'serviceDesk',
266
+ name: 'Group Webhooks',
267
+ requiredTier: 'Premium',
266
268
  currentTier,
267
269
  alternatives: [
268
270
  {
269
- action: "Use project-level webhooks",
270
- description: "Configure webhooks on individual projects instead",
271
- available_on: "Free",
271
+ action: 'Use project-level webhooks',
272
+ description: 'Configure webhooks on individual projects instead',
273
+ available_on: 'Free',
272
274
  },
273
275
  ],
274
- docsUrl: "https://docs.gitlab.com/ee/user/project/integrations/webhooks.html",
276
+ docsUrl: 'https://docs.gitlab.com/ee/user/project/integrations/webhooks.html',
275
277
  };
276
278
  }
277
279
  }
@@ -281,19 +283,19 @@ function checkWorkItemTypeRestriction(connectionManager, toolArgs, currentTier)
281
283
  if (!toolArgs)
282
284
  return null;
283
285
  const types = extractWorkItemTypes(toolArgs);
284
- if (types.includes("EPIC")) {
285
- if (!connectionManager.isFeatureAvailable("epics")) {
286
- return createRestrictionInfo("epics", currentTier);
286
+ if (types.includes('EPIC')) {
287
+ if (!connectionManager.isFeatureAvailable('epics')) {
288
+ return createRestrictionInfo('epics', currentTier);
287
289
  }
288
290
  }
289
- if (types.includes("OBJECTIVE") || types.includes("KEY_RESULT")) {
290
- if (!connectionManager.isFeatureAvailable("okrs")) {
291
- return createRestrictionInfo("okrs", currentTier);
291
+ if (types.includes('OBJECTIVE') || types.includes('KEY_RESULT')) {
292
+ if (!connectionManager.isFeatureAvailable('okrs')) {
293
+ return createRestrictionInfo('okrs', currentTier);
292
294
  }
293
295
  }
294
- if (types.includes("REQUIREMENT")) {
295
- if (!connectionManager.isFeatureAvailable("requirements")) {
296
- return createRestrictionInfo("requirements", currentTier);
296
+ if (types.includes('REQUIREMENT')) {
297
+ if (!connectionManager.isFeatureAvailable('requirements')) {
298
+ return createRestrictionInfo('requirements', currentTier);
297
299
  }
298
300
  }
299
301
  return null;
@@ -301,12 +303,12 @@ function checkWorkItemTypeRestriction(connectionManager, toolArgs, currentTier)
301
303
  function extractWorkItemTypes(toolArgs) {
302
304
  const types = [];
303
305
  if (Array.isArray(toolArgs.types)) {
304
- types.push(...toolArgs.types.map(t => String(t).toUpperCase()));
306
+ types.push(...toolArgs.types.map((t) => String(t).toUpperCase()));
305
307
  }
306
- if (typeof toolArgs.workItemType === "string") {
308
+ if (typeof toolArgs.workItemType === 'string') {
307
309
  types.push(toolArgs.workItemType.toUpperCase());
308
310
  }
309
- if (typeof toolArgs.type === "string") {
311
+ if (typeof toolArgs.type === 'string') {
310
312
  types.push(toolArgs.type.toUpperCase());
311
313
  }
312
314
  return types;
@@ -324,15 +326,15 @@ function createRestrictionInfo(feature, currentTier) {
324
326
  }
325
327
  function normalizeTier(tier) {
326
328
  const lower = tier.toLowerCase();
327
- if (lower === "ultimate" || lower === "gold")
328
- return "Ultimate";
329
- if (lower === "premium" || lower === "silver")
330
- return "Premium";
331
- return "Free";
329
+ if (lower === 'ultimate' || lower === 'gold')
330
+ return 'Ultimate';
331
+ if (lower === 'premium' || lower === 'silver')
332
+ return 'Premium';
333
+ return 'Free';
332
334
  }
333
335
  function handleGitLabError(error, tool, action, toolArgs) {
334
336
  const { status, message, error: errorMsg, error_description } = error;
335
- const rawMessage = message ?? errorMsg ?? error_description ?? "Unknown error";
337
+ const rawMessage = message ?? errorMsg ?? error_description ?? 'Unknown error';
336
338
  if (status === 403) {
337
339
  const tierRestriction = detectTierRestriction(tool, action, toolArgs);
338
340
  if (tierRestriction) {
@@ -345,39 +347,39 @@ function handleGitLabError(error, tool, action, toolArgs) {
345
347
  }
346
348
  if (status === 429) {
347
349
  return {
348
- error_code: "RATE_LIMITED",
350
+ error_code: 'RATE_LIMITED',
349
351
  tool,
350
352
  action,
351
353
  http_status: status,
352
- message: "Rate limit exceeded. Please wait before retrying.",
353
- suggested_fix: "Wait a few minutes and try again, or reduce request frequency",
354
+ message: 'Rate limit exceeded. Please wait before retrying.',
355
+ suggested_fix: 'Wait a few minutes and try again, or reduce request frequency',
354
356
  gitlab_error: rawMessage,
355
357
  };
356
358
  }
357
359
  if (status >= 500) {
358
360
  return {
359
- error_code: "SERVER_ERROR",
361
+ error_code: 'SERVER_ERROR',
360
362
  tool,
361
363
  action,
362
364
  http_status: status,
363
- message: "GitLab server error. The service may be temporarily unavailable.",
364
- suggested_fix: "Wait and retry. If the problem persists, check GitLab status page.",
365
+ message: 'GitLab server error. The service may be temporarily unavailable.',
366
+ suggested_fix: 'Wait and retry. If the problem persists, check GitLab status page.',
365
367
  gitlab_error: rawMessage,
366
368
  };
367
369
  }
368
370
  return {
369
- error_code: "API_ERROR",
371
+ error_code: 'API_ERROR',
370
372
  tool,
371
373
  action,
372
374
  http_status: status,
373
375
  message: rawMessage,
374
- suggested_fix: "Check the GitLab API documentation for this endpoint",
376
+ suggested_fix: 'Check the GitLab API documentation for this endpoint',
375
377
  gitlab_error: rawMessage,
376
378
  };
377
379
  }
378
380
  function createTierRestrictedError(tool, action, status, restriction) {
379
381
  return {
380
- error_code: "TIER_RESTRICTED",
382
+ error_code: 'TIER_RESTRICTED',
381
383
  tool,
382
384
  action,
383
385
  http_status: status,
@@ -390,16 +392,16 @@ function createTierRestrictedError(tool, action, status, restriction) {
390
392
  : `Upgrade to GitLab ${restriction.requiredTier} to access this feature`,
391
393
  alternatives: restriction.alternatives.length > 0 ? restriction.alternatives : undefined,
392
394
  docs_url: restriction.docsUrl,
393
- upgrade_url: "https://about.gitlab.com/pricing/",
395
+ upgrade_url: 'https://about.gitlab.com/pricing/',
394
396
  };
395
397
  }
396
398
  function createPermissionDeniedError(tool, action, status, rawMessage) {
397
- const baseSuggestedFix = "Check your access level for this project/group. Reporter access or higher may be required.";
398
- const suggestedFix = rawMessage && rawMessage !== "Unknown error" && !rawMessage.includes("403")
399
+ const baseSuggestedFix = 'Check your access level for this project/group. Reporter access or higher may be required.';
400
+ const suggestedFix = rawMessage && rawMessage !== 'Unknown error' && !rawMessage.includes('403')
399
401
  ? `${baseSuggestedFix} GitLab message: ${rawMessage}`
400
402
  : baseSuggestedFix;
401
403
  return {
402
- error_code: "PERMISSION_DENIED",
404
+ error_code: 'PERMISSION_DENIED',
403
405
  tool,
404
406
  action,
405
407
  http_status: status,
@@ -407,9 +409,9 @@ function createPermissionDeniedError(tool, action, status, rawMessage) {
407
409
  suggested_fix: suggestedFix,
408
410
  alternatives: [
409
411
  {
410
- action: "Verify your access level",
411
- description: "Check your role in the project settings or contact a project maintainer",
412
- available_on: "Free",
412
+ action: 'Verify your access level',
413
+ description: 'Check your role in the project settings or contact a project maintainer',
414
+ available_on: 'Free',
413
415
  },
414
416
  ],
415
417
  };
@@ -418,23 +420,23 @@ function createNotFoundError(tool, action, status, rawMessage) {
418
420
  let resourceType;
419
421
  let resourceId;
420
422
  const lowerMessage = rawMessage.toLowerCase();
421
- if (lowerMessage.includes("project")) {
422
- resourceType = "project";
423
+ if (lowerMessage.includes('project')) {
424
+ resourceType = 'project';
423
425
  }
424
- else if (lowerMessage.includes("merge request") || lowerMessage.includes("mr")) {
425
- resourceType = "merge_request";
426
+ else if (lowerMessage.includes('merge request') || lowerMessage.includes('mr')) {
427
+ resourceType = 'merge_request';
426
428
  }
427
- else if (lowerMessage.includes("issue")) {
428
- resourceType = "issue";
429
+ else if (lowerMessage.includes('issue')) {
430
+ resourceType = 'issue';
429
431
  }
430
- else if (lowerMessage.includes("pipeline")) {
431
- resourceType = "pipeline";
432
+ else if (lowerMessage.includes('pipeline')) {
433
+ resourceType = 'pipeline';
432
434
  }
433
- else if (lowerMessage.includes("branch")) {
434
- resourceType = "branch";
435
+ else if (lowerMessage.includes('branch')) {
436
+ resourceType = 'branch';
435
437
  }
436
- else if (lowerMessage.includes("user")) {
437
- resourceType = "user";
438
+ else if (lowerMessage.includes('user')) {
439
+ resourceType = 'user';
438
440
  }
439
441
  const pathMatch = rawMessage.match(/['"]([a-zA-Z0-9_-]+(?:\/[a-zA-Z0-9_-]+)+)['"]/);
440
442
  if (pathMatch) {
@@ -453,40 +455,40 @@ function createNotFoundError(tool, action, status, rawMessage) {
453
455
  }
454
456
  }
455
457
  return {
456
- error_code: "NOT_FOUND",
458
+ error_code: 'NOT_FOUND',
457
459
  tool,
458
460
  action,
459
461
  http_status: status,
460
462
  message: "Resource not found or you don't have access to it",
461
- suggested_fix: "Verify the ID/path is correct and you have at least Reporter access to the project",
463
+ suggested_fix: 'Verify the ID/path is correct and you have at least Reporter access to the project',
462
464
  resource_type: resourceType,
463
465
  resource_id: resourceId,
464
466
  };
465
467
  }
466
468
  function createMissingFieldsError(tool, action, missingFields, actionRequiredFields) {
467
469
  return {
468
- error_code: "MISSING_REQUIRED_FIELD",
470
+ error_code: 'MISSING_REQUIRED_FIELD',
469
471
  tool,
470
472
  action,
471
- message: `Missing required field(s): ${missingFields.join(", ")}`,
473
+ message: `Missing required field(s): ${missingFields.join(', ')}`,
472
474
  missing_fields: missingFields,
473
- suggested_fix: `Add required fields: ${missingFields.join(", ")}`,
475
+ suggested_fix: `Add required fields: ${missingFields.join(', ')}`,
474
476
  action_required_fields: actionRequiredFields,
475
477
  };
476
478
  }
477
479
  function createInvalidActionError(tool, action, validActions) {
478
480
  return {
479
- error_code: "INVALID_ACTION",
481
+ error_code: 'INVALID_ACTION',
480
482
  tool,
481
483
  action,
482
- message: `Invalid action '${action}'. Valid actions are: ${validActions.join(", ")}`,
483
- suggested_fix: `Use one of the valid actions: ${validActions.join(", ")}`,
484
+ message: `Invalid action '${action}'. Valid actions are: ${validActions.join(', ')}`,
485
+ suggested_fix: `Use one of the valid actions: ${validActions.join(', ')}`,
484
486
  valid_actions: validActions,
485
487
  };
486
488
  }
487
489
  function createTypeMismatchError(tool, action, field, expected, received) {
488
490
  return {
489
- error_code: "TYPE_MISMATCH",
491
+ error_code: 'TYPE_MISMATCH',
490
492
  tool,
491
493
  action,
492
494
  message: `Type mismatch for field '${field}': expected ${expected}, got ${received}`,
@@ -496,19 +498,19 @@ function createTypeMismatchError(tool, action, field, expected, received) {
496
498
  }
497
499
  function createValidationError(tool, action, zodMessage) {
498
500
  return {
499
- error_code: "VALIDATION_ERROR",
501
+ error_code: 'VALIDATION_ERROR',
500
502
  tool,
501
503
  action,
502
504
  message: zodMessage,
503
- suggested_fix: "Check the tool documentation for correct parameter format",
505
+ suggested_fix: 'Check the tool documentation for correct parameter format',
504
506
  };
505
507
  }
506
508
  function createTimeoutError(tool, action, timeoutMs, retryable = false) {
507
509
  const retryHint = retryable
508
- ? " This is a read-only operation - you can safely retry."
509
- : " This is a write operation - check if it completed before retrying.";
510
+ ? ' This is a read-only operation - you can safely retry.'
511
+ : ' This is a write operation - check if it completed before retrying.';
510
512
  return {
511
- error_code: "TIMEOUT",
513
+ error_code: 'TIMEOUT',
512
514
  tool,
513
515
  action,
514
516
  timeout_ms: timeoutMs,
@@ -536,7 +538,7 @@ function createVersionRestrictedError(tool, action, widget, parameter, requiredV
536
538
  suggestedFix = `Upgrade GitLab to version ${requiredVersion} or higher to use the '${parameter}' parameter`;
537
539
  }
538
540
  return {
539
- error_code: "VERSION_RESTRICTED",
541
+ error_code: 'VERSION_RESTRICTED',
540
542
  tool,
541
543
  action,
542
544
  widget,
@@ -547,7 +549,7 @@ function createVersionRestrictedError(tool, action, widget, parameter, requiredV
547
549
  current_tier: isTierInsufficient ? currentTier : undefined,
548
550
  message,
549
551
  suggested_fix: suggestedFix,
550
- docs_url: "https://docs.gitlab.com/ee/user/project/work_items/",
552
+ docs_url: 'https://docs.gitlab.com/ee/user/project/work_items/',
551
553
  };
552
554
  }
553
555
  function parseGitLabApiError(errorMessage) {
@@ -555,8 +557,8 @@ function parseGitLabApiError(errorMessage) {
555
557
  if (!match)
556
558
  return null;
557
559
  const status = parseInt(match[1], 10);
558
- const statusText = match[2]?.trim() ?? "";
559
- const details = match[3]?.trim() ?? "";
560
+ const statusText = match[2]?.trim() ?? '';
561
+ const details = match[3]?.trim() ?? '';
560
562
  let message;
561
563
  if (statusText && details) {
562
564
  message = `${status} ${statusText} - ${details}`;
@@ -580,7 +582,7 @@ class StructuredToolError extends Error {
580
582
  structuredError;
581
583
  constructor(structuredError) {
582
584
  super(structuredError.message);
583
- this.name = "StructuredToolError";
585
+ this.name = 'StructuredToolError';
584
586
  this.structuredError = structuredError;
585
587
  if (Error.captureStackTrace) {
586
588
  Error.captureStackTrace(this, StructuredToolError);
@@ -594,4 +596,87 @@ exports.StructuredToolError = StructuredToolError;
594
596
  function isStructuredToolError(error) {
595
597
  return error instanceof StructuredToolError;
596
598
  }
599
+ const TRANSIENT_ERROR_CODES = new Set([
600
+ 'ECONNREFUSED',
601
+ 'ECONNRESET',
602
+ 'ECONNABORTED',
603
+ 'ETIMEDOUT',
604
+ 'ENETUNREACH',
605
+ 'EHOSTUNREACH',
606
+ 'EPIPE',
607
+ 'EAI_AGAIN',
608
+ 'UND_ERR_CONNECT_TIMEOUT',
609
+ 'UND_ERR_HEADERS_TIMEOUT',
610
+ 'UND_ERR_BODY_TIMEOUT',
611
+ 'UND_ERR_SOCKET',
612
+ ]);
613
+ function classifyError(error) {
614
+ if (!(error instanceof Error)) {
615
+ return 'permanent';
616
+ }
617
+ const message = error.message.toLowerCase();
618
+ const code = error.code;
619
+ const causeCode = error.cause?.code;
620
+ const effectiveCode = code ?? causeCode;
621
+ if (effectiveCode && TRANSIENT_ERROR_CODES.has(effectiveCode)) {
622
+ return 'transient';
623
+ }
624
+ const parsed = parseGitLabApiError(error.message);
625
+ if (parsed) {
626
+ const { status } = parsed;
627
+ if (status === 401) {
628
+ return 'auth';
629
+ }
630
+ if (status === 403) {
631
+ return 'permanent';
632
+ }
633
+ if (status === 408 || status === 429 || status >= 500) {
634
+ return 'transient';
635
+ }
636
+ return 'permanent';
637
+ }
638
+ if (message.includes('timed out') ||
639
+ message.includes('request timeout') ||
640
+ message.includes('connect timeout') ||
641
+ message.includes('initialization timeout') ||
642
+ message.includes('socket hang up') ||
643
+ message.includes('network error') ||
644
+ message.includes('health check failed') ||
645
+ message.includes('econnrefused') ||
646
+ message.includes('econnreset')) {
647
+ return 'transient';
648
+ }
649
+ return 'permanent';
650
+ }
651
+ function createConnectionFailedError(toolName, action, instanceUrl, connectionState) {
652
+ const reconnecting = connectionState === 'connecting';
653
+ const autoRetryEnabled = connectionState !== 'failed';
654
+ let message;
655
+ if (connectionState === 'failed') {
656
+ message =
657
+ `GitLab instance ${instanceUrl} connection failed due to a permanent authentication, ` +
658
+ `permission, or configuration error. Automatic reconnection is disabled.`;
659
+ }
660
+ else if (connectionState === 'connecting') {
661
+ message = `GitLab instance ${instanceUrl} is not ready yet. A connection attempt is in progress.`;
662
+ }
663
+ else {
664
+ message = `GitLab instance ${instanceUrl} is currently unreachable. Connection will be retried automatically.`;
665
+ }
666
+ const suggestedFix = connectionState === 'failed'
667
+ ? 'Check authentication/authorization, permissions or tier access, and the configured GitLab instance URL. ' +
668
+ "Use manage_context with action 'whoami' to check connection status."
669
+ : 'Check network connectivity, VPN status, or GitLab instance availability. ' +
670
+ "Use manage_context with action 'whoami' to check connection status.";
671
+ return {
672
+ error_code: 'CONNECTION_FAILED',
673
+ tool: toolName,
674
+ action,
675
+ instance_url: instanceUrl,
676
+ reconnecting,
677
+ auto_retry_enabled: autoRetryEnabled,
678
+ message,
679
+ suggested_fix: suggestedFix,
680
+ };
681
+ }
597
682
  //# sourceMappingURL=error-handler.js.map