@structured-world/gitlab-mcp 6.30.0 → 6.31.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 (78) hide show
  1. package/README.md +63 -1070
  2. package/dist/src/cli/docker/container-runtime.d.ts +4 -0
  3. package/dist/src/cli/docker/container-runtime.js +85 -0
  4. package/dist/src/cli/docker/container-runtime.js.map +1 -0
  5. package/dist/src/cli/docker/docker-utils.d.ts +1 -0
  6. package/dist/src/cli/docker/docker-utils.js +85 -61
  7. package/dist/src/cli/docker/docker-utils.js.map +1 -1
  8. package/dist/src/cli/docker/index.d.ts +1 -0
  9. package/dist/src/cli/docker/index.js +1 -0
  10. package/dist/src/cli/docker/index.js.map +1 -1
  11. package/dist/src/cli/docker/types.d.ts +12 -0
  12. package/dist/src/cli/docker/types.js.map +1 -1
  13. package/dist/src/cli/list-tools.js +4 -4
  14. package/dist/src/cli/list-tools.js.map +1 -1
  15. package/dist/src/cli/setup/discovery.d.ts +3 -0
  16. package/dist/src/cli/setup/discovery.js +71 -0
  17. package/dist/src/cli/setup/discovery.js.map +1 -0
  18. package/dist/src/cli/setup/flows/configure-existing.d.ts +2 -0
  19. package/dist/src/cli/setup/flows/configure-existing.js +211 -0
  20. package/dist/src/cli/setup/flows/configure-existing.js.map +1 -0
  21. package/dist/src/cli/setup/flows/local-setup.d.ts +2 -0
  22. package/dist/src/cli/setup/flows/local-setup.js +206 -0
  23. package/dist/src/cli/setup/flows/local-setup.js.map +1 -0
  24. package/dist/src/cli/setup/flows/server-setup.d.ts +2 -0
  25. package/dist/src/cli/setup/flows/server-setup.js +185 -0
  26. package/dist/src/cli/setup/flows/server-setup.js.map +1 -0
  27. package/dist/src/cli/setup/flows/tool-selection.d.ts +3 -0
  28. package/dist/src/cli/setup/flows/tool-selection.js +265 -0
  29. package/dist/src/cli/setup/flows/tool-selection.js.map +1 -0
  30. package/dist/src/cli/setup/index.d.ts +4 -0
  31. package/dist/src/cli/setup/index.js +29 -0
  32. package/dist/src/cli/setup/index.js.map +1 -0
  33. package/dist/src/cli/setup/presets.d.ts +7 -0
  34. package/dist/src/cli/setup/presets.js +248 -0
  35. package/dist/src/cli/setup/presets.js.map +1 -0
  36. package/dist/src/cli/setup/types.d.ts +68 -0
  37. package/dist/src/cli/setup/types.js +3 -0
  38. package/dist/src/cli/setup/types.js.map +1 -0
  39. package/dist/src/cli/setup/wizard.d.ts +4 -0
  40. package/dist/src/cli/setup/wizard.js +128 -0
  41. package/dist/src/cli/setup/wizard.js.map +1 -0
  42. package/dist/src/cli-utils.d.ts +2 -0
  43. package/dist/src/cli-utils.js +12 -0
  44. package/dist/src/cli-utils.js.map +1 -1
  45. package/dist/src/entities/integrations/index.d.ts +0 -3
  46. package/dist/src/entities/integrations/index.js +0 -10
  47. package/dist/src/entities/integrations/index.js.map +1 -1
  48. package/dist/src/entities/integrations/registry.js +24 -19
  49. package/dist/src/entities/integrations/registry.js.map +1 -1
  50. package/dist/src/entities/integrations/schema-readonly.d.ts +59 -3
  51. package/dist/src/entities/integrations/schema-readonly.js +15 -3
  52. package/dist/src/entities/integrations/schema-readonly.js.map +1 -1
  53. package/dist/src/entities/integrations/schema.d.ts +0 -55
  54. package/dist/src/entities/integrations/schema.js +0 -6
  55. package/dist/src/entities/integrations/schema.js.map +1 -1
  56. package/dist/src/entities/webhooks/index.d.ts +0 -3
  57. package/dist/src/entities/webhooks/index.js +0 -10
  58. package/dist/src/entities/webhooks/index.js.map +1 -1
  59. package/dist/src/entities/webhooks/registry.js +27 -27
  60. package/dist/src/entities/webhooks/registry.js.map +1 -1
  61. package/dist/src/entities/webhooks/schema-readonly.d.ts +18 -9
  62. package/dist/src/entities/webhooks/schema-readonly.js +20 -17
  63. package/dist/src/entities/webhooks/schema-readonly.js.map +1 -1
  64. package/dist/src/entities/webhooks/schema.d.ts +0 -9
  65. package/dist/src/entities/webhooks/schema.js +0 -8
  66. package/dist/src/entities/webhooks/schema.js.map +1 -1
  67. package/dist/src/main.js +14 -3
  68. package/dist/src/main.js.map +1 -1
  69. package/dist/src/profiles/builtin/code-reviewer.yaml +41 -0
  70. package/dist/src/profiles/builtin/full-access.yaml +29 -0
  71. package/dist/src/services/ToolAvailability.js +3 -3
  72. package/dist/src/services/ToolAvailability.js.map +1 -1
  73. package/dist/src/utils/error-handler.js +1 -1
  74. package/dist/src/utils/error-handler.js.map +1 -1
  75. package/dist/structured-world-gitlab-mcp-6.31.0.tgz +0 -0
  76. package/dist/tsconfig.build.tsbuildinfo +1 -1
  77. package/package.json +7 -3
  78. package/dist/structured-world-gitlab-mcp-6.30.0.tgz +0 -0
