@structured-world/gitlab-mcp 6.6.0 → 6.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/README.md +53 -3
  2. package/dist/src/config.d.ts +2 -0
  3. package/dist/src/config.js +3 -1
  4. package/dist/src/config.js.map +1 -1
  5. package/dist/src/entities/integrations/index.d.ts +7 -0
  6. package/dist/src/entities/integrations/index.js +31 -0
  7. package/dist/src/entities/integrations/index.js.map +1 -0
  8. package/dist/src/entities/integrations/registry.d.ts +5 -0
  9. package/dist/src/entities/integrations/registry.js +117 -0
  10. package/dist/src/entities/integrations/registry.js.map +1 -0
  11. package/dist/src/entities/integrations/schema-readonly.d.ts +7 -0
  12. package/dist/src/entities/integrations/schema-readonly.js +10 -0
  13. package/dist/src/entities/integrations/schema-readonly.js.map +1 -0
  14. package/dist/src/entities/integrations/schema.d.ts +129 -0
  15. package/dist/src/entities/integrations/schema.js +94 -0
  16. package/dist/src/entities/integrations/schema.js.map +1 -0
  17. package/dist/src/entities/snippets/index.d.ts +7 -0
  18. package/dist/src/entities/snippets/index.js +31 -0
  19. package/dist/src/entities/snippets/index.js.map +1 -0
  20. package/dist/src/entities/snippets/registry.d.ts +5 -0
  21. package/dist/src/entities/snippets/registry.js +186 -0
  22. package/dist/src/entities/snippets/registry.js.map +1 -0
  23. package/dist/src/entities/snippets/schema-readonly.d.ts +26 -0
  24. package/dist/src/entities/snippets/schema-readonly.js +51 -0
  25. package/dist/src/entities/snippets/schema-readonly.js.map +1 -0
  26. package/dist/src/entities/snippets/schema.d.ts +60 -0
  27. package/dist/src/entities/snippets/schema.js +123 -0
  28. package/dist/src/entities/snippets/schema.js.map +1 -0
  29. package/dist/src/registry-manager.js +20 -0
  30. package/dist/src/registry-manager.js.map +1 -1
  31. package/dist/src/server.js +4 -2
  32. package/dist/src/server.js.map +1 -1
  33. package/dist/structured-world-gitlab-mcp-6.8.0.tgz +0 -0
  34. package/dist/tsconfig.build.tsbuildinfo +1 -1
  35. package/package.json +1 -1
  36. package/dist/structured-world-gitlab-mcp-6.6.0.tgz +0 -0
package/README.md CHANGED
@@ -54,6 +54,8 @@ env = { "GITLAB_TOKEN" = "mytoken", "GITLAB_API_URL" = "https://gitlab.com" }
54
54
  "USE_PIPELINE": "false", // use pipeline api?
55
55
  "USE_VARIABLES": "true", // use variables api?
56
56
  "USE_WEBHOOKS": "true", // use webhooks api?
57
+ "USE_SNIPPETS": "true", // use snippets api?
58
+ "USE_INTEGRATIONS": "true", // use integrations api?
57
59
  "SKIP_TLS_VERIFY": "false" // skip SSL cert verification (dev only)
58
60
  }
59
61
  }
@@ -123,6 +125,10 @@ env = { "GITLAB_TOKEN" = "mytoken", "GITLAB_API_URL" = "https://gitlab.com" }
123
125
  "USE_VARIABLES",
124
126
  "-e",
125
127
  "USE_WEBHOOKS",
128
+ "-e",
129
+ "USE_SNIPPETS",
130
+ "-e",
131
+ "USE_INTEGRATIONS",
126
132
  "ghcr.io/structured-world/gitlab-mcp:latest"
127
133
  ],
128
134
  "env": {
@@ -133,7 +139,9 @@ env = { "GITLAB_TOKEN" = "mytoken", "GITLAB_API_URL" = "https://gitlab.com" }
133
139
  "USE_MILESTONE": "true",
134
140
  "USE_PIPELINE": "true",
135
141
  "USE_VARIABLES": "true",
136
- "USE_WEBHOOKS": "true"
142
+ "USE_WEBHOOKS": "true",
143
+ "USE_SNIPPETS": "true",
144
+ "USE_INTEGRATIONS": "true"
137
145
  }
138
146
  }
139
147
  }
@@ -470,6 +478,8 @@ When OAuth is enabled, the following endpoints are available:
470
478
  - `USE_VARIABLES`: When set to 'true', enables the CI/CD variables-related tools (browse_variables, manage_variable). These 2 CQRS tools consolidate all variable operations. Supports both project-level and group-level variables. By default, variables features are enabled.
471
479
  - `USE_WORKITEMS`: When set to 'true', enables the work items-related tools (browse_work_items, manage_work_item). These 2 CQRS tools consolidate all work item operations using GitLab GraphQL API. By default, work items features are enabled.
472
480
  - `USE_WEBHOOKS`: When set to 'true', enables the webhooks-related tools (list_webhooks, manage_webhook). These 2 tools provide full CRUD operations plus testing for both project and group webhooks. Group webhooks require GitLab Premium tier. By default, webhooks features are enabled.
481
+ - `USE_SNIPPETS`: When set to 'true', enables the snippets-related tools (list_snippets, manage_snippet). These 2 CQRS tools provide full listing and CRUD operations for both personal and project snippets. Supports multi-file snippets, visibility control, and flexible scoping. By default, snippets features are enabled.
482
+ - `USE_INTEGRATIONS`: When set to 'true', enables the integrations-related tools (list_integrations, manage_integration). These 2 CQRS tools provide full listing and management of 50+ project integrations (Slack, Jira, Discord, Jenkins, etc.). By default, integrations features are enabled.
473
483
  - `GITLAB_AUTH_COOKIE_PATH`: Path to an authentication cookie file for GitLab instances that require cookie-based authentication. When provided, the cookie will be included in all GitLab API requests.
