partnercore-proxy 0.1.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/CHANGELOG.md +54 -0
- package/LICENSE +22 -0
- package/README.md +234 -0
- package/dist/al/extension-manager.d.ts +52 -0
- package/dist/al/extension-manager.d.ts.map +1 -0
- package/dist/al/extension-manager.js +348 -0
- package/dist/al/extension-manager.js.map +1 -0
- package/dist/al/index.d.ts +3 -0
- package/dist/al/index.d.ts.map +1 -0
- package/dist/al/index.js +19 -0
- package/dist/al/index.js.map +1 -0
- package/dist/al/language-server.d.ts +134 -0
- package/dist/al/language-server.d.ts.map +1 -0
- package/dist/al/language-server.js +431 -0
- package/dist/al/language-server.js.map +1 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +207 -0
- package/dist/cli.js.map +1 -0
- package/dist/cloud/index.d.ts +2 -0
- package/dist/cloud/index.d.ts.map +1 -0
- package/dist/cloud/index.js +18 -0
- package/dist/cloud/index.js.map +1 -0
- package/dist/cloud/relay-client.d.ts +84 -0
- package/dist/cloud/relay-client.d.ts.map +1 -0
- package/dist/cloud/relay-client.js +211 -0
- package/dist/cloud/relay-client.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +19 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +20 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +136 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/types.d.ts +51 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +33 -0
- package/dist/config/types.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +2 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +18 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +33 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +98 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/router/index.d.ts +2 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +18 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/tool-router.d.ts +87 -0
- package/dist/router/tool-router.d.ts.map +1 -0
- package/dist/router/tool-router.js +557 -0
- package/dist/router/tool-router.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +19 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +20 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +99 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/security.d.ts +66 -0
- package/dist/utils/security.d.ts.map +1 -0
- package/dist/utils/security.js +358 -0
- package/dist/utils/security.js.map +1 -0
- package/mcp.json +125 -0
- package/package.json +107 -0
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* AL Language Server Client
|
|
4
|
+
*
|
|
5
|
+
* Communicates with the Microsoft AL Language Server via LSP protocol.
|
|
6
|
+
* Based on insights from Serena project's implementation.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.ALLanguageServer = void 0;
|
|
43
|
+
const child_process_1 = require("child_process");
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const fs = __importStar(require("fs"));
|
|
46
|
+
const node_js_1 = require("vscode-jsonrpc/node.js");
|
|
47
|
+
const logger_js_1 = require("../utils/logger.js");
|
|
48
|
+
/**
|
|
49
|
+
* AL Language Server Client
|
|
50
|
+
*/
|
|
51
|
+
class ALLanguageServer {
|
|
52
|
+
extensionInfo;
|
|
53
|
+
workspaceRoot;
|
|
54
|
+
process = null;
|
|
55
|
+
connection = null;
|
|
56
|
+
logger = (0, logger_js_1.getLogger)();
|
|
57
|
+
initialized = false;
|
|
58
|
+
openDocuments = new Set();
|
|
59
|
+
diagnosticsCache = new Map();
|
|
60
|
+
constructor(extensionInfo, workspaceRoot) {
|
|
61
|
+
this.extensionInfo = extensionInfo;
|
|
62
|
+
this.workspaceRoot = path.resolve(workspaceRoot);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Initialize and start the language server
|
|
66
|
+
*/
|
|
67
|
+
async initialize() {
|
|
68
|
+
if (this.initialized) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
this.logger.info('Starting AL Language Server...');
|
|
72
|
+
// Start the EditorServices process
|
|
73
|
+
this.process = (0, child_process_1.spawn)(this.extensionInfo.editorServicesPath, [], {
|
|
74
|
+
cwd: this.workspaceRoot,
|
|
75
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
76
|
+
});
|
|
77
|
+
if (!this.process.stdout || !this.process.stdin) {
|
|
78
|
+
throw new Error('Failed to start AL Language Server process');
|
|
79
|
+
}
|
|
80
|
+
// Create LSP connection
|
|
81
|
+
this.connection = (0, node_js_1.createMessageConnection)(new node_js_1.StreamMessageReader(this.process.stdout), new node_js_1.StreamMessageWriter(this.process.stdin));
|
|
82
|
+
// Handle diagnostics
|
|
83
|
+
this.connection.onNotification('textDocument/publishDiagnostics', (params) => {
|
|
84
|
+
this.handleDiagnostics(params);
|
|
85
|
+
});
|
|
86
|
+
// Handle errors
|
|
87
|
+
this.process.stderr?.on('data', (data) => {
|
|
88
|
+
this.logger.debug(`AL LSP stderr: ${data.toString()}`);
|
|
89
|
+
});
|
|
90
|
+
this.process.on('error', (error) => {
|
|
91
|
+
this.logger.error('AL Language Server process error:', error);
|
|
92
|
+
});
|
|
93
|
+
this.process.on('exit', (code) => {
|
|
94
|
+
this.logger.info(`AL Language Server exited with code: ${code}`);
|
|
95
|
+
this.initialized = false;
|
|
96
|
+
});
|
|
97
|
+
// Start listening
|
|
98
|
+
this.connection.listen();
|
|
99
|
+
// Initialize the language server
|
|
100
|
+
const initParams = this.createInitializeParams();
|
|
101
|
+
const initResult = await this.connection.sendRequest('initialize', initParams);
|
|
102
|
+
this.logger.debug('AL LSP initialized:', initResult.capabilities);
|
|
103
|
+
// Send initialized notification
|
|
104
|
+
void this.connection.sendNotification('initialized', {});
|
|
105
|
+
this.initialized = true;
|
|
106
|
+
this.logger.info('AL Language Server ready');
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Create initialization parameters for AL LSP
|
|
110
|
+
*/
|
|
111
|
+
createInitializeParams() {
|
|
112
|
+
return {
|
|
113
|
+
processId: process.pid,
|
|
114
|
+
rootUri: `file:///${this.workspaceRoot.replace(/\\/g, '/')}`,
|
|
115
|
+
rootPath: this.workspaceRoot,
|
|
116
|
+
capabilities: {
|
|
117
|
+
textDocument: {
|
|
118
|
+
synchronization: {
|
|
119
|
+
dynamicRegistration: true,
|
|
120
|
+
willSave: true,
|
|
121
|
+
willSaveWaitUntil: true,
|
|
122
|
+
didSave: true,
|
|
123
|
+
},
|
|
124
|
+
completion: {
|
|
125
|
+
dynamicRegistration: true,
|
|
126
|
+
completionItem: {
|
|
127
|
+
snippetSupport: true,
|
|
128
|
+
commitCharactersSupport: true,
|
|
129
|
+
documentationFormat: ['markdown', 'plaintext'],
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
hover: {
|
|
133
|
+
dynamicRegistration: true,
|
|
134
|
+
contentFormat: ['markdown', 'plaintext'],
|
|
135
|
+
},
|
|
136
|
+
definition: {
|
|
137
|
+
dynamicRegistration: true,
|
|
138
|
+
},
|
|
139
|
+
references: {
|
|
140
|
+
dynamicRegistration: true,
|
|
141
|
+
},
|
|
142
|
+
documentSymbol: {
|
|
143
|
+
dynamicRegistration: true,
|
|
144
|
+
hierarchicalDocumentSymbolSupport: true,
|
|
145
|
+
},
|
|
146
|
+
publishDiagnostics: {
|
|
147
|
+
relatedInformation: true,
|
|
148
|
+
},
|
|
149
|
+
},
|
|
150
|
+
workspace: {
|
|
151
|
+
applyEdit: true,
|
|
152
|
+
workspaceFolders: true,
|
|
153
|
+
didChangeConfiguration: {
|
|
154
|
+
dynamicRegistration: true,
|
|
155
|
+
},
|
|
156
|
+
symbol: {
|
|
157
|
+
dynamicRegistration: true,
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
|
+
workspaceFolders: [
|
|
162
|
+
{
|
|
163
|
+
uri: `file:///${this.workspaceRoot.replace(/\\/g, '/')}`,
|
|
164
|
+
name: path.basename(this.workspaceRoot),
|
|
165
|
+
},
|
|
166
|
+
],
|
|
167
|
+
initializationOptions: {
|
|
168
|
+
// AL-specific initialization options
|
|
169
|
+
enableCodeActions: true,
|
|
170
|
+
enableCodeLens: false,
|
|
171
|
+
enableDiagnostics: true,
|
|
172
|
+
backgroundAnalysis: true,
|
|
173
|
+
},
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Handle diagnostics from the language server
|
|
178
|
+
*/
|
|
179
|
+
handleDiagnostics(params) {
|
|
180
|
+
const diagnostics = params.diagnostics.map(d => ({
|
|
181
|
+
message: d.message,
|
|
182
|
+
severity: this.mapSeverity(d.severity),
|
|
183
|
+
range: {
|
|
184
|
+
start: { line: d.range.start.line, character: d.range.start.character },
|
|
185
|
+
end: { line: d.range.end.line, character: d.range.end.character },
|
|
186
|
+
},
|
|
187
|
+
code: d.code?.toString(),
|
|
188
|
+
source: d.source,
|
|
189
|
+
}));
|
|
190
|
+
this.diagnosticsCache.set(params.uri, diagnostics);
|
|
191
|
+
this.logger.debug(`Diagnostics updated for ${params.uri}: ${diagnostics.length} issues`);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Map LSP severity to our severity type
|
|
195
|
+
*/
|
|
196
|
+
mapSeverity(severity) {
|
|
197
|
+
switch (severity) {
|
|
198
|
+
case 1: return 'error';
|
|
199
|
+
case 2: return 'warning';
|
|
200
|
+
case 3: return 'info';
|
|
201
|
+
case 4: return 'hint';
|
|
202
|
+
default: return 'info';
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Open a document in the language server
|
|
207
|
+
*/
|
|
208
|
+
async openDocument(uri) {
|
|
209
|
+
if (!this.connection || this.openDocuments.has(uri)) {
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
const filePath = this.uriToPath(uri);
|
|
213
|
+
if (!fs.existsSync(filePath)) {
|
|
214
|
+
throw new Error(`File not found: ${filePath}`);
|
|
215
|
+
}
|
|
216
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
217
|
+
const params = {
|
|
218
|
+
textDocument: {
|
|
219
|
+
uri,
|
|
220
|
+
languageId: 'al',
|
|
221
|
+
version: 1,
|
|
222
|
+
text: content,
|
|
223
|
+
},
|
|
224
|
+
};
|
|
225
|
+
void this.connection.sendNotification('textDocument/didOpen', params);
|
|
226
|
+
this.openDocuments.add(uri);
|
|
227
|
+
// Wait a bit for diagnostics to be processed
|
|
228
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Get document symbols
|
|
232
|
+
*/
|
|
233
|
+
async getDocumentSymbols(uri) {
|
|
234
|
+
await this.ensureInitialized();
|
|
235
|
+
await this.openDocument(uri);
|
|
236
|
+
const params = {
|
|
237
|
+
textDocument: { uri },
|
|
238
|
+
};
|
|
239
|
+
const result = await this.connection.sendRequest('textDocument/documentSymbol', params);
|
|
240
|
+
return this.convertSymbols(result);
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Go to definition
|
|
244
|
+
*/
|
|
245
|
+
async goToDefinition(uri, line, character) {
|
|
246
|
+
await this.ensureInitialized();
|
|
247
|
+
await this.openDocument(uri);
|
|
248
|
+
const params = {
|
|
249
|
+
textDocument: { uri },
|
|
250
|
+
position: { line, character },
|
|
251
|
+
};
|
|
252
|
+
const result = await this.connection.sendRequest('textDocument/definition', params);
|
|
253
|
+
if (!result)
|
|
254
|
+
return [];
|
|
255
|
+
return Array.isArray(result) ? result : [result];
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Find references
|
|
259
|
+
*/
|
|
260
|
+
async findReferences(uri, line, character) {
|
|
261
|
+
await this.ensureInitialized();
|
|
262
|
+
await this.openDocument(uri);
|
|
263
|
+
const params = {
|
|
264
|
+
textDocument: { uri },
|
|
265
|
+
position: { line, character },
|
|
266
|
+
context: { includeDeclaration: true },
|
|
267
|
+
};
|
|
268
|
+
const result = await this.connection.sendRequest('textDocument/references', params);
|
|
269
|
+
return result || [];
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Get hover information
|
|
273
|
+
*/
|
|
274
|
+
async hover(uri, line, character) {
|
|
275
|
+
await this.ensureInitialized();
|
|
276
|
+
await this.openDocument(uri);
|
|
277
|
+
const params = {
|
|
278
|
+
textDocument: { uri },
|
|
279
|
+
position: { line, character },
|
|
280
|
+
};
|
|
281
|
+
return this.connection.sendRequest('textDocument/hover', params);
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Get completions
|
|
285
|
+
*/
|
|
286
|
+
async getCompletions(uri, line, character) {
|
|
287
|
+
await this.ensureInitialized();
|
|
288
|
+
await this.openDocument(uri);
|
|
289
|
+
const params = {
|
|
290
|
+
textDocument: { uri },
|
|
291
|
+
position: { line, character },
|
|
292
|
+
};
|
|
293
|
+
const result = await this.connection.sendRequest('textDocument/completion', params);
|
|
294
|
+
if (!result)
|
|
295
|
+
return [];
|
|
296
|
+
return Array.isArray(result) ? result : result.items;
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Get diagnostics for a document
|
|
300
|
+
*/
|
|
301
|
+
async getDiagnostics(uri) {
|
|
302
|
+
await this.ensureInitialized();
|
|
303
|
+
await this.openDocument(uri);
|
|
304
|
+
// Wait for diagnostics to be published
|
|
305
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
306
|
+
return this.diagnosticsCache.get(uri) || [];
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Get workspace symbols (search across all files)
|
|
310
|
+
*/
|
|
311
|
+
async getWorkspaceSymbols(query) {
|
|
312
|
+
await this.ensureInitialized();
|
|
313
|
+
const result = await this.connection.sendRequest('workspace/symbol', { query });
|
|
314
|
+
return result || [];
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Convert LSP symbols to our format
|
|
318
|
+
*/
|
|
319
|
+
convertSymbols(symbols) {
|
|
320
|
+
return symbols.map(s => {
|
|
321
|
+
if ('location' in s) {
|
|
322
|
+
// SymbolInformation
|
|
323
|
+
return {
|
|
324
|
+
name: s.name,
|
|
325
|
+
kind: this.symbolKindToString(s.kind),
|
|
326
|
+
range: {
|
|
327
|
+
start: { line: s.location.range.start.line, character: s.location.range.start.character },
|
|
328
|
+
end: { line: s.location.range.end.line, character: s.location.range.end.character },
|
|
329
|
+
},
|
|
330
|
+
uri: s.location.uri,
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
// DocumentSymbol
|
|
335
|
+
return {
|
|
336
|
+
name: s.name,
|
|
337
|
+
kind: this.symbolKindToString(s.kind),
|
|
338
|
+
range: {
|
|
339
|
+
start: { line: s.range.start.line, character: s.range.start.character },
|
|
340
|
+
end: { line: s.range.end.line, character: s.range.end.character },
|
|
341
|
+
},
|
|
342
|
+
detail: s.detail,
|
|
343
|
+
children: s.children ? this.convertSymbols(s.children) : undefined,
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Convert symbol kind number to string
|
|
350
|
+
*/
|
|
351
|
+
symbolKindToString(kind) {
|
|
352
|
+
const kinds = {
|
|
353
|
+
1: 'File',
|
|
354
|
+
2: 'Module',
|
|
355
|
+
3: 'Namespace',
|
|
356
|
+
4: 'Package',
|
|
357
|
+
5: 'Class',
|
|
358
|
+
6: 'Method',
|
|
359
|
+
7: 'Property',
|
|
360
|
+
8: 'Field',
|
|
361
|
+
9: 'Constructor',
|
|
362
|
+
10: 'Enum',
|
|
363
|
+
11: 'Interface',
|
|
364
|
+
12: 'Function',
|
|
365
|
+
13: 'Variable',
|
|
366
|
+
14: 'Constant',
|
|
367
|
+
15: 'String',
|
|
368
|
+
16: 'Number',
|
|
369
|
+
17: 'Boolean',
|
|
370
|
+
18: 'Array',
|
|
371
|
+
19: 'Object',
|
|
372
|
+
20: 'Key',
|
|
373
|
+
21: 'Null',
|
|
374
|
+
22: 'EnumMember',
|
|
375
|
+
23: 'Struct',
|
|
376
|
+
24: 'Event',
|
|
377
|
+
25: 'Operator',
|
|
378
|
+
26: 'TypeParameter',
|
|
379
|
+
};
|
|
380
|
+
return kinds[kind] || 'Unknown';
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Convert URI to file path
|
|
384
|
+
*/
|
|
385
|
+
uriToPath(uri) {
|
|
386
|
+
if (uri.startsWith('file:///')) {
|
|
387
|
+
return uri.slice(8).replace(/%20/g, ' ');
|
|
388
|
+
}
|
|
389
|
+
return uri;
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Convert file path to URI
|
|
393
|
+
*/
|
|
394
|
+
pathToUri(filePath) {
|
|
395
|
+
const normalized = path.resolve(filePath).replace(/\\/g, '/');
|
|
396
|
+
return `file:///${normalized}`;
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Ensure the server is initialized
|
|
400
|
+
*/
|
|
401
|
+
async ensureInitialized() {
|
|
402
|
+
if (!this.initialized) {
|
|
403
|
+
await this.initialize();
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* Shutdown the language server
|
|
408
|
+
*/
|
|
409
|
+
async shutdown() {
|
|
410
|
+
if (!this.connection) {
|
|
411
|
+
return;
|
|
412
|
+
}
|
|
413
|
+
this.logger.info('Shutting down AL Language Server...');
|
|
414
|
+
try {
|
|
415
|
+
await this.connection.sendRequest('shutdown');
|
|
416
|
+
void this.connection.sendNotification('exit');
|
|
417
|
+
}
|
|
418
|
+
catch {
|
|
419
|
+
// Ignore errors during shutdown
|
|
420
|
+
}
|
|
421
|
+
this.connection.dispose();
|
|
422
|
+
this.process?.kill();
|
|
423
|
+
this.connection = null;
|
|
424
|
+
this.process = null;
|
|
425
|
+
this.initialized = false;
|
|
426
|
+
this.openDocuments.clear();
|
|
427
|
+
this.diagnosticsCache.clear();
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
exports.ALLanguageServer = ALLanguageServer;
|
|
431
|
+
//# sourceMappingURL=language-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language-server.js","sourceRoot":"","sources":["../../src/al/language-server.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;GAIG"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* PartnerCore Proxy CLI
|
|
5
|
+
*
|
|
6
|
+
* Command-line interface for starting and managing the proxy server.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
const commander_1 = require("commander");
|
|
10
|
+
const loader_js_1 = require("./config/loader.js");
|
|
11
|
+
const logger_js_1 = require("./utils/logger.js");
|
|
12
|
+
const extension_manager_js_1 = require("./al/extension-manager.js");
|
|
13
|
+
const language_server_js_1 = require("./al/language-server.js");
|
|
14
|
+
const relay_client_js_1 = require("./cloud/relay-client.js");
|
|
15
|
+
const tool_router_js_1 = require("./router/tool-router.js");
|
|
16
|
+
const server_js_1 = require("./mcp/server.js");
|
|
17
|
+
const program = new commander_1.Command();
|
|
18
|
+
program
|
|
19
|
+
.name('partnercore-proxy')
|
|
20
|
+
.description('Local MCP proxy for AL Language Server integration')
|
|
21
|
+
.version('0.1.0');
|
|
22
|
+
program
|
|
23
|
+
.command('start')
|
|
24
|
+
.description('Start the MCP proxy server')
|
|
25
|
+
.option('-w, --workspace <path>', 'AL workspace root (containing app.json)')
|
|
26
|
+
.option('-v, --verbose', 'Enable verbose logging')
|
|
27
|
+
.option('--no-cloud', 'Disable cloud connection (local tools only)')
|
|
28
|
+
.action((options) => {
|
|
29
|
+
void startServer(options);
|
|
30
|
+
});
|
|
31
|
+
program
|
|
32
|
+
.command('check')
|
|
33
|
+
.description('Check configuration and connections')
|
|
34
|
+
.action(() => {
|
|
35
|
+
void checkConfiguration();
|
|
36
|
+
});
|
|
37
|
+
program
|
|
38
|
+
.command('download-extension')
|
|
39
|
+
.description('Download/update the AL Language extension')
|
|
40
|
+
.action(() => {
|
|
41
|
+
void downloadExtension();
|
|
42
|
+
});
|
|
43
|
+
program.parse();
|
|
44
|
+
/**
|
|
45
|
+
* Start the proxy server
|
|
46
|
+
*/
|
|
47
|
+
async function startServer(options) {
|
|
48
|
+
// Initialize logger
|
|
49
|
+
const logLevel = options.verbose ? 'debug' : 'info';
|
|
50
|
+
(0, logger_js_1.createLogger)(logLevel);
|
|
51
|
+
const logger = (0, logger_js_1.getLogger)();
|
|
52
|
+
logger.info('PartnerCore Proxy starting...');
|
|
53
|
+
// Load configuration
|
|
54
|
+
const config = (0, loader_js_1.loadConfig)();
|
|
55
|
+
// Override workspace if provided
|
|
56
|
+
if (options.workspace) {
|
|
57
|
+
config.al.workspaceRoot = options.workspace;
|
|
58
|
+
}
|
|
59
|
+
// Validate configuration
|
|
60
|
+
const validation = (0, loader_js_1.validateConfig)(config);
|
|
61
|
+
if (!validation.valid) {
|
|
62
|
+
for (const error of validation.errors) {
|
|
63
|
+
logger.warn(`Configuration warning: ${error}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Initialize AL extension
|
|
67
|
+
logger.info('Initializing AL extension...');
|
|
68
|
+
const extensionManager = new extension_manager_js_1.ALExtensionManager(config.al);
|
|
69
|
+
const extensionInfo = await extensionManager.getExtension();
|
|
70
|
+
logger.info(`Using AL extension: ${extensionInfo.version}`);
|
|
71
|
+
// Initialize AL Language Server
|
|
72
|
+
logger.info('Starting AL Language Server...');
|
|
73
|
+
const alServer = new language_server_js_1.ALLanguageServer(extensionInfo, config.al.workspaceRoot);
|
|
74
|
+
await alServer.initialize();
|
|
75
|
+
// Initialize Cloud Client (if enabled)
|
|
76
|
+
let cloudClient;
|
|
77
|
+
if (options.cloud !== false && config.apiKey) {
|
|
78
|
+
logger.info('Connecting to PartnerCore Cloud...');
|
|
79
|
+
cloudClient = new relay_client_js_1.CloudRelayClient({
|
|
80
|
+
cloudUrl: config.cloudUrl,
|
|
81
|
+
apiKey: config.apiKey,
|
|
82
|
+
customerNo: config.customerNo,
|
|
83
|
+
resourceNo: config.resourceNo,
|
|
84
|
+
});
|
|
85
|
+
const connected = await cloudClient.checkConnection();
|
|
86
|
+
if (connected) {
|
|
87
|
+
const subscription = await cloudClient.validateSubscription();
|
|
88
|
+
if (subscription.valid) {
|
|
89
|
+
logger.info(`Cloud connected - Tier: ${subscription.tier || 'default'}`);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
logger.warn('Cloud connection available but API key invalid');
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
logger.warn('Cloud connection unavailable - running in local mode');
|
|
97
|
+
cloudClient = undefined;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
logger.info('Running in local-only mode');
|
|
102
|
+
}
|
|
103
|
+
// Initialize Router with workspace root for security sandboxing
|
|
104
|
+
const router = new tool_router_js_1.ToolRouter(config.al.workspaceRoot);
|
|
105
|
+
router.setALServer(alServer);
|
|
106
|
+
if (cloudClient) {
|
|
107
|
+
router.setCloudClient(cloudClient);
|
|
108
|
+
}
|
|
109
|
+
// Initialize MCP Server
|
|
110
|
+
const server = new server_js_1.PartnerCoreMcpServer(router);
|
|
111
|
+
// Handle shutdown
|
|
112
|
+
const shutdown = async () => {
|
|
113
|
+
logger.info('Shutting down...');
|
|
114
|
+
await server.stop();
|
|
115
|
+
await alServer.shutdown();
|
|
116
|
+
process.exit(0);
|
|
117
|
+
};
|
|
118
|
+
process.on('SIGINT', () => void shutdown());
|
|
119
|
+
process.on('SIGTERM', () => void shutdown());
|
|
120
|
+
// Start server
|
|
121
|
+
await server.start();
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Check configuration and connections
|
|
125
|
+
*/
|
|
126
|
+
async function checkConfiguration() {
|
|
127
|
+
(0, logger_js_1.createLogger)('info');
|
|
128
|
+
const logger = (0, logger_js_1.getLogger)();
|
|
129
|
+
logger.info('Checking PartnerCore Proxy configuration...\n');
|
|
130
|
+
const config = (0, loader_js_1.loadConfig)();
|
|
131
|
+
// Check configuration
|
|
132
|
+
console.log('Configuration:');
|
|
133
|
+
console.log(` Cloud URL: ${config.cloudUrl}`);
|
|
134
|
+
console.log(` API Key: ${config.apiKey ? '(set)' : '(not set)'}`);
|
|
135
|
+
console.log(` Workspace: ${config.al.workspaceRoot}`);
|
|
136
|
+
console.log(` Extension Version: ${config.al.extensionVersion}`);
|
|
137
|
+
console.log();
|
|
138
|
+
// Validate configuration
|
|
139
|
+
const validation = (0, loader_js_1.validateConfig)(config);
|
|
140
|
+
console.log('Validation:');
|
|
141
|
+
if (validation.valid) {
|
|
142
|
+
console.log(' ✓ Configuration valid');
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
for (const error of validation.errors) {
|
|
146
|
+
console.log(` ✗ ${error}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
console.log();
|
|
150
|
+
// Check AL extension
|
|
151
|
+
console.log('AL Extension:');
|
|
152
|
+
const extensionManager = new extension_manager_js_1.ALExtensionManager(config.al);
|
|
153
|
+
try {
|
|
154
|
+
const extensionInfo = await extensionManager.getExtension();
|
|
155
|
+
console.log(` ✓ Found: ${extensionInfo.version}`);
|
|
156
|
+
console.log(` Path: ${extensionInfo.path}`);
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
console.log(` ✗ Not found: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
160
|
+
}
|
|
161
|
+
console.log();
|
|
162
|
+
// Check cloud connection
|
|
163
|
+
console.log('Cloud Connection:');
|
|
164
|
+
if (config.apiKey) {
|
|
165
|
+
const cloudClient = new relay_client_js_1.CloudRelayClient({
|
|
166
|
+
cloudUrl: config.cloudUrl,
|
|
167
|
+
apiKey: config.apiKey,
|
|
168
|
+
customerNo: config.customerNo,
|
|
169
|
+
resourceNo: config.resourceNo,
|
|
170
|
+
});
|
|
171
|
+
const connected = await cloudClient.checkConnection();
|
|
172
|
+
if (connected) {
|
|
173
|
+
const subscription = await cloudClient.validateSubscription();
|
|
174
|
+
console.log(' ✓ Connected');
|
|
175
|
+
console.log(` Tier: ${subscription.tier || 'default'}`);
|
|
176
|
+
if (subscription.features) {
|
|
177
|
+
console.log(` Features: ${subscription.features.join(', ')}`);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
console.log(' ✗ Not connected');
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
console.log(' - No API key configured');
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Download the AL extension
|
|
190
|
+
*/
|
|
191
|
+
async function downloadExtension() {
|
|
192
|
+
(0, logger_js_1.createLogger)('info');
|
|
193
|
+
const logger = (0, logger_js_1.getLogger)();
|
|
194
|
+
logger.info('Downloading AL Language extension...');
|
|
195
|
+
const config = (0, loader_js_1.loadConfig)();
|
|
196
|
+
const extensionManager = new extension_manager_js_1.ALExtensionManager(config.al);
|
|
197
|
+
try {
|
|
198
|
+
const extensionInfo = await extensionManager.getExtension();
|
|
199
|
+
logger.info(`Downloaded: ${extensionInfo.version}`);
|
|
200
|
+
logger.info(`Path: ${extensionInfo.path}`);
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
logger.error('Failed to download extension:', error);
|
|
204
|
+
process.exit(1);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|