@@ -0,0 +1,206 @@
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.runLocalSetupFlow = runLocalSetupFlow;
37
+ const p = __importStar(require("@clack/prompts"));
38
+ const types_1 = require("../../install/types");
39
+ const connection_1 = require("../../init/connection");
40
+ const browser_1 = require("../../init/browser");
41
+ const installers_1 = require("../../install/installers");
42
+ const tool_selection_1 = require("./tool-selection");
43
+ async function runLocalSetupFlow(discovery) {
44
+ const instanceType = await p.select({
45
+ message: "Which GitLab instance?",
46
+ options: [
47
+ { value: "saas", label: "GitLab.com (SaaS)" },
48
+ { value: "self-hosted", label: "Self-hosted GitLab" },
49
+ ],
50
+ });
51
+ if (p.isCancel(instanceType)) {
52
+ return { success: false, mode: "local", error: "Cancelled" };
53
+ }
54
+ let instanceUrl;
55
+ if (instanceType === "saas") {
56
+ instanceUrl = "https://gitlab.com";
57
+ }
58
+ else {
59
+ const urlInput = await p.text({
60
+ message: "Enter your GitLab instance URL:",
61
+ placeholder: "https://gitlab.example.com",
62
+ validate: value => {
63
+ const result = (0, connection_1.validateGitLabUrl)(value ?? "");
64
+ return result.valid ? undefined : result.error;
65
+ },
66
+ });
67
+ if (p.isCancel(urlInput)) {
68
+ return { success: false, mode: "local", error: "Cancelled" };
69
+ }
70
+ instanceUrl = urlInput.replace(/\/+$/, "").replace(/\/api\/v4$/i, "");
71
+ }
72
+ const hasToken = await p.confirm({
73
+ message: "Do you already have a GitLab Personal Access Token (PAT)?",
74
+ initialValue: false,
75
+ });
76
+ if (p.isCancel(hasToken)) {
77
+ return { success: false, mode: "local", error: "Cancelled" };
78
+ }
79
+ if (!hasToken) {
80
+ const patUrl = (0, connection_1.getPatCreationUrl)(instanceUrl);
81
+ p.note(`You need a Personal Access Token with these scopes:\n` +
82
+ ` - api (full API access)\n` +
83
+ ` - read_user (read user info)\n\n` +
84
+ `Token URL: ${patUrl}`, "Create a Personal Access Token");
85
+ const openBrowser = await p.confirm({
86
+ message: "Open browser to create token?",
87
+ initialValue: true,
88
+ });
89
+ if (!p.isCancel(openBrowser) && openBrowser) {
90
+ const opened = await (0, browser_1.openUrl)(patUrl);
91
+ if (opened) {
92
+ p.log.info("Browser opened. Create your token and copy it.");
93
+ }
94
+ else {
95
+ p.log.warn("Could not open browser automatically");
96
+ p.note(patUrl, "Open this URL manually:");
97
+ }
98
+ }
99
+ }
100
+ const tokenInput = await p.password({
101
+ message: "Enter your Personal Access Token:",
102
+ validate: value => {
103
+ if (!value || value.length < 10) {
104
+ return "Token is too short";
105
+ }
106
+ return undefined;
107
+ },
108
+ });
109
+ if (p.isCancel(tokenInput)) {
110
+ return { success: false, mode: "local", error: "Cancelled" };
111
+ }
112
+ const token = tokenInput;
113
+ const spinner = p.spinner();
114
+ spinner.start("Testing connection...");
115
+ const connectionResult = await (0, connection_1.testConnection)(instanceUrl, token);
116
+ if (!connectionResult.success) {
117
+ spinner.stop("Connection failed");
118
+ p.log.error(`Connection error: ${connectionResult.error ?? "Unknown error"}`);
119
+ return { success: false, mode: "local", error: connectionResult.error };
120
+ }
121
+ spinner.stop("Connection successful!");
122
+ p.log.success(`Connected as ${connectionResult.username ?? "unknown user"}` +
123
+ (connectionResult.gitlabVersion ? ` (GitLab ${connectionResult.gitlabVersion})` : ""));
124
+ const toolConfig = await (0, tool_selection_1.runToolSelectionFlow)();
125
+ if (!toolConfig) {
126
+ return { success: false, mode: "local", error: "Cancelled" };
127
+ }
128
+ const serverConfig = buildServerConfig(instanceUrl, token, toolConfig);
129
+ const targetClients = await selectClients(discovery);
130
+ if (!targetClients || targetClients.length === 0) {
131
+ p.log.step("Generated configuration:");
132
+ const configJson = JSON.stringify({ mcpServers: { gitlab: serverConfig } }, null, 2);
133
+ const masked = configJson.replace(/("GITLAB_TOKEN"\s*:\s*")((?:\\.|[^"\\])*)(")/g, "$1****$3");
134
+ p.note(masked, "MCP Server Configuration");
135
+ p.log.warn("Replace **** with your actual token in the config file.");
136
+ return { success: true, mode: "local" };
137
+ }
138
+ spinner.start("Installing configuration...");
139
+ const results = (0, installers_1.installToClients)(targetClients, serverConfig, true);
140
+ spinner.stop("Installation complete!");
141
+ const successful = results.filter(r => r.success);
142
+ const failed = results.filter(r => !r.success);
143
+ if (successful.length > 0) {
144
+ p.log.success(`Installed to ${successful.length} client(s):`);
145
+ for (const result of successful) {
146
+ const metadata = types_1.CLIENT_METADATA[result.client];
147
+ let info = ` ✓ ${metadata.name}`;
148
+ if (result.configPath)
149
+ info += ` (${result.configPath})`;
150
+ console.log(info);
151
+ }
152
+ }
153
+ if (failed.length > 0) {
154
+ p.log.error(`Failed for ${failed.length} client(s):`);
155
+ for (const result of failed) {
156
+ const metadata = types_1.CLIENT_METADATA[result.client];
157
+ console.log(` ✗ ${metadata.name}: ${result.error}`);
158
+ }
159
+ }
160
+ return {
161
+ success: successful.length > 0,
162
+ mode: "local",
163
+ configuredClients: successful.map(r => r.client),
164
+ };
165
+ }
166
+ function buildServerConfig(instanceUrl, token, toolConfig) {
167
+ const env = {
168
+ GITLAB_API_URL: instanceUrl,
169
+ GITLAB_TOKEN: token,
170
+ };
171
+ if (toolConfig.mode === "preset" && toolConfig.preset) {
172
+ env.GITLAB_PROFILE = toolConfig.preset;
173
+ }
174
+ if (toolConfig.mode === "manual" && toolConfig.enabledCategories) {
175
+ (0, tool_selection_1.applyManualCategories)(toolConfig.enabledCategories, env);
176
+ }
177
+ if (toolConfig.mode === "advanced" && toolConfig.envOverrides) {
178
+ Object.assign(env, toolConfig.envOverrides);
179
+ }
180
+ return {
181
+ command: "npx",
182
+ args: ["-y", "@structured-world/gitlab-mcp@latest"],
183
+ env,
184
+ };
185
+ }
186
+ async function selectClients(discovery) {
187
+ const detected = discovery.clients.detected;
188
+ if (detected.length === 0) {
189
+ p.log.warn("No MCP clients detected. Configuration will be displayed instead.");
190
+ return null;
191
+ }
192
+ const selectedClients = await p.multiselect({
193
+ message: "Select clients to install to:",
194
+ options: detected.map(result => ({
195
+ value: result.client,
196
+ label: types_1.CLIENT_METADATA[result.client].name,
197
+ hint: result.alreadyConfigured ? "already configured (will overwrite)" : undefined,
198
+ })),
199
+ required: false,
200
+ });
201
+ if (p.isCancel(selectedClients)) {
202
+ return null;
203
+ }
204
+ return selectedClients;
205
+ }
206
+ //# sourceMappingURL=local-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-setup.js","sourceRoot":"","sources":["../../../../../src/cli/setup/flows/local-setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { DiscoveryResult, SetupResult } from "../types";
2
+ export declare function runServerSetupFlow(discovery: DiscoveryResult): Promise<SetupResult>;
@@ -0,0 +1,185 @@
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.runServerSetupFlow = runServerSetupFlow;
37
+ const p = __importStar(require("@clack/prompts"));
38
+ const crypto_1 = require("crypto");
39
+ const docker_utils_1 = require("../../docker/docker-utils");
40
+ const container_runtime_1 = require("../../docker/container-runtime");
41
+ const types_1 = require("../../docker/types");
42
+ const tool_selection_1 = require("./tool-selection");
43
+ async function runServerSetupFlow(discovery) {
44
+ const status = discovery.docker;
45
+ const runtime = (0, container_runtime_1.getContainerRuntime)();
46
+ const runtimeLabel = runtime.runtime === "podman" ? "Podman" : "Docker";
47
+ if (!status.dockerInstalled) {
48
+ p.log.error("No container runtime (Docker or Podman) is installed.");
49
+ p.note("Install Docker: https://docs.docker.com/get-docker/\nOr Podman: https://podman.io/getting-started/installation", "Install Runtime");
50
+ return { success: false, mode: "server", error: "Container runtime not installed" };
51
+ }
52
+ if (!status.composeInstalled) {
53
+ p.log.error(`No compose tool found for ${runtimeLabel}.`);
54
+ p.note(`A compose tool is required.\nFor Docker: bundled with Docker Desktop or 'docker compose'\nFor Podman: install podman-compose`, "Install Compose");
55
+ return { success: false, mode: "server", error: "Compose tool not installed" };
56
+ }
57
+ const deploymentType = await p.select({
58
+ message: "Deployment type:",
59
+ options: [
60
+ {
61
+ value: "standalone",
62
+ label: "Docker standalone",
63
+ hint: "Stateless, for dev/testing",
64
+ },
65
+ {
66
+ value: "external-db",
67
+ label: "Docker + external PostgreSQL",
68
+ hint: "Production with existing database",
69
+ },
70
+ {
71
+ value: "compose-bundle",
72
+ label: "Docker Compose bundle",
73
+ hint: "All-in-one with postgres included",
74
+ },
75
+ ],
76
+ });
77
+ if (p.isCancel(deploymentType)) {
78
+ return { success: false, mode: "server", error: "Cancelled" };
79
+ }
80
+ const port = await p.text({
81
+ message: "SSE port for MCP server:",
82
+ placeholder: "3333",
83
+ initialValue: "3333",
84
+ validate: value => {
85
+ const num = parseInt(value ?? "", 10);
86
+ if (isNaN(num) || num < 1 || num > 65535) {
87
+ return "Port must be between 1 and 65535";
88
+ }
89
+ return undefined;
90
+ },
91
+ });
92
+ if (p.isCancel(port)) {
93
+ return { success: false, mode: "server", error: "Cancelled" };
94
+ }
95
+ const enableOAuth = await p.confirm({
96
+ message: "Enable OAuth for multi-user support?",
97
+ initialValue: deploymentType !== "standalone",
98
+ });
99
+ if (p.isCancel(enableOAuth)) {
100
+ return { success: false, mode: "server", error: "Cancelled" };
101
+ }
102
+ let oauthSessionSecret;
103
+ let databaseUrl;
104
+ if (enableOAuth) {
105
+ oauthSessionSecret = (0, crypto_1.randomBytes)(32).toString("hex");
106
+ p.log.info("Session secret generated and stored in .env file (not in compose).");
107
+ if (deploymentType === "external-db") {
108
+ const dbUrl = await p.text({
109
+ message: "PostgreSQL DATABASE_URL:",
110
+ placeholder: "postgresql://user:pass@host:5432/gitlab_mcp",
111
+ validate: v => {
112
+ if (!v?.startsWith("postgresql://")) {
113
+ return "Must be a valid PostgreSQL URL";
114
+ }
115
+ return undefined;
116
+ },
117
+ });
118
+ if (p.isCancel(dbUrl)) {
119
+ return { success: false, mode: "server", error: "Cancelled" };
120
+ }
121
+ databaseUrl = dbUrl;
122
+ }
123
+ }
124
+ const toolConfig = await (0, tool_selection_1.runToolSelectionFlow)();
125
+ if (!toolConfig) {
126
+ return { success: false, mode: "server", error: "Cancelled" };
127
+ }
128
+ const toolEnv = {};
129
+ if (toolConfig.mode === "preset" && toolConfig.preset) {
130
+ toolEnv.GITLAB_PROFILE = toolConfig.preset;
131
+ }
132
+ else if (toolConfig.mode === "advanced" && toolConfig.envOverrides) {
133
+ Object.assign(toolEnv, toolConfig.envOverrides);
134
+ }
135
+ else if (toolConfig.mode === "manual" && toolConfig.enabledCategories) {
136
+ (0, tool_selection_1.applyManualCategories)(toolConfig.enabledCategories, toolEnv);
137
+ }
138
+ const config = {
139
+ ...types_1.DEFAULT_DOCKER_CONFIG,
140
+ port: parseInt(port, 10),
141
+ deploymentType,
142
+ oauthEnabled: enableOAuth,
143
+ oauthSessionSecret,
144
+ databaseUrl,
145
+ environment: Object.keys(toolEnv).length > 0 ? toolEnv : undefined,
146
+ };
147
+ const spinner = p.spinner();
148
+ spinner.start("Creating Docker configuration...");
149
+ try {
150
+ (0, docker_utils_1.initDockerConfig)(config);
151
+ spinner.stop("Docker configuration created!");
152
+ const startNow = await p.confirm({
153
+ message: "Start the container now?",
154
+ initialValue: true,
155
+ });
156
+ if (!p.isCancel(startNow) && startNow) {
157
+ spinner.start("Starting container...");
158
+ const result = (0, docker_utils_1.startContainer)();
159
+ if (result.success) {
160
+ spinner.stop("Container started!");
161
+ p.log.success(`MCP server running at http://localhost:${port}`);
162
+ }
163
+ else {
164
+ spinner.stop("Failed to start container");
165
+ p.log.error(result.error ?? "Unknown error");
166
+ }
167
+ }
168
+ return {
169
+ success: true,
170
+ mode: "server",
171
+ dockerConfig: {
172
+ port: parseInt(port, 10),
173
+ deploymentType,
174
+ instances: [],
175
+ },
176
+ };
177
+ }
178
+ catch (error) {
179
+ spinner.stop("Configuration failed");
180
+ const msg = error instanceof Error ? error.message : String(error);
181
+ p.log.error(msg);
182
+ return { success: false, mode: "server", error: msg };
183
+ }
184
+ }
185
+ //# sourceMappingURL=server-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-setup.js","sourceRoot":"","sources":["../../../../../src/cli/setup/flows/server-setup.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,gDA2KC;AAvLD,kDAAoC;AACpC,mCAAqC;AAErC,4DAA6E;AAC7E,sEAAqE;AACrE,8CAA2D;AAC3D,qDAA+E;AAMxE,KAAK,UAAU,kBAAkB,CAAC,SAA0B;IAEjE,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;IAChC,MAAM,OAAO,GAAG,IAAA,uCAAmB,GAAE,CAAC;IACtC,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;IAExE,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QAC5B,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;QACrE,CAAC,CAAC,IAAI,CACJ,gHAAgH,EAChH,iBAAiB,CAClB,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC;IACtF,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC7B,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,6BAA6B,YAAY,GAAG,CAAC,CAAC;QAC1D,CAAC,CAAC,IAAI,CACJ,8HAA8H,EAC9H,iBAAiB,CAClB,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC;IACjF,CAAC;IAGD,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,MAAM,CAAuB;QAC1D,OAAO,EAAE,kBAAkB;QAC3B,OAAO,EAAE;YACP;gBACE,KAAK,EAAE,YAAoC;gBAC3C,KAAK,EAAE,mBAAmB;gBAC1B,IAAI,EAAE,4BAA4B;aACnC;YACD;gBACE,KAAK,EAAE,aAAqC;gBAC5C,KAAK,EAAE,8BAA8B;gBACrC,IAAI,EAAE,mCAAmC;aAC1C;YACD;gBACE,KAAK,EAAE,gBAAwC;gBAC/C,KAAK,EAAE,uBAAuB;gBAC9B,IAAI,EAAE,mCAAmC;aAC1C;SACF;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IAChE,CAAC;IAGD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC;QACxB,OAAO,EAAE,0BAA0B;QACnC,WAAW,EAAE,MAAM;QACnB,YAAY,EAAE,MAAM;QACpB,QAAQ,EAAE,KAAK,CAAC,EAAE;YAChB,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACtC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,KAAK,EAAE,CAAC;gBACzC,OAAO,kCAAkC,CAAC;YAC5C,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IAChE,CAAC;IAGD,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC;QAClC,OAAO,EAAE,sCAAsC;QAC/C,YAAY,EAAE,cAAc,KAAK,YAAY;KAC9C,CAAC,CAAC;IAEH,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IAChE,CAAC;IAED,IAAI,kBAAsC,CAAC;IAC3C,IAAI,WAA+B,CAAC;IAEpC,IAAI,WAAW,EAAE,CAAC;QAChB,kBAAkB,GAAG,IAAA,oBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACrD,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;QAEjF,IAAI,cAAc,KAAK,aAAa,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC;gBACzB,OAAO,EAAE,0BAA0B;gBACnC,WAAW,EAAE,6CAA6C;gBAC1D,QAAQ,EAAE,CAAC,CAAC,EAAE;oBACZ,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;wBACpC,OAAO,gCAAgC,CAAC;oBAC1C,CAAC;oBACD,OAAO,SAAS,CAAC;gBACnB,CAAC;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;YAChE,CAAC;YACD,WAAW,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IAGD,MAAM,UAAU,GAAG,MAAM,IAAA,qCAAoB,GAAE,CAAC;IAEhD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IAChE,CAAC;IAGD,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QACtD,OAAO,CAAC,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC;IAC7C,CAAC;SAAM,IAAI,UAAU,CAAC,IAAI,KAAK,UAAU,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;QACrE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;IAClD,CAAC;SAAM,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ,IAAI,UAAU,CAAC,iBAAiB,EAAE,CAAC;QACxE,IAAA,sCAAqB,EAAC,UAAU,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,MAAM,GAAG;QACb,GAAG,6BAAqB;QACxB,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;QACxB,cAAc;QACd,YAAY,EAAE,WAAW;QACzB,kBAAkB;QAClB,WAAW;QACX,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;KACnE,CAAC;IAEF,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IAC5B,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAElD,IAAI,CAAC;QACH,IAAA,+BAAgB,EAAC,MAAM,CAAC,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAG9C,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC;YAC/B,OAAO,EAAE,0BAA0B;YACnC,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;QAEH,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,EAAE,CAAC;YACtC,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;YACvC,MAAM,MAAM,GAAG,IAAA,6BAAc,GAAE,CAAC;YAChC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;gBACnC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,0CAA0C,IAAI,EAAE,CAAC,CAAC;YAClE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;gBAC1C,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,eAAe,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,QAAQ;YACd,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;gBACxB,cAAc;gBACd,SAAS,EAAE,EAAE;aACd;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IACxD,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { ToolConfig } from "../types";
2
+ export declare function applyManualCategories(selectedCategories: string[], env: Record<string, string>): void;
3
+ export declare function runToolSelectionFlow(): Promise<ToolConfig | null>;