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
package/dist/index.js ADDED
@@ -0,0 +1,165 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
8
+ const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
9
+ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
10
+ const package_json_1 = __importDefault(require("../package.json"));
11
+ const logger_js_1 = require("./logger.js");
12
+ const config_js_1 = require("./config.js");
13
+ const handlers_js_1 = require("./handlers.js");
14
+ const stats_js_1 = require("./stats.js");
15
+ const stats_server_js_1 = require("./stats-server.js");
16
+ const child_process_1 = require("child_process");
17
+ // Initialize logging on startup
18
+ (0, logger_js_1.initializeLogging)();
19
+ const cliArgs = process.argv.slice(2);
20
+ if (cliArgs[0] === 'stats-server') {
21
+ const port = parsePort(cliArgs.slice(1));
22
+ (0, stats_server_js_1.startStatsServer)(port).catch((error) => {
23
+ (0, logger_js_1.logToFile)('error', 'Stats server failed to start', { error });
24
+ console.error('Failed to start stats server:', error);
25
+ process.exit(1);
26
+ });
27
+ }
28
+ else if (cliArgs[0] === 'stats') {
29
+ const port = parsePort(cliArgs.slice(1));
30
+ startStatsDashboard(port).catch((error) => {
31
+ (0, logger_js_1.logToFile)('error', 'Stats dashboard command failed', { error });
32
+ console.error('Failed to start stats dashboard:', error);
33
+ process.exit(1);
34
+ });
35
+ }
36
+ else {
37
+ startEmbarkServer().catch((error) => {
38
+ (0, logger_js_1.logToFile)('error', 'Server runtime error', { error });
39
+ process.exit(1);
40
+ });
41
+ }
42
+ function parsePort(args) {
43
+ const defaultPort = 43210;
44
+ for (let i = 0; i < args.length; i++) {
45
+ const token = args[i];
46
+ if (!token)
47
+ continue;
48
+ if (token.startsWith('--port=')) {
49
+ const value = parseInt(token.split('=')[1] || '', 10);
50
+ if (!Number.isNaN(value)) {
51
+ return value;
52
+ }
53
+ }
54
+ else if (token === '--port' || token === '-p') {
55
+ const next = args[i + 1];
56
+ if (next) {
57
+ const value = parseInt(next, 10);
58
+ if (!Number.isNaN(value)) {
59
+ return value;
60
+ }
61
+ }
62
+ }
63
+ }
64
+ return defaultPort;
65
+ }
66
+ async function startEmbarkServer() {
67
+ const config = (0, config_js_1.loadConfig)();
68
+ (0, stats_js_1.recordInitializationEvent)(package_json_1.default.version, config, { enableLocalLogs: logger_js_1.LOG_ENABLED });
69
+ const server = new index_js_1.Server({
70
+ name: package_json_1.default.name,
71
+ version: package_json_1.default.version,
72
+ }, {
73
+ capabilities: {
74
+ tools: {},
75
+ },
76
+ });
77
+ server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => {
78
+ return await (0, handlers_js_1.handleListTools)();
79
+ });
80
+ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
81
+ const { name, arguments: args } = request.params;
82
+ return await (0, handlers_js_1.handleCallTool)(name, args, config, package_json_1.default, server);
83
+ });
84
+ (0, logger_js_1.logToFile)('info', 'Server launch initiated.');
85
+ const transport = new stdio_js_1.StdioServerTransport();
86
+ const startupInfo = {
87
+ purpose: 'Provides semantic code search capabilities through Embark API',
88
+ version: package_json_1.default.version,
89
+ about: 'Embark uses AI-powered semantic search to understand code meaning and context, not just keyword matching. It finds relevant code even when exact terms differ. The search works best with detailed, descriptive queries that explain what you are looking for in natural language.',
90
+ queryExamples: {
91
+ good: [
92
+ "function that validates user email addresses and returns boolean",
93
+ "error handling middleware for HTTP requests with logging",
94
+ "React component that renders a modal dialog with close button"
95
+ ],
96
+ poor: ["email", "error", "modal"]
97
+ },
98
+ configuration: {
99
+ baseUrl: config.jetbrainsAiUrl,
100
+ defaultRepositoryGitRemoteUrl: config.repositoryGitRemoteUrl,
101
+ defaultRepositoryRevision: config.repositoryRevision || 'Not set',
102
+ typeToken: config.typeToken,
103
+ endpointPrefix: (0, config_js_1.getEndpointPrefix)(config.typeToken),
104
+ jwtToken: process.env.GRAZIE_JWT_TOKEN ? 'Set' : 'Not set',
105
+ oauthSupport: process.env.GRAZIE_JWT_TOKEN ? 'Fallback' : 'Primary'
106
+ },
107
+ availableCommands: {
108
+ semantic_code_search: 'Semantic search for code'
109
+ }
110
+ };
111
+ (0, logger_js_1.logToFile)('info', 'Embark Remote MCP Server starting', startupInfo);
112
+ try {
113
+ await server.connect(transport);
114
+ (0, logger_js_1.logToFile)('info', 'Server connected to stdio transport');
115
+ // Set up notification handler for roots changes
116
+ server.setNotificationHandler(types_js_1.RootsListChangedNotificationSchema, async () => {
117
+ (0, logger_js_1.logToFile)('info', 'Received roots/list_changed notification, reinitializing repositories');
118
+ await (0, handlers_js_1.initializeRepositories)(server, config);
119
+ });
120
+ // After connection, initialize repositories by requesting roots from the client
121
+ await (0, handlers_js_1.initializeRepositories)(server, config);
122
+ }
123
+ catch (error) {
124
+ (0, logger_js_1.logToFile)('error', 'Server failed to connect', { error });
125
+ process.exit(1);
126
+ }
127
+ }
128
+ async function startStatsDashboard(port) {
129
+ const server = await (0, stats_server_js_1.startStatsServer)(port);
130
+ const resolvedPort = getServerPort(server, port);
131
+ const url = `http://localhost:${resolvedPort}`;
132
+ (0, logger_js_1.logToFile)('info', 'Stats dashboard running', { url, port: resolvedPort });
133
+ console.error(`[embark-mcp] Opening ${url} in your browser...`);
134
+ openBrowser(url);
135
+ }
136
+ function openBrowser(url) {
137
+ let command;
138
+ let args;
139
+ if (process.platform === 'darwin') {
140
+ command = 'open';
141
+ args = [url];
142
+ }
143
+ else if (process.platform === 'win32') {
144
+ command = 'cmd';
145
+ args = ['/c', 'start', '""', url];
146
+ }
147
+ else {
148
+ command = 'xdg-open';
149
+ args = [url];
150
+ }
151
+ const child = (0, child_process_1.spawn)(command, args, { stdio: 'ignore', detached: true });
152
+ child.on('error', (error) => {
153
+ (0, logger_js_1.logToFile)('error', 'Failed to open browser for stats dashboard', { error, url });
154
+ console.error('Unable to automatically open browser. Visit:', url);
155
+ });
156
+ child.unref();
157
+ }
158
+ function getServerPort(server, fallback) {
159
+ const address = server.address();
160
+ if (address && typeof address === 'object') {
161
+ return address.port;
162
+ }
163
+ return fallback;
164
+ }
165
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const LOG_ENABLED: boolean;
2
+ export declare function initializeLogging(): void;
3
+ export declare function logToFile(level: string, message: string, data?: any): void;
4
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,WAAW,SAAoF,CAAC;AAK7G,wBAAgB,iBAAiB,SAmBhC;AAwBD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,QAgCnE"}
package/dist/logger.js ADDED
@@ -0,0 +1,92 @@
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.LOG_ENABLED = void 0;
7
+ exports.initializeLogging = initializeLogging;
8
+ exports.logToFile = logToFile;
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const os_1 = __importDefault(require("os"));
12
+ const package_json_1 = __importDefault(require("../package.json"));
13
+ const stats_js_1 = require("./stats.js");
14
+ // Accept 'true', '1', 'yes', or any truthy string value
15
+ exports.LOG_ENABLED = ['true', '1', 'yes'].includes(process.env.ENABLE_LOCAL_LOGS?.toLowerCase() || '');
16
+ const LOG_DIR = path_1.default.join(os_1.default.homedir(), '.embark');
17
+ const LOG_FILE = path_1.default.join(LOG_DIR, 'debug.log');
18
+ function initializeLogging() {
19
+ if (!exports.LOG_ENABLED) {
20
+ // Write to stderr to help diagnose logging issues
21
+ console.error(`[embark-mcp v${package_json_1.default.version}] Local logging is disabled. Set ENABLE_LOCAL_LOGS=true to enable logging to ${LOG_FILE}`);
22
+ return;
23
+ }
24
+ try {
25
+ if (!fs_1.default.existsSync(LOG_DIR)) {
26
+ fs_1.default.mkdirSync(LOG_DIR, { recursive: true });
27
+ }
28
+ fs_1.default.appendFileSync(LOG_FILE, `\n--- New Session: ${new Date().toISOString()} | Version: ${package_json_1.default.version} ---\n`);
29
+ console.error(`[embark-mcp v${package_json_1.default.version}] Local logging enabled. Writing logs to: ${LOG_FILE}`);
30
+ }
31
+ catch (error) {
32
+ // Log to both console and file, as this is a critical failure
33
+ const errorMessage = `Failed to create log directory: ${error instanceof Error ? error.message : String(error)}`;
34
+ console.error(errorMessage);
35
+ logToFile('error', errorMessage, { error });
36
+ }
37
+ }
38
+ function formatData(data) {
39
+ if (data === undefined || data === null) {
40
+ return data;
41
+ }
42
+ if (data instanceof Error) {
43
+ return { message: data.message, stack: data.stack, name: data.name };
44
+ }
45
+ if (typeof data === 'object') {
46
+ try {
47
+ return JSON.parse(JSON.stringify(data, (key, value) => {
48
+ if (value instanceof Error) {
49
+ return { message: value.message, stack: value.stack };
50
+ }
51
+ return value;
52
+ }));
53
+ }
54
+ catch (e) {
55
+ return 'Could not stringify object data';
56
+ }
57
+ }
58
+ return data;
59
+ }
60
+ function logToFile(level, message, data) {
61
+ const timestamp = new Date().toISOString();
62
+ if (level === 'error') {
63
+ try {
64
+ (0, stats_js_1.recordErrorEvent)({
65
+ level,
66
+ message,
67
+ source: 'log',
68
+ context: formatData(data),
69
+ });
70
+ }
71
+ catch (e) {
72
+ // Swallow to avoid blocking logging if stats fail
73
+ }
74
+ }
75
+ if (!exports.LOG_ENABLED)
76
+ return;
77
+ try {
78
+ const logEntry = {
79
+ timestamp,
80
+ level,
81
+ message,
82
+ ...(data && { data: formatData(data) }),
83
+ };
84
+ const logLine = JSON.stringify(logEntry, null, 2) + '\n';
85
+ fs_1.default.appendFileSync(LOG_FILE, logLine);
86
+ }
87
+ catch (error) {
88
+ // Fallback to console.error if file logging fails
89
+ console.error('Failed to write to log file:', error);
90
+ }
91
+ }
92
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import http from 'http';
2
+ export declare function startStatsServer(port: number): Promise<http.Server>;
3
+ //# sourceMappingURL=stats-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats-server.d.ts","sourceRoot":"","sources":["../src/stats-server.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAoDxB,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAiCzE"}