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.
Files changed (73) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/LICENSE +22 -0
  3. package/README.md +234 -0
  4. package/dist/al/extension-manager.d.ts +52 -0
  5. package/dist/al/extension-manager.d.ts.map +1 -0
  6. package/dist/al/extension-manager.js +348 -0
  7. package/dist/al/extension-manager.js.map +1 -0
  8. package/dist/al/index.d.ts +3 -0
  9. package/dist/al/index.d.ts.map +1 -0
  10. package/dist/al/index.js +19 -0
  11. package/dist/al/index.js.map +1 -0
  12. package/dist/al/language-server.d.ts +134 -0
  13. package/dist/al/language-server.d.ts.map +1 -0
  14. package/dist/al/language-server.js +431 -0
  15. package/dist/al/language-server.js.map +1 -0
  16. package/dist/cli.d.ts +8 -0
  17. package/dist/cli.d.ts.map +1 -0
  18. package/dist/cli.js +207 -0
  19. package/dist/cli.js.map +1 -0
  20. package/dist/cloud/index.d.ts +2 -0
  21. package/dist/cloud/index.d.ts.map +1 -0
  22. package/dist/cloud/index.js +18 -0
  23. package/dist/cloud/index.js.map +1 -0
  24. package/dist/cloud/relay-client.d.ts +84 -0
  25. package/dist/cloud/relay-client.d.ts.map +1 -0
  26. package/dist/cloud/relay-client.js +211 -0
  27. package/dist/cloud/relay-client.js.map +1 -0
  28. package/dist/config/index.d.ts +3 -0
  29. package/dist/config/index.d.ts.map +1 -0
  30. package/dist/config/index.js +19 -0
  31. package/dist/config/index.js.map +1 -0
  32. package/dist/config/loader.d.ts +20 -0
  33. package/dist/config/loader.d.ts.map +1 -0
  34. package/dist/config/loader.js +136 -0
  35. package/dist/config/loader.js.map +1 -0
  36. package/dist/config/types.d.ts +51 -0
  37. package/dist/config/types.d.ts.map +1 -0
  38. package/dist/config/types.js +33 -0
  39. package/dist/config/types.js.map +1 -0
  40. package/dist/index.d.ts +13 -0
  41. package/dist/index.d.ts.map +1 -0
  42. package/dist/index.js +29 -0
  43. package/dist/index.js.map +1 -0
  44. package/dist/mcp/index.d.ts +2 -0
  45. package/dist/mcp/index.d.ts.map +1 -0
  46. package/dist/mcp/index.js +18 -0
  47. package/dist/mcp/index.js.map +1 -0
  48. package/dist/mcp/server.d.ts +33 -0
  49. package/dist/mcp/server.d.ts.map +1 -0
  50. package/dist/mcp/server.js +98 -0
  51. package/dist/mcp/server.js.map +1 -0
  52. package/dist/router/index.d.ts +2 -0
  53. package/dist/router/index.d.ts.map +1 -0
  54. package/dist/router/index.js +18 -0
  55. package/dist/router/index.js.map +1 -0
  56. package/dist/router/tool-router.d.ts +87 -0
  57. package/dist/router/tool-router.d.ts.map +1 -0
  58. package/dist/router/tool-router.js +557 -0
  59. package/dist/router/tool-router.js.map +1 -0
  60. package/dist/utils/index.d.ts +3 -0
  61. package/dist/utils/index.d.ts.map +1 -0
  62. package/dist/utils/index.js +19 -0
  63. package/dist/utils/index.js.map +1 -0
  64. package/dist/utils/logger.d.ts +20 -0
  65. package/dist/utils/logger.d.ts.map +1 -0
  66. package/dist/utils/logger.js +99 -0
  67. package/dist/utils/logger.js.map +1 -0
  68. package/dist/utils/security.d.ts +66 -0
  69. package/dist/utils/security.d.ts.map +1 -0
  70. package/dist/utils/security.js +358 -0
  71. package/dist/utils/security.js.map +1 -0
  72. package/mcp.json +125 -0
  73. 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,8 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * PartnerCore Proxy CLI
4
+ *
5
+ * Command-line interface for starting and managing the proxy server.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=cli.d.ts.map
@@ -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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}