embark-cli 1.1.7

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 (73) hide show
  1. package/.claude/CLAUDE.md +33 -0
  2. package/.claude/settings.local.json +32 -0
  3. package/.github/WORKFLOWS.md +147 -0
  4. package/.github/workflows/ci.yml +49 -0
  5. package/.github/workflows/publish.yml +109 -0
  6. package/.idea/embark-remote-mcp.iml +9 -0
  7. package/.idea/encodings.xml +4 -0
  8. package/.idea/indexLayout.xml +8 -0
  9. package/.idea/vcs.xml +6 -0
  10. package/.mcp.json +14 -0
  11. package/GIT_DISCOVERY.md +231 -0
  12. package/INTEGRATION_TESTING.md +243 -0
  13. package/MULTI_REPOSITORY_SEARCH.md +242 -0
  14. package/README.md +434 -0
  15. package/dist/auth/auth-helper.d.ts +3 -0
  16. package/dist/auth/auth-helper.d.ts.map +1 -0
  17. package/dist/auth/auth-helper.js +171 -0
  18. package/dist/auth/auth-helper.js.map +1 -0
  19. package/dist/auth/index.d.ts +4 -0
  20. package/dist/auth/index.d.ts.map +1 -0
  21. package/dist/auth/index.js +24 -0
  22. package/dist/auth/index.js.map +1 -0
  23. package/dist/auth/jba-login.d.ts +17 -0
  24. package/dist/auth/jba-login.d.ts.map +1 -0
  25. package/dist/auth/jba-login.js +345 -0
  26. package/dist/auth/jba-login.js.map +1 -0
  27. package/dist/auth/types.d.ts +16 -0
  28. package/dist/auth/types.d.ts.map +1 -0
  29. package/dist/auth/types.js +3 -0
  30. package/dist/auth/types.js.map +1 -0
  31. package/dist/config.d.ts +26 -0
  32. package/dist/config.d.ts.map +1 -0
  33. package/dist/config.js +54 -0
  34. package/dist/config.js.map +1 -0
  35. package/dist/embark-client.d.ts +56 -0
  36. package/dist/embark-client.d.ts.map +1 -0
  37. package/dist/embark-client.js +543 -0
  38. package/dist/embark-client.js.map +1 -0
  39. package/dist/git-utils.d.ts +47 -0
  40. package/dist/git-utils.d.ts.map +1 -0
  41. package/dist/git-utils.js +232 -0
  42. package/dist/git-utils.js.map +1 -0
  43. package/dist/handlers.d.ts +80 -0
  44. package/dist/handlers.d.ts.map +1 -0
  45. package/dist/handlers.js +301 -0
  46. package/dist/handlers.js.map +1 -0
  47. package/dist/index.d.ts +3 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +165 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/logger.d.ts +4 -0
  52. package/dist/logger.d.ts.map +1 -0
  53. package/dist/logger.js +92 -0
  54. package/dist/logger.js.map +1 -0
  55. package/dist/stats-server.d.ts +3 -0
  56. package/dist/stats-server.d.ts.map +1 -0
  57. package/dist/stats-server.js +623 -0
  58. package/dist/stats-server.js.map +1 -0
  59. package/dist/stats.d.ts +118 -0
  60. package/dist/stats.d.ts.map +1 -0
  61. package/dist/stats.js +206 -0
  62. package/dist/stats.js.map +1 -0
  63. package/dist/tools.d.ts +9 -0
  64. package/dist/tools.d.ts.map +1 -0
  65. package/dist/tools.js +62 -0
  66. package/dist/tools.js.map +1 -0
  67. package/package.json +47 -0
  68. package/test-git-discovery.mjs +322 -0
  69. package/test-multi-repo-filters.mjs +151 -0
  70. package/test-multiple-roots.mjs +436 -0
  71. package/test-roots.mjs +306 -0
  72. package/test-snippet-extraction.mjs +136 -0
  73. package/watch-logs.sh +78 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jba-login.d.ts","sourceRoot":"","sources":["../../src/auth/jba-login.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGpD,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;;IAMnC,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;YA8C1B,eAAe;IAiB7B,OAAO,CAAC,WAAW;IA4Bb,KAAK,IAAI,OAAO,CAAC,SAAS,CAAC;YAqGnB,oBAAoB;IA0C5B,YAAY,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAyC1D,WAAW,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI;IAYrC,WAAW,IAAI,SAAS,GAAG,IAAI;IAkB/B,cAAc,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO;IAQrC,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAuBhC,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;CA2BzC"}
