@structured-world/gitlab-mcp 6.62.1 → 6.62.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- 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/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 +17 -17
- 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 +65 -65
- 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 +4 -4
- package/dist/src/config.js +89 -89
- 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 +1 -1
- 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 +1 -1
- package/dist/src/handlers.js +55 -55
- 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/main.js +28 -28
- package/dist/src/middleware/index.d.ts +2 -2
- 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/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 +46 -46
- 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 +1 -1
- package/dist/src/registry-manager.js +64 -64
- package/dist/src/registry-manager.js.map +1 -1
- package/dist/src/server.js +136 -136
- package/dist/src/server.js.map +1 -1
- package/dist/src/services/ConnectionManager.d.ts +5 -5
- package/dist/src/services/ConnectionManager.js +45 -45
- 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/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 -4
- package/dist/src/services/InstanceRegistry.js +23 -23
- 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 +1 -1
- package/dist/src/services/SchemaIntrospector.js +42 -42
- package/dist/src/services/SchemaIntrospector.js.map +1 -1
- package/dist/src/services/TokenScopeDetector.d.ts +2 -2
- package/dist/src/services/TokenScopeDetector.js +80 -80
- package/dist/src/services/TokenScopeDetector.js.map +1 -1
- package/dist/src/services/ToolAvailability.d.ts +6 -6
- package/dist/src/services/ToolAvailability.js +122 -122
- package/dist/src/services/ToolAvailability.js.map +1 -1
- package/dist/src/services/WidgetAvailability.d.ts +2 -2
- package/dist/src/services/WidgetAvailability.js +34 -34
- 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 +9 -9
- package/dist/src/utils/error-handler.js +187 -187
- package/dist/src/utils/error-handler.js.map +1 -1
- package/dist/src/utils/fetch.js +85 -85
- 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 +24 -24
- 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/version.js +1 -1
- package/dist/structured-world-gitlab-mcp-6.62.2.tgz +0 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +18 -21
- package/dist/structured-world-gitlab-mcp-6.62.1.tgz +0 -0
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
Advanced GitLab MCP server — 44 tools across 18 entity types with CQRS architecture, OAuth 2.1, and multiple transport modes.
|
|
6
6
|
|
|
7
|
-
[](https://gitlab-mcp.sw.foundation/downloads/gitlab-mcp-6.62.
|
|
7
|
+
[](https://gitlab-mcp.sw.foundation/downloads/gitlab-mcp-6.62.2.mcpb)
|
|
8
8
|
[](vscode:mcp/install?%7B%22name%22%3A%22gitlab-mcp%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40structured-world%2Fgitlab-mcp%22%5D%7D)
|
|
9
9
|
[](vscode-insiders:mcp/install?%7B%22name%22%3A%22gitlab-mcp%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40structured-world%2Fgitlab-mcp%22%5D%7D)
|
|
10
10
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../generated/prisma/client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,yDAA0C;AAC1C,mEAAoD;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../generated/prisma/client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,yDAA0C;AAC1C,mEAAoD;AAqB3C,wBAAM;AAnBf,kDAAiC;AACjC,0CAAuB;AAgBV,QAAA,YAAY,GAAG,MAAM,CAAC,oBAAoB,EAAE,CAAA"}
|
|
@@ -37,8 +37,8 @@ exports.getPrismaClientClass = getPrismaClientClass;
|
|
|
37
37
|
const runtime = __importStar(require("@prisma/client/runtime/client"));
|
|
38
38
|
const config = {
|
|
39
39
|
"previewFeatures": [],
|
|
40
|
-
"clientVersion": "7.
|
|
41
|
-
"engineVersion": "
|
|
40
|
+
"clientVersion": "7.5.0",
|
|
41
|
+
"engineVersion": "280c870be64f457428992c43c1f6d557fab6e29e",
|
|
42
42
|
"activeProvider": "postgresql",
|
|
43
43
|
"inlineSchema": "// Prisma schema for gitlab-mcp OAuth session storage\n// Supports PostgreSQL for multi-instance deployments\n\ngenerator client {\n provider = \"prisma-client\"\n output = \"../generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n}\n\n// OAuth session representing an authenticated user\nmodel OAuthSession {\n id String @id @default(uuid())\n\n // MCP tokens (issued by gitlab-mcp to Claude)\n mcpAccessToken String @map(\"mcp_access_token\")\n mcpRefreshToken String @map(\"mcp_refresh_token\")\n mcpTokenExpiry BigInt @map(\"mcp_token_expiry\")\n\n // GitLab tokens (obtained from GitLab OAuth)\n gitlabAccessToken String @map(\"gitlab_access_token\")\n gitlabRefreshToken String @map(\"gitlab_refresh_token\")\n gitlabTokenExpiry BigInt @map(\"gitlab_token_expiry\")\n\n // User info from GitLab\n gitlabUserId Int @map(\"gitlab_user_id\")\n gitlabUsername String @map(\"gitlab_username\")\n\n // Multi-instance support\n gitlabApiUrl String? @map(\"gitlab_api_url\")\n instanceLabel String? @map(\"instance_label\")\n\n // Session metadata\n clientId String @map(\"client_id\")\n scopes String[] @default([])\n createdAt BigInt @map(\"created_at\")\n updatedAt BigInt @map(\"updated_at\")\n\n // Relations\n authorizationCodes AuthorizationCode[]\n mcpSessionMappings McpSessionMapping[]\n\n @@index([mcpAccessToken], map: \"idx_oauth_sessions_mcp_access_token\")\n @@index([mcpRefreshToken], map: \"idx_oauth_sessions_mcp_refresh_token\")\n @@index([gitlabUserId], map: \"idx_oauth_sessions_gitlab_user_id\")\n @@map(\"oauth_sessions\")\n}\n\n// State for tracking in-progress Device Flow authorization\nmodel DeviceFlowState {\n state String @id\n deviceCode String @map(\"device_code\")\n userCode String @map(\"user_code\")\n verificationUri String @map(\"verification_uri\")\n verificationUriComplete String? @map(\"verification_uri_complete\")\n expiresAt BigInt @map(\"expires_at\")\n interval Int\n clientId String @map(\"client_id\")\n codeChallenge String @map(\"code_challenge\")\n codeChallengeMethod String @map(\"code_challenge_method\")\n redirectUri String? @map(\"redirect_uri\")\n\n @@index([deviceCode], map: \"idx_oauth_device_flows_device_code\")\n @@index([expiresAt], map: \"idx_oauth_device_flows_expires_at\")\n @@map(\"oauth_device_flows\")\n}\n\n// State for tracking in-progress Authorization Code Flow\nmodel AuthCodeFlowState {\n internalState String @id @map(\"internal_state\")\n clientId String @map(\"client_id\")\n codeChallenge String @map(\"code_challenge\")\n codeChallengeMethod String @map(\"code_challenge_method\")\n clientState String @map(\"client_state\")\n clientRedirectUri String @map(\"client_redirect_uri\")\n callbackUri String @map(\"callback_uri\")\n expiresAt BigInt @map(\"expires_at\")\n\n @@index([expiresAt], map: \"idx_oauth_auth_code_flows_expires_at\")\n @@map(\"oauth_auth_code_flows\")\n}\n\n// Authorization code for OAuth code exchange\nmodel AuthorizationCode {\n code String @id\n sessionId String @map(\"session_id\")\n clientId String @map(\"client_id\")\n codeChallenge String @map(\"code_challenge\")\n codeChallengeMethod String @map(\"code_challenge_method\")\n redirectUri String? @map(\"redirect_uri\")\n expiresAt BigInt @map(\"expires_at\")\n\n // Relations\n session OAuthSession @relation(fields: [sessionId], references: [id], onDelete: Cascade)\n\n @@index([sessionId], map: \"idx_oauth_authorization_codes_session_id\")\n @@index([expiresAt], map: \"idx_oauth_authorization_codes_expires_at\")\n @@map(\"oauth_authorization_codes\")\n}\n\n// MCP session to OAuth session mapping\nmodel McpSessionMapping {\n mcpSessionId String @id @map(\"mcp_session_id\")\n oauthSessionId String @map(\"oauth_session_id\")\n\n // Relations\n oauthSession OAuthSession @relation(fields: [oauthSessionId], references: [id], onDelete: Cascade)\n\n @@index([oauthSessionId], map: \"idx_oauth_mcp_session_mappings_oauth_session_id\")\n @@map(\"oauth_mcp_session_mappings\")\n}\n",
|
|
44
44
|
"runtimeDataModel": {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class.js","sourceRoot":"","sources":["../../../../generated/prisma/internal/class.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"class.js","sourceRoot":"","sources":["../../../../generated/prisma/internal/class.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiPA,oDAEC;AAtOD,uEAAwD;AAIxD,MAAM,MAAM,GAAkC;IAC5C,iBAAiB,EAAE,EAAE;IACrB,eAAe,EAAE,OAAO;IACxB,eAAe,EAAE,0CAA0C;IAC3D,gBAAgB,EAAE,YAAY;IAC9B,cAAc,EAAE,stIAAstI;IACtuI,kBAAkB,EAAE;QAClB,QAAQ,EAAE,EAAE;QACZ,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,EAAE;KACZ;IACD,wBAAwB,EAAE;QACxB,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,EAAE;KACZ;CACF,CAAA;AAED,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,y3JAAy3J,CAAC,CAAA;AAC/5J,MAAM,CAAC,sBAAsB,GAAG;IAC9B,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,gsHAAgsH,CAAC;IACrtH,KAAK,EAAE,8+WAA8+W;CACt/W,CAAA;AAED,KAAK,UAAU,kBAAkB,CAAC,UAAkB;IAClD,MAAM,EAAE,MAAM,EAAE,GAAG,wDAAa,aAAa,GAAC,CAAA;IAC9C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IACnD,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;AAC1C,CAAC;AAED,MAAM,CAAC,YAAY,GAAG;IACpB,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,wDAAa,6DAA6D,GAAC;IAEnG,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,EAAE,IAAI,EAAE,GAAG,wDAAa,yEAAyE,GAAC,CAAA;QACxG,OAAO,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAA;IACvC,CAAC;IAED,UAAU,EAAE,6BAA6B;CAC1C,CAAA;AA0LD,SAAgB,oBAAoB;IAClC,OAAO,OAAO,CAAC,eAAe,CAAC,MAAM,CAAuC,CAAA;AAC9E,CAAC"}
|
|
@@ -48,8 +48,8 @@ exports.Sql = runtime.Sql;
|
|
|
48
48
|
exports.Decimal = runtime.Decimal;
|
|
49
49
|
exports.getExtensionContext = runtime.Extensions.getExtensionContext;
|
|
50
50
|
exports.prismaVersion = {
|
|
51
|
-
client: "7.
|
|
52
|
-
engine: "
|
|
51
|
+
client: "7.5.0",
|
|
52
|
+
engine: "280c870be64f457428992c43c1f6d557fab6e29e"
|
|
53
53
|
};
|
|
54
54
|
exports.NullTypes = {
|
|
55
55
|
DbNull: runtime.NullTypes.DbNull,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ContainerRuntimeInfo } from
|
|
1
|
+
import { ContainerRuntimeInfo } from './types';
|
|
2
2
|
export declare function detectContainerRuntime(): ContainerRuntimeInfo;
|
|
3
3
|
export declare function getContainerRuntime(): ContainerRuntimeInfo;
|
|
4
4
|
export declare function resetRuntimeCache(): void;
|
|
@@ -8,8 +8,8 @@ let cachedRuntime = null;
|
|
|
8
8
|
function commandSucceeds(cmd, args) {
|
|
9
9
|
try {
|
|
10
10
|
const result = (0, child_process_1.spawnSync)(cmd, args, {
|
|
11
|
-
stdio:
|
|
12
|
-
encoding:
|
|
11
|
+
stdio: 'pipe',
|
|
12
|
+
encoding: 'utf8',
|
|
13
13
|
});
|
|
14
14
|
return result.status === 0;
|
|
15
15
|
}
|
|
@@ -20,8 +20,8 @@ function commandSucceeds(cmd, args) {
|
|
|
20
20
|
function commandOutput(cmd, args) {
|
|
21
21
|
try {
|
|
22
22
|
const result = (0, child_process_1.spawnSync)(cmd, args, {
|
|
23
|
-
stdio:
|
|
24
|
-
encoding:
|
|
23
|
+
stdio: 'pipe',
|
|
24
|
+
encoding: 'utf8',
|
|
25
25
|
});
|
|
26
26
|
if (result.status === 0 && result.stdout) {
|
|
27
27
|
return result.stdout.trim();
|
|
@@ -38,24 +38,24 @@ function parseVersion(output) {
|
|
|
38
38
|
}
|
|
39
39
|
function detectComposeCmd(runtime) {
|
|
40
40
|
const runtimeCmd = runtime;
|
|
41
|
-
if (commandSucceeds(runtimeCmd, [
|
|
42
|
-
return [runtimeCmd,
|
|
41
|
+
if (commandSucceeds(runtimeCmd, ['compose', 'version'])) {
|
|
42
|
+
return [runtimeCmd, 'compose'];
|
|
43
43
|
}
|
|
44
44
|
const standaloneCompose = `${runtimeCmd}-compose`;
|
|
45
|
-
if (commandSucceeds(standaloneCompose, [
|
|
45
|
+
if (commandSucceeds(standaloneCompose, ['--version'])) {
|
|
46
46
|
return [standaloneCompose];
|
|
47
47
|
}
|
|
48
|
-
if (commandSucceeds(
|
|
49
|
-
return [
|
|
48
|
+
if (commandSucceeds('docker-compose', ['--version'])) {
|
|
49
|
+
return ['docker-compose'];
|
|
50
50
|
}
|
|
51
51
|
return null;
|
|
52
52
|
}
|
|
53
53
|
function detectContainerRuntime() {
|
|
54
|
-
const runtimes = [
|
|
54
|
+
const runtimes = ['docker', 'podman'];
|
|
55
55
|
for (const runtime of runtimes) {
|
|
56
|
-
const versionOutput = commandOutput(runtime, [
|
|
56
|
+
const versionOutput = commandOutput(runtime, ['--version']);
|
|
57
57
|
if (versionOutput) {
|
|
58
|
-
const runtimeAvailable = commandSucceeds(runtime, [
|
|
58
|
+
const runtimeAvailable = commandSucceeds(runtime, ['info']);
|
|
59
59
|
const composeCmd = detectComposeCmd(runtime);
|
|
60
60
|
const runtimeVersion = parseVersion(versionOutput);
|
|
61
61
|
return {
|
|
@@ -68,8 +68,8 @@ function detectContainerRuntime() {
|
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
return {
|
|
71
|
-
runtime:
|
|
72
|
-
runtimeCmd:
|
|
71
|
+
runtime: 'docker',
|
|
72
|
+
runtimeCmd: 'docker',
|
|
73
73
|
runtimeAvailable: false,
|
|
74
74
|
composeCmd: null,
|
|
75
75
|
runtimeVersion: undefined,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type DockerSubcommand =
|
|
1
|
+
export type DockerSubcommand = 'status' | 'init' | 'start' | 'stop' | 'restart' | 'upgrade' | 'logs' | 'add-instance' | 'remove-instance';
|
|
2
2
|
export declare function parseDockerSubcommand(args: string[]): {
|
|
3
3
|
subcommand: DockerSubcommand | undefined;
|
|
4
4
|
subArgs: string[];
|
|
@@ -52,15 +52,15 @@ function parseDockerSubcommand(args) {
|
|
|
52
52
|
const subcommand = args[0];
|
|
53
53
|
const subArgs = args.slice(1);
|
|
54
54
|
const validSubcommands = [
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
55
|
+
'status',
|
|
56
|
+
'init',
|
|
57
|
+
'start',
|
|
58
|
+
'stop',
|
|
59
|
+
'restart',
|
|
60
|
+
'upgrade',
|
|
61
|
+
'logs',
|
|
62
|
+
'add-instance',
|
|
63
|
+
'remove-instance',
|
|
64
64
|
];
|
|
65
65
|
if (subcommand && !validSubcommands.includes(subcommand)) {
|
|
66
66
|
return { subcommand: undefined, subArgs: args };
|
|
@@ -69,33 +69,33 @@ function parseDockerSubcommand(args) {
|
|
|
69
69
|
}
|
|
70
70
|
function showStatus() {
|
|
71
71
|
const status = (0, docker_utils_1.getDockerStatus)();
|
|
72
|
-
console.log(
|
|
73
|
-
console.log(` Docker installed: ${status.dockerInstalled ?
|
|
72
|
+
console.log('\nDocker Environment:');
|
|
73
|
+
console.log(` Docker installed: ${status.dockerInstalled ? '✓' : '✗'}`);
|
|
74
74
|
if (!status.dockerInstalled) {
|
|
75
|
-
console.log(
|
|
76
|
-
console.log(
|
|
75
|
+
console.log('\n⚠ Docker is not installed. Install Docker first.');
|
|
76
|
+
console.log(' https://docs.docker.com/get-docker/');
|
|
77
77
|
return;
|
|
78
78
|
}
|
|
79
|
-
console.log(` Docker running: ${status.dockerRunning ?
|
|
80
|
-
console.log(` Compose installed: ${status.composeInstalled ?
|
|
79
|
+
console.log(` Docker running: ${status.dockerRunning ? '✓' : '✗'}`);
|
|
80
|
+
console.log(` Compose installed: ${status.composeInstalled ? '✓' : '✗'}`);
|
|
81
81
|
if (!status.dockerRunning) {
|
|
82
|
-
console.log(
|
|
82
|
+
console.log('\n⚠ Docker daemon is not running. Start Docker first.');
|
|
83
83
|
return;
|
|
84
84
|
}
|
|
85
|
-
console.log(
|
|
85
|
+
console.log('\nContainer Status:');
|
|
86
86
|
if (status.container) {
|
|
87
87
|
const c = status.container;
|
|
88
88
|
console.log(` Name: ${c.name}`);
|
|
89
|
-
console.log(` Status: ${c.status}${c.uptime ? ` (${c.uptime})` :
|
|
89
|
+
console.log(` Status: ${c.status}${c.uptime ? ` (${c.uptime})` : ''}`);
|
|
90
90
|
console.log(` Image: ${c.image}`);
|
|
91
91
|
if (c.ports.length > 0) {
|
|
92
|
-
console.log(` Ports: ${c.ports.join(
|
|
92
|
+
console.log(` Ports: ${c.ports.join(', ')}`);
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
else {
|
|
96
96
|
console.log(" Container not found. Run 'gitlab-mcp docker init' to set up.");
|
|
97
97
|
}
|
|
98
|
-
console.log(
|
|
98
|
+
console.log('\nConfigured Instances:');
|
|
99
99
|
if (status.instances.length > 0) {
|
|
100
100
|
for (const instance of status.instances) {
|
|
101
101
|
console.log(` ${instance.host}: ${instance.name}`);
|
|
@@ -108,55 +108,55 @@ function showStatus() {
|
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
110
|
else {
|
|
111
|
-
console.log(
|
|
111
|
+
console.log(' No instances configured.');
|
|
112
112
|
}
|
|
113
113
|
console.log(`\nConfig directory: ${(0, docker_utils_1.getExpandedConfigDir)()}`);
|
|
114
114
|
}
|
|
115
115
|
async function initDocker() {
|
|
116
|
-
p.intro(
|
|
116
|
+
p.intro('Initialize GitLab MCP Docker Setup');
|
|
117
117
|
const status = (0, docker_utils_1.getDockerStatus)();
|
|
118
118
|
if (!status.dockerInstalled) {
|
|
119
|
-
p.log.error(
|
|
120
|
-
p.note(
|
|
121
|
-
p.outro(
|
|
119
|
+
p.log.error('Docker is not installed.');
|
|
120
|
+
p.note('Visit https://docs.docker.com/get-docker/ to install Docker.', 'Install Docker');
|
|
121
|
+
p.outro('Setup cancelled.');
|
|
122
122
|
return;
|
|
123
123
|
}
|
|
124
124
|
if (!status.composeInstalled) {
|
|
125
|
-
p.log.error(
|
|
126
|
-
p.note(
|
|
127
|
-
p.outro(
|
|
125
|
+
p.log.error('Docker Compose is not installed.');
|
|
126
|
+
p.note('Docker Compose is required. Install it with:\n docker compose version (v2, bundled with Docker Desktop)\n or\n pip install docker-compose (v1)', 'Install Compose');
|
|
127
|
+
p.outro('Setup cancelled.');
|
|
128
128
|
return;
|
|
129
129
|
}
|
|
130
130
|
const port = await p.text({
|
|
131
|
-
message:
|
|
132
|
-
placeholder:
|
|
133
|
-
initialValue:
|
|
134
|
-
validate: value => {
|
|
135
|
-
const num = parseInt(value ??
|
|
131
|
+
message: 'SSE port for MCP server:',
|
|
132
|
+
placeholder: '3333',
|
|
133
|
+
initialValue: '3333',
|
|
134
|
+
validate: (value) => {
|
|
135
|
+
const num = parseInt(value ?? '', 10);
|
|
136
136
|
if (isNaN(num) || num < 1 || num > 65535) {
|
|
137
|
-
return
|
|
137
|
+
return 'Port must be a number between 1 and 65535';
|
|
138
138
|
}
|
|
139
139
|
return undefined;
|
|
140
140
|
},
|
|
141
141
|
});
|
|
142
142
|
if (p.isCancel(port)) {
|
|
143
|
-
p.cancel(
|
|
143
|
+
p.cancel('Setup cancelled');
|
|
144
144
|
return;
|
|
145
145
|
}
|
|
146
146
|
const enableOAuth = await p.confirm({
|
|
147
|
-
message:
|
|
147
|
+
message: 'Enable OAuth for multi-instance support?',
|
|
148
148
|
initialValue: false,
|
|
149
149
|
});
|
|
150
150
|
if (p.isCancel(enableOAuth)) {
|
|
151
|
-
p.cancel(
|
|
151
|
+
p.cancel('Setup cancelled');
|
|
152
152
|
return;
|
|
153
153
|
}
|
|
154
154
|
let oauthSessionSecret;
|
|
155
155
|
if (enableOAuth) {
|
|
156
|
-
p.note(
|
|
157
|
-
"You'll need to register OAuth applications on each GitLab instance.",
|
|
158
|
-
oauthSessionSecret = (0, crypto_1.randomBytes)(32).toString(
|
|
159
|
-
p.log.warn(
|
|
156
|
+
p.note('OAuth mode allows users to authenticate with multiple GitLab instances.\n' +
|
|
157
|
+
"You'll need to register OAuth applications on each GitLab instance.", 'OAuth Mode');
|
|
158
|
+
oauthSessionSecret = (0, crypto_1.randomBytes)(32).toString('hex');
|
|
159
|
+
p.log.warn('Session secret will be stored in docker-compose.yml. Keep this file secure and do NOT commit to version control.');
|
|
160
160
|
}
|
|
161
161
|
const config = {
|
|
162
162
|
...types_1.DEFAULT_DOCKER_CONFIG,
|
|
@@ -165,42 +165,42 @@ async function initDocker() {
|
|
|
165
165
|
oauthSessionSecret,
|
|
166
166
|
};
|
|
167
167
|
const spinner = p.spinner();
|
|
168
|
-
spinner.start(
|
|
168
|
+
spinner.start('Creating Docker configuration...');
|
|
169
169
|
try {
|
|
170
170
|
(0, docker_utils_1.initDockerConfig)(config);
|
|
171
|
-
spinner.stop(
|
|
171
|
+
spinner.stop('Docker configuration created!');
|
|
172
172
|
p.log.success(`Config directory: ${(0, docker_utils_1.getExpandedConfigDir)()}`);
|
|
173
173
|
const startNow = await p.confirm({
|
|
174
|
-
message:
|
|
174
|
+
message: 'Start the container now?',
|
|
175
175
|
initialValue: true,
|
|
176
176
|
});
|
|
177
177
|
if (p.isCancel(startNow)) {
|
|
178
|
-
p.cancel(
|
|
178
|
+
p.cancel('Setup complete without starting container');
|
|
179
179
|
return;
|
|
180
180
|
}
|
|
181
181
|
if (startNow) {
|
|
182
|
-
spinner.start(
|
|
182
|
+
spinner.start('Starting container...');
|
|
183
183
|
const result = (0, docker_utils_1.startContainer)();
|
|
184
184
|
if (result.success) {
|
|
185
|
-
spinner.stop(
|
|
185
|
+
spinner.stop('Container started!');
|
|
186
186
|
}
|
|
187
187
|
else {
|
|
188
|
-
spinner.stop(
|
|
189
|
-
p.log.error(result.error ??
|
|
188
|
+
spinner.stop('Failed to start container');
|
|
189
|
+
p.log.error(result.error ?? 'Unknown error');
|
|
190
190
|
}
|
|
191
191
|
}
|
|
192
|
-
p.outro(
|
|
192
|
+
p.outro('Docker setup complete!');
|
|
193
193
|
}
|
|
194
194
|
catch (error) {
|
|
195
|
-
spinner.stop(
|
|
195
|
+
spinner.stop('Configuration failed');
|
|
196
196
|
p.log.error(error instanceof Error ? error.message : String(error));
|
|
197
197
|
}
|
|
198
198
|
}
|
|
199
199
|
function dockerStart() {
|
|
200
|
-
console.log(
|
|
200
|
+
console.log('Starting gitlab-mcp container...');
|
|
201
201
|
const result = (0, docker_utils_1.startContainer)();
|
|
202
202
|
if (result.success) {
|
|
203
|
-
console.log(
|
|
203
|
+
console.log('✓ Container started');
|
|
204
204
|
if (result.output) {
|
|
205
205
|
console.log(result.output);
|
|
206
206
|
}
|
|
@@ -210,30 +210,30 @@ function dockerStart() {
|
|
|
210
210
|
}
|
|
211
211
|
}
|
|
212
212
|
function dockerStop() {
|
|
213
|
-
console.log(
|
|
213
|
+
console.log('Stopping gitlab-mcp container...');
|
|
214
214
|
const result = (0, docker_utils_1.stopContainer)();
|
|
215
215
|
if (result.success) {
|
|
216
|
-
console.log(
|
|
216
|
+
console.log('✓ Container stopped');
|
|
217
217
|
}
|
|
218
218
|
else {
|
|
219
219
|
console.error(`✗ Failed to stop container: ${result.error}`);
|
|
220
220
|
}
|
|
221
221
|
}
|
|
222
222
|
function dockerRestart() {
|
|
223
|
-
console.log(
|
|
223
|
+
console.log('Restarting gitlab-mcp container...');
|
|
224
224
|
const result = (0, docker_utils_1.restartContainer)();
|
|
225
225
|
if (result.success) {
|
|
226
|
-
console.log(
|
|
226
|
+
console.log('✓ Container restarted');
|
|
227
227
|
}
|
|
228
228
|
else {
|
|
229
229
|
console.error(`✗ Failed to restart container: ${result.error}`);
|
|
230
230
|
}
|
|
231
231
|
}
|
|
232
232
|
function dockerUpgrade() {
|
|
233
|
-
console.log(
|
|
233
|
+
console.log('Upgrading gitlab-mcp container...');
|
|
234
234
|
const result = (0, docker_utils_1.upgradeContainer)();
|
|
235
235
|
if (result.success) {
|
|
236
|
-
console.log(
|
|
236
|
+
console.log('✓ Container upgraded to latest version');
|
|
237
237
|
}
|
|
238
238
|
else {
|
|
239
239
|
console.error(`✗ Failed to upgrade container: ${result.error}`);
|
|
@@ -243,7 +243,7 @@ function dockerLogs(follow = false, lines = 100) {
|
|
|
243
243
|
if (follow) {
|
|
244
244
|
console.log(`Tailing logs (last ${lines} lines, Ctrl+C to exit)...\n`);
|
|
245
245
|
const process = (0, docker_utils_1.tailLogs)(true, lines);
|
|
246
|
-
process.on(
|
|
246
|
+
process.on('error', (error) => {
|
|
247
247
|
console.error(`Failed to get logs: ${error.message}`);
|
|
248
248
|
});
|
|
249
249
|
}
|
|
@@ -258,94 +258,94 @@ function dockerLogs(follow = false, lines = 100) {
|
|
|
258
258
|
}
|
|
259
259
|
}
|
|
260
260
|
async function dockerAddInstance(host) {
|
|
261
|
-
p.intro(
|
|
261
|
+
p.intro('Add GitLab Instance');
|
|
262
262
|
let instanceHost;
|
|
263
263
|
if (host) {
|
|
264
264
|
instanceHost = host;
|
|
265
265
|
}
|
|
266
266
|
else {
|
|
267
267
|
const hostInput = await p.text({
|
|
268
|
-
message:
|
|
269
|
-
placeholder:
|
|
270
|
-
validate: value => {
|
|
268
|
+
message: 'GitLab instance host:',
|
|
269
|
+
placeholder: 'gitlab.company.com',
|
|
270
|
+
validate: (value) => {
|
|
271
271
|
if (!value || value.length < 1) {
|
|
272
|
-
return
|
|
272
|
+
return 'Host is required';
|
|
273
273
|
}
|
|
274
274
|
const hostnamePattern = /^([a-z0-9]([a-z0-9-]*[a-z0-9])?\.)*[a-z0-9]([a-z0-9-]*[a-z0-9])?$/i;
|
|
275
275
|
const ipv4Pattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
|
|
276
276
|
const ipMatch = value.match(ipv4Pattern);
|
|
277
277
|
if (ipMatch) {
|
|
278
278
|
const octets = [ipMatch[1], ipMatch[2], ipMatch[3], ipMatch[4]].map(Number);
|
|
279
|
-
if (octets.every(o => o >= 0 && o <= 255)) {
|
|
279
|
+
if (octets.every((o) => o >= 0 && o <= 255)) {
|
|
280
280
|
return undefined;
|
|
281
281
|
}
|
|
282
|
-
return
|
|
282
|
+
return 'IP address octets must be between 0 and 255';
|
|
283
283
|
}
|
|
284
284
|
if (hostnamePattern.test(value)) {
|
|
285
285
|
return undefined;
|
|
286
286
|
}
|
|
287
|
-
return
|
|
287
|
+
return 'Invalid hostname or IP address format';
|
|
288
288
|
},
|
|
289
289
|
});
|
|
290
290
|
if (p.isCancel(hostInput)) {
|
|
291
|
-
p.cancel(
|
|
291
|
+
p.cancel('Setup cancelled');
|
|
292
292
|
return;
|
|
293
293
|
}
|
|
294
294
|
instanceHost = hostInput;
|
|
295
295
|
}
|
|
296
296
|
const name = await p.text({
|
|
297
|
-
message:
|
|
298
|
-
placeholder:
|
|
297
|
+
message: 'Display name:',
|
|
298
|
+
placeholder: 'Company GitLab',
|
|
299
299
|
initialValue: instanceHost,
|
|
300
300
|
});
|
|
301
301
|
if (p.isCancel(name)) {
|
|
302
|
-
p.cancel(
|
|
302
|
+
p.cancel('Setup cancelled');
|
|
303
303
|
return;
|
|
304
304
|
}
|
|
305
305
|
const configureOAuth = await p.confirm({
|
|
306
|
-
message:
|
|
306
|
+
message: 'Configure OAuth for this instance?',
|
|
307
307
|
initialValue: false,
|
|
308
308
|
});
|
|
309
309
|
if (p.isCancel(configureOAuth)) {
|
|
310
|
-
p.cancel(
|
|
310
|
+
p.cancel('Setup cancelled');
|
|
311
311
|
return;
|
|
312
312
|
}
|
|
313
313
|
let oauth;
|
|
314
314
|
if (configureOAuth) {
|
|
315
315
|
const clientId = await p.text({
|
|
316
|
-
message:
|
|
317
|
-
validate: value => {
|
|
316
|
+
message: 'OAuth Application ID:',
|
|
317
|
+
validate: (value) => {
|
|
318
318
|
if (!value || value.length < 10) {
|
|
319
|
-
return
|
|
319
|
+
return 'Application ID is required';
|
|
320
320
|
}
|
|
321
321
|
return undefined;
|
|
322
322
|
},
|
|
323
323
|
});
|
|
324
324
|
if (p.isCancel(clientId)) {
|
|
325
|
-
p.cancel(
|
|
325
|
+
p.cancel('Setup cancelled');
|
|
326
326
|
return;
|
|
327
327
|
}
|
|
328
|
-
const envName = instanceHost.toUpperCase().replace(/[^A-Z0-9]/g,
|
|
328
|
+
const envName = instanceHost.toUpperCase().replace(/[^A-Z0-9]/g, '_') + '_SECRET';
|
|
329
329
|
p.note(`Store your OAuth secret in environment variable: ${envName}\n` +
|
|
330
|
-
`Add to docker-compose.yml environment section or use .env file.`,
|
|
330
|
+
`Add to docker-compose.yml environment section or use .env file.`, 'OAuth Secret');
|
|
331
331
|
oauth = {
|
|
332
332
|
clientId,
|
|
333
333
|
clientSecretEnv: envName,
|
|
334
334
|
};
|
|
335
335
|
}
|
|
336
336
|
const preset = await p.select({
|
|
337
|
-
message:
|
|
337
|
+
message: 'Default preset for this instance:',
|
|
338
338
|
options: [
|
|
339
|
-
{ value:
|
|
340
|
-
{ value:
|
|
341
|
-
{ value:
|
|
342
|
-
{ value:
|
|
343
|
-
{ value:
|
|
344
|
-
{ value:
|
|
339
|
+
{ value: 'developer', label: 'Developer (default)' },
|
|
340
|
+
{ value: 'senior-dev', label: 'Senior Developer' },
|
|
341
|
+
{ value: 'full-access', label: 'Full Access' },
|
|
342
|
+
{ value: 'devops', label: 'DevOps' },
|
|
343
|
+
{ value: 'code-reviewer', label: 'Code Reviewer' },
|
|
344
|
+
{ value: 'readonly', label: 'Read-Only' },
|
|
345
345
|
],
|
|
346
346
|
});
|
|
347
347
|
if (p.isCancel(preset)) {
|
|
348
|
-
p.cancel(
|
|
348
|
+
p.cancel('Setup cancelled');
|
|
349
349
|
return;
|
|
350
350
|
}
|
|
351
351
|
const instance = {
|
|
@@ -356,12 +356,12 @@ async function dockerAddInstance(host) {
|
|
|
356
356
|
};
|
|
357
357
|
(0, docker_utils_1.addInstance)(instance);
|
|
358
358
|
p.log.success(`Added instance: ${instanceHost}`);
|
|
359
|
-
p.outro(
|
|
359
|
+
p.outro('Instance configuration saved. Restart container to apply changes.');
|
|
360
360
|
}
|
|
361
361
|
function dockerRemoveInstance(host) {
|
|
362
362
|
if ((0, docker_utils_1.removeInstance)(host)) {
|
|
363
363
|
console.log(`✓ Removed instance: ${host}`);
|
|
364
|
-
console.log(
|
|
364
|
+
console.log('Restart container to apply changes.');
|
|
365
365
|
}
|
|
366
366
|
else {
|
|
367
367
|
console.error(`✗ Instance not found: ${host}`);
|
|
@@ -370,51 +370,51 @@ function dockerRemoveInstance(host) {
|
|
|
370
370
|
async function runDockerCommand(args) {
|
|
371
371
|
const { subcommand, subArgs } = parseDockerSubcommand(args);
|
|
372
372
|
switch (subcommand) {
|
|
373
|
-
case
|
|
373
|
+
case 'status':
|
|
374
374
|
showStatus();
|
|
375
375
|
break;
|
|
376
|
-
case
|
|
376
|
+
case 'init':
|
|
377
377
|
await initDocker();
|
|
378
378
|
break;
|
|
379
|
-
case
|
|
379
|
+
case 'start':
|
|
380
380
|
dockerStart();
|
|
381
381
|
break;
|
|
382
|
-
case
|
|
382
|
+
case 'stop':
|
|
383
383
|
dockerStop();
|
|
384
384
|
break;
|
|
385
|
-
case
|
|
385
|
+
case 'restart':
|
|
386
386
|
dockerRestart();
|
|
387
387
|
break;
|
|
388
|
-
case
|
|
388
|
+
case 'upgrade':
|
|
389
389
|
dockerUpgrade();
|
|
390
390
|
break;
|
|
391
|
-
case
|
|
392
|
-
const follow = subArgs.includes(
|
|
393
|
-
const linesArg = subArgs.find(a => a.startsWith(
|
|
394
|
-
const lines = linesArg ? parseInt(linesArg.split(
|
|
391
|
+
case 'logs': {
|
|
392
|
+
const follow = subArgs.includes('-f') || subArgs.includes('--follow');
|
|
393
|
+
const linesArg = subArgs.find((a) => a.startsWith('--lines='));
|
|
394
|
+
const lines = linesArg ? parseInt(linesArg.split('=')[1], 10) : 100;
|
|
395
395
|
dockerLogs(follow, lines);
|
|
396
396
|
break;
|
|
397
397
|
}
|
|
398
|
-
case
|
|
398
|
+
case 'add-instance':
|
|
399
399
|
await dockerAddInstance(subArgs[0]);
|
|
400
400
|
break;
|
|
401
|
-
case
|
|
401
|
+
case 'remove-instance':
|
|
402
402
|
if (!subArgs[0]) {
|
|
403
|
-
throw new Error(
|
|
403
|
+
throw new Error('Usage: gitlab-mcp docker remove-instance <host>');
|
|
404
404
|
}
|
|
405
405
|
dockerRemoveInstance(subArgs[0]);
|
|
406
406
|
break;
|
|
407
407
|
default:
|
|
408
|
-
console.log(
|
|
409
|
-
console.log(
|
|
410
|
-
console.log(
|
|
411
|
-
console.log(
|
|
412
|
-
console.log(
|
|
413
|
-
console.log(
|
|
414
|
-
console.log(
|
|
415
|
-
console.log(
|
|
416
|
-
console.log(
|
|
417
|
-
console.log(
|
|
408
|
+
console.log('GitLab MCP Docker Commands:\n');
|
|
409
|
+
console.log(' gitlab-mcp docker status Show container and instances status');
|
|
410
|
+
console.log(' gitlab-mcp docker init Initialize Docker configuration');
|
|
411
|
+
console.log(' gitlab-mcp docker start Start container');
|
|
412
|
+
console.log(' gitlab-mcp docker stop Stop container');
|
|
413
|
+
console.log(' gitlab-mcp docker restart Restart container');
|
|
414
|
+
console.log(' gitlab-mcp docker upgrade Pull latest image and restart');
|
|
415
|
+
console.log(' gitlab-mcp docker logs [-f] Show container logs');
|
|
416
|
+
console.log(' gitlab-mcp docker add-instance Add GitLab instance');
|
|
417
|
+
console.log(' gitlab-mcp docker remove-instance Remove GitLab instance');
|
|
418
418
|
break;
|
|
419
419
|
}
|
|
420
420
|
}
|