@structured-world/gitlab-mcp 6.14.0 → 6.16.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.
- package/dist/src/cli/list-tools.js +556 -3
- package/dist/src/cli/list-tools.js.map +1 -1
- package/dist/src/cli-utils.d.ts +8 -0
- package/dist/src/cli-utils.js +125 -0
- package/dist/src/cli-utils.js.map +1 -0
- package/dist/src/entities/core/schema-readonly.d.ts +4 -4
- package/dist/src/entities/mrs/schema-readonly.d.ts +1 -1
- package/dist/src/entities/pipelines/schema-readonly.d.ts +3 -3
- package/dist/src/main.js +31 -23
- package/dist/src/main.js.map +1 -1
- package/dist/src/profiles/index.d.ts +3 -1
- package/dist/src/profiles/index.js +17 -1
- package/dist/src/profiles/index.js.map +1 -1
- package/dist/src/profiles/project-loader.d.ts +12 -0
- package/dist/src/profiles/project-loader.js +214 -0
- package/dist/src/profiles/project-loader.js.map +1 -0
- package/dist/src/profiles/scope-enforcer.d.ts +24 -0
- package/dist/src/profiles/scope-enforcer.js +128 -0
- package/dist/src/profiles/scope-enforcer.js.map +1 -0
- package/dist/src/profiles/types.d.ts +55 -0
- package/dist/src/profiles/types.js +41 -1
- package/dist/src/profiles/types.js.map +1 -1
- package/dist/structured-world-gitlab-mcp-6.16.0.tgz +0 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/dist/structured-world-gitlab-mcp-6.14.0.tgz +0 -0
|
@@ -0,0 +1,214 @@
|
|
|
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.PROJECT_PROFILE_FILE = exports.PROJECT_PRESET_FILE = exports.PROJECT_CONFIG_DIR = void 0;
|
|
37
|
+
exports.loadProjectConfig = loadProjectConfig;
|
|
38
|
+
exports.findProjectConfig = findProjectConfig;
|
|
39
|
+
exports.validateProjectPreset = validateProjectPreset;
|
|
40
|
+
exports.validateProjectProfile = validateProjectProfile;
|
|
41
|
+
exports.getProjectConfigSummary = getProjectConfigSummary;
|
|
42
|
+
const fs = __importStar(require("fs/promises"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const yaml = __importStar(require("yaml"));
|
|
45
|
+
const types_1 = require("./types");
|
|
46
|
+
const logger_1 = require("../logger");
|
|
47
|
+
exports.PROJECT_CONFIG_DIR = ".gitlab-mcp";
|
|
48
|
+
exports.PROJECT_PRESET_FILE = "preset.yaml";
|
|
49
|
+
exports.PROJECT_PROFILE_FILE = "profile.yaml";
|
|
50
|
+
async function loadProjectConfig(repoPath) {
|
|
51
|
+
const configDir = path.join(repoPath, exports.PROJECT_CONFIG_DIR);
|
|
52
|
+
try {
|
|
53
|
+
const stat = await fs.stat(configDir);
|
|
54
|
+
if (!stat.isDirectory()) {
|
|
55
|
+
logger_1.logger.warn({ path: configDir }, "Project config path exists but is not a directory");
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
logger_1.logger.debug({ path: configDir }, "No project config directory found");
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
const config = {
|
|
64
|
+
configPath: configDir,
|
|
65
|
+
};
|
|
66
|
+
const presetPath = path.join(configDir, exports.PROJECT_PRESET_FILE);
|
|
67
|
+
try {
|
|
68
|
+
const content = await fs.readFile(presetPath, "utf8");
|
|
69
|
+
const parsed = yaml.parse(content);
|
|
70
|
+
config.preset = types_1.ProjectPresetSchema.parse(parsed);
|
|
71
|
+
logger_1.logger.debug({ path: presetPath }, "Loaded project preset");
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
if (error.code !== "ENOENT") {
|
|
75
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
76
|
+
logger_1.logger.error({ error: message, path: presetPath }, "Failed to parse project preset");
|
|
77
|
+
throw new Error(`Invalid project preset at ${presetPath}: ${message}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const profilePath = path.join(configDir, exports.PROJECT_PROFILE_FILE);
|
|
81
|
+
try {
|
|
82
|
+
const content = await fs.readFile(profilePath, "utf8");
|
|
83
|
+
const parsed = yaml.parse(content);
|
|
84
|
+
config.profile = types_1.ProjectProfileSchema.parse(parsed);
|
|
85
|
+
logger_1.logger.debug({ path: profilePath }, "Loaded project profile");
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
if (error.code !== "ENOENT") {
|
|
89
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
90
|
+
logger_1.logger.error({ error: message, path: profilePath }, "Failed to parse project profile");
|
|
91
|
+
throw new Error(`Invalid project profile at ${profilePath}: ${message}`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (!config.preset && !config.profile) {
|
|
95
|
+
logger_1.logger.debug({ path: configDir }, "Project config directory exists but contains no config files");
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
logger_1.logger.info({
|
|
99
|
+
path: configDir,
|
|
100
|
+
hasPreset: !!config.preset,
|
|
101
|
+
hasProfile: !!config.profile,
|
|
102
|
+
}, "Loaded project configuration");
|
|
103
|
+
return config;
|
|
104
|
+
}
|
|
105
|
+
async function findProjectConfig(startPath) {
|
|
106
|
+
let currentPath = path.resolve(startPath);
|
|
107
|
+
const root = path.parse(currentPath).root;
|
|
108
|
+
while (currentPath !== root) {
|
|
109
|
+
const configDir = path.join(currentPath, exports.PROJECT_CONFIG_DIR);
|
|
110
|
+
try {
|
|
111
|
+
await fs.access(configDir);
|
|
112
|
+
return loadProjectConfig(currentPath);
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
}
|
|
116
|
+
const gitDir = path.join(currentPath, ".git");
|
|
117
|
+
try {
|
|
118
|
+
await fs.access(gitDir);
|
|
119
|
+
logger_1.logger.debug({ path: currentPath }, "Found .git without .gitlab-mcp, stopping search");
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
}
|
|
124
|
+
currentPath = path.dirname(currentPath);
|
|
125
|
+
}
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
function validateProjectPreset(preset) {
|
|
129
|
+
const errors = [];
|
|
130
|
+
const warnings = [];
|
|
131
|
+
if (preset.scope) {
|
|
132
|
+
const { project, namespace, projects } = preset.scope;
|
|
133
|
+
if (namespace && !project && !projects?.length) {
|
|
134
|
+
warnings.push(`Scope restricts to namespace '${namespace}' - all projects in this group are allowed`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
if (preset.denied_actions) {
|
|
138
|
+
for (const action of preset.denied_actions) {
|
|
139
|
+
const colonIndex = action.indexOf(":");
|
|
140
|
+
if (colonIndex === -1) {
|
|
141
|
+
errors.push(`Invalid denied_action format '${action}', expected 'tool:action'`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return {
|
|
146
|
+
valid: errors.length === 0,
|
|
147
|
+
errors,
|
|
148
|
+
warnings,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
function validateProjectProfile(profile, availablePresets) {
|
|
152
|
+
const errors = [];
|
|
153
|
+
const warnings = [];
|
|
154
|
+
if (profile.extends) {
|
|
155
|
+
if (!availablePresets.includes(profile.extends)) {
|
|
156
|
+
errors.push(`Unknown preset '${profile.extends}' in extends field`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
if (profile.additional_tools && profile.denied_tools) {
|
|
160
|
+
const overlap = profile.additional_tools.filter(t => profile.denied_tools?.includes(t));
|
|
161
|
+
if (overlap.length > 0) {
|
|
162
|
+
warnings.push(`Tools appear in both additional_tools and denied_tools: ${overlap.join(", ")}`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
valid: errors.length === 0,
|
|
167
|
+
errors,
|
|
168
|
+
warnings,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
function getProjectConfigSummary(config) {
|
|
172
|
+
let presetSummary = null;
|
|
173
|
+
let profileSummary = null;
|
|
174
|
+
if (config.preset) {
|
|
175
|
+
const parts = [];
|
|
176
|
+
if (config.preset.description) {
|
|
177
|
+
parts.push(config.preset.description);
|
|
178
|
+
}
|
|
179
|
+
if (config.preset.scope?.project) {
|
|
180
|
+
parts.push(`scope: ${config.preset.scope.project}`);
|
|
181
|
+
}
|
|
182
|
+
else if (config.preset.scope?.namespace) {
|
|
183
|
+
parts.push(`scope: ${config.preset.scope.namespace}/*`);
|
|
184
|
+
}
|
|
185
|
+
else if (config.preset.scope?.projects) {
|
|
186
|
+
parts.push(`scope: ${config.preset.scope.projects.length} projects`);
|
|
187
|
+
}
|
|
188
|
+
if (config.preset.read_only) {
|
|
189
|
+
parts.push("read-only");
|
|
190
|
+
}
|
|
191
|
+
if (config.preset.denied_actions?.length) {
|
|
192
|
+
parts.push(`${config.preset.denied_actions.length} denied actions`);
|
|
193
|
+
}
|
|
194
|
+
presetSummary = parts.join(", ") || "custom restrictions";
|
|
195
|
+
}
|
|
196
|
+
if (config.profile) {
|
|
197
|
+
const parts = [];
|
|
198
|
+
if (config.profile.description) {
|
|
199
|
+
parts.push(config.profile.description);
|
|
200
|
+
}
|
|
201
|
+
if (config.profile.extends) {
|
|
202
|
+
parts.push(`extends: ${config.profile.extends}`);
|
|
203
|
+
}
|
|
204
|
+
if (config.profile.additional_tools?.length) {
|
|
205
|
+
parts.push(`+${config.profile.additional_tools.length} tools`);
|
|
206
|
+
}
|
|
207
|
+
if (config.profile.denied_tools?.length) {
|
|
208
|
+
parts.push(`-${config.profile.denied_tools.length} tools`);
|
|
209
|
+
}
|
|
210
|
+
profileSummary = parts.join(", ") || "custom tool selection";
|
|
211
|
+
}
|
|
212
|
+
return { presetSummary, profileSummary };
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=project-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-loader.js","sourceRoot":"","sources":["../../../src/profiles/project-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ProjectPreset } from "./types";
|
|
2
|
+
export interface ScopeConfig {
|
|
3
|
+
project?: string;
|
|
4
|
+
namespace?: string;
|
|
5
|
+
projects?: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare class ScopeViolationError extends Error {
|
|
8
|
+
readonly attemptedTarget: string;
|
|
9
|
+
readonly allowedScope: ScopeConfig;
|
|
10
|
+
constructor(attemptedTarget: string, allowedScope: ScopeConfig);
|
|
11
|
+
}
|
|
12
|
+
export declare class ScopeEnforcer {
|
|
13
|
+
private readonly scope;
|
|
14
|
+
private readonly allowedProjectsSet;
|
|
15
|
+
constructor(scope: ScopeConfig);
|
|
16
|
+
static fromPreset(preset: ProjectPreset): ScopeEnforcer | null;
|
|
17
|
+
isAllowed(projectPath: string): boolean;
|
|
18
|
+
enforce(projectPath: string): void;
|
|
19
|
+
getScope(): ScopeConfig;
|
|
20
|
+
getScopeDescription(): string;
|
|
21
|
+
hasRestrictions(): boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare function extractProjectsFromArgs(args: Record<string, unknown>): string[];
|
|
24
|
+
export declare function enforceArgsScope(enforcer: ScopeEnforcer, args: Record<string, unknown>): void;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ScopeEnforcer = exports.ScopeViolationError = void 0;
|
|
4
|
+
exports.extractProjectsFromArgs = extractProjectsFromArgs;
|
|
5
|
+
exports.enforceArgsScope = enforceArgsScope;
|
|
6
|
+
const logger_1 = require("../logger");
|
|
7
|
+
class ScopeViolationError extends Error {
|
|
8
|
+
attemptedTarget;
|
|
9
|
+
allowedScope;
|
|
10
|
+
constructor(attemptedTarget, allowedScope) {
|
|
11
|
+
const scopeDescription = getScopeDescription(allowedScope);
|
|
12
|
+
super(`Operation on '${attemptedTarget}' is outside the allowed scope (${scopeDescription})`);
|
|
13
|
+
this.attemptedTarget = attemptedTarget;
|
|
14
|
+
this.allowedScope = allowedScope;
|
|
15
|
+
this.name = "ScopeViolationError";
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.ScopeViolationError = ScopeViolationError;
|
|
19
|
+
function getScopeDescription(scope) {
|
|
20
|
+
if (scope.project) {
|
|
21
|
+
return `project: ${scope.project}`;
|
|
22
|
+
}
|
|
23
|
+
if (scope.namespace) {
|
|
24
|
+
return `namespace: ${scope.namespace}/*`;
|
|
25
|
+
}
|
|
26
|
+
if (scope.projects && scope.projects.length > 0) {
|
|
27
|
+
if (scope.projects.length <= 3) {
|
|
28
|
+
return `projects: ${scope.projects.join(", ")}`;
|
|
29
|
+
}
|
|
30
|
+
return `${scope.projects.length} allowed projects`;
|
|
31
|
+
}
|
|
32
|
+
return "unrestricted";
|
|
33
|
+
}
|
|
34
|
+
function normalizeProjectPath(path) {
|
|
35
|
+
const trimmed = path.trim().replace(/^\/+|\/+$/g, "");
|
|
36
|
+
if (/^\d+$/.test(trimmed)) {
|
|
37
|
+
return trimmed;
|
|
38
|
+
}
|
|
39
|
+
return trimmed.toLowerCase();
|
|
40
|
+
}
|
|
41
|
+
function isInNamespace(projectPath, namespace) {
|
|
42
|
+
const normalizedProject = normalizeProjectPath(projectPath);
|
|
43
|
+
const normalizedNamespace = normalizeProjectPath(namespace);
|
|
44
|
+
return (normalizedProject === normalizedNamespace ||
|
|
45
|
+
normalizedProject.startsWith(normalizedNamespace + "/"));
|
|
46
|
+
}
|
|
47
|
+
class ScopeEnforcer {
|
|
48
|
+
scope;
|
|
49
|
+
allowedProjectsSet;
|
|
50
|
+
constructor(scope) {
|
|
51
|
+
this.scope = scope;
|
|
52
|
+
this.allowedProjectsSet = new Set((scope.projects ?? []).map(p => normalizeProjectPath(p)));
|
|
53
|
+
if (scope.project) {
|
|
54
|
+
this.allowedProjectsSet.add(normalizeProjectPath(scope.project));
|
|
55
|
+
}
|
|
56
|
+
logger_1.logger.debug({
|
|
57
|
+
scope: getScopeDescription(scope),
|
|
58
|
+
allowedCount: this.allowedProjectsSet.size,
|
|
59
|
+
}, "ScopeEnforcer initialized");
|
|
60
|
+
}
|
|
61
|
+
static fromPreset(preset) {
|
|
62
|
+
if (!preset.scope) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
return new ScopeEnforcer(preset.scope);
|
|
66
|
+
}
|
|
67
|
+
isAllowed(projectPath) {
|
|
68
|
+
const normalized = normalizeProjectPath(projectPath);
|
|
69
|
+
if (this.allowedProjectsSet.size > 0 && this.allowedProjectsSet.has(normalized)) {
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
if (this.scope.namespace && isInNamespace(projectPath, this.scope.namespace)) {
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
if (/^\d+$/.test(normalized)) {
|
|
76
|
+
logger_1.logger.warn({ projectId: normalized }, "Numeric project ID not in allowed scope - denying access");
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
enforce(projectPath) {
|
|
82
|
+
if (!this.isAllowed(projectPath)) {
|
|
83
|
+
logger_1.logger.warn({
|
|
84
|
+
attempted: projectPath,
|
|
85
|
+
scope: getScopeDescription(this.scope),
|
|
86
|
+
}, "Scope violation attempted");
|
|
87
|
+
throw new ScopeViolationError(projectPath, this.scope);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
getScope() {
|
|
91
|
+
return this.scope;
|
|
92
|
+
}
|
|
93
|
+
getScopeDescription() {
|
|
94
|
+
return getScopeDescription(this.scope);
|
|
95
|
+
}
|
|
96
|
+
hasRestrictions() {
|
|
97
|
+
const hasProject = Boolean(this.scope.project);
|
|
98
|
+
const hasNamespace = Boolean(this.scope.namespace);
|
|
99
|
+
const hasProjects = Boolean(this.scope.projects && this.scope.projects.length > 0);
|
|
100
|
+
return hasProject || hasNamespace || hasProjects;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
exports.ScopeEnforcer = ScopeEnforcer;
|
|
104
|
+
function extractProjectsFromArgs(args) {
|
|
105
|
+
const projects = [];
|
|
106
|
+
const projectFields = [
|
|
107
|
+
"project_id",
|
|
108
|
+
"projectId",
|
|
109
|
+
"project",
|
|
110
|
+
"namespace",
|
|
111
|
+
"namespacePath",
|
|
112
|
+
"fullPath",
|
|
113
|
+
];
|
|
114
|
+
for (const field of projectFields) {
|
|
115
|
+
const value = args[field];
|
|
116
|
+
if (typeof value === "string" && value.trim()) {
|
|
117
|
+
projects.push(value.trim());
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return projects;
|
|
121
|
+
}
|
|
122
|
+
function enforceArgsScope(enforcer, args) {
|
|
123
|
+
const projects = extractProjectsFromArgs(args);
|
|
124
|
+
for (const project of projects) {
|
|
125
|
+
enforcer.enforce(project);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=scope-enforcer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-enforcer.js","sourceRoot":"","sources":["../../../src/profiles/scope-enforcer.ts"],"names":[],"mappings":";;;AA8NA,0DAqBC;AAWD,4CAMC;AAvPD,sCAAmC;AAiBnC,MAAa,mBAAoB,SAAQ,KAAK;IAE1B;IACA;IAFlB,YACkB,eAAuB,EACvB,YAAyB;QAEzC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;QAC3D,KAAK,CAAC,iBAAiB,eAAe,mCAAmC,gBAAgB,GAAG,CAAC,CAAC;QAJ9E,oBAAe,GAAf,eAAe,CAAQ;QACvB,iBAAY,GAAZ,YAAY,CAAa;QAIzC,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AATD,kDASC;AAKD,SAAS,mBAAmB,CAAC,KAAkB;IAC7C,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,YAAY,KAAK,CAAC,OAAO,EAAE,CAAC;IACrC,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO,cAAc,KAAK,CAAC,SAAS,IAAI,CAAC;IAC3C,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC/B,OAAO,aAAa,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClD,CAAC;QACD,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,mBAAmB,CAAC;IACrD,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AASD,SAAS,oBAAoB,CAAC,IAAY;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAEtD,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC;AAC/B,CAAC;AAWD,SAAS,aAAa,CAAC,WAAmB,EAAE,SAAiB;IAC3D,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAC5D,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAG5D,OAAO,CACL,iBAAiB,KAAK,mBAAmB;QACzC,iBAAiB,CAAC,UAAU,CAAC,mBAAmB,GAAG,GAAG,CAAC,CACxD,CAAC;AACJ,CAAC;AAQD,MAAa,aAAa;IACP,KAAK,CAAc;IACnB,kBAAkB,CAAc;IAEjD,YAAY,KAAkB;QAC5B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAG5F,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACnE,CAAC;QAED,eAAM,CAAC,KAAK,CACV;YACE,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC;YACjC,YAAY,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI;SAC3C,EACD,2BAA2B,CAC5B,CAAC;IACJ,CAAC;IAMD,MAAM,CAAC,UAAU,CAAC,MAAqB;QACrC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAQD,SAAS,CAAC,WAAmB;QAC3B,MAAM,UAAU,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAGrD,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAChF,OAAO,IAAI,CAAC;QACd,CAAC;QAGD,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7E,OAAO,IAAI,CAAC;QACd,CAAC;QAID,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7B,eAAM,CAAC,IAAI,CACT,EAAE,SAAS,EAAE,UAAU,EAAE,EACzB,0DAA0D,CAC3D,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAQD,OAAO,CAAC,WAAmB;QACzB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;YACjC,eAAM,CAAC,IAAI,CACT;gBACE,SAAS,EAAE,WAAW;gBACtB,KAAK,EAAE,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC;aACvC,EACD,2BAA2B,CAC5B,CAAC;YACF,MAAM,IAAI,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAKD,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAKD,mBAAmB;QACjB,OAAO,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAKD,eAAe;QACb,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACnF,OAAO,UAAU,IAAI,YAAY,IAAI,WAAW,CAAC;IACnD,CAAC;CACF;AA3GD,sCA2GC;AAaD,SAAgB,uBAAuB,CAAC,IAA6B;IACnE,MAAM,QAAQ,GAAa,EAAE,CAAC;IAG9B,MAAM,aAAa,GAAG;QACpB,YAAY;QACZ,WAAW;QACX,SAAS;QACT,WAAW;QACX,eAAe;QACf,UAAU;KACX,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9C,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAWD,SAAgB,gBAAgB,CAAC,QAAuB,EAAE,IAA6B;IACrF,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAE/C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC"}
|
|
@@ -142,6 +142,59 @@ export declare const ProfilesConfigSchema: z.ZodObject<{
|
|
|
142
142
|
}, z.core.$strip>>;
|
|
143
143
|
default_profile: z.ZodOptional<z.ZodString>;
|
|
144
144
|
}, z.core.$strip>;
|
|
145
|
+
export declare const ScopeConfigSchema: z.ZodObject<{
|
|
146
|
+
project: z.ZodOptional<z.ZodString>;
|
|
147
|
+
namespace: z.ZodOptional<z.ZodString>;
|
|
148
|
+
projects: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
149
|
+
}, z.core.$strip>;
|
|
150
|
+
export declare const ProjectPresetSchema: z.ZodObject<{
|
|
151
|
+
description: z.ZodOptional<z.ZodString>;
|
|
152
|
+
scope: z.ZodOptional<z.ZodObject<{
|
|
153
|
+
project: z.ZodOptional<z.ZodString>;
|
|
154
|
+
namespace: z.ZodOptional<z.ZodString>;
|
|
155
|
+
projects: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
156
|
+
}, z.core.$strip>>;
|
|
157
|
+
features: z.ZodOptional<z.ZodObject<{
|
|
158
|
+
wiki: z.ZodOptional<z.ZodBoolean>;
|
|
159
|
+
milestones: z.ZodOptional<z.ZodBoolean>;
|
|
160
|
+
pipelines: z.ZodOptional<z.ZodBoolean>;
|
|
161
|
+
labels: z.ZodOptional<z.ZodBoolean>;
|
|
162
|
+
mrs: z.ZodOptional<z.ZodBoolean>;
|
|
163
|
+
files: z.ZodOptional<z.ZodBoolean>;
|
|
164
|
+
variables: z.ZodOptional<z.ZodBoolean>;
|
|
165
|
+
workitems: z.ZodOptional<z.ZodBoolean>;
|
|
166
|
+
webhooks: z.ZodOptional<z.ZodBoolean>;
|
|
167
|
+
snippets: z.ZodOptional<z.ZodBoolean>;
|
|
168
|
+
integrations: z.ZodOptional<z.ZodBoolean>;
|
|
169
|
+
}, z.core.$strip>>;
|
|
170
|
+
denied_actions: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
171
|
+
denied_tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
172
|
+
read_only: z.ZodOptional<z.ZodBoolean>;
|
|
173
|
+
}, z.core.$strict>;
|
|
174
|
+
export declare const ProjectProfileSchema: z.ZodObject<{
|
|
175
|
+
description: z.ZodOptional<z.ZodString>;
|
|
176
|
+
extends: z.ZodOptional<z.ZodString>;
|
|
177
|
+
features: z.ZodOptional<z.ZodObject<{
|
|
178
|
+
wiki: z.ZodOptional<z.ZodBoolean>;
|
|
179
|
+
milestones: z.ZodOptional<z.ZodBoolean>;
|
|
180
|
+
pipelines: z.ZodOptional<z.ZodBoolean>;
|
|
181
|
+
labels: z.ZodOptional<z.ZodBoolean>;
|
|
182
|
+
mrs: z.ZodOptional<z.ZodBoolean>;
|
|
183
|
+
files: z.ZodOptional<z.ZodBoolean>;
|
|
184
|
+
variables: z.ZodOptional<z.ZodBoolean>;
|
|
185
|
+
workitems: z.ZodOptional<z.ZodBoolean>;
|
|
186
|
+
webhooks: z.ZodOptional<z.ZodBoolean>;
|
|
187
|
+
snippets: z.ZodOptional<z.ZodBoolean>;
|
|
188
|
+
integrations: z.ZodOptional<z.ZodBoolean>;
|
|
189
|
+
}, z.core.$strip>>;
|
|
190
|
+
additional_tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
191
|
+
denied_tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
192
|
+
}, z.core.$strict>;
|
|
193
|
+
export interface ProjectConfig {
|
|
194
|
+
configPath: string;
|
|
195
|
+
preset?: ProjectPreset;
|
|
196
|
+
profile?: ProjectProfile;
|
|
197
|
+
}
|
|
145
198
|
export type PatAuth = z.infer<typeof PatAuthSchema>;
|
|
146
199
|
export type OAuthAuth = z.infer<typeof OAuthAuthSchema>;
|
|
147
200
|
export type CookieAuth = z.infer<typeof CookieAuthSchema>;
|
|
@@ -150,6 +203,8 @@ export type FeatureFlags = z.infer<typeof FeatureFlagsSchema>;
|
|
|
150
203
|
export type Profile = z.infer<typeof ProfileSchema>;
|
|
151
204
|
export type Preset = z.infer<typeof PresetSchema>;
|
|
152
205
|
export type ProfilesConfig = z.infer<typeof ProfilesConfigSchema>;
|
|
206
|
+
export type ProjectPreset = z.infer<typeof ProjectPresetSchema>;
|
|
207
|
+
export type ProjectProfile = z.infer<typeof ProjectProfileSchema>;
|
|
153
208
|
export interface ProfileInfo {
|
|
154
209
|
name: string;
|
|
155
210
|
host?: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ProfilesConfigSchema = exports.PresetSchema = exports.ProfileSchema = void 0;
|
|
3
|
+
exports.ProjectProfileSchema = exports.ProjectPresetSchema = exports.ScopeConfigSchema = exports.ProfilesConfigSchema = exports.PresetSchema = exports.ProfileSchema = void 0;
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
5
|
const PatAuthSchema = zod_1.z.object({
|
|
6
6
|
type: zod_1.z.literal("pat"),
|
|
@@ -81,4 +81,44 @@ exports.ProfilesConfigSchema = zod_1.z.object({
|
|
|
81
81
|
profiles: zod_1.z.record(zod_1.z.string(), exports.ProfileSchema).describe("Named profiles"),
|
|
82
82
|
default_profile: zod_1.z.string().optional().describe("Default profile when none specified"),
|
|
83
83
|
});
|
|
84
|
+
exports.ScopeConfigSchema = zod_1.z
|
|
85
|
+
.object({
|
|
86
|
+
project: zod_1.z.string().optional().describe("Single project path (e.g., group/project)"),
|
|
87
|
+
namespace: zod_1.z.string().optional().describe("Namespace/group path"),
|
|
88
|
+
projects: zod_1.z.array(zod_1.z.string()).optional().describe("List of allowed project paths"),
|
|
89
|
+
})
|
|
90
|
+
.refine(data => {
|
|
91
|
+
const hasProject = data.project !== undefined;
|
|
92
|
+
const hasNamespace = data.namespace !== undefined;
|
|
93
|
+
const hasProjects = data.projects !== undefined && data.projects.length > 0;
|
|
94
|
+
return hasProject || hasNamespace || hasProjects;
|
|
95
|
+
}, { message: "Scope must define at least one of: project, namespace, or projects" })
|
|
96
|
+
.refine(data => {
|
|
97
|
+
if (data.project && data.projects && data.projects.length > 0) {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
return true;
|
|
101
|
+
}, { message: "Cannot combine 'project' with 'projects' - use one or the other" });
|
|
102
|
+
exports.ProjectPresetSchema = zod_1.z
|
|
103
|
+
.object({
|
|
104
|
+
description: zod_1.z.string().optional().describe("Description of project restrictions"),
|
|
105
|
+
scope: exports.ScopeConfigSchema.optional().describe("Project/namespace scope restrictions"),
|
|
106
|
+
features: FeatureFlagsSchema,
|
|
107
|
+
denied_actions: zod_1.z
|
|
108
|
+
.array(zod_1.z.string())
|
|
109
|
+
.optional()
|
|
110
|
+
.describe("Denied actions in format 'tool:action'"),
|
|
111
|
+
denied_tools: zod_1.z.array(zod_1.z.string()).optional().describe("List of denied tool names"),
|
|
112
|
+
read_only: zod_1.z.boolean().optional().describe("Enable read-only mode"),
|
|
113
|
+
})
|
|
114
|
+
.strict();
|
|
115
|
+
exports.ProjectProfileSchema = zod_1.z
|
|
116
|
+
.object({
|
|
117
|
+
description: zod_1.z.string().optional().describe("Description of project configuration"),
|
|
118
|
+
extends: zod_1.z.string().optional().describe("Built-in preset name to inherit from"),
|
|
119
|
+
features: FeatureFlagsSchema,
|
|
120
|
+
additional_tools: zod_1.z.array(zod_1.z.string()).optional().describe("Additional tools to enable"),
|
|
121
|
+
denied_tools: zod_1.z.array(zod_1.z.string()).optional().describe("Tools to disable"),
|
|
122
|
+
})
|
|
123
|
+
.strict();
|
|
84
124
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/profiles/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/profiles/types.ts"],"names":[],"mappings":"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"}
|
|
Binary file
|