higherup 2.1.3 → 2.2.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/higherup.js CHANGED
@@ -1,14 +1,2 @@
1
1
  #!/usr/bin/env node
2
-
3
- /**
4
- * Higherup CLI Entry Point
5
- * This file is the npm package binary entry point
6
- */
7
-
8
- import('../dist/agent.js').catch((err) => {
9
- console.error('Failed to load Higherup agent:', err.message);
10
- console.error('');
11
- console.error('If you are developing locally, run: npm run dev');
12
- console.error('Otherwise, make sure to build first: npm run build');
13
- process.exit(1);
14
- });
2
+ import '../dist/cli/index.js';
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Higherup Agent - Interactive CLI
3
+ *
4
+ * One-command setup and management for Higherup
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AA0kBH,OAAO,EAAG,CAAC"}
@@ -0,0 +1,481 @@
1
+ /**
2
+ * Higherup Agent - Interactive CLI
3
+ *
4
+ * One-command setup and management for Higherup
5
+ */
6
+ import chalk from 'chalk';
7
+ import ora from 'ora';
8
+ import inquirer from 'inquirer';
9
+ import which from 'which';
10
+ import { spawn } from 'child_process';
11
+ import * as path from 'path';
12
+ import * as os from 'os';
13
+ import * as fs from 'fs';
14
+ import { VERSION, checkForUpdates, showUpdateNotification, performUpdate, shouldCheckForUpdates } from './updater.js';
15
+ const API_BASE = process.env.HIGHERUP_API_URL || 'https://higherup.ai';
16
+ // Color configuration
17
+ const colors = {
18
+ success: chalk.green,
19
+ error: chalk.red,
20
+ info: chalk.cyan,
21
+ warning: chalk.yellow,
22
+ command: chalk.magenta,
23
+ dim: chalk.gray,
24
+ title: chalk.bold.cyan,
25
+ yellow: chalk.yellow,
26
+ green: chalk.green,
27
+ red: chalk.red,
28
+ cyan: chalk.cyan,
29
+ blue: chalk.blue,
30
+ gray: chalk.gray,
31
+ };
32
+ // Print welcome banner
33
+ function printBanner() {
34
+ console.log(`
35
+ ${colors.title('╔══════════════════════════════════════════════════════════════╗')}
36
+ ${colors.title('║')} ${colors.title('║')}
37
+ ${colors.title('║')} ${colors.success('🔥 HIGHERUP AGENT')} ${colors.title('║')}
38
+ ${colors.title('║')} ${colors.title('║')}
39
+ ${colors.title('╚══════════════════════════════════════════════════════════════╝')}
40
+ `);
41
+ }
42
+ // Execute command and get output
43
+ async function execCommand(command, args, cwd) {
44
+ return new Promise((resolve, reject) => {
45
+ const child = spawn(command, args, {
46
+ cwd,
47
+ env: { ...process.env },
48
+ shell: true,
49
+ });
50
+ let stdout = '';
51
+ let stderr = '';
52
+ child.stdout?.on('data', (data) => {
53
+ stdout += data.toString();
54
+ });
55
+ child.stderr?.on('data', (data) => {
56
+ stderr += data.toString();
57
+ });
58
+ child.on('close', (code) => {
59
+ resolve({ stdout, stderr, exitCode: code || 0 });
60
+ });
61
+ child.on('error', (err) => {
62
+ reject(err);
63
+ });
64
+ });
65
+ }
66
+ // Check if a command exists
67
+ async function commandExists(cmd) {
68
+ try {
69
+ await which(cmd);
70
+ return true;
71
+ }
72
+ catch {
73
+ return false;
74
+ }
75
+ }
76
+ // Detect workspaces in current directory and parent directories
77
+ async function detectWorkspaces() {
78
+ const workspaces = [];
79
+ const currentDir = process.cwd();
80
+ // Check for common project indicators
81
+ const indicators = [
82
+ 'package.json',
83
+ 'tsconfig.json',
84
+ 'pyproject.toml',
85
+ 'Cargo.toml',
86
+ 'go.mod',
87
+ 'requirements.txt',
88
+ 'pom.xml',
89
+ 'build.gradle',
90
+ ];
91
+ // Check current directory
92
+ let dir = currentDir;
93
+ let depth = 0;
94
+ const maxDepth = 5;
95
+ while (dir !== os.homedir() && depth < maxDepth) {
96
+ const hasIndicator = indicators.some(ind => fs.existsSync(path.join(dir, ind)));
97
+ if (hasIndicator) {
98
+ workspaces.push(dir);
99
+ }
100
+ const parent = path.dirname(dir);
101
+ if (parent === dir)
102
+ break;
103
+ dir = parent;
104
+ depth++;
105
+ }
106
+ return workspaces;
107
+ }
108
+ // Get directory name from path
109
+ function getDirName(dirPath) {
110
+ return path.basename(dirPath);
111
+ }
112
+ // Authenticate with Higherup API
113
+ async function authenticate() {
114
+ const spinner = ora('Authenticating with Higherup...').start();
115
+ try {
116
+ const response = await fetch(`${API_BASE}/api/auth`, {
117
+ method: 'POST',
118
+ headers: { 'Content-Type': 'application/json' },
119
+ body: JSON.stringify({
120
+ email: answers.email,
121
+ name: answers.name,
122
+ }),
123
+ });
124
+ const data = await response.json();
125
+ if (!response.ok) {
126
+ spinner.fail('Authentication failed');
127
+ console.log(colors.error(data.error || 'Unknown error'));
128
+ return null;
129
+ }
130
+ spinner.succeed('Authenticated successfully!');
131
+ console.log(colors.dim(`\nYour API Token: ${data.user.apiToken}\n`));
132
+ return {
133
+ apiToken: data.user.apiToken,
134
+ userId: data.user.id,
135
+ };
136
+ }
137
+ catch (error) {
138
+ spinner.fail('Authentication failed');
139
+ console.log(colors.error(error.message));
140
+ return null;
141
+ }
142
+ }
143
+ // Get or create workspace
144
+ async function selectOrCreateWorkspace(apiToken, userId, workspacePath) {
145
+ const spinner = ora('Fetching workspaces...').start();
146
+ try {
147
+ const response = await fetch(`${API_BASE}/api/workspace`, {
148
+ headers: {
149
+ 'Authorization': `Bearer ${apiToken}`,
150
+ },
151
+ });
152
+ const data = await response.json();
153
+ spinner.stop();
154
+ if (!response.ok) {
155
+ console.log(colors.error('Failed to fetch workspaces'));
156
+ return null;
157
+ }
158
+ const workspaces = data.workspaces || [];
159
+ const workspaceName = getDirName(workspacePath);
160
+ // Check if workspace already exists
161
+ const existing = workspaces.find((w) => w.path === workspacePath);
162
+ if (existing) {
163
+ console.log(colors.success(`\n✓ Found existing workspace: ${existing.name}\n`));
164
+ return existing.id;
165
+ }
166
+ // Ask to create new workspace
167
+ console.log(colors.info(`\nDetected workspace: ${workspaceName}`));
168
+ console.log(colors.dim(`Path: ${workspacePath}\n`));
169
+ const { create } = await inquirer.prompt([
170
+ {
171
+ type: 'confirm',
172
+ name: 'create',
173
+ message: 'Do you want to add this workspace to Higherup?',
174
+ default: true,
175
+ },
176
+ ]);
177
+ if (!create) {
178
+ return null;
179
+ }
180
+ const createSpinner = ora('Creating workspace...').start();
181
+ const createResponse = await fetch(`${API_BASE}/api/workspace`, {
182
+ method: 'POST',
183
+ headers: {
184
+ 'Authorization': `Bearer ${apiToken}`,
185
+ 'Content-Type': 'application/json',
186
+ },
187
+ body: JSON.stringify({
188
+ name: workspaceName,
189
+ path: workspacePath,
190
+ platform: detectPlatform(),
191
+ }),
192
+ });
193
+ const createData = await createResponse.json();
194
+ if (!createResponse.ok) {
195
+ createSpinner.fail('Failed to create workspace');
196
+ console.log(colors.error(createData.error));
197
+ return null;
198
+ }
199
+ createSpinner.succeed('Workspace created!');
200
+ return createData.workspace.id;
201
+ }
202
+ catch (error) {
203
+ spinner.fail('Failed to fetch workspaces');
204
+ console.log(colors.error(error.message));
205
+ return null;
206
+ }
207
+ }
208
+ // Detect current platform
209
+ function detectPlatform() {
210
+ const platform = process.platform;
211
+ if (platform === 'darwin')
212
+ return 'macOS';
213
+ if (platform === 'win32')
214
+ return 'Windows';
215
+ return 'Linux';
216
+ }
217
+ // Run command in workspace
218
+ async function runCommand(apiToken, workspaceId, command) {
219
+ const spinner = ora(`Executing: ${command}`).start();
220
+ try {
221
+ const response = await fetch(`${API_BASE}/api/command`, {
222
+ method: 'POST',
223
+ headers: {
224
+ 'Authorization': `Bearer ${apiToken}`,
225
+ 'Content-Type': 'application/json',
226
+ },
227
+ body: JSON.stringify({
228
+ workspaceId,
229
+ command,
230
+ }),
231
+ });
232
+ const data = await response.json();
233
+ spinner.stop();
234
+ if (!response.ok) {
235
+ console.log(colors.error(data.error));
236
+ return null;
237
+ }
238
+ if (data.output) {
239
+ console.log(data.output);
240
+ }
241
+ console.log(colors.dim(`\nExit code: ${data.exitCode} | Duration: ${data.duration}ms\n`));
242
+ return data;
243
+ }
244
+ catch (error) {
245
+ spinner.fail('Command execution failed');
246
+ console.log(colors.error(error.message));
247
+ return null;
248
+ }
249
+ }
250
+ // Global answers
251
+ let answers = {};
252
+ // Main setup flow
253
+ async function setup() {
254
+ printBanner();
255
+ // Step 1: Authentication
256
+ console.log(colors.info('\n📋 Step 1: Authentication\n'));
257
+ const authAnswers = await inquirer.prompt([
258
+ {
259
+ type: 'input',
260
+ name: 'email',
261
+ message: 'Enter your email:',
262
+ validate: (input) => {
263
+ if (!input.includes('@')) {
264
+ return 'Please enter a valid email';
265
+ }
266
+ return true;
267
+ },
268
+ },
269
+ {
270
+ type: 'input',
271
+ name: 'name',
272
+ message: 'Enter your name (optional):',
273
+ },
274
+ ]);
275
+ answers = { ...answers, ...authAnswers };
276
+ // Authenticate
277
+ const authResult = await authenticate();
278
+ if (!authResult) {
279
+ process.exit(1);
280
+ }
281
+ // Step 2: Workspace selection
282
+ console.log(colors.info('\n📂 Step 2: Workspace Selection\n'));
283
+ const detected = await detectWorkspaces();
284
+ if (detected.length === 0) {
285
+ console.log(colors.warning('No project workspaces detected.'));
286
+ console.log(colors.dim('You are in: ' + process.cwd() + '\n'));
287
+ const { customPath } = await inquirer.prompt([
288
+ {
289
+ type: 'input',
290
+ name: 'customPath',
291
+ message: 'Enter workspace path:',
292
+ default: process.cwd(),
293
+ },
294
+ ]);
295
+ const workspaceId = await selectOrCreateWorkspace(authResult.apiToken, authResult.userId, customPath);
296
+ if (!workspaceId) {
297
+ console.log(colors.error('Setup cancelled'));
298
+ process.exit(1);
299
+ }
300
+ answers.apiToken = authResult.apiToken;
301
+ answers.workspaceId = workspaceId;
302
+ answers.workspacePath = customPath;
303
+ }
304
+ else if (detected.length === 1) {
305
+ console.log(colors.success('✓ Detected 1 workspace:'));
306
+ console.log(colors.dim(` ${detected[0]}\n`));
307
+ const workspaceId = await selectOrCreateWorkspace(authResult.apiToken, authResult.userId, detected[0]);
308
+ if (!workspaceId) {
309
+ console.log(colors.error('Setup cancelled'));
310
+ process.exit(1);
311
+ }
312
+ answers.apiToken = authResult.apiToken;
313
+ answers.workspaceId = workspaceId;
314
+ answers.workspacePath = detected[0];
315
+ }
316
+ else {
317
+ console.log(colors.success(`✓ Detected ${detected.length} workspaces:\n`));
318
+ detected.forEach((dir, i) => {
319
+ console.log(colors.dim(` ${i + 1}. ${dir}`));
320
+ });
321
+ const { selectedIndex } = await inquirer.prompt([
322
+ {
323
+ type: 'list',
324
+ name: 'selectedIndex',
325
+ message: 'Select a workspace:',
326
+ choices: detected.map((dir, i) => ({
327
+ name: `${getDirName(dir)} (${dir})`,
328
+ value: i,
329
+ })),
330
+ },
331
+ ]);
332
+ const selected = detected[selectedIndex];
333
+ const workspaceId = await selectOrCreateWorkspace(authResult.apiToken, authResult.userId, selected);
334
+ if (!workspaceId) {
335
+ console.log(colors.error('Setup cancelled'));
336
+ process.exit(1);
337
+ }
338
+ answers.apiToken = authResult.apiToken;
339
+ answers.workspaceId = workspaceId;
340
+ answers.workspacePath = selected;
341
+ }
342
+ // Step 3: Verify setup
343
+ console.log(colors.info('\n✅ Step 3: Verification\n'));
344
+ const testCommand = await inquirer.prompt([
345
+ {
346
+ type: 'input',
347
+ name: 'command',
348
+ message: 'Enter a test command to verify setup:',
349
+ default: 'pwd',
350
+ },
351
+ ]);
352
+ await runCommand(answers.apiToken, answers.workspaceId, testCommand.command);
353
+ // Step 4: Save configuration
354
+ console.log(colors.info('\n💾 Step 4: Save Configuration\n'));
355
+ const { saveConfig } = await inquirer.prompt([
356
+ {
357
+ type: 'confirm',
358
+ name: 'saveConfig',
359
+ message: 'Save configuration for future use?',
360
+ default: true,
361
+ },
362
+ ]);
363
+ if (saveConfig) {
364
+ const configPath = path.join(os.homedir(), '.higherup.json');
365
+ const config = {
366
+ email: answers.email,
367
+ apiToken: answers.apiToken,
368
+ userId: authResult.userId,
369
+ workspaceId: answers.workspaceId,
370
+ workspacePath: answers.workspacePath,
371
+ };
372
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
373
+ console.log(colors.success(`✓ Configuration saved to ${configPath}\n`));
374
+ }
375
+ // Done
376
+ console.log(colors.success('╔══════════════════════════════════════════════════════════════╗'));
377
+ console.log(colors.success('║ ║'));
378
+ console.log(colors.success('║ ✅ SETUP COMPLETE! ║'));
379
+ console.log(colors.success('║ ║'));
380
+ console.log(colors.success('╚══════════════════════════════════════════════════════════════╝\n'));
381
+ console.log(colors.info('You can now:'));
382
+ console.log(colors.dim(' • Run commands from AI platforms'));
383
+ console.log(colors.dim(' • Execute: higherup run "<command>"'));
384
+ console.log(colors.dim(' • Execute: higherup exec'));
385
+ console.log(colors.dim(' • View: higherup status\n'));
386
+ }
387
+ // Load configuration from file
388
+ function loadConfig() {
389
+ try {
390
+ const configPath = path.join(os.homedir(), '.higherup.json');
391
+ const content = fs.readFileSync(configPath, 'utf-8');
392
+ return JSON.parse(content);
393
+ }
394
+ catch {
395
+ return null;
396
+ }
397
+ }
398
+ // Run a command
399
+ async function run(args) {
400
+ const config = loadConfig();
401
+ if (!config) {
402
+ console.log(colors.error('No configuration found. Run "higherup setup" first.'));
403
+ process.exit(1);
404
+ }
405
+ const command = args.join(' ');
406
+ if (!command) {
407
+ console.log(colors.error('Please provide a command to run'));
408
+ console.log(colors.dim('Usage: higherup run "<command>"\n'));
409
+ process.exit(1);
410
+ }
411
+ await runCommand(config.apiToken, config.workspaceId, command);
412
+ }
413
+ // Status command
414
+ async function status() {
415
+ const config = loadConfig();
416
+ if (!config) {
417
+ console.log(colors.error('No configuration found. Run "higherup setup" first.'));
418
+ process.exit(1);
419
+ }
420
+ console.log(colors.title('\n📊 Higherup Status\n'));
421
+ console.log(colors.dim('User: '), config.email);
422
+ console.log(colors.dim('Workspace: '), getDirName(config.workspacePath));
423
+ console.log(colors.dim('Path: '), config.workspacePath);
424
+ console.log(colors.dim('Platform: '), detectPlatform());
425
+ console.log(colors.dim('Workspace ID: '), config.workspaceId);
426
+ console.log('');
427
+ }
428
+ // Check for updates on startup (non-blocking)
429
+ if (shouldCheckForUpdates()) {
430
+ checkForUpdates().then(updateInfo => {
431
+ if (updateInfo.hasUpdate) {
432
+ showUpdateNotification(updateInfo);
433
+ }
434
+ }).catch(() => { });
435
+ }
436
+ // Main CLI
437
+ const args = process.argv.slice(2);
438
+ const command = args[0];
439
+ switch (command) {
440
+ case 'setup':
441
+ case undefined:
442
+ await setup();
443
+ break;
444
+ case 'run':
445
+ await run(args.slice(1));
446
+ break;
447
+ case 'status':
448
+ await status();
449
+ break;
450
+ case 'version':
451
+ case '-v':
452
+ case '--version':
453
+ case '-V':
454
+ console.log(colors.title(`\nHigherUp Agent v${VERSION}\n`));
455
+ console.log(colors.dim('Platform:'), detectPlatform());
456
+ console.log(colors.dim('Node: '), process.version);
457
+ console.log('');
458
+ // Check for updates
459
+ const updateInfo = await checkForUpdates();
460
+ if (updateInfo.hasUpdate) {
461
+ console.log(colors.yellow(`⚠ Update available: ${updateInfo.latestVersion}`));
462
+ console.log(colors.dim('Run: higherup update\n'));
463
+ }
464
+ else {
465
+ console.log(colors.success('✓ You\'re on the latest version\n'));
466
+ }
467
+ break;
468
+ case 'update':
469
+ await performUpdate();
470
+ break;
471
+ default:
472
+ console.log(colors.error(`Unknown command: ${command}\n`));
473
+ console.log(colors.info('Available commands:'));
474
+ console.log(colors.dim(' higherup setup - Interactive setup'));
475
+ console.log(colors.dim(' higherup run <cmd> - Run a command'));
476
+ console.log(colors.dim(' higherup status - Show status'));
477
+ console.log(colors.dim(' higherup version - Show version'));
478
+ console.log(colors.dim(' higherup update - Update to latest version\n'));
479
+ process.exit(1);
480
+ }
481
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export declare function getVersion(): string;
2
+ export declare const VERSION: string;
3
+ interface UpdateInfo {
4
+ hasUpdate: boolean;
5
+ latestVersion: string;
6
+ currentVersion: string;
7
+ updateAvailable?: boolean;
8
+ }
9
+ export declare function checkForUpdates(): Promise<UpdateInfo>;
10
+ export declare function showUpdateNotification(updateInfo: UpdateInfo): void;
11
+ export declare function performUpdate(): Promise<boolean>;
12
+ export declare function shouldCheckForUpdates(): boolean;
13
+ export {};
14
+ //# sourceMappingURL=updater.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updater.d.ts","sourceRoot":"","sources":["../../src/cli/updater.ts"],"names":[],"mappings":"AAaA,wBAAgB,UAAU,IAAI,MAAM,CAQnC;AAED,eAAO,MAAM,OAAO,QAAe,CAAC;AAEpC,UAAU,UAAU;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B;AAGD,wBAAsB,eAAe,IAAI,OAAO,CAAC,UAAU,CAAC,CAyB3D;AAGD,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,UAAU,QAe5D;AAGD,wBAAsB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CA6CtD;AAGD,wBAAgB,qBAAqB,IAAI,OAAO,CAqB/C"}
@@ -0,0 +1,127 @@
1
+ import { readFileSync, existsSync, writeFileSync } from 'fs';
2
+ import { join, dirname } from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ import { homedir } from 'os';
5
+ import axios from 'axios';
6
+ import semver from 'semver';
7
+ import chalk from 'chalk';
8
+ import ora from 'ora';
9
+ const __filename = fileURLToPath(import.meta.url);
10
+ const __dirname = dirname(__filename);
11
+ // Read version from package.json
12
+ export function getVersion() {
13
+ try {
14
+ const packagePath = join(__dirname, '../../package.json');
15
+ const packageJson = JSON.parse(readFileSync(packagePath, 'utf-8'));
16
+ return packageJson.version;
17
+ }
18
+ catch (error) {
19
+ return 'unknown';
20
+ }
21
+ }
22
+ export const VERSION = getVersion();
23
+ // Check for updates from npm registry
24
+ export async function checkForUpdates() {
25
+ const currentVersion = VERSION;
26
+ try {
27
+ const response = await axios.get('https://registry.npmjs.org/higherup/latest', {
28
+ timeout: 3000
29
+ });
30
+ const latestVersion = response.data.version;
31
+ const hasUpdate = semver.gt(latestVersion, currentVersion);
32
+ return {
33
+ hasUpdate,
34
+ latestVersion,
35
+ currentVersion,
36
+ updateAvailable: hasUpdate
37
+ };
38
+ }
39
+ catch (error) {
40
+ // Silently fail if can't check for updates
41
+ return {
42
+ hasUpdate: false,
43
+ latestVersion: currentVersion,
44
+ currentVersion
45
+ };
46
+ }
47
+ }
48
+ // Show update notification
49
+ export function showUpdateNotification(updateInfo) {
50
+ if (!updateInfo.hasUpdate)
51
+ return;
52
+ console.log('');
53
+ console.log(chalk.yellow('╔══════════════════════════════════════════════════════════════╗'));
54
+ console.log(chalk.yellow('║') + ' ' + chalk.yellow('║'));
55
+ console.log(chalk.yellow('║') + ' ' + chalk.bold('📦 Update Available!') + ' ' + chalk.yellow('║'));
56
+ console.log(chalk.yellow('║') + ' ' + chalk.yellow('║'));
57
+ console.log(chalk.yellow('║') + ' ' + chalk.dim(`Current: ${updateInfo.currentVersion}`) + ' ' + chalk.yellow('║'));
58
+ console.log(chalk.yellow('║') + ' ' + chalk.green(`Latest: ${updateInfo.latestVersion}`) + ' ' + chalk.yellow('║'));
59
+ console.log(chalk.yellow('║') + ' ' + chalk.yellow('║'));
60
+ console.log(chalk.yellow('║') + ' ' + chalk.cyan('Run: npm install -g higherup@latest') + ' ' + chalk.yellow('║'));
61
+ console.log(chalk.yellow('║') + ' ' + chalk.yellow('║'));
62
+ console.log(chalk.yellow('╚══════════════════════════════════════════════════════════════╝'));
63
+ console.log('');
64
+ }
65
+ // Perform update
66
+ export async function performUpdate() {
67
+ const spinner = ora('Checking for updates...').start();
68
+ try {
69
+ const updateInfo = await checkForUpdates();
70
+ if (!updateInfo.hasUpdate) {
71
+ spinner.succeed(`You're already on the latest version (${updateInfo.currentVersion})`);
72
+ return true;
73
+ }
74
+ spinner.text = `Updating from ${updateInfo.currentVersion} to ${updateInfo.latestVersion}...`;
75
+ // Use npm to update
76
+ const { spawn } = await import('child_process');
77
+ return new Promise((resolve) => {
78
+ const updateProcess = spawn('npm', ['install', '-g', 'higherup@latest'], {
79
+ stdio: 'inherit',
80
+ shell: true
81
+ });
82
+ updateProcess.on('close', (code) => {
83
+ if (code === 0) {
84
+ spinner.succeed(`Successfully updated to version ${updateInfo.latestVersion}!`);
85
+ console.log(chalk.green('\n✓ Update complete! Please restart your terminal.\n'));
86
+ resolve(true);
87
+ }
88
+ else {
89
+ spinner.fail('Update failed');
90
+ console.log(chalk.red('\n✗ Update failed. Please try manually: npm install -g higherup-agent@latest\n'));
91
+ resolve(false);
92
+ }
93
+ });
94
+ updateProcess.on('error', (error) => {
95
+ spinner.fail('Update failed');
96
+ console.log(chalk.red(`\n✗ Error: ${error.message}\n`));
97
+ resolve(false);
98
+ });
99
+ });
100
+ }
101
+ catch (error) {
102
+ spinner.fail('Update check failed');
103
+ console.log(chalk.red(`\n✗ Error: ${error.message}\n`));
104
+ return false;
105
+ }
106
+ }
107
+ // Check if should check for updates (once per day)
108
+ export function shouldCheckForUpdates() {
109
+ try {
110
+ const updateCheckFile = join(homedir(), '.higherup-update-check');
111
+ if (!existsSync(updateCheckFile)) {
112
+ writeFileSync(updateCheckFile, Date.now().toString());
113
+ return true;
114
+ }
115
+ const lastCheck = parseInt(readFileSync(updateCheckFile, 'utf-8'));
116
+ const dayInMs = 24 * 60 * 60 * 1000;
117
+ if (Date.now() - lastCheck > dayInMs) {
118
+ writeFileSync(updateCheckFile, Date.now().toString());
119
+ return true;
120
+ }
121
+ return false;
122
+ }
123
+ catch {
124
+ return false;
125
+ }
126
+ }
127
+ //# sourceMappingURL=updater.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updater.js","sourceRoot":"","sources":["../../src/cli/updater.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "higherup",
3
- "version": "2.1.3",
3
+ "version": "2.2.0",
4
4
  "type": "module",
5
5
  "description": "Give AI agents full access to your development machine - command execution, file operations, screen capture, and autonomous mode",
6
6
  "main": "dist/agent.js",
@@ -50,14 +50,24 @@
50
50
  },
51
51
  "dependencies": {
52
52
  "@modelcontextprotocol/sdk": "^1.25.1",
53
+ "axios": "^1.6.0",
53
54
  "chalk": "^5.4.1",
54
55
  "commander": "^12.1.0",
55
- "ora": "^8.1.0"
56
+ "inquirer": "^9.3.6",
57
+ "node-fetch": "^3.3.2",
58
+ "ora": "^8.1.0",
59
+ "semver": "^7.5.4",
60
+ "update-notifier": "^7.0.0",
61
+ "which": "^4.0.0"
56
62
  },
57
63
  "devDependencies": {
64
+ "@types/inquirer": "^9.0.9",
58
65
  "@types/node": "^20.17.9",
66
+ "@types/semver": "^7.7.1",
67
+ "@types/update-notifier": "^6.0.8",
68
+ "@types/which": "^3.0.4",
59
69
  "tsx": "^4.19.0",
60
70
  "typescript": "^5.6.0",
61
71
  "vitest": "^4.0.16"
62
72
  }
63
- }
73
+ }