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,118 @@
1
+ import { EmbarkConfig } from './config.js';
2
+ declare const STATS_DIR: string;
3
+ interface BaseEvent {
4
+ id: string;
5
+ timestamp: string;
6
+ type: string;
7
+ clientType?: string;
8
+ }
9
+ export interface InitializationEvent extends BaseEvent {
10
+ type: 'initialization';
11
+ version: string;
12
+ configSnapshot: Partial<EmbarkConfig> & {
13
+ includeRepositoryUrlsCount: number;
14
+ excludeRepositoryUrlsCount: number;
15
+ };
16
+ environment: {
17
+ nodeVersion: string;
18
+ platform: NodeJS.Platform;
19
+ enableLocalLogs: boolean;
20
+ };
21
+ }
22
+ export interface SearchEvent extends BaseEvent {
23
+ type: 'search';
24
+ searchKind: 'semantic' | 'dependencies';
25
+ toolName?: string;
26
+ query: string;
27
+ queryLength: number;
28
+ estimatedTokens: number;
29
+ repositoryUrls: string[];
30
+ revision: string | null;
31
+ pathFilter: string | null;
32
+ resultCount?: number;
33
+ durationMs?: number;
34
+ statusCode?: number;
35
+ success: boolean;
36
+ errorMessage?: string;
37
+ metadata?: Record<string, unknown>;
38
+ }
39
+ export interface ApiCallEvent extends BaseEvent {
40
+ type: 'api_call';
41
+ operation: string;
42
+ endpoint?: string;
43
+ durationMs: number;
44
+ statusCode?: number;
45
+ success: boolean;
46
+ errorMessage?: string;
47
+ attempt: number;
48
+ metadata?: Record<string, unknown>;
49
+ }
50
+ export interface MultiRepoSummaryEvent extends BaseEvent {
51
+ type: 'multi_repo_summary';
52
+ query: string;
53
+ repositoryCount: number;
54
+ successfulRepositories: number;
55
+ failedRepositories: number;
56
+ totalResults: number;
57
+ metadata?: Record<string, unknown>;
58
+ }
59
+ export interface ErrorEvent extends BaseEvent {
60
+ type: 'error';
61
+ level: string;
62
+ message: string;
63
+ source?: string;
64
+ context?: Record<string, unknown>;
65
+ }
66
+ export type StatsEvent = InitializationEvent | SearchEvent | ApiCallEvent | MultiRepoSummaryEvent | ErrorEvent;
67
+ export interface StatsDay {
68
+ date: string;
69
+ events: StatsEvent[];
70
+ }
71
+ interface SearchEventInput {
72
+ searchKind: 'semantic' | 'dependencies';
73
+ toolName?: string;
74
+ query: string;
75
+ repositoryUrls: string[];
76
+ revision?: string | null;
77
+ pathFilter?: string | null;
78
+ resultCount?: number;
79
+ durationMs?: number;
80
+ statusCode?: number;
81
+ success: boolean;
82
+ errorMessage?: string;
83
+ metadata?: Record<string, unknown>;
84
+ }
85
+ interface ApiCallEventInput {
86
+ operation: string;
87
+ endpoint?: string;
88
+ durationMs: number;
89
+ statusCode?: number;
90
+ success: boolean;
91
+ errorMessage?: string;
92
+ attempt: number;
93
+ metadata?: Record<string, unknown>;
94
+ }
95
+ interface MultiRepoSummaryInput {
96
+ query: string;
97
+ repositoryCount: number;
98
+ successfulRepositories: number;
99
+ failedRepositories: number;
100
+ totalResults: number;
101
+ metadata?: Record<string, unknown>;
102
+ }
103
+ interface ErrorEventInput {
104
+ level: string;
105
+ message: string;
106
+ source?: string;
107
+ context?: Record<string, unknown>;
108
+ }
109
+ export declare function recordInitializationEvent(version: string, config: EmbarkConfig, options?: {
110
+ enableLocalLogs: boolean;
111
+ }): void;
112
+ export declare function recordSearchEvent(input: SearchEventInput): void;
113
+ export declare function recordApiCallEvent(input: ApiCallEventInput): void;
114
+ export declare function recordMultiRepoSummaryEvent(input: MultiRepoSummaryInput): void;
115
+ export declare function recordErrorEvent(input: ErrorEventInput): void;
116
+ export declare function loadAllStatsDays(): StatsDay[];
117
+ export { STATS_DIR };
118
+ //# sourceMappingURL=stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../src/stats.ts"],"names":[],"mappings":"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"}
package/dist/stats.js ADDED
@@ -0,0 +1,206 @@
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.STATS_DIR = void 0;
7
+ exports.recordInitializationEvent = recordInitializationEvent;
8
+ exports.recordSearchEvent = recordSearchEvent;
9
+ exports.recordApiCallEvent = recordApiCallEvent;
10
+ exports.recordMultiRepoSummaryEvent = recordMultiRepoSummaryEvent;
11
+ exports.recordErrorEvent = recordErrorEvent;
12
+ exports.loadAllStatsDays = loadAllStatsDays;
13
+ const fs_1 = __importDefault(require("fs"));
14
+ const path_1 = __importDefault(require("path"));
15
+ const os_1 = __importDefault(require("os"));
16
+ const crypto_1 = require("crypto");
17
+ const STATS_DIR = path_1.default.join(os_1.default.homedir(), '.embark', 'stats');
18
+ exports.STATS_DIR = STATS_DIR;
19
+ function detectClientType() {
20
+ const explicit = process.env.MCP_CLIENT ||
21
+ process.env.EMBARK_CLIENT ||
22
+ process.env.EMBARK_MCP_CLIENT;
23
+ if (explicit) {
24
+ return explicit;
25
+ }
26
+ if (process.env.CLAUDE_CODE === 'true' || process.env.CLAUDE_CODE_SERVER === 'true') {
27
+ return 'Claude Code';
28
+ }
29
+ if (process.env.VSCODE_IPC_HOOK || process.env.ELECTRON_RUN_AS_NODE) {
30
+ return 'VS Code / Codex';
31
+ }
32
+ return 'unknown';
33
+ }
34
+ const CLIENT_TYPE = detectClientType();
35
+ function ensureStatsDir() {
36
+ if (!fs_1.default.existsSync(STATS_DIR)) {
37
+ fs_1.default.mkdirSync(STATS_DIR, { recursive: true });
38
+ }
39
+ }
40
+ function generateId() {
41
+ if (typeof crypto_1.randomUUID === 'function') {
42
+ return (0, crypto_1.randomUUID)();
43
+ }
44
+ return `${Date.now()}-${Math.random().toString(16).slice(2, 8)}`;
45
+ }
46
+ function getDateFromTimestamp(timestamp) {
47
+ return timestamp.slice(0, 10);
48
+ }
49
+ function readStatsDay(filePath, date) {
50
+ try {
51
+ if (!fs_1.default.existsSync(filePath)) {
52
+ return { date, events: [] };
53
+ }
54
+ const content = fs_1.default.readFileSync(filePath, 'utf8');
55
+ const parsed = JSON.parse(content);
56
+ if (!Array.isArray(parsed.events)) {
57
+ parsed.events = [];
58
+ }
59
+ parsed.date = parsed.date || date;
60
+ return parsed;
61
+ }
62
+ catch (error) {
63
+ console.error('Failed to read stats file', error);
64
+ return { date, events: [] };
65
+ }
66
+ }
67
+ function writeStatsDay(filePath, statsDay) {
68
+ try {
69
+ fs_1.default.writeFileSync(filePath, JSON.stringify(statsDay, null, 2), 'utf8');
70
+ }
71
+ catch (error) {
72
+ console.error('Failed to write stats file', error);
73
+ }
74
+ }
75
+ function appendEvent(event) {
76
+ try {
77
+ ensureStatsDir();
78
+ const date = getDateFromTimestamp(event.timestamp);
79
+ const filePath = path_1.default.join(STATS_DIR, `${date}.json`);
80
+ const statsDay = readStatsDay(filePath, date);
81
+ statsDay.events.push(event);
82
+ writeStatsDay(filePath, statsDay);
83
+ }
84
+ catch (error) {
85
+ console.error('Failed to append stats event', error);
86
+ }
87
+ }
88
+ function estimateTokens(query) {
89
+ const trimmed = query.trim();
90
+ if (!trimmed) {
91
+ return 0;
92
+ }
93
+ const words = trimmed.split(/\s+/).length;
94
+ return Math.max(1, Math.round(words * 1.3));
95
+ }
96
+ function recordInitializationEvent(version, config, options) {
97
+ const event = {
98
+ id: generateId(),
99
+ timestamp: new Date().toISOString(),
100
+ type: 'initialization',
101
+ clientType: CLIENT_TYPE,
102
+ version,
103
+ configSnapshot: {
104
+ jetbrainsAiUrl: config.jetbrainsAiUrl,
105
+ repositoryGitRemoteUrl: config.repositoryGitRemoteUrl,
106
+ repositoryRevision: config.repositoryRevision,
107
+ typeToken: config.typeToken,
108
+ enableRemoteLogs: config.enableRemoteLogs,
109
+ workingDir: config.workingDir,
110
+ includeRepositoryUrls: config.includeRepositoryUrls,
111
+ excludeRepositoryUrls: config.excludeRepositoryUrls,
112
+ includeRepositoryUrlsCount: config.includeRepositoryUrls?.length || 0,
113
+ excludeRepositoryUrlsCount: config.excludeRepositoryUrls?.length || 0,
114
+ },
115
+ environment: {
116
+ nodeVersion: process.version,
117
+ platform: process.platform,
118
+ enableLocalLogs: options?.enableLocalLogs ?? false,
119
+ },
120
+ };
121
+ appendEvent(event);
122
+ }
123
+ function recordSearchEvent(input) {
124
+ const event = {
125
+ id: generateId(),
126
+ timestamp: new Date().toISOString(),
127
+ type: 'search',
128
+ clientType: CLIENT_TYPE,
129
+ searchKind: input.searchKind,
130
+ toolName: input.toolName,
131
+ query: input.query,
132
+ queryLength: input.query.length,
133
+ estimatedTokens: estimateTokens(input.query),
134
+ repositoryUrls: input.repositoryUrls,
135
+ revision: input.revision ?? null,
136
+ pathFilter: input.pathFilter ?? null,
137
+ resultCount: input.resultCount,
138
+ durationMs: input.durationMs,
139
+ statusCode: input.statusCode,
140
+ success: input.success,
141
+ errorMessage: input.errorMessage,
142
+ metadata: input.metadata,
143
+ };
144
+ appendEvent(event);
145
+ }
146
+ function recordApiCallEvent(input) {
147
+ const event = {
148
+ id: generateId(),
149
+ timestamp: new Date().toISOString(),
150
+ type: 'api_call',
151
+ clientType: CLIENT_TYPE,
152
+ operation: input.operation,
153
+ endpoint: input.endpoint,
154
+ durationMs: input.durationMs,
155
+ statusCode: input.statusCode,
156
+ success: input.success,
157
+ errorMessage: input.errorMessage,
158
+ attempt: input.attempt,
159
+ metadata: input.metadata,
160
+ };
161
+ appendEvent(event);
162
+ }
163
+ function recordMultiRepoSummaryEvent(input) {
164
+ const event = {
165
+ id: generateId(),
166
+ timestamp: new Date().toISOString(),
167
+ type: 'multi_repo_summary',
168
+ clientType: CLIENT_TYPE,
169
+ query: input.query,
170
+ repositoryCount: input.repositoryCount,
171
+ successfulRepositories: input.successfulRepositories,
172
+ failedRepositories: input.failedRepositories,
173
+ totalResults: input.totalResults,
174
+ metadata: input.metadata,
175
+ };
176
+ appendEvent(event);
177
+ }
178
+ function recordErrorEvent(input) {
179
+ const event = {
180
+ id: generateId(),
181
+ timestamp: new Date().toISOString(),
182
+ type: 'error',
183
+ clientType: CLIENT_TYPE,
184
+ level: input.level,
185
+ message: input.message,
186
+ source: input.source,
187
+ context: input.context,
188
+ };
189
+ appendEvent(event);
190
+ }
191
+ function loadAllStatsDays() {
192
+ try {
193
+ ensureStatsDir();
194
+ const files = fs_1.default.readdirSync(STATS_DIR).filter((file) => file.endsWith('.json'));
195
+ const stats = files.map((file) => {
196
+ const fullPath = path_1.default.join(STATS_DIR, file);
197
+ return readStatsDay(fullPath, path_1.default.basename(file, '.json'));
198
+ });
199
+ return stats.sort((a, b) => a.date.localeCompare(b.date));
200
+ }
201
+ catch (error) {
202
+ console.error('Failed to load stats directory', error);
203
+ return [];
204
+ }
205
+ }
206
+ //# sourceMappingURL=stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../src/stats.ts"],"names":[],"mappings":";;;;;;AAqNA,8DA+BC;AAED,8CAuBC;AAED,gDAiBC;AAED,kEAeC;AAED,4CAaC;AAED,4CAaC;AA/UD,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AACpB,mCAAoC;AAGpC,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AA2UrD,8BAAS;AAnNlB,SAAS,gBAAgB;IACvB,MAAM,QAAQ,GACZ,OAAO,CAAC,GAAG,CAAC,UAAU;QACtB,OAAO,CAAC,GAAG,CAAC,aAAa;QACzB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAChC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,MAAM,EAAE,CAAC;QACpF,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;QACpE,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,WAAW,GAAG,gBAAgB,EAAE,CAAC;AAEvC,SAAS,cAAc;IACrB,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,YAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED,SAAS,UAAU;IACjB,IAAI,OAAO,mBAAU,KAAK,UAAU,EAAE,CAAC;QACrC,OAAO,IAAA,mBAAU,GAAE,CAAC;IACtB,CAAC;IACD,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AACnE,CAAC;AAED,SAAS,oBAAoB,CAAC,SAAiB;IAC7C,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB,EAAE,IAAY;IAClD,IAAI,CAAC;QACH,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QAC9B,CAAC;QACD,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAa,CAAC;QAC/C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;QACrB,CAAC;QACD,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC;QAClC,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;QAClD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB,EAAE,QAAkB;IACzD,IAAI,CAAC;QACH,YAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACxE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAiB;IACpC,IAAI,CAAC;QACH,cAAc,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC9C,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IAC1C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,SAAgB,yBAAyB,CACvC,OAAe,EACf,MAAoB,EACpB,OAAsC;IAEtC,MAAM,KAAK,GAAwB;QACjC,EAAE,EAAE,UAAU,EAAE;QAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,IAAI,EAAE,gBAAgB;QACtB,UAAU,EAAE,WAAW;QACvB,OAAO;QACP,cAAc,EAAE;YACd,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,sBAAsB,EAAE,MAAM,CAAC,sBAAsB;YACrD,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;YAC7C,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;YACnD,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;YACnD,0BAA0B,EAAE,MAAM,CAAC,qBAAqB,EAAE,MAAM,IAAI,CAAC;YACrE,0BAA0B,EAAE,MAAM,CAAC,qBAAqB,EAAE,MAAM,IAAI,CAAC;SACtE;QACD,WAAW,EAAE;YACX,WAAW,EAAE,OAAO,CAAC,OAAO;YAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,eAAe,EAAE,OAAO,EAAE,eAAe,IAAI,KAAK;SACnD;KACF,CAAC;IAEF,WAAW,CAAC,KAAK,CAAC,CAAC;AACrB,CAAC;AAED,SAAgB,iBAAiB,CAAC,KAAuB;IACvD,MAAM,KAAK,GAAgB;QACzB,EAAE,EAAE,UAAU,EAAE;QAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,WAAW;QACvB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM;QAC/B,eAAe,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC;QAC5C,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;QAChC,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI;QACpC,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC;IAEF,WAAW,CAAC,KAAK,CAAC,CAAC;AACrB,CAAC;AAED,SAAgB,kBAAkB,CAAC,KAAwB;IACzD,MAAM,KAAK,GAAiB;QAC1B,EAAE,EAAE,UAAU,EAAE;QAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,IAAI,EAAE,UAAU;QAChB,UAAU,EAAE,WAAW;QACvB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC;IAEF,WAAW,CAAC,KAAK,CAAC,CAAC;AACrB,CAAC;AAED,SAAgB,2BAA2B,CAAC,KAA4B;IACtE,MAAM,KAAK,GAA0B;QACnC,EAAE,EAAE,UAAU,EAAE;QAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,IAAI,EAAE,oBAAoB;QAC1B,UAAU,EAAE,WAAW;QACvB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,sBAAsB,EAAE,KAAK,CAAC,sBAAsB;QACpD,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;QAC5C,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC;IAEF,WAAW,CAAC,KAAK,CAAC,CAAC;AACrB,CAAC;AAED,SAAgB,gBAAgB,CAAC,KAAsB;IACrD,MAAM,KAAK,GAAe;QACxB,EAAE,EAAE,UAAU,EAAE;QAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,IAAI,EAAE,OAAO;QACb,UAAU,EAAE,WAAW;QACvB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC;IAEF,WAAW,CAAC,KAAK,CAAC,CAAC;AACrB,CAAC;AAED,SAAgB,gBAAgB;IAC9B,IAAI,CAAC;QACH,cAAc,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,YAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QACjF,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAC/B,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC5C,OAAO,YAAY,CAAC,QAAQ,EAAE,cAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;QACvD,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Tool definitions for Embark MCP server
3
+ */
4
+ import { Tool } from '@modelcontextprotocol/sdk/types.js';
5
+ /**
6
+ * Available tools for code search
7
+ */
8
+ export declare const TOOLS: Tool[];
9
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,KAAK,EAAE,IAAI,EAmDvB,CAAC"}
package/dist/tools.js ADDED
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ /**
3
+ * Tool definitions for Embark MCP server
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TOOLS = void 0;
7
+ /**
8
+ * Available tools for code search
9
+ */
10
+ exports.TOOLS = [
11
+ {
12
+ name: 'semantic_code_search',
13
+ description: 'Search for code using Embark semantic search in the specified repository or repositories. This tool performs AI-powered semantic code search that understands code meaning and context, not just keyword matching. It finds relevant code even when exact terms differ. For best results, use detailed, descriptive queries that explain what you are looking for in natural language (e.g., "function that validates user email addresses and returns boolean" rather than just "email"). Returns file paths, line offsets, similarity scores, and code types.',
14
+ inputSchema: {
15
+ type: 'object',
16
+ properties: {
17
+ text: {
18
+ type: 'string',
19
+ description: 'The text/code to search for. Use detailed, descriptive natural language queries for best results. Examples: "function that validates user email addresses and returns boolean", "error handling middleware for HTTP requests with logging", "React component that renders a modal dialog with close button". Avoid single words like "email" or "error" - the semantic search works much better with context and detail.',
20
+ },
21
+ pathFilter: {
22
+ type: 'string',
23
+ description: 'The path filter to restrict search to specific directories or a file. This helps narrow down search results to relevant parts of the codebase. If not provided, the whole project is searched. Examples: "path/to/module", "path/to/module/submodule", "path/to/file/example.kt".',
24
+ },
25
+ },
26
+ required: ['text'],
27
+ },
28
+ },
29
+ // {
30
+ // name: 'search_in_dependencies',
31
+ // description: 'Search for code dependencies using Embark semantic search. This tool searches for code that depends on specific dependencies and uses semantic matching to find relevant code blocks. Use this when you need to find code that uses specific libraries, frameworks, or dependencies.',
32
+ // inputSchema: {
33
+ // type: 'object',
34
+ // properties: {
35
+ // text: {
36
+ // type: 'string',
37
+ // description: 'The search query describing what to look for in relation to dependencies.',
38
+ // },
39
+ // dependencies: {
40
+ // type: 'array',
41
+ // items: {
42
+ // type: 'object',
43
+ // properties: {
44
+ // dependency: {
45
+ // type: 'string',
46
+ // description: 'The dependency name',
47
+ // },
48
+ // version: {
49
+ // type: 'string',
50
+ // description: 'The dependency version',
51
+ // },
52
+ // },
53
+ // required: ['dependency', 'version'],
54
+ // },
55
+ // description: 'Array of dependency objects with dependency name and version.',
56
+ // }
57
+ // },
58
+ // required: ['text', 'dependencies'],
59
+ // },
60
+ // },
61
+ ];
62
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAIH;;GAEG;AACU,QAAA,KAAK,GAAW;IAC3B;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,iiBAAiiB;QAC9iB,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,0ZAA0Z;iBACxa;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,mRAAmR;iBACjS;aACF;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;KACF;IACD,IAAI;IACJ,oCAAoC;IACpC,ySAAyS;IACzS,mBAAmB;IACnB,sBAAsB;IACtB,oBAAoB;IACpB,gBAAgB;IAChB,0BAA0B;IAC1B,oGAAoG;IACpG,WAAW;IACX,wBAAwB;IACxB,yBAAyB;IACzB,mBAAmB;IACnB,4BAA4B;IAC5B,0BAA0B;IAC1B,4BAA4B;IAC5B,gCAAgC;IAChC,oDAAoD;IACpD,iBAAiB;IACjB,yBAAyB;IACzB,gCAAgC;IAChC,uDAAuD;IACvD,iBAAiB;IACjB,eAAe;IACf,iDAAiD;IACjD,aAAa;IACb,wFAAwF;IACxF,UAAU;IACV,SAAS;IACT,0CAA0C;IAC1C,OAAO;IACP,KAAK;CACN,CAAC"}
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "embark-cli",
3
+ "version": "1.1.7",
4
+ "description": "MCP server proxy for Embark code search",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "embark-cli": "dist/index.js"
8
+ },
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "start": "node dist/index.js",
12
+ "dev": "ts-node-dev --respawn --transpile-only src/index.ts",
13
+ "watch": "tsc -w",
14
+ "prepublishOnly": "npm run build"
15
+ },
16
+ "keywords": [
17
+ "mcp",
18
+ "ai",
19
+ "claude",
20
+ "anthropic",
21
+ "tool-use",
22
+ "code-search",
23
+ "semantic-search",
24
+ "jetbrains"
25
+ ],
26
+ "author": "JetBrains",
27
+ "license": "MIT",
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "git+https://github.com/jetbrains/embark-mcp.git"
31
+ },
32
+ "bugs": {
33
+ "url": "https://github.com/jetbrains/embark-mcp/issues"
34
+ },
35
+ "homepage": "https://github.com/jetbrains/embark-mcp#readme",
36
+ "dependencies": {
37
+ "@modelcontextprotocol/sdk": "^1.0.0",
38
+ "axios": "^1.7.0",
39
+ "xmldom": "^0.6.0"
40
+ },
41
+ "devDependencies": {
42
+ "@types/node": "^20.0.0",
43
+ "@types/xmldom": "^0.1.34",
44
+ "ts-node": "^10.9.0",
45
+ "typescript": "^5.0.0"
46
+ }
47
+ }