@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.
- package/README.md +22 -1
- package/README.md.in +21 -0
- package/dist/generated/prisma/client.js.map +1 -1
- package/dist/generated/prisma/internal/class.js +2 -2
- package/dist/generated/prisma/internal/class.js.map +1 -1
- package/dist/generated/prisma/internal/prismaNamespace.js +2 -2
- package/dist/generated/prisma/models/AuthCodeFlowState.d.ts +1 -2
- package/dist/generated/prisma/models/AuthorizationCode.d.ts +1 -2
- package/dist/generated/prisma/models/DeviceFlowState.d.ts +1 -2
- package/dist/generated/prisma/models/McpSessionMapping.d.ts +1 -2
- package/dist/generated/prisma/models/OAuthSession.d.ts +1 -2
- package/dist/src/cli/docker/container-runtime.d.ts +1 -1
- package/dist/src/cli/docker/container-runtime.js +14 -14
- package/dist/src/cli/docker/docker-command.d.ts +1 -1
- package/dist/src/cli/docker/docker-command.js +113 -113
- package/dist/src/cli/docker/docker-command.js.map +1 -1
- package/dist/src/cli/docker/docker-utils.d.ts +3 -3
- package/dist/src/cli/docker/docker-utils.js +74 -74
- package/dist/src/cli/docker/docker-utils.js.map +1 -1
- package/dist/src/cli/docker/index.d.ts +4 -4
- package/dist/src/cli/docker/types.d.ts +3 -3
- package/dist/src/cli/docker/types.js +5 -5
- package/dist/src/cli/init/browser.js +2 -2
- package/dist/src/cli/init/config-generator.d.ts +2 -2
- package/dist/src/cli/init/config-generator.js +22 -22
- package/dist/src/cli/init/connection.d.ts +1 -1
- package/dist/src/cli/init/connection.js +27 -27
- package/dist/src/cli/init/connection.js.map +1 -1
- package/dist/src/cli/init/index.d.ts +4 -4
- package/dist/src/cli/init/types.d.ts +3 -3
- package/dist/src/cli/init/types.js +36 -36
- package/dist/src/cli/init/wizard.js +80 -80
- package/dist/src/cli/init/wizard.js.map +1 -1
- package/dist/src/cli/inject-tool-refs.js +47 -47
- package/dist/src/cli/inject-tool-refs.js.map +1 -1
- package/dist/src/cli/install/backup.d.ts +1 -1
- package/dist/src/cli/install/backup.js +3 -3
- package/dist/src/cli/install/detector.d.ts +2 -2
- package/dist/src/cli/install/detector.js +18 -18
- package/dist/src/cli/install/detector.js.map +1 -1
- package/dist/src/cli/install/index.d.ts +5 -5
- package/dist/src/cli/install/install-command.d.ts +2 -2
- package/dist/src/cli/install/install-command.js +68 -68
- package/dist/src/cli/install/install-command.js.map +1 -1
- package/dist/src/cli/install/installers.d.ts +2 -2
- package/dist/src/cli/install/installers.js +55 -55
- package/dist/src/cli/install/installers.js.map +1 -1
- package/dist/src/cli/install/types.d.ts +4 -4
- package/dist/src/cli/install/types.js +48 -48
- package/dist/src/cli/instances/index.d.ts +2 -2
- package/dist/src/cli/instances/instances-command.d.ts +1 -1
- package/dist/src/cli/instances/instances-command.js +70 -66
- package/dist/src/cli/instances/instances-command.js.map +1 -1
- package/dist/src/cli/list-tools.js +396 -396
- package/dist/src/cli/list-tools.js.map +1 -1
- package/dist/src/cli/setup/discovery.d.ts +1 -1
- package/dist/src/cli/setup/discovery.js +10 -10
- package/dist/src/cli/setup/discovery.js.map +1 -1
- package/dist/src/cli/setup/flows/configure-existing.d.ts +1 -1
- package/dist/src/cli/setup/flows/configure-existing.js +57 -57
- package/dist/src/cli/setup/flows/configure-existing.js.map +1 -1
- package/dist/src/cli/setup/flows/local-setup.d.ts +1 -1
- package/dist/src/cli/setup/flows/local-setup.js +51 -51
- package/dist/src/cli/setup/flows/local-setup.js.map +1 -1
- package/dist/src/cli/setup/flows/server-setup.d.ts +1 -1
- package/dist/src/cli/setup/flows/server-setup.js +50 -50
- package/dist/src/cli/setup/flows/server-setup.js.map +1 -1
- package/dist/src/cli/setup/flows/tool-selection.d.ts +1 -1
- package/dist/src/cli/setup/flows/tool-selection.js +94 -94
- package/dist/src/cli/setup/flows/tool-selection.js.map +1 -1
- package/dist/src/cli/setup/index.d.ts +4 -4
- package/dist/src/cli/setup/presets.d.ts +1 -1
- package/dist/src/cli/setup/presets.js +157 -157
- package/dist/src/cli/setup/presets.js.map +1 -1
- package/dist/src/cli/setup/types.d.ts +7 -7
- package/dist/src/cli/setup/wizard.d.ts +1 -1
- package/dist/src/cli/setup/wizard.js +25 -25
- package/dist/src/cli/utils/index.d.ts +1 -1
- package/dist/src/cli/utils/path-utils.js +3 -3
- package/dist/src/cli-utils.d.ts +2 -2
- package/dist/src/cli-utils.js +46 -46
- package/dist/src/config/index.d.ts +4 -4
- package/dist/src/config/instances-loader.d.ts +3 -3
- package/dist/src/config/instances-loader.js +53 -53
- package/dist/src/config/instances-loader.js.map +1 -1
- package/dist/src/config/instances-schema.d.ts +1 -1
- package/dist/src/config/instances-schema.js +33 -33
- package/dist/src/config/instances-schema.js.map +1 -1
- package/dist/src/config.d.ts +11 -4
- package/dist/src/config.js +112 -111
- package/dist/src/config.js.map +1 -1
- package/dist/src/dashboard/handler.d.ts +2 -2
- package/dist/src/dashboard/handler.js +7 -7
- package/dist/src/dashboard/html-template.d.ts +1 -1
- package/dist/src/dashboard/html-template.js +44 -44
- package/dist/src/dashboard/html-template.js.map +1 -1
- package/dist/src/dashboard/index.d.ts +4 -4
- package/dist/src/dashboard/metrics.d.ts +3 -3
- package/dist/src/dashboard/metrics.js +42 -42
- package/dist/src/discovery/auto.d.ts +3 -3
- package/dist/src/discovery/auto.js +28 -28
- package/dist/src/discovery/git-remote.d.ts +2 -2
- package/dist/src/discovery/git-remote.js +18 -18
- package/dist/src/discovery/index.d.ts +3 -3
- package/dist/src/discovery/profile-matcher.d.ts +2 -2
- package/dist/src/discovery/profile-matcher.js +8 -8
- package/dist/src/discovery/profile-matcher.js.map +1 -1
- package/dist/src/entities/context/context-manager.d.ts +3 -3
- package/dist/src/entities/context/context-manager.js +34 -34
- package/dist/src/entities/context/context-manager.js.map +1 -1
- package/dist/src/entities/context/handlers.d.ts +2 -2
- package/dist/src/entities/context/handlers.js +8 -8
- package/dist/src/entities/context/index.d.ts +8 -8
- package/dist/src/entities/context/index.js +1 -1
- package/dist/src/entities/context/registry.d.ts +1 -1
- package/dist/src/entities/context/registry.js +4 -4
- package/dist/src/entities/context/schema.d.ts +1 -1
- package/dist/src/entities/context/schema.js +19 -19
- package/dist/src/entities/context/types.d.ts +9 -9
- package/dist/src/entities/context/whoami.d.ts +1 -1
- package/dist/src/entities/context/whoami.js +31 -31
- package/dist/src/entities/context/whoami.js.map +1 -1
- package/dist/src/entities/core/index.d.ts +5 -5
- package/dist/src/entities/core/index.js +1 -1
- package/dist/src/entities/core/registry.d.ts +1 -1
- package/dist/src/entities/core/registry.js +194 -194
- package/dist/src/entities/core/registry.js.map +1 -1
- package/dist/src/entities/core/schema-readonly.d.ts +1 -1
- package/dist/src/entities/core/schema-readonly.js +117 -117
- package/dist/src/entities/core/schema.d.ts +1 -1
- package/dist/src/entities/core/schema.js +67 -67
- package/dist/src/entities/files/index.d.ts +5 -5
- package/dist/src/entities/files/index.js +1 -1
- package/dist/src/entities/files/registry.d.ts +1 -1
- package/dist/src/entities/files/registry.js +45 -45
- package/dist/src/entities/files/registry.js.map +1 -1
- package/dist/src/entities/files/schema-readonly.d.ts +1 -1
- package/dist/src/entities/files/schema-readonly.js +13 -13
- package/dist/src/entities/files/schema.d.ts +1 -1
- package/dist/src/entities/files/schema.js +29 -29
- package/dist/src/entities/index.d.ts +17 -17
- package/dist/src/entities/integrations/index.d.ts +4 -4
- package/dist/src/entities/integrations/registry.d.ts +1 -1
- package/dist/src/entities/integrations/registry.js +17 -17
- package/dist/src/entities/integrations/registry.js.map +1 -1
- package/dist/src/entities/integrations/schema-readonly.d.ts +1 -1
- package/dist/src/entities/integrations/schema-readonly.js +5 -5
- package/dist/src/entities/integrations/schema.d.ts +1 -1
- package/dist/src/entities/integrations/schema.js +69 -69
- package/dist/src/entities/iterations/index.d.ts +2 -2
- package/dist/src/entities/iterations/registry.d.ts +1 -1
- package/dist/src/entities/iterations/registry.js +13 -13
- package/dist/src/entities/iterations/registry.js.map +1 -1
- package/dist/src/entities/iterations/schema-readonly.d.ts +1 -1
- package/dist/src/entities/iterations/schema-readonly.js +9 -9
- package/dist/src/entities/labels/index.d.ts +5 -5
- package/dist/src/entities/labels/index.js +1 -1
- package/dist/src/entities/labels/registry.d.ts +1 -1
- package/dist/src/entities/labels/registry.js +19 -19
- package/dist/src/entities/labels/registry.js.map +1 -1
- package/dist/src/entities/labels/schema-readonly.d.ts +1 -1
- package/dist/src/entities/labels/schema-readonly.js +8 -8
- package/dist/src/entities/labels/schema.d.ts +1 -1
- package/dist/src/entities/labels/schema.js +11 -11
- package/dist/src/entities/members/index.d.ts +3 -3
- package/dist/src/entities/members/registry.d.ts +1 -1
- package/dist/src/entities/members/registry.js +26 -26
- package/dist/src/entities/members/registry.js.map +1 -1
- package/dist/src/entities/members/schema-readonly.d.ts +1 -1
- package/dist/src/entities/members/schema-readonly.js +32 -32
- package/dist/src/entities/members/schema-readonly.js.map +1 -1
- package/dist/src/entities/members/schema.d.ts +1 -1
- package/dist/src/entities/members/schema.js +28 -28
- package/dist/src/entities/milestones/index.d.ts +5 -5
- package/dist/src/entities/milestones/index.js +1 -1
- package/dist/src/entities/milestones/registry.d.ts +1 -1
- package/dist/src/entities/milestones/registry.js +25 -25
- package/dist/src/entities/milestones/registry.js.map +1 -1
- package/dist/src/entities/milestones/schema-readonly.d.ts +2 -2
- package/dist/src/entities/milestones/schema-readonly.js +15 -15
- package/dist/src/entities/milestones/schema.d.ts +1 -1
- package/dist/src/entities/milestones/schema.js +16 -16
- package/dist/src/entities/milestones/schema.js.map +1 -1
- package/dist/src/entities/mrs/index.d.ts +5 -5
- package/dist/src/entities/mrs/index.js +1 -1
- package/dist/src/entities/mrs/registry.d.ts +1 -1
- package/dist/src/entities/mrs/registry.js +102 -102
- package/dist/src/entities/mrs/registry.js.map +1 -1
- package/dist/src/entities/mrs/schema-readonly.d.ts +1 -1
- package/dist/src/entities/mrs/schema-readonly.js +126 -126
- package/dist/src/entities/mrs/schema-readonly.js.map +1 -1
- package/dist/src/entities/mrs/schema.d.ts +1 -1
- package/dist/src/entities/mrs/schema.js +111 -111
- package/dist/src/entities/mrs/schema.js.map +1 -1
- package/dist/src/entities/pipelines/index.d.ts +5 -5
- package/dist/src/entities/pipelines/index.js +1 -1
- package/dist/src/entities/pipelines/registry.d.ts +1 -1
- package/dist/src/entities/pipelines/registry.js +45 -45
- package/dist/src/entities/pipelines/registry.js.map +1 -1
- package/dist/src/entities/pipelines/schema-readonly.d.ts +2 -2
- package/dist/src/entities/pipelines/schema-readonly.js +73 -73
- package/dist/src/entities/pipelines/schema.d.ts +1 -1
- package/dist/src/entities/pipelines/schema.js +21 -21
- package/dist/src/entities/refs/index.d.ts +3 -3
- package/dist/src/entities/refs/registry.d.ts +1 -1
- package/dist/src/entities/refs/registry.js +31 -31
- package/dist/src/entities/refs/registry.js.map +1 -1
- package/dist/src/entities/refs/schema-readonly.d.ts +1 -1
- package/dist/src/entities/refs/schema-readonly.js +21 -21
- package/dist/src/entities/refs/schema.d.ts +1 -1
- package/dist/src/entities/refs/schema.js +56 -56
- package/dist/src/entities/releases/index.d.ts +3 -3
- package/dist/src/entities/releases/registry.d.ts +1 -1
- package/dist/src/entities/releases/registry.js +21 -21
- package/dist/src/entities/releases/registry.js.map +1 -1
- package/dist/src/entities/releases/schema-readonly.d.ts +1 -1
- package/dist/src/entities/releases/schema-readonly.js +13 -13
- package/dist/src/entities/releases/schema.d.ts +1 -1
- package/dist/src/entities/releases/schema.js +21 -21
- package/dist/src/entities/search/index.d.ts +2 -2
- package/dist/src/entities/search/registry.d.ts +1 -1
- package/dist/src/entities/search/registry.js +13 -13
- package/dist/src/entities/search/schema-readonly.d.ts +1 -1
- package/dist/src/entities/search/schema-readonly.js +23 -23
- package/dist/src/entities/shared.d.ts +1 -1
- package/dist/src/entities/shared.js +5 -5
- package/dist/src/entities/snippets/index.d.ts +5 -5
- package/dist/src/entities/snippets/index.js +1 -1
- package/dist/src/entities/snippets/registry.d.ts +1 -1
- package/dist/src/entities/snippets/registry.js +24 -24
- package/dist/src/entities/snippets/registry.js.map +1 -1
- package/dist/src/entities/snippets/schema-readonly.d.ts +1 -1
- package/dist/src/entities/snippets/schema-readonly.js +11 -11
- package/dist/src/entities/snippets/schema.d.ts +1 -1
- package/dist/src/entities/snippets/schema.js +27 -27
- package/dist/src/entities/snippets/schema.js.map +1 -1
- package/dist/src/entities/utils.d.ts +2 -2
- package/dist/src/entities/utils.js +8 -8
- package/dist/src/entities/utils.js.map +1 -1
- package/dist/src/entities/variables/index.d.ts +5 -5
- package/dist/src/entities/variables/index.js +1 -1
- package/dist/src/entities/variables/registry.d.ts +1 -1
- package/dist/src/entities/variables/registry.js +22 -22
- package/dist/src/entities/variables/registry.js.map +1 -1
- package/dist/src/entities/variables/schema-readonly.d.ts +1 -1
- package/dist/src/entities/variables/schema-readonly.js +6 -6
- package/dist/src/entities/variables/schema.d.ts +1 -1
- package/dist/src/entities/variables/schema.js +21 -21
- package/dist/src/entities/variables/schema.js.map +1 -1
- package/dist/src/entities/webhooks/index.d.ts +4 -4
- package/dist/src/entities/webhooks/registry.d.ts +1 -1
- package/dist/src/entities/webhooks/registry.js +29 -29
- package/dist/src/entities/webhooks/registry.js.map +1 -1
- package/dist/src/entities/webhooks/schema-readonly.d.ts +1 -1
- package/dist/src/entities/webhooks/schema-readonly.js +9 -9
- package/dist/src/entities/webhooks/schema.d.ts +1 -1
- package/dist/src/entities/webhooks/schema.js +59 -59
- package/dist/src/entities/wiki/index.d.ts +5 -5
- package/dist/src/entities/wiki/index.js +1 -1
- package/dist/src/entities/wiki/registry.d.ts +1 -1
- package/dist/src/entities/wiki/registry.js +19 -19
- package/dist/src/entities/wiki/registry.js.map +1 -1
- package/dist/src/entities/wiki/schema-readonly.d.ts +1 -1
- package/dist/src/entities/wiki/schema-readonly.js +6 -6
- package/dist/src/entities/wiki/schema.d.ts +1 -1
- package/dist/src/entities/wiki/schema.js +12 -12
- package/dist/src/entities/workitems/index.d.ts +5 -5
- package/dist/src/entities/workitems/index.js +1 -1
- package/dist/src/entities/workitems/registry.d.ts +1 -1
- package/dist/src/entities/workitems/registry.js +101 -101
- package/dist/src/entities/workitems/registry.js.map +1 -1
- package/dist/src/entities/workitems/schema-readonly.d.ts +1 -1
- package/dist/src/entities/workitems/schema-readonly.js +27 -27
- package/dist/src/entities/workitems/schema-readonly.js.map +1 -1
- package/dist/src/entities/workitems/schema.d.ts +1 -1
- package/dist/src/entities/workitems/schema.js +58 -58
- package/dist/src/graphql/DynamicWorkItemsQuery.d.ts +2 -2
- package/dist/src/graphql/DynamicWorkItemsQuery.js +47 -47
- package/dist/src/graphql/DynamicWorkItemsQuery.js.map +1 -1
- package/dist/src/graphql/client.d.ts +1 -1
- package/dist/src/graphql/client.js +4 -4
- package/dist/src/graphql/client.js.map +1 -1
- package/dist/src/graphql/index.d.ts +2 -2
- package/dist/src/graphql/workItems.d.ts +38 -38
- package/dist/src/graphql/workItems.js +30 -30
- package/dist/src/handlers.d.ts +2 -1
- package/dist/src/handlers.js +258 -86
- package/dist/src/handlers.js.map +1 -1
- package/dist/src/http-client.js +3 -3
- package/dist/src/logger.js +25 -25
- package/dist/src/logging/access-log.d.ts +2 -2
- package/dist/src/logging/access-log.js +25 -25
- package/dist/src/logging/connection-tracker.d.ts +1 -1
- package/dist/src/logging/connection-tracker.js +3 -3
- package/dist/src/logging/index.d.ts +5 -5
- package/dist/src/logging/request-tracker.d.ts +3 -3
- package/dist/src/logging/request-tracker.js +4 -4
- package/dist/src/logging/types.d.ts +3 -3
- package/dist/src/logging/types.js +1 -1
- package/dist/src/logging/types.js.map +1 -1
- package/dist/src/main.js +28 -28
- package/dist/src/middleware/index.d.ts +3 -2
- package/dist/src/middleware/index.js +3 -1
- package/dist/src/middleware/index.js.map +1 -1
- package/dist/src/middleware/oauth-auth.d.ts +1 -1
- package/dist/src/middleware/oauth-auth.js +17 -17
- package/dist/src/middleware/rate-limiter.d.ts +1 -1
- package/dist/src/middleware/rate-limiter.js +32 -32
- package/dist/src/middleware/response-write-timeout.d.ts +2 -0
- package/dist/src/middleware/response-write-timeout.js +62 -0
- package/dist/src/middleware/response-write-timeout.js.map +1 -0
- package/dist/src/oauth/config.d.ts +1 -1
- package/dist/src/oauth/config.js +18 -18
- package/dist/src/oauth/config.js.map +1 -1
- package/dist/src/oauth/endpoints/authorize.d.ts +1 -1
- package/dist/src/oauth/endpoints/authorize.js +32 -32
- package/dist/src/oauth/endpoints/callback.d.ts +1 -1
- package/dist/src/oauth/endpoints/callback.js +26 -26
- package/dist/src/oauth/endpoints/index.d.ts +5 -5
- package/dist/src/oauth/endpoints/metadata.d.ts +1 -1
- package/dist/src/oauth/endpoints/metadata.js +12 -12
- package/dist/src/oauth/endpoints/register.d.ts +1 -1
- package/dist/src/oauth/endpoints/register.js +9 -9
- package/dist/src/oauth/endpoints/token.d.ts +1 -1
- package/dist/src/oauth/endpoints/token.js +28 -28
- package/dist/src/oauth/gitlab-device-flow.d.ts +2 -2
- package/dist/src/oauth/gitlab-device-flow.js +73 -68
- package/dist/src/oauth/gitlab-device-flow.js.map +1 -1
- package/dist/src/oauth/index.d.ts +10 -10
- package/dist/src/oauth/session-store.d.ts +2 -2
- package/dist/src/oauth/session-store.js +40 -40
- package/dist/src/oauth/session-store.js.map +1 -1
- package/dist/src/oauth/storage/factory.d.ts +2 -2
- package/dist/src/oauth/storage/factory.js +16 -16
- package/dist/src/oauth/storage/file.d.ts +2 -2
- package/dist/src/oauth/storage/file.js +22 -22
- package/dist/src/oauth/storage/file.js.map +1 -1
- package/dist/src/oauth/storage/index.d.ts +5 -5
- package/dist/src/oauth/storage/memory.d.ts +2 -2
- package/dist/src/oauth/storage/memory.js +18 -18
- package/dist/src/oauth/storage/memory.js.map +1 -1
- package/dist/src/oauth/storage/postgresql.d.ts +2 -2
- package/dist/src/oauth/storage/postgresql.js +11 -11
- package/dist/src/oauth/storage/postgresql.js.map +1 -1
- package/dist/src/oauth/storage/types.d.ts +3 -3
- package/dist/src/oauth/token-context.d.ts +1 -1
- package/dist/src/oauth/token-context.js +1 -1
- package/dist/src/oauth/token-utils.d.ts +1 -1
- package/dist/src/oauth/token-utils.js +20 -20
- package/dist/src/oauth/types.d.ts +3 -3
- package/dist/src/profiles/applicator.d.ts +1 -1
- package/dist/src/profiles/applicator.js +48 -48
- package/dist/src/profiles/index.d.ts +5 -5
- package/dist/src/profiles/loader.d.ts +3 -3
- package/dist/src/profiles/loader.js +25 -25
- package/dist/src/profiles/loader.js.map +1 -1
- package/dist/src/profiles/project-loader.d.ts +1 -1
- package/dist/src/profiles/project-loader.js +23 -23
- package/dist/src/profiles/project-loader.js.map +1 -1
- package/dist/src/profiles/scope-enforcer.d.ts +2 -2
- package/dist/src/profiles/scope-enforcer.js +25 -25
- package/dist/src/profiles/scope-enforcer.js.map +1 -1
- package/dist/src/profiles/types.d.ts +2 -2
- package/dist/src/profiles/types.js +50 -48
- package/dist/src/profiles/types.js.map +1 -1
- package/dist/src/registry-manager.d.ts +19 -11
- package/dist/src/registry-manager.js +257 -172
- package/dist/src/registry-manager.js.map +1 -1
- package/dist/src/server.js +165 -149
- package/dist/src/server.js.map +1 -1
- package/dist/src/services/ConnectionManager.d.ts +33 -24
- package/dist/src/services/ConnectionManager.js +304 -179
- package/dist/src/services/ConnectionManager.js.map +1 -1
- package/dist/src/services/GitLabVersionDetector.d.ts +2 -2
- package/dist/src/services/GitLabVersionDetector.js +45 -45
- package/dist/src/services/GitLabVersionDetector.js.map +1 -1
- package/dist/src/services/HealthMonitor.d.ts +42 -0
- package/dist/src/services/HealthMonitor.js +544 -0
- package/dist/src/services/HealthMonitor.js.map +1 -0
- package/dist/src/services/InstanceConnectionPool.d.ts +2 -2
- package/dist/src/services/InstanceConnectionPool.js +13 -13
- package/dist/src/services/InstanceConnectionPool.js.map +1 -1
- package/dist/src/services/InstanceRateLimiter.js +6 -6
- package/dist/src/services/InstanceRateLimiter.js.map +1 -1
- package/dist/src/services/InstanceRegistry.d.ts +4 -5
- package/dist/src/services/InstanceRegistry.js +29 -41
- package/dist/src/services/InstanceRegistry.js.map +1 -1
- package/dist/src/services/NamespaceTierDetector.d.ts +2 -2
- package/dist/src/services/NamespaceTierDetector.js +30 -30
- package/dist/src/services/NamespaceTierDetector.js.map +1 -1
- package/dist/src/services/SchemaIntrospector.d.ts +2 -1
- package/dist/src/services/SchemaIntrospector.js +45 -42
- package/dist/src/services/SchemaIntrospector.js.map +1 -1
- package/dist/src/services/TokenScopeDetector.d.ts +4 -4
- package/dist/src/services/TokenScopeDetector.js +133 -110
- package/dist/src/services/TokenScopeDetector.js.map +1 -1
- package/dist/src/services/ToolAvailability.d.ts +15 -11
- package/dist/src/services/ToolAvailability.js +150 -130
- package/dist/src/services/ToolAvailability.js.map +1 -1
- package/dist/src/services/WidgetAvailability.d.ts +5 -5
- package/dist/src/services/WidgetAvailability.js +40 -39
- package/dist/src/services/WidgetAvailability.js.map +1 -1
- package/dist/src/session-manager.d.ts +3 -2
- package/dist/src/session-manager.js +17 -14
- package/dist/src/session-manager.js.map +1 -1
- package/dist/src/types.js +4 -4
- package/dist/src/utils/description-utils.js +4 -4
- package/dist/src/utils/description-utils.js.map +1 -1
- package/dist/src/utils/error-handler.d.ts +19 -10
- package/dist/src/utils/error-handler.js +272 -187
- package/dist/src/utils/error-handler.js.map +1 -1
- package/dist/src/utils/fetch.d.ts +7 -0
- package/dist/src/utils/fetch.js +136 -122
- package/dist/src/utils/fetch.js.map +1 -1
- package/dist/src/utils/gitlab-api.d.ts +1 -1
- package/dist/src/utils/gitlab-api.js +29 -26
- package/dist/src/utils/gitlab-api.js.map +1 -1
- package/dist/src/utils/idConversion.js +47 -47
- package/dist/src/utils/idConversion.js.map +1 -1
- package/dist/src/utils/namespace.d.ts +2 -2
- package/dist/src/utils/namespace.js +15 -15
- package/dist/src/utils/projectIdentifier.js +4 -4
- package/dist/src/utils/request-logger.d.ts +4 -4
- package/dist/src/utils/request-logger.js +5 -5
- package/dist/src/utils/schema-utils.js +24 -24
- package/dist/src/utils/schema-utils.js.map +1 -1
- package/dist/src/utils/smart-user-search.d.ts +1 -1
- package/dist/src/utils/smart-user-search.js +10 -10
- package/dist/src/utils/url.d.ts +1 -0
- package/dist/src/utils/url.js +38 -0
- package/dist/src/utils/url.js.map +1 -0
- package/dist/src/utils/version.js +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +22 -31
- 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
|
-
|
|
50
|
+
'browse_projects',
|
|
51
51
|
{
|
|
52
|
-
name:
|
|
53
|
-
description:
|
|
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)(
|
|
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
|
|
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(
|
|
69
|
-
queryParams.set(
|
|
70
|
-
finalSearchTerms = finalSearchTerms.replace(/topic:\w+/g,
|
|
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(
|
|
73
|
+
queryParams.set('search', finalSearchTerms);
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
if (with_programming_language)
|
|
77
|
-
queryParams.set(
|
|
77
|
+
queryParams.set('with_programming_language', with_programming_language);
|
|
78
78
|
if (visibility)
|
|
79
|
-
queryParams.set(
|
|
79
|
+
queryParams.set('visibility', visibility);
|
|
80
80
|
if (order_by)
|
|
81
|
-
queryParams.set(
|
|
81
|
+
queryParams.set('order_by', order_by);
|
|
82
82
|
if (sort)
|
|
83
|
-
queryParams.set(
|
|
83
|
+
queryParams.set('sort', sort);
|
|
84
84
|
if (per_page)
|
|
85
|
-
queryParams.set(
|
|
85
|
+
queryParams.set('per_page', String(per_page));
|
|
86
86
|
if (page)
|
|
87
|
-
queryParams.set(
|
|
88
|
-
queryParams.set(
|
|
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
|
|
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(
|
|
101
|
+
queryParams.set('visibility', visibility);
|
|
102
102
|
if (archived !== undefined)
|
|
103
|
-
queryParams.set(
|
|
103
|
+
queryParams.set('archived', String(archived));
|
|
104
104
|
if (owned !== undefined)
|
|
105
|
-
queryParams.set(
|
|
105
|
+
queryParams.set('owned', String(owned));
|
|
106
106
|
if (starred !== undefined)
|
|
107
|
-
queryParams.set(
|
|
107
|
+
queryParams.set('starred', String(starred));
|
|
108
108
|
if (membership !== undefined)
|
|
109
|
-
queryParams.set(
|
|
109
|
+
queryParams.set('membership', String(membership));
|
|
110
110
|
if (search)
|
|
111
|
-
queryParams.set(
|
|
111
|
+
queryParams.set('search', search);
|
|
112
112
|
if (simple !== undefined)
|
|
113
|
-
queryParams.set(
|
|
113
|
+
queryParams.set('simple', String(simple));
|
|
114
114
|
if (order_by)
|
|
115
|
-
queryParams.set(
|
|
115
|
+
queryParams.set('order_by', order_by);
|
|
116
116
|
if (sort)
|
|
117
|
-
queryParams.set(
|
|
117
|
+
queryParams.set('sort', sort);
|
|
118
118
|
if (per_page)
|
|
119
|
-
queryParams.set(
|
|
119
|
+
queryParams.set('per_page', String(per_page));
|
|
120
120
|
if (page)
|
|
121
|
-
queryParams.set(
|
|
121
|
+
queryParams.set('page', String(page));
|
|
122
122
|
if (include_subgroups !== undefined)
|
|
123
|
-
queryParams.set(
|
|
123
|
+
queryParams.set('include_subgroups', String(include_subgroups));
|
|
124
124
|
if (with_shared !== undefined)
|
|
125
|
-
queryParams.set(
|
|
125
|
+
queryParams.set('with_shared', String(with_shared));
|
|
126
126
|
if (with_programming_language)
|
|
127
|
-
queryParams.set(
|
|
128
|
-
if (!queryParams.has(
|
|
129
|
-
queryParams.set(
|
|
130
|
-
if (!queryParams.has(
|
|
131
|
-
queryParams.set(
|
|
132
|
-
if (!queryParams.has(
|
|
133
|
-
queryParams.set(
|
|
134
|
-
if (!queryParams.has(
|
|
135
|
-
queryParams.set(
|
|
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(
|
|
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
|
|
151
|
+
case 'get': {
|
|
152
152
|
const { project_id, statistics, license } = input;
|
|
153
153
|
const queryParams = new URLSearchParams();
|
|
154
154
|
if (statistics)
|
|
155
|
-
queryParams.set(
|
|
155
|
+
queryParams.set('statistics', 'true');
|
|
156
156
|
if (license)
|
|
157
|
-
queryParams.set(
|
|
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
|
-
|
|
173
|
+
'browse_namespaces',
|
|
174
174
|
{
|
|
175
|
-
name:
|
|
176
|
-
description:
|
|
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)(
|
|
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
|
|
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(
|
|
188
|
+
queryParams.set('search', search);
|
|
189
189
|
if (owned_only !== undefined)
|
|
190
|
-
queryParams.set(
|
|
190
|
+
queryParams.set('owned_only', String(owned_only));
|
|
191
191
|
if (top_level_only !== undefined)
|
|
192
|
-
queryParams.set(
|
|
192
|
+
queryParams.set('top_level_only', String(top_level_only));
|
|
193
193
|
if (with_statistics !== undefined)
|
|
194
|
-
queryParams.set(
|
|
194
|
+
queryParams.set('with_statistics', String(with_statistics));
|
|
195
195
|
if (min_access_level !== undefined)
|
|
196
|
-
queryParams.set(
|
|
196
|
+
queryParams.set('min_access_level', String(min_access_level));
|
|
197
197
|
if (per_page)
|
|
198
|
-
queryParams.set(
|
|
198
|
+
queryParams.set('per_page', String(per_page));
|
|
199
199
|
if (page)
|
|
200
|
-
queryParams.set(
|
|
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
|
|
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
|
|
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
|
-
|
|
237
|
+
'browse_commits',
|
|
238
238
|
{
|
|
239
|
-
name:
|
|
240
|
-
description:
|
|
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)(
|
|
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
|
|
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(
|
|
252
|
+
queryParams.set('ref_name', ref_name);
|
|
253
253
|
if (since)
|
|
254
|
-
queryParams.set(
|
|
254
|
+
queryParams.set('since', since);
|
|
255
255
|
if (until)
|
|
256
|
-
queryParams.set(
|
|
256
|
+
queryParams.set('until', until);
|
|
257
257
|
if (path)
|
|
258
|
-
queryParams.set(
|
|
258
|
+
queryParams.set('path', path);
|
|
259
259
|
if (author)
|
|
260
|
-
queryParams.set(
|
|
260
|
+
queryParams.set('author', author);
|
|
261
261
|
if (all !== undefined)
|
|
262
|
-
queryParams.set(
|
|
262
|
+
queryParams.set('all', String(all));
|
|
263
263
|
if (with_stats !== undefined)
|
|
264
|
-
queryParams.set(
|
|
264
|
+
queryParams.set('with_stats', String(with_stats));
|
|
265
265
|
if (first_parent !== undefined)
|
|
266
|
-
queryParams.set(
|
|
266
|
+
queryParams.set('first_parent', String(first_parent));
|
|
267
267
|
if (order)
|
|
268
|
-
queryParams.set(
|
|
268
|
+
queryParams.set('order', order);
|
|
269
269
|
if (trailers !== undefined)
|
|
270
|
-
queryParams.set(
|
|
270
|
+
queryParams.set('trailers', String(trailers));
|
|
271
271
|
if (per_page)
|
|
272
|
-
queryParams.set(
|
|
272
|
+
queryParams.set('per_page', String(per_page));
|
|
273
273
|
if (page)
|
|
274
|
-
queryParams.set(
|
|
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
|
|
282
|
+
case 'get': {
|
|
283
283
|
const { project_id, sha, stats } = input;
|
|
284
284
|
const queryParams = new URLSearchParams();
|
|
285
285
|
if (stats)
|
|
286
|
-
queryParams.set(
|
|
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
|
|
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(
|
|
298
|
+
queryParams.set('unidiff', 'true');
|
|
299
299
|
if (per_page)
|
|
300
|
-
queryParams.set(
|
|
300
|
+
queryParams.set('per_page', String(per_page));
|
|
301
301
|
if (page)
|
|
302
|
-
queryParams.set(
|
|
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
|
-
|
|
317
|
+
'browse_events',
|
|
318
318
|
{
|
|
319
|
-
name:
|
|
320
|
-
description:
|
|
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)(
|
|
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(
|
|
330
|
+
queryParams.set('target_type', opts.target_type);
|
|
331
331
|
if (opts.event_action)
|
|
332
|
-
queryParams.set(
|
|
332
|
+
queryParams.set('action', opts.event_action);
|
|
333
333
|
if (opts.before)
|
|
334
|
-
queryParams.set(
|
|
334
|
+
queryParams.set('before', opts.before);
|
|
335
335
|
if (opts.after)
|
|
336
|
-
queryParams.set(
|
|
336
|
+
queryParams.set('after', opts.after);
|
|
337
337
|
if (opts.sort)
|
|
338
|
-
queryParams.set(
|
|
338
|
+
queryParams.set('sort', opts.sort);
|
|
339
339
|
if (opts.per_page)
|
|
340
|
-
queryParams.set(
|
|
340
|
+
queryParams.set('per_page', String(opts.per_page));
|
|
341
341
|
if (opts.page)
|
|
342
|
-
queryParams.set(
|
|
342
|
+
queryParams.set('page', String(opts.page));
|
|
343
343
|
return queryParams;
|
|
344
344
|
};
|
|
345
345
|
switch (input.action) {
|
|
346
|
-
case
|
|
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
|
|
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
|
-
|
|
372
|
+
'browse_users',
|
|
373
373
|
{
|
|
374
|
-
name:
|
|
375
|
-
description:
|
|
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)(
|
|
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
|
|
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 !==
|
|
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 !==
|
|
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
|
|
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
|
-
|
|
431
|
+
'browse_todos',
|
|
432
432
|
{
|
|
433
|
-
name:
|
|
434
|
-
description:
|
|
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)(
|
|
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
|
|
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(
|
|
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
|
-
|
|
467
|
+
'manage_project',
|
|
468
468
|
{
|
|
469
|
-
name:
|
|
470
|
-
description:
|
|
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)(
|
|
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
|
|
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
|
-
:
|
|
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(
|
|
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(
|
|
507
|
+
.replace(/[^a-z0-9-]/g, '-')
|
|
508
|
+
.replace(/-+/g, '-')
|
|
509
|
+
.replace(/^-|-$/g, '');
|
|
510
|
+
body.set('path', generatedPath);
|
|
511
511
|
if (namespaceId)
|
|
512
|
-
body.set(
|
|
512
|
+
body.set('namespace_id', namespaceId);
|
|
513
513
|
if (description)
|
|
514
|
-
body.set(
|
|
514
|
+
body.set('description', description);
|
|
515
515
|
if (visibility)
|
|
516
|
-
body.set(
|
|
516
|
+
body.set('visibility', visibility);
|
|
517
517
|
if (initialize_with_readme)
|
|
518
|
-
body.set(
|
|
518
|
+
body.set('initialize_with_readme', 'true');
|
|
519
519
|
if (issues_enabled !== undefined)
|
|
520
|
-
body.set(
|
|
520
|
+
body.set('issues_enabled', String(issues_enabled));
|
|
521
521
|
if (merge_requests_enabled !== undefined)
|
|
522
|
-
body.set(
|
|
522
|
+
body.set('merge_requests_enabled', String(merge_requests_enabled));
|
|
523
523
|
if (jobs_enabled !== undefined)
|
|
524
|
-
body.set(
|
|
524
|
+
body.set('jobs_enabled', String(jobs_enabled));
|
|
525
525
|
if (wiki_enabled !== undefined)
|
|
526
|
-
body.set(
|
|
526
|
+
body.set('wiki_enabled', String(wiki_enabled));
|
|
527
527
|
if (snippets_enabled !== undefined)
|
|
528
|
-
body.set(
|
|
528
|
+
body.set('snippets_enabled', String(snippets_enabled));
|
|
529
529
|
if (lfs_enabled !== undefined)
|
|
530
|
-
body.set(
|
|
530
|
+
body.set('lfs_enabled', String(lfs_enabled));
|
|
531
531
|
if (request_access_enabled !== undefined)
|
|
532
|
-
body.set(
|
|
532
|
+
body.set('request_access_enabled', String(request_access_enabled));
|
|
533
533
|
if (only_allow_merge_if_pipeline_succeeds !== undefined)
|
|
534
|
-
body.set(
|
|
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(
|
|
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:
|
|
540
|
-
headers: {
|
|
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}` :
|
|
550
|
+
namespace_resolved: namespace ? `${namespace} -> ${namespaceId}` : 'current-user',
|
|
551
551
|
generated_path: generatedPath,
|
|
552
552
|
},
|
|
553
553
|
};
|
|
554
554
|
}
|
|
555
|
-
case
|
|
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(
|
|
559
|
+
body.set('namespace', namespace);
|
|
560
560
|
if (namespace_path)
|
|
561
|
-
body.set(
|
|
561
|
+
body.set('namespace_path', namespace_path);
|
|
562
562
|
if (fork_name)
|
|
563
|
-
body.set(
|
|
563
|
+
body.set('name', fork_name);
|
|
564
564
|
if (fork_path)
|
|
565
|
-
body.set(
|
|
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:
|
|
569
|
-
headers: {
|
|
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
|
|
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:
|
|
588
|
-
headers: {
|
|
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
|
|
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:
|
|
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
|
|
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:
|
|
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
|
|
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:
|
|
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
|
|
623
|
+
case 'transfer': {
|
|
624
624
|
const { project_id, namespace } = input;
|
|
625
625
|
const body = new URLSearchParams();
|
|
626
|
-
body.set(
|
|
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:
|
|
630
|
-
headers: {
|
|
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
|
-
|
|
645
|
+
'manage_namespace',
|
|
646
646
|
{
|
|
647
|
-
name:
|
|
648
|
-
description:
|
|
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)(
|
|
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
|
|
656
|
+
case 'create': {
|
|
657
657
|
const body = new URLSearchParams();
|
|
658
|
-
body.set(
|
|
659
|
-
body.set(
|
|
658
|
+
body.set('name', input.name);
|
|
659
|
+
body.set('path', input.path);
|
|
660
660
|
if (input.description)
|
|
661
|
-
body.set(
|
|
661
|
+
body.set('description', input.description);
|
|
662
662
|
if (input.visibility)
|
|
663
|
-
body.set(
|
|
663
|
+
body.set('visibility', input.visibility);
|
|
664
664
|
if (input.parent_id !== undefined)
|
|
665
|
-
body.set(
|
|
665
|
+
body.set('parent_id', String(input.parent_id));
|
|
666
666
|
if (input.lfs_enabled !== undefined)
|
|
667
|
-
body.set(
|
|
667
|
+
body.set('lfs_enabled', String(input.lfs_enabled));
|
|
668
668
|
if (input.request_access_enabled !== undefined)
|
|
669
|
-
body.set(
|
|
669
|
+
body.set('request_access_enabled', String(input.request_access_enabled));
|
|
670
670
|
if (input.default_branch_protection !== undefined)
|
|
671
|
-
body.set(
|
|
671
|
+
body.set('default_branch_protection', String(input.default_branch_protection));
|
|
672
672
|
if (input.avatar)
|
|
673
|
-
body.set(
|
|
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:
|
|
677
|
-
headers: {
|
|
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
|
|
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:
|
|
696
|
-
headers: {
|
|
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
|
|
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:
|
|
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
|
-
|
|
720
|
+
'manage_todos',
|
|
721
721
|
{
|
|
722
|
-
name:
|
|
723
|
-
description:
|
|
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)(
|
|
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
|
|
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:
|
|
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
|
|
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:
|
|
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:
|
|
746
|
+
return { success: true, message: 'All todos marked as done' };
|
|
747
747
|
}
|
|
748
|
-
case
|
|
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:
|
|
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
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
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
|
}
|