474
484
  - `SKIP_TLS_VERIFY`: When set to 'true', skips TLS certificate verification for all GitLab API requests (both REST and GraphQL). **WARNING**: This bypasses SSL certificate validation and should only be used for testing with self-signed certificates or trusted internal GitLab instances. Never use this in production environments.
475
485
  - `SSL_CERT_PATH`: Path to PEM certificate file for direct HTTPS/TLS termination. Requires `SSL_KEY_PATH` to also be set.
@@ -538,11 +548,11 @@ export GITLAB_TOOL_MANAGE_WORK_ITEM="Create and manage tickets for our sprint pl
538
548
  - **Case Sensitivity**: Tool names in environment variables must be UPPERCASE (e.g., `LIST_PROJECTS` not `list_projects`)
539
549
  - **Invalid Names**: Invalid tool names in environment variables are ignored with a warning in debug logs
540
550
  - **Content Guidelines**: Descriptions can be any valid string but should be kept concise for better UX
541
- - **Scope**: Works with all 58 available tools across all entities (Core, Work Items, Merge Requests, Files, etc.)
551
+ - **Scope**: Works with all 59 available tools across all entities (Core, Work Items, Merge Requests, Files, Snippets, etc.)
542
552
 
543
553
  ## Tools 🛠️
544
554
 
545
- **57 Tools Available** - Organized by entity and functionality below.
555
+ **61 Tools Available** - Organized by entity and functionality below.
546
556
 
547
557
  ### Key Features:
548
558
  - **CQRS Pattern** - Consolidated action-based tools: `browse_*` for reads, `manage_*` for writes
@@ -696,6 +706,46 @@ Webhooks can be configured to trigger on:
696
706
  - **Subgroup events** - Subgroup created/removed (group webhooks only)
697
707
  - **Project events** - Project created/removed (group webhooks only)
698
708
 
709
+ ### Snippets Management (2 tools)
710
+ Requires USE_SNIPPETS=true environment variable (enabled by default). Uses CQRS pattern with action-based tools. Supports personal, project, and public snippets with multi-file support.
711
+
712
+ #### Snippet Browsing (Query)
713
+ - 📖 **`list_snippets`**: LIST GitLab code snippets with flexible scoping. Use scope='personal' for current user's snippets, scope='project' for project-specific snippets (requires projectId), or scope='public' to discover all public snippets. Filter by visibility level (private/internal/public) and creation date. Supports pagination.
714
+
715
+ #### Snippet Management (Command)
716
+ - ✏️ **`manage_snippet`**: MANAGE GitLab snippets with full CRUD operations via action parameter. Actions: "read" retrieves snippet metadata or raw content, "create" creates new snippet with multiple files and visibility control, "update" modifies title/description/visibility/files (supports file create/update/delete/move actions), "delete" permanently removes snippet. Supports both personal and project snippets.
717
+
718
+ #### Multi-file Snippet Support
719
+ Snippets can contain multiple files with individual operations:
720
+ - **Create action** - Files array with `file_path` and `content` for each file
721
+ - **Update action** - Files array with `action` field: "create" (add new), "update" (modify existing), "delete" (remove), "move" (rename with `previous_path`)
722
+
723
+ ### Integrations Management (2 tools)
724
+ Requires USE_INTEGRATIONS=true environment variable (enabled by default). Uses CQRS pattern with action-based tools. Supports 50+ project integrations for connecting with external services.
725
+
726
+ #### Integration Browsing (Query)
727
+ - 📖 **`list_integrations`**: LIST all active integrations for a project. Returns configured integrations like Slack, Jira, Discord, Microsoft Teams, Jenkins, etc. Only shows enabled/configured integrations with their settings.
728
+
729
+ #### Integration Management (Command)
730
+ - ✏️ **`manage_integration`**: MANAGE project integrations. Actions: "get" retrieves integration settings (read-only), "update" modifies or enables integration with specific config, "disable" removes integration. Supports 50+ integration types. Note: gitlab-slack-application cannot be created via API - requires OAuth install from GitLab UI.
731
+
732
+ #### Supported Integration Types
733
+ GitLab supports 50+ integrations organized by category:
734
+ - **Communication** - Slack, Discord, Microsoft Teams, Mattermost, Telegram, Matrix, Pumble, and more
735
+ - **Issue Trackers** - Jira, Bugzilla, Redmine, YouTrack, ClickUp, Linear, Phorge, Asana
736
+ - **CI/CD** - Jenkins, TeamCity, Bamboo, Buildkite, Drone CI, Datadog
737
+ - **Documentation** - Confluence, External Wiki
738
+ - **Mobile/Publishing** - Apple App Store, Google Play, Packagist
739
+ - **Cloud** - Google Cloud Platform (Artifact Registry, Workload Identity), Harbor
740
+ - **Security** - GitGuardian
741
+ - **Other** - GitHub, Emails on Push, Pipelines Email, Pushover
742
+
743
+ #### Common Event Triggers
744
+ Most integrations support configuring which events trigger notifications:
745
+ - Push events, Tag push events, Issue events, Merge request events
746
+ - Note events, Pipeline events, Job events, Wiki page events
747
+ - Deployment events, Release events, Vulnerability events
748
+
699
749
  ## CLI Tools 🔧
700
750
 
701
751
  ### list-tools - Browse Available Tools
