nexusforge-cli 1.0.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/bin/nexusforge ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import('../dist/index.js');
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * NexusForge CLI
4
+ *
5
+ * AI-powered development companion for your terminal.
6
+ * Like Claude Code, but for NexusForge.
7
+ *
8
+ * Usage:
9
+ * nexusforge - Start interactive chat
10
+ * nexusforge login - Authenticate with browser
11
+ * nexusforge logout - Clear credentials
12
+ * nexusforge status - Check connection status
13
+ * nexusforge --session X - Sync with web session
14
+ * nexusforge --help - Show help
15
+ */
16
+ export {};
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;GAaG"}
package/dist/index.js ADDED
@@ -0,0 +1,367 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * NexusForge CLI
4
+ *
5
+ * AI-powered development companion for your terminal.
6
+ * Like Claude Code, but for NexusForge.
7
+ *
8
+ * Usage:
9
+ * nexusforge - Start interactive chat
10
+ * nexusforge login - Authenticate with browser
11
+ * nexusforge logout - Clear credentials
12
+ * nexusforge status - Check connection status
13
+ * nexusforge --session X - Sync with web session
14
+ * nexusforge --help - Show help
15
+ */
16
+ import { Command } from 'commander';
17
+ import * as readline from 'readline';
18
+ import * as config from './utils/config.js';
19
+ import { displayWelcome, displayUserMessage, displayAssistantMessage, displaySystemMessage, style } from './utils/theme.js';
20
+ import { startDeviceAuth, logout, checkAuth, getCurrentUser } from './services/auth.js';
21
+ import * as api from './services/api.js';
22
+ import * as executor from './services/executor.js';
23
+ const VERSION = '1.0.0';
24
+ // Current conversation state
25
+ let conversationId;
26
+ let messages = [];
27
+ // Create CLI program
28
+ const program = new Command();
29
+ program
30
+ .name('nexusforge')
31
+ .description('NexusForge CLI - AI-powered development companion')
32
+ .version(VERSION);
33
+ // Login command
34
+ program
35
+ .command('login')
36
+ .description('Authenticate with NexusForge via browser')
37
+ .action(async () => {
38
+ const success = await startDeviceAuth();
39
+ process.exit(success ? 0 : 1);
40
+ });
41
+ // Logout command
42
+ program
43
+ .command('logout')
44
+ .description('Clear saved credentials')
45
+ .action(() => {
46
+ logout();
47
+ process.exit(0);
48
+ });
49
+ // Status command
50
+ program
51
+ .command('status')
52
+ .description('Check connection and authentication status')
53
+ .action(async () => {
54
+ console.log('');
55
+ console.log(style.assistant('NexusForge CLI Status'));
56
+ console.log(style.divider());
57
+ console.log('');
58
+ // Check auth
59
+ const isAuth = await checkAuth();
60
+ const user = getCurrentUser();
61
+ if (isAuth && user) {
62
+ displaySystemMessage(`Authenticated as: ${user.username}`, 'success');
63
+ }
64
+ else if (config.isAuthenticated()) {
65
+ displaySystemMessage('Token may be expired. Run "nexusforge login" to re-authenticate.', 'warning');
66
+ }
67
+ else {
68
+ displaySystemMessage('Not authenticated. Run "nexusforge login" to authenticate.', 'warning');
69
+ }
70
+ // Check API health
71
+ const isHealthy = await api.checkHealth();
72
+ if (isHealthy) {
73
+ displaySystemMessage(`API: ${config.getApiUrl()} (healthy)`, 'success');
74
+ }
75
+ else {
76
+ displaySystemMessage(`API: ${config.getApiUrl()} (unreachable)`, 'error');
77
+ }
78
+ console.log('');
79
+ console.log(style.muted(`Config file: ${config.getConfigPath()}`));
80
+ console.log('');
81
+ process.exit(0);
82
+ });
83
+ // Main command (interactive chat)
84
+ program
85
+ .option('-s, --session <token>', 'Sync with a web session token')
86
+ .option('-m, --model <name>', 'Use a specific model')
87
+ .option('--cwd <path>', 'Set working directory')
88
+ .action(async (options) => {
89
+ // Change working directory if specified
90
+ if (options.cwd) {
91
+ if (!executor.changeCwd(options.cwd)) {
92
+ displaySystemMessage(`Cannot change to directory: ${options.cwd}`, 'error');
93
+ process.exit(1);
94
+ }
95
+ }
96
+ // Check authentication
97
+ if (!config.isAuthenticated()) {
98
+ displaySystemMessage('Not authenticated. Starting login...', 'info');
99
+ const success = await startDeviceAuth();
100
+ if (!success) {
101
+ process.exit(1);
102
+ }
103
+ }
104
+ // Sync with web session if provided
105
+ if (options.session) {
106
+ try {
107
+ displaySystemMessage('Syncing with web session...', 'info');
108
+ const session = await api.getSessionStatus(options.session);
109
+ conversationId = session.conversation_id;
110
+ displaySystemMessage(`Synced with conversation: ${conversationId}`, 'success');
111
+ }
112
+ catch (error) {
113
+ displaySystemMessage('Failed to sync with session. Starting fresh.', 'warning');
114
+ }
115
+ }
116
+ // Display welcome screen
117
+ const user = getCurrentUser();
118
+ displayWelcome(VERSION, config.getApiUrl(), options.model || config.get('defaultModel') || 'NexusForge');
119
+ if (user?.username) {
120
+ displaySystemMessage(`Logged in as ${user.username}`, 'success');
121
+ }
122
+ // Start interactive loop
123
+ await startInteractiveChat(options.model);
124
+ });
125
+ // Parse arguments
126
+ program.parse();
127
+ /**
128
+ * Start the interactive chat loop
129
+ */
130
+ async function startInteractiveChat(model) {
131
+ const rl = readline.createInterface({
132
+ input: process.stdin,
133
+ output: process.stdout,
134
+ });
135
+ const promptUser = () => {
136
+ rl.question(`${style.userLabel('You')} ${style.prompt('❯')} `, async (input) => {
137
+ const trimmedInput = input.trim();
138
+ if (!trimmedInput) {
139
+ promptUser();
140
+ return;
141
+ }
142
+ // Handle slash commands
143
+ if (trimmedInput.startsWith('/')) {
144
+ await handleSlashCommand(trimmedInput, rl);
145
+ promptUser();
146
+ return;
147
+ }
148
+ // Send message to AI
149
+ try {
150
+ console.log('');
151
+ process.stdout.write(`${style.assistantLabel('NexusForge')} ${style.prompt('❯')} `);
152
+ // Stream response
153
+ let fullResponse = '';
154
+ for await (const chunk of api.streamMessage(trimmedInput, conversationId, model)) {
155
+ process.stdout.write(style.assistant(chunk));
156
+ fullResponse += chunk;
157
+ }
158
+ console.log('\n');
159
+ // Store messages
160
+ messages.push({ role: 'user', content: trimmedInput });
161
+ messages.push({ role: 'assistant', content: fullResponse });
162
+ // Check for executable commands in response
163
+ const commands = executor.parseCommandsFromResponse(fullResponse);
164
+ if (commands.length > 0 && config.get('autoExecute')) {
165
+ await promptToExecuteCommands(commands, rl);
166
+ }
167
+ }
168
+ catch (error) {
169
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
170
+ displaySystemMessage(`Error: ${errorMessage}`, 'error');
171
+ }
172
+ promptUser();
173
+ });
174
+ };
175
+ promptUser();
176
+ }
177
+ /**
178
+ * Handle slash commands
179
+ */
180
+ async function handleSlashCommand(input, rl) {
181
+ const parts = input.slice(1).split(/\s+/);
182
+ const command = parts[0].toLowerCase();
183
+ const args = parts.slice(1);
184
+ switch (command) {
185
+ case 'help':
186
+ case 'h':
187
+ displayHelp();
188
+ break;
189
+ case 'exit':
190
+ case 'quit':
191
+ case 'q':
192
+ console.log('');
193
+ displaySystemMessage('Goodbye!', 'info');
194
+ rl.close();
195
+ process.exit(0);
196
+ case 'clear':
197
+ case 'c':
198
+ console.clear();
199
+ displayWelcome(VERSION, config.getApiUrl(), config.get('defaultModel') || 'NexusForge');
200
+ break;
201
+ case 'history':
202
+ displayHistory();
203
+ break;
204
+ case 'resume':
205
+ await resumeConversation(args[0]);
206
+ break;
207
+ case 'model':
208
+ if (args[0]) {
209
+ config.set('defaultModel', args[0]);
210
+ displaySystemMessage(`Model set to: ${args[0]}`, 'success');
211
+ }
212
+ else {
213
+ displaySystemMessage(`Current model: ${config.get('defaultModel')}`, 'info');
214
+ }
215
+ break;
216
+ case 'status':
217
+ await displayStatus();
218
+ break;
219
+ case 'read':
220
+ if (args[0]) {
221
+ await readFile(args[0]);
222
+ }
223
+ else {
224
+ displaySystemMessage('Usage: /read <file_path>', 'warning');
225
+ }
226
+ break;
227
+ case 'exec':
228
+ case 'run':
229
+ if (args.length > 0) {
230
+ const cmd = args.join(' ');
231
+ const result = await executor.executeCommandStream(cmd, undefined, (data) => process.stdout.write(data), (data) => process.stderr.write(style.error(data)));
232
+ executor.displayCommandResult(result);
233
+ }
234
+ else {
235
+ displaySystemMessage('Usage: /exec <command>', 'warning');
236
+ }
237
+ break;
238
+ default:
239
+ displaySystemMessage(`Unknown command: /${command}. Type /help for available commands.`, 'warning');
240
+ }
241
+ }
242
+ /**
243
+ * Display help
244
+ */
245
+ function displayHelp() {
246
+ console.log('');
247
+ console.log(style.assistant('Available Commands:'));
248
+ console.log(style.divider());
249
+ console.log('');
250
+ console.log(` ${style.prompt('/help, /h')} - Show this help`);
251
+ console.log(` ${style.prompt('/exit, /q')} - Exit CLI`);
252
+ console.log(` ${style.prompt('/clear, /c')} - Clear screen`);
253
+ console.log(` ${style.prompt('/history')} - Show conversation history`);
254
+ console.log(` ${style.prompt('/resume [id]')} - Resume a previous conversation`);
255
+ console.log(` ${style.prompt('/model [name]')} - Get or set the model`);
256
+ console.log(` ${style.prompt('/status')} - Show connection status`);
257
+ console.log(` ${style.prompt('/read <path>')} - Read a file into context`);
258
+ console.log(` ${style.prompt('/exec <cmd>')} - Execute a shell command`);
259
+ console.log('');
260
+ console.log(style.muted('Just type your message to chat with NexusForge!'));
261
+ console.log('');
262
+ }
263
+ /**
264
+ * Display conversation history
265
+ */
266
+ function displayHistory() {
267
+ console.log('');
268
+ if (messages.length === 0) {
269
+ displaySystemMessage('No messages in current conversation.', 'info');
270
+ return;
271
+ }
272
+ console.log(style.assistant('Conversation History:'));
273
+ console.log(style.divider());
274
+ console.log('');
275
+ for (const msg of messages) {
276
+ if (msg.role === 'user') {
277
+ displayUserMessage(msg.content);
278
+ }
279
+ else {
280
+ displayAssistantMessage(msg.content.substring(0, 200) + (msg.content.length > 200 ? '...' : ''));
281
+ }
282
+ }
283
+ }
284
+ /**
285
+ * Resume a previous conversation
286
+ */
287
+ async function resumeConversation(id) {
288
+ displaySystemMessage('Resume functionality coming soon!', 'info');
289
+ }
290
+ /**
291
+ * Display current status
292
+ */
293
+ async function displayStatus() {
294
+ console.log('');
295
+ const user = getCurrentUser();
296
+ displaySystemMessage(`User: ${user?.username || 'Unknown'}`, 'info');
297
+ displaySystemMessage(`API: ${config.getApiUrl()}`, 'info');
298
+ displaySystemMessage(`Model: ${config.get('defaultModel')}`, 'info');
299
+ displaySystemMessage(`Conversation: ${conversationId || 'New'}`, 'info');
300
+ displaySystemMessage(`Messages: ${messages.length}`, 'info');
301
+ displaySystemMessage(`CWD: ${executor.getCwd()}`, 'info');
302
+ console.log('');
303
+ }
304
+ /**
305
+ * Read a file and display it
306
+ */
307
+ async function readFile(path) {
308
+ const fs = await import('fs/promises');
309
+ try {
310
+ const content = await fs.readFile(path, 'utf-8');
311
+ console.log('');
312
+ console.log(style.muted(`--- ${path} ---`));
313
+ console.log(style.code(content));
314
+ console.log(style.muted(`--- end ${path} ---`));
315
+ console.log('');
316
+ displaySystemMessage(`File "${path}" added to context.`, 'success');
317
+ }
318
+ catch (error) {
319
+ displaySystemMessage(`Cannot read file: ${path}`, 'error');
320
+ }
321
+ }
322
+ /**
323
+ * Prompt user to execute detected commands
324
+ */
325
+ async function promptToExecuteCommands(commands, rl) {
326
+ console.log('');
327
+ displaySystemMessage(`Found ${commands.length} command(s) in response:`, 'info');
328
+ for (let i = 0; i < commands.length; i++) {
329
+ console.log(style.muted(` ${i + 1}. ${commands[i]}`));
330
+ }
331
+ console.log('');
332
+ return new Promise((resolve) => {
333
+ rl.question(`${style.prompt('Execute these commands? [y/N/1-n]: ')}`, async (answer) => {
334
+ const trimmed = answer.trim().toLowerCase();
335
+ if (trimmed === 'y' || trimmed === 'yes') {
336
+ // Execute all commands
337
+ for (const cmd of commands) {
338
+ if (executor.isDangerous(cmd)) {
339
+ displaySystemMessage(`Skipping dangerous command: ${cmd}`, 'warning');
340
+ continue;
341
+ }
342
+ const result = await executor.executeCommandStream(cmd, undefined, (data) => process.stdout.write(data), (data) => process.stderr.write(style.error(data)));
343
+ if (result.exitCode !== 0) {
344
+ displaySystemMessage(`Command failed with exit code ${result.exitCode}`, 'error');
345
+ break;
346
+ }
347
+ }
348
+ }
349
+ else if (/^\d+$/.test(trimmed)) {
350
+ // Execute specific command
351
+ const index = parseInt(trimmed, 10) - 1;
352
+ if (index >= 0 && index < commands.length) {
353
+ const cmd = commands[index];
354
+ if (executor.isDangerous(cmd)) {
355
+ displaySystemMessage(`Cannot execute dangerous command`, 'error');
356
+ }
357
+ else {
358
+ const result = await executor.executeCommandStream(cmd, undefined, (data) => process.stdout.write(data), (data) => process.stderr.write(style.error(data)));
359
+ executor.displayCommandResult(result);
360
+ }
361
+ }
362
+ }
363
+ resolve();
364
+ });
365
+ });
366
+ }
367
+ //# 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,51 @@
1
+ /**
2
+ * NexusForge CLI API Service
3
+ *
4
+ * Handles all API communication with NexusConnectBridge backend.
5
+ */
6
+ import type { ChatMessage, ChatResponse, CLISession, FileContext } from '../types/index.js';
7
+ /**
8
+ * Send a chat message and get response
9
+ */
10
+ export declare function sendMessage(message: string, conversationId?: string, model?: string, fileContext?: FileContext[]): Promise<ChatResponse>;
11
+ /**
12
+ * Stream a chat message response
13
+ */
14
+ export declare function streamMessage(message: string, conversationId?: string, model?: string, fileContext?: FileContext[]): AsyncGenerator<string, void, unknown>;
15
+ /**
16
+ * Create a new CLI session
17
+ */
18
+ export declare function createSession(conversationId?: string, workingDirectory?: string): Promise<CLISession>;
19
+ /**
20
+ * Get session status
21
+ */
22
+ export declare function getSessionStatus(sessionToken: string): Promise<CLISession>;
23
+ /**
24
+ * Log a command execution
25
+ */
26
+ export declare function logCommandExecution(data: {
27
+ command: string;
28
+ workingDirectory: string;
29
+ exitCode?: number;
30
+ output?: string;
31
+ duration?: number;
32
+ }): Promise<void>;
33
+ /**
34
+ * Sync conversation from web
35
+ */
36
+ export declare function syncConversation(conversationId: string, sinceMessageId?: string): Promise<{
37
+ conversation_id: string;
38
+ title?: string;
39
+ model: string;
40
+ messages: ChatMessage[];
41
+ has_more: boolean;
42
+ }>;
43
+ /**
44
+ * Get available models
45
+ */
46
+ export declare function getModels(): Promise<string[]>;
47
+ /**
48
+ * Check API health
49
+ */
50
+ export declare function checkHealth(): Promise<boolean>;
51
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/services/api.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,UAAU,EACV,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAkC3B;;GAEG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,MAAM,EACvB,KAAK,CAAC,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,WAAW,EAAE,GAC1B,OAAO,CAAC,YAAY,CAAC,CAUvB;AAED;;GAEG;AACH,wBAAuB,aAAa,CAClC,OAAO,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,MAAM,EACvB,KAAK,CAAC,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,WAAW,EAAE,GAC1B,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAmCvC;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,cAAc,CAAC,EAAE,MAAM,EACvB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,UAAU,CAAC,CAQrB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAEhF;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CAWhB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,cAAc,EAAE,MAAM,EACtB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC;IACT,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC,CAQD;AAED;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAGnD;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAQpD"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * NexusForge CLI API Service
3
+ *
4
+ * Handles all API communication with NexusConnectBridge backend.
5
+ */
6
+ import * as config from '../utils/config.js';
7
+ /**
8
+ * Make an authenticated API request
9
+ */
10
+ async function apiRequest(endpoint, options = {}) {
11
+ const apiUrl = config.getApiUrl();
12
+ const token = config.getAccessToken();
13
+ const headers = {
14
+ 'Content-Type': 'application/json',
15
+ ...(options.headers || {}),
16
+ };
17
+ if (token) {
18
+ headers['Authorization'] = `Bearer ${token}`;
19
+ }
20
+ const response = await fetch(`${apiUrl}${endpoint}`, {
21
+ ...options,
22
+ headers,
23
+ });
24
+ if (!response.ok) {
25
+ const errorText = await response.text();
26
+ throw new Error(`API error (${response.status}): ${errorText}`);
27
+ }
28
+ return response.json();
29
+ }
30
+ /**
31
+ * Send a chat message and get response
32
+ */
33
+ export async function sendMessage(message, conversationId, model, fileContext) {
34
+ return apiRequest('/cli/chat', {
35
+ method: 'POST',
36
+ body: JSON.stringify({
37
+ message,
38
+ conversation_id: conversationId,
39
+ model,
40
+ file_context: fileContext,
41
+ }),
42
+ });
43
+ }
44
+ /**
45
+ * Stream a chat message response
46
+ */
47
+ export async function* streamMessage(message, conversationId, model, fileContext) {
48
+ const apiUrl = config.getApiUrl();
49
+ const token = config.getAccessToken();
50
+ const response = await fetch(`${apiUrl}/ai/chat/stream`, {
51
+ method: 'POST',
52
+ headers: {
53
+ 'Content-Type': 'application/json',
54
+ Authorization: token ? `Bearer ${token}` : '',
55
+ },
56
+ body: JSON.stringify({
57
+ message,
58
+ conversation_id: conversationId,
59
+ model,
60
+ }),
61
+ });
62
+ if (!response.ok) {
63
+ throw new Error(`API error: ${response.statusText}`);
64
+ }
65
+ const reader = response.body?.getReader();
66
+ if (!reader) {
67
+ throw new Error('No response body');
68
+ }
69
+ const decoder = new TextDecoder();
70
+ while (true) {
71
+ const { done, value } = await reader.read();
72
+ if (done)
73
+ break;
74
+ const chunk = decoder.decode(value, { stream: true });
75
+ yield chunk;
76
+ }
77
+ }
78
+ /**
79
+ * Create a new CLI session
80
+ */
81
+ export async function createSession(conversationId, workingDirectory) {
82
+ return apiRequest('/cli/sessions', {
83
+ method: 'POST',
84
+ body: JSON.stringify({
85
+ conversation_id: conversationId,
86
+ working_directory: workingDirectory,
87
+ }),
88
+ });
89
+ }
90
+ /**
91
+ * Get session status
92
+ */
93
+ export async function getSessionStatus(sessionToken) {
94
+ return apiRequest(`/cli/sessions/${sessionToken}`);
95
+ }
96
+ /**
97
+ * Log a command execution
98
+ */
99
+ export async function logCommandExecution(data) {
100
+ await apiRequest('/cli/execute', {
101
+ method: 'POST',
102
+ body: JSON.stringify({
103
+ command: data.command,
104
+ working_directory: data.workingDirectory,
105
+ exit_code: data.exitCode,
106
+ output: data.output,
107
+ duration_ms: data.duration,
108
+ }),
109
+ });
110
+ }
111
+ /**
112
+ * Sync conversation from web
113
+ */
114
+ export async function syncConversation(conversationId, sinceMessageId) {
115
+ return apiRequest('/cli/sync', {
116
+ method: 'POST',
117
+ body: JSON.stringify({
118
+ conversation_id: conversationId,
119
+ since_message_id: sinceMessageId,
120
+ }),
121
+ });
122
+ }
123
+ /**
124
+ * Get available models
125
+ */
126
+ export async function getModels() {
127
+ const response = await apiRequest('/ai/models');
128
+ return response.models.map((m) => m.name);
129
+ }
130
+ /**
131
+ * Check API health
132
+ */
133
+ export async function checkHealth() {
134
+ try {
135
+ const apiUrl = config.getApiUrl();
136
+ const response = await fetch(`${apiUrl.replace('/api/v1/bridge', '')}/health`);
137
+ return response.ok;
138
+ }
139
+ catch {
140
+ return false;
141
+ }
142
+ }
143
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/services/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * NexusForge CLI Authentication Service
3
+ *
4
+ * Handles device authorization flow (like Claude Code):
5
+ * 1. CLI requests device code
6
+ * 2. CLI displays verification URL
7
+ * 3. User opens URL in browser and authorizes
8
+ * 4. CLI polls for authorization
9
+ * 5. CLI saves token on success
10
+ */
11
+ /**
12
+ * Start the device authorization flow
13
+ */
14
+ export declare function startDeviceAuth(): Promise<boolean>;
15
+ /**
16
+ * Check if current token is valid
17
+ */
18
+ export declare function checkAuth(): Promise<boolean>;
19
+ /**
20
+ * Logout - clear stored credentials
21
+ */
22
+ export declare function logout(): void;
23
+ /**
24
+ * Get current user info
25
+ */
26
+ export declare function getCurrentUser(): {
27
+ username?: string;
28
+ email?: string;
29
+ } | null;
30
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/services/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAWH;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAyExD;AAwED;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAqBlD;AAED;;GAEG;AACH,wBAAgB,MAAM,IAAI,IAAI,CAG7B;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAS7E"}