@@ -0,0 +1,345 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.JBALogin = void 0;
7
+ const http_1 = require("http");
8
+ const url_1 = require("url");
9
+ const crypto_1 = require("crypto");
10
+ const fs_1 = require("fs");
11
+ const path_1 = require("path");
12
+ const os_1 = require("os");
13
+ const xmldom_1 = require("xmldom");
14
+ const child_process_1 = require("child_process");
15
+ const axios_1 = __importDefault(require("axios"));
16
+ const logger_js_1 = require("../logger.js");
17
+ class JBALogin {
18
+ accountFilePath;
19
+ constructor() {
20
+ this.accountFilePath = (0, path_1.join)((0, os_1.homedir)(), '.jbaccount');
21
+ }
22
+ async loadConfig() {
23
+ const url = 'https://www.jetbrains.com/config/JetBrainsAccount.xml';
24
+ (0, logger_js_1.logToFile)('info', '[AUTH] Loading OAuth config', { url });
25
+ try {
26
+ const response = await axios_1.default.get(url);
27
+ (0, logger_js_1.logToFile)('info', '[AUTH] Config loaded successfully', { status: response.status });
28
+ const parser = new xmldom_1.DOMParser();
29
+ const document = parser.parseFromString(response.data, 'text/xml');
30
+ const oauthNode = document.getElementsByTagName('oauth')[0];
31
+ if (!oauthNode) {
32
+ (0, logger_js_1.logToFile)('error', '[AUTH] OAuth configuration not found in JetBrains Account XML');
33
+ throw new Error('OAuth configuration not found in JetBrains Account XML');
34
+ }
35
+ const clientId = oauthNode.getElementsByTagName('clientId')[0]?.textContent;
36
+ const scopeContent = oauthNode.getElementsByTagName('scope')[0]?.textContent;
37
+ const authEndpoint = oauthNode.getElementsByTagName('authEndpoint')[0]?.textContent;
38
+ const tokenEndpoint = oauthNode.getElementsByTagName('tokenEndpoint')[0]?.textContent;
39
+ let scope = scopeContent || '';
40
+ if (!scope.split(' ').includes('openid')) {
41
+ scope = scope ? `${scope} openid` : 'openid';
42
+ }
43
+ (0, logger_js_1.logToFile)('info', '[AUTH] Parsed config', {
44
+ clientId: clientId ? 'present' : 'missing',
45
+ scope: scope ? 'present' : 'missing',
46
+ authEndpoint: authEndpoint ? 'present' : 'missing',
47
+ tokenEndpoint: tokenEndpoint ? 'present' : 'missing'
48
+ });
49
+ if (!clientId || !scope || !authEndpoint || !tokenEndpoint) {
50
+ (0, logger_js_1.logToFile)('error', '[AUTH] Missing required OAuth configuration parameters');
51
+ throw new Error('Missing required OAuth configuration parameters');
52
+ }
53
+ return { clientId, scope, authEndpoint, tokenEndpoint };
54
+ }
55
+ catch (error) {
56
+ (0, logger_js_1.logToFile)('error', '[AUTH] Failed to load OAuth config', { error });
57
+ throw error;
58
+ }
59
+ }
60
+ async sendPostRequest(url, data) {
61
+ (0, logger_js_1.logToFile)('info', '[AUTH] Sending POST request', { url, data });
62
+ try {
63
+ const response = await axios_1.default.post(url, data, {
64
+ headers: {
65
+ 'Content-Type': 'application/x-www-form-urlencoded',
66
+ },
67
+ });
68
+ (0, logger_js_1.logToFile)('info', '[AUTH] POST request successful', { status: response.status });
69
+ return response.data;
70
+ }
71
+ catch (error) {
72
+ (0, logger_js_1.logToFile)('error', `[AUTH] POST request failed to ${url}`, { error });
73
+ throw error;
74
+ }
75
+ }
76
+ openBrowser(url) {
77
+ const platform = process.platform;
78
+ let command;
79
+ let args;
80
+ (0, logger_js_1.logToFile)('info', '[AUTH] Opening browser', { platform, url });
81
+ if (platform === 'darwin') {
82
+ command = 'open';
83
+ args = [url];
84
+ }
85
+ else if (platform === 'win32') {
86
+ command = 'rundll32';
87
+ args = ['url.dll,FileProtocolHandler', url];
88
+ }
89
+ else {
90
+ command = 'xdg-open';
91
+ args = [url];
92
+ }
93
+ try {
94
+ (0, logger_js_1.logToFile)('info', '[AUTH] Executing command', { command, args });
95
+ (0, child_process_1.spawn)(command, args, { detached: true, stdio: 'ignore' });
96
+ }
97
+ catch (error) {
98
+ (0, logger_js_1.logToFile)('error', '[AUTH] Could not open browser automatically', { error });
99
+ console.log('Please open the following URL manually:');
100
+ console.log(url);
101
+ }
102
+ }
103
+ async login() {
104
+ (0, logger_js_1.logToFile)('info', '[AUTH] Starting OAuth login flow');
105
+ const config = await this.loadConfig();
106
+ return new Promise((resolve, reject) => {
107
+ let server;
108
+ const ports = Array.from({ length: 20 }, (_, i) => 62350 + i);
109
+ let requestHandled = false;
110
+ const tryPort = (portIndex) => {
111
+ if (portIndex >= ports.length) {
112
+ (0, logger_js_1.logToFile)('error', '[AUTH] No available ports for OAuth callback');
113
+ reject(new Error('No available ports for OAuth callback'));
114
+ return;
115
+ }
116
+ const port = ports[portIndex];
117
+ (0, logger_js_1.logToFile)('info', `[AUTH] Trying to bind to port ${port}`);
118
+ server = (0, http_1.createServer)((req, res) => {
119
+ if (requestHandled) {
120
+ res.writeHead(204);
121
+ res.end();
122
+ return;
123
+ }
124
+ const url = new url_1.URL(req.url, `http://localhost:${port}`);
125
+ if (url.pathname !== '/') {
126
+ res.writeHead(204);
127
+ res.end();
128
+ return;
129
+ }
130
+ requestHandled = true;
131
+ (0, logger_js_1.logToFile)('info', '[AUTH] Received callback request', { url: req.url });
132
+ const params = new URLSearchParams(url.search);
133
+ const code = params.get('code');
134
+ const state = params.get('state');
135
+ const error = params.get('error');
136
+ (0, logger_js_1.logToFile)('info', '[AUTH] Callback params', {
137
+ code: code ? 'present' : 'missing',
138
+ state: state ? 'present' : 'missing',
139
+ error: error || 'none'
140
+ });
141
+ const page = code
142
+ ? 'Authorization successful, return to the terminal.'
143
+ : 'Failed to get authorization code.';
144
+ res.writeHead(200, { 'Content-Type': 'text/plain' });
145
+ res.end(page);
146
+ server.close();
147
+ if (error) {
148
+ (0, logger_js_1.logToFile)('error', '[AUTH] OAuth error received', { error });
149
+ reject(new Error(`OAuth error: ${error}`));
150
+ }
151
+ else if (code) {
152
+ (0, logger_js_1.logToFile)('info', '[AUTH] Authorization code received, exchanging for token');
153
+ this.exchangeCodeForToken(config, code, `http://localhost:${port}`, codeVerifier)
154
+ .then(resolve)
155
+ .catch(reject);
156
+ }
157
+ else {
158
+ (0, logger_js_1.logToFile)('error', '[AUTH] No authorization code received');
159
+ reject(new Error('No authorization code received'));
160
+ }
161
+ });
162
+ server.listen(port, '127.0.0.1', () => {
163
+ (0, logger_js_1.logToFile)('info', `[AUTH] OAuth callback server listening on port ${port}`);
164
+ startOAuthFlow(port);
165
+ });
166
+ server.on('error', (error) => {
167
+ (0, logger_js_1.logToFile)('warn', `[AUTH] Port ${port} failed, trying next.`, { error: error.message });
168
+ tryPort(portIndex + 1);
169
+ });
170
+ };
171
+ const state = (0, crypto_1.randomBytes)(16).toString('hex');
172
+ const codeVerifier = (0, crypto_1.randomBytes)(32).toString('base64url');
173
+ const codeChallenge = (0, crypto_1.createHash)('sha256')
174
+ .update(codeVerifier)
175
+ .digest('base64url');
176
+ (0, logger_js_1.logToFile)('info', '[AUTH] Generated OAuth params', { state, codeVerifier: 'present', codeChallenge: 'present' });
177
+ const startOAuthFlow = (port) => {
178
+ const redirectUri = `http://localhost:${port}`;
179
+ const authUrl = `${config.authEndpoint}?client_id=${config.clientId}&scope=${encodeURIComponent(config.scope)}&state=${state}&code_challenge_method=S256&code_challenge=${codeChallenge}&redirect_uri=${encodeURIComponent(redirectUri)}&request_credentials=required`;
180
+ (0, logger_js_1.logToFile)('info', '[AUTH] Starting OAuth flow', { redirectUri });
181
+ this.openBrowser(authUrl);
182
+ };
183
+ tryPort(0);
184
+ });
185
+ }
186
+ async exchangeCodeForToken(config, code, redirectUri, codeVerifier) {
187
+ (0, logger_js_1.logToFile)('info', '[AUTH] Starting token exchange');
188
+ const tokenParams = new URLSearchParams({
189
+ grant_type: 'authorization_code',
190
+ code,
191
+ redirect_uri: redirectUri,
192
+ client_id: config.clientId,
193
+ code_verifier: codeVerifier,
194
+ });
195
+ try {
196
+ const response = await this.sendPostRequest(config.tokenEndpoint, tokenParams.toString());
197
+ (0, logger_js_1.logToFile)('info', '[AUTH] Token exchange response received');
198
+ const tokenData = typeof response === 'string' ? JSON.parse(response) : response;
199
+ (0, logger_js_1.logToFile)('info', '[AUTH] Token data', { keys: Object.keys(tokenData) });
200
+ if (!tokenData.access_token) {
201
+ (0, logger_js_1.logToFile)('error', '[AUTH] No access token in response', { tokenData });
202
+ throw new Error('No access token received');
203
+ }
204
+ const account = {
205
+ accessToken: tokenData.access_token,
206
+ refreshToken: tokenData.refresh_token,
207
+ idToken: tokenData.id_token,
208
+ expiresIn: tokenData.expires_in,
209
+ tokenType: tokenData.token_type,
210
+ scope: tokenData.scope,
211
+ issuedAt: Date.now(),
212
+ };
213
+ this.saveAccount(account);
214
+ (0, logger_js_1.logToFile)('info', '[AUTH] Account saved successfully');
215
+ return account;
216
+ }
217
+ catch (error) {
218
+ (0, logger_js_1.logToFile)('error', '[AUTH] Token exchange failed', { error });
219
+ throw error;
220
+ }
221
+ }
222
+ async refreshToken(account) {
223
+ (0, logger_js_1.logToFile)('info', '[AUTH] Starting token refresh');
224
+ const config = await this.loadConfig();
225
+ const refreshParams = new URLSearchParams({
226
+ grant_type: 'refresh_token',
227
+ refresh_token: account.refreshToken,
228
+ client_id: config.clientId,
229
+ });
230
+ try {
231
+ const response = await this.sendPostRequest(config.tokenEndpoint, refreshParams.toString());
232
+ (0, logger_js_1.logToFile)('info', '[AUTH] Token refresh response received');
233
+ const tokenData = typeof response === 'string' ? JSON.parse(response) : response;
234
+ (0, logger_js_1.logToFile)('info', '[AUTH] Refresh token data', { keys: Object.keys(tokenData) });
235
+ if (!tokenData.access_token) {
236
+ (0, logger_js_1.logToFile)('error', '[AUTH] No access token in refresh response', { tokenData });
237
+ throw new Error('No access token received in refresh response');
238
+ }
239
+ const newAccount = {
240
+ accessToken: tokenData.access_token,
241
+ refreshToken: tokenData.refresh_token || account.refreshToken,
242
+ idToken: tokenData.id_token || account.idToken,
243
+ expiresIn: tokenData.expires_in,
244
+ tokenType: tokenData.token_type,
245
+ scope: tokenData.scope,
246
+ issuedAt: Date.now(),
247
+ };
248
+ this.saveAccount(newAccount);
249
+ (0, logger_js_1.logToFile)('info', '[AUTH] Token refresh successful');
250
+ return newAccount;
251
+ }
252
+ catch (error) {
253
+ (0, logger_js_1.logToFile)('error', '[AUTH] Token refresh failed', { error });
254
+ throw error;
255
+ }
256
+ }
257
+ saveAccount(account) {
258
+ (0, logger_js_1.logToFile)('info', '[AUTH] Saving account', { path: this.accountFilePath });
259
+ try {
260
+ const accountJson = JSON.stringify(account, null, 2);
261
+ (0, fs_1.writeFileSync)(this.accountFilePath, accountJson);
262
+ (0, logger_js_1.logToFile)('info', '[AUTH] Account saved successfully');
263
+ }
264
+ catch (error) {
265
+ (0, logger_js_1.logToFile)('error', '[AUTH] Failed to save account', { error });
266
+ throw error;
267
+ }
268
+ }
269
+ readAccount() {
270
+ (0, logger_js_1.logToFile)('info', '[AUTH] Reading account', { path: this.accountFilePath });
271
+ if (!(0, fs_1.existsSync)(this.accountFilePath)) {
272
+ (0, logger_js_1.logToFile)('info', '[AUTH] Account file does not exist');
273
+ return null;
274
+ }
275
+ try {
276
+ const accountJson = (0, fs_1.readFileSync)(this.accountFilePath, 'utf-8');
277
+ const account = JSON.parse(accountJson);
278
+ (0, logger_js_1.logToFile)('info', '[AUTH] Account read successfully');
279
+ return account;
280
+ }
281
+ catch (error) {
282
+ (0, logger_js_1.logToFile)('error', '[AUTH] Failed to read account file', { error });
283
+ return null;
284
+ }
285
+ }
286
+ isTokenExpired(account) {
287
+ const now = Date.now();
288
+ const expiryTime = account.issuedAt + (account.expiresIn * 1000);
289
+ const isExpired = now >= expiryTime;
290
+ (0, logger_js_1.logToFile)('info', '[AUTH] Token expiry check', { now, expiryTime, isExpired });
291
+ return isExpired;
292
+ }
293
+ async getValidToken() {
294
+ (0, logger_js_1.logToFile)('info', '[AUTH] Getting valid token');
295
+ let account = this.readAccount();
296
+ if (!account) {
297
+ (0, logger_js_1.logToFile)('info', '[AUTH] No JetBrains Account found. Starting OAuth flow...');
298
+ account = await this.login();
299
+ }
300
+ else if (this.isTokenExpired(account)) {
301
+ (0, logger_js_1.logToFile)('info', '[AUTH] Token expired. Refreshing...');
302
+ try {
303
+ account = await this.refreshToken(account);
304
+ }
305
+ catch (error) {
306
+ (0, logger_js_1.logToFile)('warn', '[AUTH] Failed to refresh token. Starting new OAuth flow...', { error });
307
+ account = await this.login();
308
+ }
309
+ }
310
+ else {
311
+ (0, logger_js_1.logToFile)('info', '[AUTH] Using existing valid token');
312
+ }
313
+ (0, logger_js_1.logToFile)('info', '[AUTH] Returning valid access token');
314
+ return account.accessToken;
315
+ }
316
+ async getValidIdToken() {
317
+ (0, logger_js_1.logToFile)('info', '[AUTH] Getting valid ID token');
318
+ let account = this.readAccount();
319
+ if (!account) {
320
+ (0, logger_js_1.logToFile)('info', '[AUTH] No JetBrains Account found. Starting OAuth flow...');
321
+ account = await this.login();
322
+ }
323
+ else if (this.isTokenExpired(account)) {
324
+ (0, logger_js_1.logToFile)('info', '[AUTH] Token expired. Refreshing...');
325
+ try {
326
+ account = await this.refreshToken(account);
327
+ }
328
+ catch (error) {
329
+ (0, logger_js_1.logToFile)('warn', '[AUTH] Failed to refresh token. Starting new OAuth flow...', { error });
330
+ account = await this.login();
331
+ }
332
+ }
333
+ else {
334
+ (0, logger_js_1.logToFile)('info', '[AUTH] Using existing valid token');
335
+ }
336
+ if (!account.idToken) {
337
+ (0, logger_js_1.logToFile)('error', '[AUTH] No ID token found in account');
338
+ throw new Error('No ID token found');
339
+ }
340
+ (0, logger_js_1.logToFile)('info', '[AUTH] Returning valid ID token');
341
+ return account.idToken;
342
+ }
343
+ }
344
+ exports.JBALogin = JBALogin;
345
+ //# sourceMappingURL=jba-login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jba-login.js","sourceRoot":"","sources":["../../src/auth/jba-login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export interface JbAccount {
2
+ accessToken: string;
3
+ refreshToken: string;
4
+ idToken?: string;
5
+ expiresIn: number;
6
+ tokenType: string;
7
+ scope: string;
8
+ issuedAt: number;
9
+ }
10
+ export interface OAuthConfig {
11
+ clientId: string;
12
+ scope: string;
13
+ authEndpoint: string;
14
+ tokenEndpoint: string;
15
+ }
16
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Configuration module for Embark MCP server
3
+ */
4
+ export interface EmbarkConfig {
5
+ jetbrainsAiUrl: string;
6
+ repositoryGitRemoteUrl: string | null;
7
+ repositoryRevision: string | null;
8
+ typeToken: 'USER' | 'APPLICATION';
9
+ enableRemoteLogs: boolean;
10
+ workingDir: string | null;
11
+ includeRepositoryUrls: string[] | null;
12
+ excludeRepositoryUrls: string[] | null;
13
+ }
14
+ /**
15
+ * Load configuration from environment variables
16
+ */
17
+ export declare function loadConfig(): EmbarkConfig;
18
+ /**
19
+ * Get the correct endpoint prefix based on TYPE_TOKEN
20
+ */
21
+ export declare function getEndpointPrefix(typeToken: 'USER' | 'APPLICATION'): string;
22
+ /**
23
+ * Extract repository name from Git URL
24
+ */
25
+ export declare function extractRepositoryName(url: string): string;
26
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,SAAS,EAAE,MAAM,GAAG,aAAa,CAAC;IAClC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,qBAAqB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACvC,qBAAqB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CACxC;AAYD;;GAEG;AACH,wBAAgB,UAAU,IAAI,YAAY,CAWzC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,MAAM,CAE3E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAUzD"}
package/dist/config.js ADDED
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ /**
3
+ * Configuration module for Embark MCP server
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.loadConfig = loadConfig;
7
+ exports.getEndpointPrefix = getEndpointPrefix;
8
+ exports.extractRepositoryName = extractRepositoryName;
9
+ /**
10
+ * Parse comma-separated repository URLs from environment variable
11
+ */
12
+ function parseRepositoryUrls(envVar) {
13
+ if (!envVar || envVar.trim() === '') {
14
+ return null;
15
+ }
16
+ return envVar.split(',').map(url => url.trim()).filter(url => url.length > 0);
17
+ }
18
+ /**
19
+ * Load configuration from environment variables
20
+ */
21
+ function loadConfig() {
22
+ return {
23
+ jetbrainsAiUrl: process.env.JETBRAINS_AI_URL || 'https://api.jetbrains.ai',
24
+ repositoryGitRemoteUrl: process.env.REPOSITORY_GIT_REMOTE_URL || process.env.REPOSITORY_ID || null,
25
+ repositoryRevision: process.env.REPOSITORY_REVISION || null,
26
+ typeToken: process.env.TYPE_TOKEN || 'USER',
27
+ enableRemoteLogs: process.env.ENABLE_REMOTE_LOGS === 'true',
28
+ workingDir: process.env.WORKING_DIR || null,
29
+ includeRepositoryUrls: parseRepositoryUrls(process.env.INCLUDE_REPOSITORY_URLS),
30
+ excludeRepositoryUrls: parseRepositoryUrls(process.env.EXCLUDE_REPOSITORY_URLS),
31
+ };
32
+ }
33
+ /**
34
+ * Get the correct endpoint prefix based on TYPE_TOKEN
35
+ */
36
+ function getEndpointPrefix(typeToken) {
37
+ return typeToken === 'APPLICATION' ? 'application' : 'user';
38
+ }
39
+ /**
40
+ * Extract repository name from Git URL
41
+ */
42
+ function extractRepositoryName(url) {
43
+ try {
44
+ const urlMatch = url.match(/\/([^/]+?)(?:\.git)?$/);
45
+ if (urlMatch && urlMatch[1]) {
46
+ return urlMatch[1];
47
+ }
48
+ }
49
+ catch (error) {
50
+ // Fallback to default name
51
+ }
52
+ return 'Repository';
53
+ }
54
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";AAAA;;GAEG;;AA0BH,gCAWC;AAKD,8CAEC;AAKD,sDAUC;AA9CD;;GAEG;AACH,SAAS,mBAAmB,CAAC,MAA0B;IACrD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAChF,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU;IACxB,OAAO;QACL,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,0BAA0B;QAC1E,sBAAsB,EAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI;QAClG,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI;QAC3D,SAAS,EAAG,OAAO,CAAC,GAAG,CAAC,UAAqC,IAAI,MAAM;QACvE,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,MAAM;QAC3D,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,IAAI;QAC3C,qBAAqB,EAAE,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;QAC/E,qBAAqB,EAAE,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;KAChF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,SAAiC;IACjE,OAAO,SAAS,KAAK,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC;AAC9D,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CAAC,GAAW;IAC/C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACpD,IAAI,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5B,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,2BAA2B;IAC7B,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Embark API client module
3
+ */
4
+ import { EmbarkConfig } from './config.js';
5
+ interface PackageInfo {
6
+ name: string;
7
+ version: string;
8
+ }
9
+ interface ApiCallStatsContext {
10
+ operation: string;
11
+ endpoint?: string;
12
+ metadata?: Record<string, unknown>;
13
+ }
14
+ type RequestContext = Record<string, unknown> & {
15
+ statsContext?: ApiCallStatsContext;
16
+ };
17
+ /**
18
+ * Helper function to make Embark API requests with automatic token refresh on 401
19
+ */
20
+ export declare function makeEmbarkRequest<T>(requestFn: (authToken: string, revision: string | null) => Promise<any>, responseHandler: (response: any) => T, context: RequestContext, revision?: string | null): Promise<T>;
21
+ /**
22
+ * Perform semantic code search in a single repository
23
+ */
24
+ export declare function semanticCodeSearch(text: string, repositoryGitRemoteUrl: string, revision: string | null, pathFilter: string | null, config: EmbarkConfig, pkg: PackageInfo, repositoryPath?: string | null): Promise<{
25
+ content: {
26
+ type: string;
27
+ text: string;
28
+ }[];
29
+ }>;
30
+ /**
31
+ * Perform semantic code search across multiple repositories
32
+ */
33
+ export declare function semanticCodeSearchMultiRepo(text: string, repositories: Array<{
34
+ url: string;
35
+ path: string | null;
36
+ name?: string;
37
+ }>, revision: string | null, pathFilter: string | null, config: EmbarkConfig, pkg: PackageInfo): Promise<{
38
+ content: {
39
+ type: string;
40
+ text: string;
41
+ }[];
42
+ }>;
43
+ /**
44
+ * Search for code in dependencies
45
+ */
46
+ export declare function searchInDependencies(text: string, dependencies: Array<{
47
+ dependency: string;
48
+ version: string;
49
+ }>, repositoryGitRemoteUrl: string, revision: string | null, maxResults: number, minScore: number, logAllowed: boolean, config: EmbarkConfig, pkg: PackageInfo): Promise<{
50
+ content: {
51
+ type: string;
52
+ text: string;
53
+ }[];
54
+ }>;
55
+ export {};
56
+ //# sourceMappingURL=embark-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embark-client.d.ts","sourceRoot":"","sources":["../src/embark-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,YAAY,EAAqB,MAAM,aAAa,CAAC;AAQ9D,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,mBAAmB;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,KAAK,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,YAAY,CAAC,EAAE,mBAAmB,CAAA;CAAE,CAAC;AAgBvF;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,GAAG,CAAC,EACvE,eAAe,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,EACrC,OAAO,EAAE,cAAc,EACvB,QAAQ,GAAE,MAAM,GAAG,IAAW,GAC7B,OAAO,CAAC,CAAC,CAAC,CAiGZ;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,sBAAsB,EAAE,MAAM,EAC9B,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,WAAW,EAChB,cAAc,GAAE,MAAM,GAAG,IAAW;;;;;GAsLrC;AASD;;GAEG;AACH,wBAAsB,2BAA2B,CAC/C,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EACxE,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,WAAW;;;;;GA6HjB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,KAAK,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EAC5D,sBAAsB,EAAE,MAAM,EAC9B,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,OAAO,EACnB,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,WAAW;;;;;GA6JjB"}