@@ -11,7 +11,9 @@ export declare const USE_LABELS: boolean;
11
11
  export declare const USE_MRS: boolean;
12
12
  export declare const USE_FILES: boolean;
13
13
  export declare const USE_VARIABLES: boolean;
14
+ export declare const USE_SNIPPETS: boolean;
14
15
  export declare const USE_WEBHOOKS: boolean;
16
+ export declare const USE_INTEGRATIONS: boolean;
15
17
  export declare const HOST: string;
16
18
  export declare const PORT: string | number;
17
19
  export declare const SSL_CERT_PATH: string | undefined;
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.packageVersion = exports.packageName = exports.GITLAB_ALLOWED_PROJECT_IDS = exports.GITLAB_PROJECT_ID = exports.GITLAB_API_URL = exports.GITLAB_BASE_URL = exports.GITLAB_CA_CERT_PATH = exports.NODE_TLS_REJECT_UNAUTHORIZED = exports.HTTPS_PROXY = exports.HTTP_PROXY = exports.SKIP_TLS_VERIFY = exports.RATE_LIMIT_SESSION_MAX_REQUESTS = exports.RATE_LIMIT_SESSION_WINDOW_MS = exports.RATE_LIMIT_SESSION_ENABLED = exports.RATE_LIMIT_IP_MAX_REQUESTS = exports.RATE_LIMIT_IP_WINDOW_MS = exports.RATE_LIMIT_IP_ENABLED = exports.API_TIMEOUT_MS = exports.TRUST_PROXY = exports.SSL_PASSPHRASE = exports.SSL_CA_PATH = exports.SSL_KEY_PATH = exports.SSL_CERT_PATH = exports.PORT = exports.HOST = exports.USE_WEBHOOKS = exports.USE_VARIABLES = exports.USE_FILES = exports.USE_MRS = exports.USE_LABELS = exports.USE_WORKITEMS = exports.USE_PIPELINE = exports.USE_MILESTONE = exports.USE_GITLAB_WIKI = exports.GITLAB_DENIED_TOOLS_REGEX = exports.GITLAB_READ_ONLY_MODE = exports.IS_OLD = exports.GITLAB_AUTH_COOKIE_PATH = exports.GITLAB_TOKEN = void 0;
36
+ exports.packageVersion = exports.packageName = exports.GITLAB_ALLOWED_PROJECT_IDS = exports.GITLAB_PROJECT_ID = exports.GITLAB_API_URL = exports.GITLAB_BASE_URL = exports.GITLAB_CA_CERT_PATH = exports.NODE_TLS_REJECT_UNAUTHORIZED = exports.HTTPS_PROXY = exports.HTTP_PROXY = exports.SKIP_TLS_VERIFY = exports.RATE_LIMIT_SESSION_MAX_REQUESTS = exports.RATE_LIMIT_SESSION_WINDOW_MS = exports.RATE_LIMIT_SESSION_ENABLED = exports.RATE_LIMIT_IP_MAX_REQUESTS = exports.RATE_LIMIT_IP_WINDOW_MS = exports.RATE_LIMIT_IP_ENABLED = exports.API_TIMEOUT_MS = exports.TRUST_PROXY = exports.SSL_PASSPHRASE = exports.SSL_CA_PATH = exports.SSL_KEY_PATH = exports.SSL_CERT_PATH = exports.PORT = exports.HOST = exports.USE_INTEGRATIONS = exports.USE_WEBHOOKS = exports.USE_SNIPPETS = exports.USE_VARIABLES = exports.USE_FILES = exports.USE_MRS = exports.USE_LABELS = exports.USE_WORKITEMS = exports.USE_PIPELINE = exports.USE_MILESTONE = exports.USE_GITLAB_WIKI = exports.GITLAB_DENIED_TOOLS_REGEX = exports.GITLAB_READ_ONLY_MODE = exports.IS_OLD = exports.GITLAB_AUTH_COOKIE_PATH = exports.GITLAB_TOKEN = void 0;
37
37
  exports.getEffectiveProjectId = getEffectiveProjectId;
38
38
  exports.getToolDescriptionOverrides = getToolDescriptionOverrides;
39
39
  const path = __importStar(require("path"));
@@ -54,7 +54,9 @@ exports.USE_LABELS = process.env.USE_LABELS !== "false";
54
54
  exports.USE_MRS = process.env.USE_MRS !== "false";
55
55
  exports.USE_FILES = process.env.USE_FILES !== "false";
56
56
  exports.USE_VARIABLES = process.env.USE_VARIABLES !== "false";
57
+ exports.USE_SNIPPETS = process.env.USE_SNIPPETS !== "false";
57
58
  exports.USE_WEBHOOKS = process.env.USE_WEBHOOKS !== "false";
59
+ exports.USE_INTEGRATIONS = process.env.USE_INTEGRATIONS !== "false";
58
60
  exports.HOST = process.env.HOST ?? "0.0.0.0";
59
61
  exports.PORT = process.env.PORT ?? 3002;
60
62
  exports.SSL_CERT_PATH = process.env.SSL_CERT_PATH;
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+FA,sDAcC;AAwBD,kEAgBC;AArJD,2CAA6B;AAC7B,uCAAyB;AAEzB,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;AAGvD,QAAA,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;AACxC,QAAA,uBAAuB,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;AAC9D,QAAA,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,MAAM,CAAC;AAC9C,QAAA,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,MAAM,CAAC;AACrE,QAAA,yBAAyB,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB;IAC5E,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;IACnD,CAAC,CAAC,SAAS,CAAC;AACD,QAAA,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,OAAO,CAAC;AAC1D,QAAA,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,OAAO,CAAC;AACtD,QAAA,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,OAAO,CAAC;AACpD,QAAA,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,OAAO,CAAC;AACtD,QAAA,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,OAAO,CAAC;AAChD,QAAA,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,OAAO,CAAC;AAC1C,QAAA,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,OAAO,CAAC;AAC9C,QAAA,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,OAAO,CAAC;AACtD,QAAA,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,OAAO,CAAC;AACpD,QAAA,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC;AACrC,QAAA,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC;AAGhC,QAAA,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;AAC1C,QAAA,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;AACxC,QAAA,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;AACtC,QAAA,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AAI5C,QAAA,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;AAGtC,QAAA,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,OAAO,EAAE,EAAE,CAAC,CAAC;AAI5E,QAAA,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,OAAO,CAAC;AACtE,QAAA,uBAAuB,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,OAAO,EAAE,EAAE,CAAC,CAAC;AACvF,QAAA,0BAA0B,GAAG,QAAQ,CAChD,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,KAAK,EAC/C,EAAE,CACH,CAAC;AAGW,QAAA,0BAA0B,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,KAAK,MAAM,CAAC;AAC/E,QAAA,4BAA4B,GAAG,QAAQ,CAClD,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,OAAO,EACnD,EAAE,CACH,CAAC;AACW,QAAA,+BAA+B,GAAG,QAAQ,CACrD,OAAO,CAAC,GAAG,CAAC,+BAA+B,IAAI,KAAK,EACpD,EAAE,CACH,CAAC;AAOW,QAAA,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,MAAM,CAAC;AAGzD,QAAA,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;AACpC,QAAA,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;AACtC,QAAA,4BAA4B,GAAG,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;AACxE,QAAA,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;AAGnE,SAAS,sBAAsB,CAAC,GAAY;IAC1C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IAGD,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAEY,QAAA,eAAe,GAAG,sBAAsB,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;AAC3E,QAAA,cAAc,GAAG,GAAG,uBAAe,SAAS,CAAC;AAC7C,QAAA,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;AAClD,QAAA,0BAA0B,GACrC,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;AAEhF,SAAgB,qBAAqB,CAAC,SAAiB;IACrD,IAAI,yBAAiB,EAAE,CAAC;QACtB,OAAO,yBAAiB,CAAC;IAC3B,CAAC;IAED,IAAI,kCAA0B,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,IAAI,CAAC,kCAA0B,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CACb,cAAc,SAAS,yCAAyC,kCAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxG,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAGD,IAAI,WAAW,GAAG,YAAY,CAAC;AActB,kCAAW;AAbpB,IAAI,cAAc,GAAG,SAAS,CAAC;AAaT,wCAAc;AAXpC,IAAI,CAAC;IACH,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAGtE,CAAC;IACF,sBAAA,WAAW,GAAG,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC;IAC9C,yBAAA,cAAc,GAAG,WAAW,CAAC,OAAO,IAAI,cAAc,CAAC;AACzD,CAAC;AAAC,MAAM,CAAC;AAET,CAAC;AASD,SAAgB,2BAA2B;IACzC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,MAAM,MAAM,GAAG,cAAc,CAAC;IAG9B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvD,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YAGpC,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YAE5D,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export * from "../shared";
2
+ export * from "./schema-readonly";
3
+ export * from "./schema";
4
+ export * from "./registry";
5
+ import type { ToolDefinition } from "../../types";
6
+ export declare const integrationsTools: ToolDefinition[];
7
+ export declare const integrationsReadOnlyTools: string[];
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.integrationsReadOnlyTools = exports.integrationsTools = void 0;
18
+ __exportStar(require("../shared"), exports);
19
+ __exportStar(require("./schema-readonly"), exports);
20
+ __exportStar(require("./schema"), exports);
21
+ __exportStar(require("./registry"), exports);
22
+ const registry_1 = require("./registry");
23
+ const isReadOnly = process.env.GITLAB_READONLY === "true";
24
+ const integrationsToolsFromRegistry = (0, registry_1.getFilteredIntegrationsTools)(isReadOnly);
25
+ exports.integrationsTools = integrationsToolsFromRegistry.map((tool) => ({
26
+ name: tool.name,
27
+ description: tool.description,
28
+ inputSchema: tool.inputSchema,
29
+ }));
30
+ exports.integrationsReadOnlyTools = (0, registry_1.getIntegrationsReadOnlyToolNames)();
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/entities/integrations/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,4CAA0B;AAG1B,oDAAkC;AAGlC,2CAAyB;AAGzB,6CAA2B;AAG3B,yCAA4F;AAI5F,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,MAAM,CAAC;AAG1D,MAAM,6BAA6B,GAAG,IAAA,uCAA4B,EAAC,UAAU,CAAC,CAAC;AAGlE,QAAA,iBAAiB,GAAqB,6BAA6B,CAAC,GAAG,CAClF,CAAC,IAAI,EAAkB,EAAE,CAAC,CAAC;IACzB,IAAI,EAAE,IAAI,CAAC,IAAI;IACf,WAAW,EAAE,IAAI,CAAC,WAAW;IAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;CAC9B,CAAC,CACH,CAAC;AAGW,QAAA,yBAAyB,GAAG,IAAA,2CAAgC,GAAE,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { ToolRegistry, EnhancedToolDefinition } from "../../types";
2
+ export declare const integrationsToolRegistry: ToolRegistry;
3
+ export declare function getIntegrationsReadOnlyToolNames(): string[];
4
+ export declare function getIntegrationsToolDefinitions(): EnhancedToolDefinition[];
5
+ export declare function getFilteredIntegrationsTools(readOnlyMode?: boolean): EnhancedToolDefinition[];
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.integrationsToolRegistry = void 0;
37
+ exports.getIntegrationsReadOnlyToolNames = getIntegrationsReadOnlyToolNames;
38
+ exports.getIntegrationsToolDefinitions = getIntegrationsToolDefinitions;
39
+ exports.getFilteredIntegrationsTools = getFilteredIntegrationsTools;
40
+ const z = __importStar(require("zod"));
41
+ const schema_readonly_1 = require("./schema-readonly");
42
+ const schema_1 = require("./schema");
43
+ const gitlab_api_1 = require("../../utils/gitlab-api");
44
+ const config_1 = require("../../config");
45
+ exports.integrationsToolRegistry = new Map([
46
+ [
47
+ "list_integrations",
48
+ {
49
+ name: "list_integrations",
50
+ description: "LIST all active integrations for a project. Returns integrations like Slack, Jira, Discord, Microsoft Teams, Jenkins, etc. Only shows enabled/configured integrations.",
51
+ inputSchema: z.toJSONSchema(schema_readonly_1.ListIntegrationsSchema, {}),
52
+ handler: async (args) => {
53
+ const input = schema_readonly_1.ListIntegrationsSchema.parse(args);
54
+ const projectId = (0, config_1.getEffectiveProjectId)(input.project_id);
55
+ const query = (0, gitlab_api_1.toQuery)({
56
+ per_page: input.per_page,
57
+ page: input.page,
58
+ }, []);
59
+ return gitlab_api_1.gitlab.get(`projects/${encodeURIComponent(projectId)}/integrations`, { query });
60
+ },
61
+ },
62
+ ],
63
+ [
64
+ "manage_integration",
65
+ {
66
+ name: "manage_integration",
67
+ description: 'MANAGE project integrations. Actions: "get" retrieves integration settings (read-only), "update" modifies or enables integration with specific config, "disable" removes integration. Supports 50+ integrations: Slack, Jira, Discord, Teams, Jenkins, etc. Note: gitlab-slack-application cannot be created via API - requires OAuth install from UI.',
68
+ inputSchema: z.toJSONSchema(schema_1.ManageIntegrationSchema, {}),
69
+ handler: async (args) => {
70
+ const input = schema_1.ManageIntegrationSchema.parse(args);
71
+ const projectId = (0, config_1.getEffectiveProjectId)(input.project_id);
72
+ const integrationSlug = input.integration;
73
+ const isReadOnly = process.env.GITLAB_READ_ONLY_MODE === "true";
74
+ if (isReadOnly && (input.action === "update" || input.action === "disable")) {
75
+ throw new Error(`Action '${input.action}' is not allowed in read-only mode. Only 'get' action is permitted.`);
76
+ }
77
+ switch (input.action) {
78
+ case "get": {
79
+ return gitlab_api_1.gitlab.get(`projects/${encodeURIComponent(projectId)}/integrations/${integrationSlug}`);
80
+ }
81
+ case "update": {
82
+ const { action: _action, project_id: _project_id, integration: _integration, ...body } = input;
83
+ let finalBody = { ...body };
84
+ if (body.config) {
85
+ const { config, ...rest } = body;
86
+ finalBody = { ...rest, ...config };
87
+ }
88
+ return gitlab_api_1.gitlab.put(`projects/${encodeURIComponent(projectId)}/integrations/${integrationSlug}`, {
89
+ body: finalBody,
90
+ contentType: "json",
91
+ });
92
+ }
93
+ case "disable": {
94
+ await gitlab_api_1.gitlab.delete(`projects/${encodeURIComponent(projectId)}/integrations/${integrationSlug}`);
95
+ return { deleted: true };
96
+ }
97
+ default:
98
+ throw new Error(`Unknown action: ${input.action}`);
99
+ }
100
+ },
101
+ },
102
+ ],
103
+ ]);
104
+ function getIntegrationsReadOnlyToolNames() {
105
+ return ["list_integrations", "manage_integration"];
106
+ }
107
+ function getIntegrationsToolDefinitions() {
108
+ return Array.from(exports.integrationsToolRegistry.values());
109
+ }
110
+ function getFilteredIntegrationsTools(readOnlyMode = false) {
111
+ if (readOnlyMode) {
112
+ const readOnlyNames = getIntegrationsReadOnlyToolNames();
113
+ return Array.from(exports.integrationsToolRegistry.values()).filter(tool => readOnlyNames.includes(tool.name));
114
+ }
115
+ return getIntegrationsToolDefinitions();
116
+ }
117
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../src/entities/integrations/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { z } from "zod";
2
+ export declare const ListIntegrationsSchema: z.ZodObject<{
3
+ project_id: z.ZodString;
4
+ per_page: z.ZodOptional<z.ZodNumber>;
5
+ page: z.ZodOptional<z.ZodNumber>;
6
+ }, z.core.$strip>;
7
+ export type ListIntegrationsInput = z.infer<typeof ListIntegrationsSchema>;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ListIntegrationsSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ exports.ListIntegrationsSchema = zod_1.z.object({
6
+ project_id: zod_1.z.string().describe("Project ID or URL-encoded path"),
7
+ per_page: zod_1.z.number().int().min(1).max(100).optional().describe("Number of items per page"),
8
+ page: zod_1.z.number().int().min(1).optional().describe("Page number"),
9
+ });
10
+ //# sourceMappingURL=schema-readonly.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-readonly.js","sourceRoot":"","sources":["../../../../src/entities/integrations/schema-readonly.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAMX,QAAA,sBAAsB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC7C,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACjE,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAC1F,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;CACjE,CAAC,CAAC"}
@@ -0,0 +1,129 @@
1
+ import { z } from "zod";
2
+ export declare const IntegrationTypeSchema: z.ZodEnum<{
3
+ slack: "slack";
4
+ "gitlab-slack-application": "gitlab-slack-application";
5
+ "slack-slash-commands": "slack-slash-commands";
6
+ discord: "discord";
7
+ "microsoft-teams": "microsoft-teams";
8
+ mattermost: "mattermost";
9
+ "mattermost-slash-commands": "mattermost-slash-commands";
10
+ telegram: "telegram";
11
+ matrix: "matrix";
12
+ pumble: "pumble";
13
+ "hangouts-chat": "hangouts-chat";
14
+ "webex-teams": "webex-teams";
15
+ "unify-circuit": "unify-circuit";
16
+ campfire: "campfire";
17
+ irker: "irker";
18
+ jira: "jira";
19
+ "jira-cloud-app": "jira-cloud-app";
20
+ bugzilla: "bugzilla";
21
+ redmine: "redmine";
22
+ youtrack: "youtrack";
23
+ clickup: "clickup";
24
+ linear: "linear";
25
+ phorge: "phorge";
26
+ pivotaltracker: "pivotaltracker";
27
+ asana: "asana";
28
+ "custom-issue-tracker": "custom-issue-tracker";
29
+ ewm: "ewm";
30
+ jenkins: "jenkins";
31
+ teamcity: "teamcity";
32
+ bamboo: "bamboo";
33
+ buildkite: "buildkite";
34
+ "drone-ci": "drone-ci";
35
+ datadog: "datadog";
36
+ "mock-ci": "mock-ci";
37
+ "diffblue-cover": "diffblue-cover";
38
+ confluence: "confluence";
39
+ "external-wiki": "external-wiki";
40
+ "apple-app-store": "apple-app-store";
41
+ "google-play": "google-play";
42
+ packagist: "packagist";
43
+ "google-cloud-platform-artifact-registry": "google-cloud-platform-artifact-registry";
44
+ "google-cloud-platform-workload-identity-federation": "google-cloud-platform-workload-identity-federation";
45
+ harbor: "harbor";
46
+ "git-guardian": "git-guardian";
47
+ github: "github";
48
+ assembla: "assembla";
49
+ "emails-on-push": "emails-on-push";
50
+ "pipelines-email": "pipelines-email";
51
+ pushover: "pushover";
52
+ "squash-tm": "squash-tm";
53
+ }>;
54
+ export declare const ManageIntegrationSchema: z.ZodObject<{
55
+ action: z.ZodEnum<{
56
+ update: "update";
57
+ get: "get";
58
+ disable: "disable";
59
+ }>;
60
+ project_id: z.ZodString;
61
+ integration: z.ZodEnum<{
62
+ slack: "slack";
63
+ "gitlab-slack-application": "gitlab-slack-application";
64
+ "slack-slash-commands": "slack-slash-commands";
65
+ discord: "discord";
66
+ "microsoft-teams": "microsoft-teams";
67
+ mattermost: "mattermost";
68
+ "mattermost-slash-commands": "mattermost-slash-commands";
69
+ telegram: "telegram";
70
+ matrix: "matrix";
71
+ pumble: "pumble";
72
+ "hangouts-chat": "hangouts-chat";
73
+ "webex-teams": "webex-teams";
74
+ "unify-circuit": "unify-circuit";
75
+ campfire: "campfire";
76
+ irker: "irker";
77
+ jira: "jira";
78
+ "jira-cloud-app": "jira-cloud-app";
79
+ bugzilla: "bugzilla";
80
+ redmine: "redmine";
81
+ youtrack: "youtrack";
82
+ clickup: "clickup";
83
+ linear: "linear";
84
+ phorge: "phorge";
85
+ pivotaltracker: "pivotaltracker";
86
+ asana: "asana";
87
+ "custom-issue-tracker": "custom-issue-tracker";
88
+ ewm: "ewm";
89
+ jenkins: "jenkins";
90
+ teamcity: "teamcity";
91
+ bamboo: "bamboo";
92
+ buildkite: "buildkite";
93
+ "drone-ci": "drone-ci";
94
+ datadog: "datadog";
95
+ "mock-ci": "mock-ci";
96
+ "diffblue-cover": "diffblue-cover";
97
+ confluence: "confluence";
98
+ "external-wiki": "external-wiki";
99
+ "apple-app-store": "apple-app-store";
100
+ "google-play": "google-play";
101
+ packagist: "packagist";
102
+ "google-cloud-platform-artifact-registry": "google-cloud-platform-artifact-registry";
103
+ "google-cloud-platform-workload-identity-federation": "google-cloud-platform-workload-identity-federation";
104
+ harbor: "harbor";
105
+ "git-guardian": "git-guardian";
106
+ github: "github";
107
+ assembla: "assembla";
108
+ "emails-on-push": "emails-on-push";
109
+ "pipelines-email": "pipelines-email";
110
+ pushover: "pushover";
111
+ "squash-tm": "squash-tm";
112
+ }>;
113
+ active: z.ZodOptional<z.ZodPipe<z.ZodTransform<boolean, unknown>, z.ZodBoolean>>;
114
+ push_events: z.ZodOptional<z.ZodPipe<z.ZodTransform<boolean, unknown>, z.ZodBoolean>>;
115
+ issues_events: z.ZodOptional<z.ZodPipe<z.ZodTransform<boolean, unknown>, z.ZodBoolean>>;
116
+ merge_requests_events: z.ZodOptional<z.ZodPipe<z.ZodTransform<boolean, unknown>, z.ZodBoolean>>;
117
+ tag_push_events: z.ZodOptional<z.ZodPipe<z.ZodTransform<boolean, unknown>, z.ZodBoolean>>;
118
+ note_events: z.ZodOptional<z.ZodPipe<z.ZodTransform<boolean, unknown>, z.ZodBoolean>>;
119
+ confidential_issues_events: z.ZodOptional<z.ZodPipe<z.ZodTransform<boolean, unknown>, z.ZodBoolean>>;
120
+ pipeline_events: z.ZodOptional<z.ZodPipe<z.ZodTransform<boolean, unknown>, z.ZodBoolean>>;
121
+ wiki_page_events: z.ZodOptional<z.ZodPipe<z.ZodTransform<boolean, unknown>, z.ZodBoolean>>;
122
+ job_events: z.ZodOptional<z.ZodPipe<z.ZodTransform<boolean, unknown>, z.ZodBoolean>>;
123
+ deployment_events: z.ZodOptional<z.ZodPipe<z.ZodTransform<boolean, unknown>, z.ZodBoolean>>;
124
+ releases_events: z.ZodOptional<z.ZodPipe<z.ZodTransform<boolean, unknown>, z.ZodBoolean>>;
125
+ vulnerability_events: z.ZodOptional<z.ZodPipe<z.ZodTransform<boolean, unknown>, z.ZodBoolean>>;
126
+ config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
127
+ }, z.core.$loose>;
128
+ export type ManageIntegrationInput = z.infer<typeof ManageIntegrationSchema>;
129
+ export type IntegrationType = z.infer<typeof IntegrationTypeSchema>;
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ManageIntegrationSchema = exports.IntegrationTypeSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const utils_1 = require("../utils");
6
+ exports.IntegrationTypeSchema = zod_1.z.enum([
7
+ "slack",
8
+ "gitlab-slack-application",
9
+ "slack-slash-commands",
10
+ "discord",
11
+ "microsoft-teams",
12
+ "mattermost",
13
+ "mattermost-slash-commands",
14
+ "telegram",
15
+ "matrix",
16
+ "pumble",
17
+ "hangouts-chat",
18
+ "webex-teams",
19
+ "unify-circuit",
20
+ "campfire",
21
+ "irker",
22
+ "jira",
23
+ "jira-cloud-app",
24
+ "bugzilla",
25
+ "redmine",
26
+ "youtrack",
27
+ "clickup",
28
+ "linear",
29
+ "phorge",
30
+ "pivotaltracker",
31
+ "asana",
32
+ "custom-issue-tracker",
33
+ "ewm",
34
+ "jenkins",
35
+ "teamcity",
36
+ "bamboo",
37
+ "buildkite",
38
+ "drone-ci",
39
+ "datadog",
40
+ "mock-ci",
41
+ "diffblue-cover",
42
+ "confluence",
43
+ "external-wiki",
44
+ "apple-app-store",
45
+ "google-play",
46
+ "packagist",
47
+ "google-cloud-platform-artifact-registry",
48
+ "google-cloud-platform-workload-identity-federation",
49
+ "harbor",
50
+ "git-guardian",
51
+ "github",
52
+ "assembla",
53
+ "emails-on-push",
54
+ "pipelines-email",
55
+ "pushover",
56
+ "squash-tm",
57
+ ]);
58
+ exports.ManageIntegrationSchema = zod_1.z
59
+ .object({
60
+ action: zod_1.z.enum(["get", "update", "disable"]).describe("Action to perform"),
61
+ project_id: zod_1.z.string().describe("Project ID or URL-encoded path"),
62
+ integration: exports.IntegrationTypeSchema.describe("Integration type slug (e.g., slack, jira, discord). Note: gitlab-slack-application cannot be created via API - it requires OAuth installation from GitLab UI."),
63
+ active: utils_1.flexibleBoolean
64
+ .optional()
65
+ .describe("For 'update': Enable or disable the integration without full configuration"),
66
+ push_events: utils_1.flexibleBoolean.optional().describe("Trigger integration on push events"),
67
+ issues_events: utils_1.flexibleBoolean.optional().describe("Trigger integration on issue events"),
68
+ merge_requests_events: utils_1.flexibleBoolean
69
+ .optional()
70
+ .describe("Trigger integration on merge request events"),
71
+ tag_push_events: utils_1.flexibleBoolean.optional().describe("Trigger integration on tag push events"),
72
+ note_events: utils_1.flexibleBoolean.optional().describe("Trigger integration on note events"),
73
+ confidential_issues_events: utils_1.flexibleBoolean
74
+ .optional()
75
+ .describe("Trigger integration on confidential issue events"),
76
+ pipeline_events: utils_1.flexibleBoolean.optional().describe("Trigger integration on pipeline events"),
77
+ wiki_page_events: utils_1.flexibleBoolean
78
+ .optional()
79
+ .describe("Trigger integration on wiki page events"),
80
+ job_events: utils_1.flexibleBoolean.optional().describe("Trigger integration on job events"),
81
+ deployment_events: utils_1.flexibleBoolean
82
+ .optional()
83
+ .describe("Trigger integration on deployment events"),
84
+ releases_events: utils_1.flexibleBoolean.optional().describe("Trigger integration on release events"),
85
+ vulnerability_events: utils_1.flexibleBoolean
86
+ .optional()
87
+ .describe("Trigger integration on vulnerability events"),
88
+ config: zod_1.z
89
+ .record(zod_1.z.string(), zod_1.z.unknown())
90
+ .optional()
91
+ .describe("Integration-specific configuration parameters. Pass as key-value pairs. Examples: webhook_url, token, channel, etc. See GitLab API documentation for integration-specific fields."),
92
+ })
93
+ .passthrough();
94
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/entities/integrations/schema.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AACxB,oCAA2C;AAM9B,QAAA,qBAAqB,GAAG,OAAC,CAAC,IAAI,CAAC;IAE1C,OAAO;IACP,0BAA0B;IAC1B,sBAAsB;IACtB,SAAS;IACT,iBAAiB;IACjB,YAAY;IACZ,2BAA2B;IAC3B,UAAU;IACV,QAAQ;IACR,QAAQ;IACR,eAAe;IACf,aAAa;IACb,eAAe;IACf,UAAU;IACV,OAAO;IAEP,MAAM;IACN,gBAAgB;IAChB,UAAU;IACV,SAAS;IACT,UAAU;IACV,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,gBAAgB;IAChB,OAAO;IACP,sBAAsB;IACtB,KAAK;IAEL,SAAS;IACT,UAAU;IACV,QAAQ;IACR,WAAW;IACX,UAAU;IACV,SAAS;IACT,SAAS;IACT,gBAAgB;IAEhB,YAAY;IACZ,eAAe;IAEf,iBAAiB;IACjB,aAAa;IACb,WAAW;IAEX,yCAAyC;IACzC,oDAAoD;IACpD,QAAQ;IAER,cAAc;IAEd,QAAQ;IACR,UAAU;IACV,gBAAgB;IAChB,iBAAiB;IACjB,UAAU;IACV,WAAW;CACZ,CAAC,CAAC;AAOU,QAAA,uBAAuB,GAAG,OAAC;KACrC,MAAM,CAAC;IACN,MAAM,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC1E,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACjE,WAAW,EAAE,6BAAqB,CAAC,QAAQ,CACzC,+JAA+J,CAChK;IAGD,MAAM,EAAE,uBAAe;SACpB,QAAQ,EAAE;SACV,QAAQ,CAAC,4EAA4E,CAAC;IAGzF,WAAW,EAAE,uBAAe,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IACtF,aAAa,EAAE,uBAAe,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IACzF,qBAAqB,EAAE,uBAAe;SACnC,QAAQ,EAAE;SACV,QAAQ,CAAC,6CAA6C,CAAC;IAC1D,eAAe,EAAE,uBAAe,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IAC9F,WAAW,EAAE,uBAAe,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IACtF,0BAA0B,EAAE,uBAAe;SACxC,QAAQ,EAAE;SACV,QAAQ,CAAC,kDAAkD,CAAC;IAC/D,eAAe,EAAE,uBAAe,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IAC9F,gBAAgB,EAAE,uBAAe;SAC9B,QAAQ,EAAE;SACV,QAAQ,CAAC,yCAAyC,CAAC;IACtD,UAAU,EAAE,uBAAe,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IACpF,iBAAiB,EAAE,uBAAe;SAC/B,QAAQ,EAAE;SACV,QAAQ,CAAC,0CAA0C,CAAC;IACvD,eAAe,EAAE,uBAAe,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAC7F,oBAAoB,EAAE,uBAAe;SAClC,QAAQ,EAAE;SACV,QAAQ,CAAC,6CAA6C,CAAC;IAI1D,MAAM,EAAE,OAAC;SACN,MAAM,CAAC,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC;SAC/B,QAAQ,EAAE;SACV,QAAQ,CACP,mLAAmL,CACpL;CACJ,CAAC;KACD,WAAW,EAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from "../shared";
2
+ export * from "./schema-readonly";
3
+ export * from "./schema";
4
+ export * from "./registry";
5
+ import type { ToolDefinition } from "../../types";
6
+ export declare const snippetsTools: ToolDefinition[];
7
+ export declare const snippetsReadOnlyTools: string[];
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.snippetsReadOnlyTools = exports.snippetsTools = void 0;
18
+ __exportStar(require("../shared"), exports);
19
+ __exportStar(require("./schema-readonly"), exports);
20
+ __exportStar(require("./schema"), exports);
21
+ __exportStar(require("./registry"), exports);
22
+ const registry_1 = require("./registry");
23
+ const isReadOnly = process.env.GITLAB_READONLY === "true";
24
+ const snippetsToolsFromRegistry = (0, registry_1.getFilteredSnippetsTools)(isReadOnly);
25
+ exports.snippetsTools = snippetsToolsFromRegistry.map((tool) => ({
26
+ name: tool.name,
27
+ description: tool.description,
28
+ inputSchema: tool.inputSchema,
29
+ }));
30
+ exports.snippetsReadOnlyTools = (0, registry_1.getSnippetsReadOnlyToolNames)();
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/entities/snippets/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,4CAA0B;AAG1B,oDAAkC;AAGlC,2CAAyB;AAGzB,6CAA2B;AAG3B,yCAAoF;AAIpF,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,MAAM,CAAC;AAG1D,MAAM,yBAAyB,GAAG,IAAA,mCAAwB,EAAC,UAAU,CAAC,CAAC;AAG1D,QAAA,aAAa,GAAqB,yBAAyB,CAAC,GAAG,CAC1E,CAAC,IAAI,EAAkB,EAAE,CAAC,CAAC;IACzB,IAAI,EAAE,IAAI,CAAC,IAAI;IACf,WAAW,EAAE,IAAI,CAAC,WAAW;IAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;CAC9B,CAAC,CACH,CAAC;AAGW,QAAA,qBAAqB,GAAG,IAAA,uCAA4B,GAAE,CAAC"}