higherup 2.1.4 → 2.2.1
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 +1 -13
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +499 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/updater.d.ts +14 -0
- package/dist/cli/updater.d.ts.map +1 -0
- package/dist/cli/updater.js +127 -0
- package/dist/cli/updater.js.map +1 -0
- package/package.json +12 -2
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 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AA6lBH,OAAO,EAAG,CAAC"}
|
|
@@ -0,0 +1,499 @@
|
|
|
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://pltlcpqtivuvyeuywvql.supabase.co/functions/v1/agent-relay';
|
|
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
|
+
bold: chalk.bold,
|
|
32
|
+
};
|
|
33
|
+
// Print welcome banner
|
|
34
|
+
function printBanner() {
|
|
35
|
+
console.log(`
|
|
36
|
+
${colors.title('╔══════════════════════════════════════════════════════════════╗')}
|
|
37
|
+
${colors.title('║')} ${colors.title('║')}
|
|
38
|
+
${colors.title('║')} ${colors.success('🔥 HIGHERUP AGENT')} ${colors.title('║')}
|
|
39
|
+
${colors.title('║')} ${colors.title('║')}
|
|
40
|
+
${colors.title('╚══════════════════════════════════════════════════════════════╝')}
|
|
41
|
+
`);
|
|
42
|
+
}
|
|
43
|
+
// Execute command and get output
|
|
44
|
+
async function execCommand(command, args, cwd) {
|
|
45
|
+
return new Promise((resolve, reject) => {
|
|
46
|
+
const child = spawn(command, args, {
|
|
47
|
+
cwd,
|
|
48
|
+
env: { ...process.env },
|
|
49
|
+
shell: true,
|
|
50
|
+
});
|
|
51
|
+
let stdout = '';
|
|
52
|
+
let stderr = '';
|
|
53
|
+
child.stdout?.on('data', (data) => {
|
|
54
|
+
stdout += data.toString();
|
|
55
|
+
});
|
|
56
|
+
child.stderr?.on('data', (data) => {
|
|
57
|
+
stderr += data.toString();
|
|
58
|
+
});
|
|
59
|
+
child.on('close', (code) => {
|
|
60
|
+
resolve({ stdout, stderr, exitCode: code || 0 });
|
|
61
|
+
});
|
|
62
|
+
child.on('error', (err) => {
|
|
63
|
+
reject(err);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
// Check if a command exists
|
|
68
|
+
async function commandExists(cmd) {
|
|
69
|
+
try {
|
|
70
|
+
await which(cmd);
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Detect workspaces in current directory and parent directories
|
|
78
|
+
async function detectWorkspaces() {
|
|
79
|
+
const workspaces = [];
|
|
80
|
+
const currentDir = process.cwd();
|
|
81
|
+
// Check for common project indicators
|
|
82
|
+
const indicators = [
|
|
83
|
+
'package.json',
|
|
84
|
+
'tsconfig.json',
|
|
85
|
+
'pyproject.toml',
|
|
86
|
+
'Cargo.toml',
|
|
87
|
+
'go.mod',
|
|
88
|
+
'requirements.txt',
|
|
89
|
+
'pom.xml',
|
|
90
|
+
'build.gradle',
|
|
91
|
+
];
|
|
92
|
+
// Check current directory
|
|
93
|
+
let dir = currentDir;
|
|
94
|
+
let depth = 0;
|
|
95
|
+
const maxDepth = 5;
|
|
96
|
+
while (dir !== os.homedir() && depth < maxDepth) {
|
|
97
|
+
const hasIndicator = indicators.some(ind => fs.existsSync(path.join(dir, ind)));
|
|
98
|
+
if (hasIndicator) {
|
|
99
|
+
workspaces.push(dir);
|
|
100
|
+
}
|
|
101
|
+
const parent = path.dirname(dir);
|
|
102
|
+
if (parent === dir)
|
|
103
|
+
break;
|
|
104
|
+
dir = parent;
|
|
105
|
+
depth++;
|
|
106
|
+
}
|
|
107
|
+
return workspaces;
|
|
108
|
+
}
|
|
109
|
+
// Get directory name from path
|
|
110
|
+
function getDirName(dirPath) {
|
|
111
|
+
return path.basename(dirPath);
|
|
112
|
+
}
|
|
113
|
+
// Authenticate with Higherup API
|
|
114
|
+
async function authenticate() {
|
|
115
|
+
console.log(colors.info('To authenticate, please paste your API Token from the Higherup Dashboard.'));
|
|
116
|
+
console.log(colors.dim('You can find it at: https://higherup.ai/dashboard/api\n'));
|
|
117
|
+
const { token } = await inquirer.prompt([
|
|
118
|
+
{
|
|
119
|
+
type: 'password', // Mask input
|
|
120
|
+
name: 'token',
|
|
121
|
+
message: 'Paste your API Token:',
|
|
122
|
+
validate: (input) => {
|
|
123
|
+
if (!input || input.length < 10)
|
|
124
|
+
return 'Please enter a valid API Token';
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
]);
|
|
129
|
+
const spinner = ora('Validating token...').start();
|
|
130
|
+
try {
|
|
131
|
+
const response = await fetch(`${API_BASE}?action=validate-token`, {
|
|
132
|
+
method: 'POST',
|
|
133
|
+
headers: {
|
|
134
|
+
'Content-Type': 'application/json',
|
|
135
|
+
'x-api-token': token
|
|
136
|
+
},
|
|
137
|
+
body: JSON.stringify({}),
|
|
138
|
+
});
|
|
139
|
+
const data = await response.json();
|
|
140
|
+
if (!response.ok || !data.success) {
|
|
141
|
+
spinner.fail('Authentication failed');
|
|
142
|
+
console.log(colors.error(data.error || 'Invalid API Token'));
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
spinner.succeed('Authenticated successfully!');
|
|
146
|
+
return {
|
|
147
|
+
apiToken: token,
|
|
148
|
+
userId: data.user.id,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
spinner.fail('Authentication failed');
|
|
153
|
+
console.log(colors.error(error.message));
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// Get or create workspace
|
|
158
|
+
// Get or create workspace
|
|
159
|
+
async function selectOrCreateWorkspace(apiToken, userId, workspacePath) {
|
|
160
|
+
const spinner = ora('Fetching workspaces...').start();
|
|
161
|
+
try {
|
|
162
|
+
const response = await fetch(`${API_BASE}?action=list-workspaces`, {
|
|
163
|
+
method: "POST",
|
|
164
|
+
headers: {
|
|
165
|
+
'x-api-token': apiToken,
|
|
166
|
+
'Content-Type': 'application/json'
|
|
167
|
+
},
|
|
168
|
+
body: JSON.stringify({})
|
|
169
|
+
});
|
|
170
|
+
const data = await response.json();
|
|
171
|
+
spinner.stop();
|
|
172
|
+
if (!response.ok) {
|
|
173
|
+
console.log(colors.error('Failed to fetch workspaces'));
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
const workspaces = data.workspaces || [];
|
|
177
|
+
const workspaceName = getDirName(workspacePath);
|
|
178
|
+
// Check if workspace already exists
|
|
179
|
+
const existing = workspaces.find((w) => w.path === workspacePath);
|
|
180
|
+
if (existing) {
|
|
181
|
+
console.log(colors.success(`\n✓ Found existing workspace: ${existing.name}\n`));
|
|
182
|
+
return existing.id;
|
|
183
|
+
}
|
|
184
|
+
// Ask to create new workspace
|
|
185
|
+
console.log(colors.info(`\nDetected workspace: ${workspaceName}`));
|
|
186
|
+
console.log(colors.dim(`Path: ${workspacePath}\n`));
|
|
187
|
+
const { create } = await inquirer.prompt([
|
|
188
|
+
{
|
|
189
|
+
type: 'confirm',
|
|
190
|
+
name: 'create',
|
|
191
|
+
message: 'Do you want to add this workspace to Higherup?',
|
|
192
|
+
default: true,
|
|
193
|
+
},
|
|
194
|
+
]);
|
|
195
|
+
if (!create) {
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
const createSpinner = ora('Creating workspace...').start();
|
|
199
|
+
const createResponse = await fetch(`${API_BASE}?action=create-workspace`, {
|
|
200
|
+
method: 'POST',
|
|
201
|
+
headers: {
|
|
202
|
+
'x-api-token': apiToken,
|
|
203
|
+
'Content-Type': 'application/json',
|
|
204
|
+
},
|
|
205
|
+
body: JSON.stringify({
|
|
206
|
+
name: workspaceName,
|
|
207
|
+
path: workspacePath,
|
|
208
|
+
platform: detectPlatform(),
|
|
209
|
+
}),
|
|
210
|
+
});
|
|
211
|
+
const createData = await createResponse.json();
|
|
212
|
+
if (!createResponse.ok) {
|
|
213
|
+
createSpinner.fail('Failed to create workspace');
|
|
214
|
+
console.log(colors.error(createData.error));
|
|
215
|
+
return null;
|
|
216
|
+
}
|
|
217
|
+
createSpinner.succeed('Workspace created!');
|
|
218
|
+
return createData.workspace.id;
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
spinner.fail('Failed to fetch workspaces');
|
|
222
|
+
console.log(colors.error(error.message));
|
|
223
|
+
return null;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// Detect current platform
|
|
227
|
+
function detectPlatform() {
|
|
228
|
+
const platform = process.platform;
|
|
229
|
+
if (platform === 'darwin')
|
|
230
|
+
return 'macOS';
|
|
231
|
+
if (platform === 'win32')
|
|
232
|
+
return 'Windows';
|
|
233
|
+
return 'Linux';
|
|
234
|
+
}
|
|
235
|
+
// Run command in workspace
|
|
236
|
+
async function runCommand(apiToken, workspaceId, command) {
|
|
237
|
+
const spinner = ora(`Executing: ${command}`).start();
|
|
238
|
+
try {
|
|
239
|
+
const response = await fetch(`${API_BASE}?action=queue-command`, {
|
|
240
|
+
method: 'POST',
|
|
241
|
+
headers: {
|
|
242
|
+
'x-api-token': apiToken,
|
|
243
|
+
'Content-Type': 'application/json',
|
|
244
|
+
},
|
|
245
|
+
body: JSON.stringify({
|
|
246
|
+
workspace_id: workspaceId,
|
|
247
|
+
command,
|
|
248
|
+
}),
|
|
249
|
+
});
|
|
250
|
+
const data = await response.json();
|
|
251
|
+
if (!response.ok) {
|
|
252
|
+
spinner.fail('Command failed');
|
|
253
|
+
console.log(colors.error(data.error));
|
|
254
|
+
return null;
|
|
255
|
+
}
|
|
256
|
+
// For local agent, we just queued it. The agent running nearby will pick it up.
|
|
257
|
+
// Or, if THIS CLI is running as a one-off, we might want to poll for result?
|
|
258
|
+
// "One-command setup and management" vs "Run a command".
|
|
259
|
+
// If the agent daemon is running, it will execute.
|
|
260
|
+
// Ideally we'd poll for result here.
|
|
261
|
+
spinner.text = 'Command queued. Waiting for execution...';
|
|
262
|
+
// Poll for result?
|
|
263
|
+
// Implementing a simple poll loop for 10 seconds
|
|
264
|
+
const commandId = data.command.id;
|
|
265
|
+
let attempts = 0;
|
|
266
|
+
while (attempts < 20) {
|
|
267
|
+
await new Promise(r => setTimeout(r, 1000));
|
|
268
|
+
// We can't poll "commands" status easily without an endpoint.
|
|
269
|
+
// But `agent-relay` doesn't expose "get command status" action.
|
|
270
|
+
// It's "poll" (for agent) or "result" (from agent).
|
|
271
|
+
// User cannot check status easily via relay unless we add 'get-command-status' action.
|
|
272
|
+
// For now, let's just say queued.
|
|
273
|
+
attempts++;
|
|
274
|
+
}
|
|
275
|
+
spinner.succeed('Command queued for execution');
|
|
276
|
+
return data;
|
|
277
|
+
}
|
|
278
|
+
catch (error) {
|
|
279
|
+
spinner.fail('Command execution failed');
|
|
280
|
+
console.log(colors.error(error.message));
|
|
281
|
+
return null;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
// Global answers
|
|
285
|
+
let answers = {};
|
|
286
|
+
// Main setup flow
|
|
287
|
+
async function setup() {
|
|
288
|
+
printBanner();
|
|
289
|
+
// Step 1: Authentication
|
|
290
|
+
console.log(colors.info('\n📋 Step 1: Authentication\n'));
|
|
291
|
+
// Authenticate (Ask for token directly)
|
|
292
|
+
const authResult = await authenticate();
|
|
293
|
+
if (!authResult) {
|
|
294
|
+
process.exit(1);
|
|
295
|
+
}
|
|
296
|
+
// Store token
|
|
297
|
+
answers.apiToken = authResult.apiToken;
|
|
298
|
+
answers.userId = authResult.userId;
|
|
299
|
+
// Step 2: Workspace selection
|
|
300
|
+
console.log(colors.info('\n📂 Step 2: Workspace Selection\n'));
|
|
301
|
+
const detected = await detectWorkspaces();
|
|
302
|
+
if (detected.length === 0) {
|
|
303
|
+
console.log(colors.warning('No project workspaces detected.'));
|
|
304
|
+
console.log(colors.dim('You are in: ' + process.cwd() + '\n'));
|
|
305
|
+
const { customPath } = await inquirer.prompt([
|
|
306
|
+
{
|
|
307
|
+
type: 'input',
|
|
308
|
+
name: 'customPath',
|
|
309
|
+
message: 'Enter workspace path:',
|
|
310
|
+
default: process.cwd(),
|
|
311
|
+
},
|
|
312
|
+
]);
|
|
313
|
+
const workspaceId = await selectOrCreateWorkspace(authResult.apiToken, authResult.userId, customPath);
|
|
314
|
+
if (!workspaceId) {
|
|
315
|
+
console.log(colors.error('Setup cancelled'));
|
|
316
|
+
process.exit(1);
|
|
317
|
+
}
|
|
318
|
+
answers.apiToken = authResult.apiToken;
|
|
319
|
+
answers.workspaceId = workspaceId;
|
|
320
|
+
answers.workspacePath = customPath;
|
|
321
|
+
}
|
|
322
|
+
else if (detected.length === 1) {
|
|
323
|
+
console.log(colors.success('✓ Detected 1 workspace:'));
|
|
324
|
+
console.log(colors.dim(` ${detected[0]}\n`));
|
|
325
|
+
const workspaceId = await selectOrCreateWorkspace(authResult.apiToken, authResult.userId, detected[0]);
|
|
326
|
+
if (!workspaceId) {
|
|
327
|
+
console.log(colors.error('Setup cancelled'));
|
|
328
|
+
process.exit(1);
|
|
329
|
+
}
|
|
330
|
+
answers.apiToken = authResult.apiToken;
|
|
331
|
+
answers.workspaceId = workspaceId;
|
|
332
|
+
answers.workspacePath = detected[0];
|
|
333
|
+
}
|
|
334
|
+
else {
|
|
335
|
+
console.log(colors.success(`✓ Detected ${detected.length} workspaces:\n`));
|
|
336
|
+
detected.forEach((dir, i) => {
|
|
337
|
+
console.log(colors.dim(` ${i + 1}. ${dir}`));
|
|
338
|
+
});
|
|
339
|
+
const { selectedIndex } = await inquirer.prompt([
|
|
340
|
+
{
|
|
341
|
+
type: 'list',
|
|
342
|
+
name: 'selectedIndex',
|
|
343
|
+
message: 'Select a workspace:',
|
|
344
|
+
choices: detected.map((dir, i) => ({
|
|
345
|
+
name: `${getDirName(dir)} (${dir})`,
|
|
346
|
+
value: i,
|
|
347
|
+
})),
|
|
348
|
+
},
|
|
349
|
+
]);
|
|
350
|
+
const selected = detected[selectedIndex];
|
|
351
|
+
const workspaceId = await selectOrCreateWorkspace(authResult.apiToken, authResult.userId, selected);
|
|
352
|
+
if (!workspaceId) {
|
|
353
|
+
console.log(colors.error('Setup cancelled'));
|
|
354
|
+
process.exit(1);
|
|
355
|
+
}
|
|
356
|
+
answers.apiToken = authResult.apiToken;
|
|
357
|
+
answers.workspaceId = workspaceId;
|
|
358
|
+
answers.workspacePath = selected;
|
|
359
|
+
}
|
|
360
|
+
// Step 3: Verify setup
|
|
361
|
+
console.log(colors.info('\n✅ Step 3: Verification\n'));
|
|
362
|
+
const testCommand = await inquirer.prompt([
|
|
363
|
+
{
|
|
364
|
+
type: 'input',
|
|
365
|
+
name: 'command',
|
|
366
|
+
message: 'Enter a test command to verify setup:',
|
|
367
|
+
default: 'pwd',
|
|
368
|
+
},
|
|
369
|
+
]);
|
|
370
|
+
await runCommand(answers.apiToken, answers.workspaceId, testCommand.command);
|
|
371
|
+
// Step 4: Save configuration
|
|
372
|
+
console.log(colors.info('\n💾 Step 4: Save Configuration\n'));
|
|
373
|
+
const { saveConfig } = await inquirer.prompt([
|
|
374
|
+
{
|
|
375
|
+
type: 'confirm',
|
|
376
|
+
name: 'saveConfig',
|
|
377
|
+
message: 'Save configuration for future use?',
|
|
378
|
+
default: true,
|
|
379
|
+
},
|
|
380
|
+
]);
|
|
381
|
+
if (saveConfig) {
|
|
382
|
+
const configPath = path.join(os.homedir(), '.higherup.json');
|
|
383
|
+
const config = {
|
|
384
|
+
email: answers.email,
|
|
385
|
+
apiToken: answers.apiToken,
|
|
386
|
+
userId: authResult.userId,
|
|
387
|
+
workspaceId: answers.workspaceId,
|
|
388
|
+
workspacePath: answers.workspacePath,
|
|
389
|
+
};
|
|
390
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
391
|
+
console.log(colors.success(`✓ Configuration saved to ${configPath}\n`));
|
|
392
|
+
}
|
|
393
|
+
// Done
|
|
394
|
+
console.log(colors.success('╔══════════════════════════════════════════════════════════════╗'));
|
|
395
|
+
console.log(colors.success('║ ║'));
|
|
396
|
+
console.log(colors.success('║ ✅ SETUP COMPLETE! ║'));
|
|
397
|
+
console.log(colors.success('║ ║'));
|
|
398
|
+
console.log(colors.success('╚══════════════════════════════════════════════════════════════╝\n'));
|
|
399
|
+
console.log(colors.info('You can now:'));
|
|
400
|
+
console.log(colors.dim(' • Run commands from AI platforms'));
|
|
401
|
+
console.log(colors.dim(' • Execute: higherup run "<command>"'));
|
|
402
|
+
console.log(colors.dim(' • Execute: higherup exec'));
|
|
403
|
+
console.log(colors.dim(' • View: higherup status\n'));
|
|
404
|
+
}
|
|
405
|
+
// Load configuration from file
|
|
406
|
+
function loadConfig() {
|
|
407
|
+
try {
|
|
408
|
+
const configPath = path.join(os.homedir(), '.higherup.json');
|
|
409
|
+
const content = fs.readFileSync(configPath, 'utf-8');
|
|
410
|
+
return JSON.parse(content);
|
|
411
|
+
}
|
|
412
|
+
catch {
|
|
413
|
+
return null;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
// Run a command
|
|
417
|
+
async function run(args) {
|
|
418
|
+
const config = loadConfig();
|
|
419
|
+
if (!config) {
|
|
420
|
+
console.log(colors.error('No configuration found. Run "higherup setup" first.'));
|
|
421
|
+
process.exit(1);
|
|
422
|
+
}
|
|
423
|
+
const command = args.join(' ');
|
|
424
|
+
if (!command) {
|
|
425
|
+
console.log(colors.error('Please provide a command to run'));
|
|
426
|
+
console.log(colors.dim('Usage: higherup run "<command>"\n'));
|
|
427
|
+
process.exit(1);
|
|
428
|
+
}
|
|
429
|
+
await runCommand(config.apiToken, config.workspaceId, command);
|
|
430
|
+
}
|
|
431
|
+
// Status command
|
|
432
|
+
async function status() {
|
|
433
|
+
const config = loadConfig();
|
|
434
|
+
if (!config) {
|
|
435
|
+
console.log(colors.error('No configuration found. Run "higherup setup" first.'));
|
|
436
|
+
process.exit(1);
|
|
437
|
+
}
|
|
438
|
+
console.log(colors.title('\n📊 Higherup Status\n'));
|
|
439
|
+
console.log(colors.dim('User: '), config.email);
|
|
440
|
+
console.log(colors.dim('Workspace: '), getDirName(config.workspacePath));
|
|
441
|
+
console.log(colors.dim('Path: '), config.workspacePath);
|
|
442
|
+
console.log(colors.dim('Platform: '), detectPlatform());
|
|
443
|
+
console.log(colors.dim('Workspace ID: '), config.workspaceId);
|
|
444
|
+
console.log('');
|
|
445
|
+
}
|
|
446
|
+
// Check for updates on startup (non-blocking)
|
|
447
|
+
if (shouldCheckForUpdates()) {
|
|
448
|
+
checkForUpdates().then(updateInfo => {
|
|
449
|
+
if (updateInfo.hasUpdate) {
|
|
450
|
+
showUpdateNotification(updateInfo);
|
|
451
|
+
}
|
|
452
|
+
}).catch(() => { });
|
|
453
|
+
}
|
|
454
|
+
// Main CLI
|
|
455
|
+
const args = process.argv.slice(2);
|
|
456
|
+
const command = args[0];
|
|
457
|
+
switch (command) {
|
|
458
|
+
case 'setup':
|
|
459
|
+
case undefined:
|
|
460
|
+
await setup();
|
|
461
|
+
break;
|
|
462
|
+
case 'run':
|
|
463
|
+
await run(args.slice(1));
|
|
464
|
+
break;
|
|
465
|
+
case 'status':
|
|
466
|
+
await status();
|
|
467
|
+
break;
|
|
468
|
+
case 'version':
|
|
469
|
+
case '-v':
|
|
470
|
+
case '--version':
|
|
471
|
+
case '-V':
|
|
472
|
+
console.log(colors.title(`\nHigherUp Agent v${VERSION}\n`));
|
|
473
|
+
console.log(colors.dim('Platform:'), detectPlatform());
|
|
474
|
+
console.log(colors.dim('Node: '), process.version);
|
|
475
|
+
console.log('');
|
|
476
|
+
// Check for updates
|
|
477
|
+
const updateInfo = await checkForUpdates();
|
|
478
|
+
if (updateInfo.hasUpdate) {
|
|
479
|
+
console.log(colors.yellow(`⚠ Update available: ${updateInfo.latestVersion}`));
|
|
480
|
+
console.log(colors.dim('Run: higherup update\n'));
|
|
481
|
+
}
|
|
482
|
+
else {
|
|
483
|
+
console.log(colors.success('✓ You\'re on the latest version\n'));
|
|
484
|
+
}
|
|
485
|
+
break;
|
|
486
|
+
case 'update':
|
|
487
|
+
await performUpdate();
|
|
488
|
+
break;
|
|
489
|
+
default:
|
|
490
|
+
console.log(colors.error(`Unknown command: ${command}\n`));
|
|
491
|
+
console.log(colors.info('Available commands:'));
|
|
492
|
+
console.log(colors.dim(' higherup setup - Interactive setup'));
|
|
493
|
+
console.log(colors.dim(' higherup run <cmd> - Run a command'));
|
|
494
|
+
console.log(colors.dim(' higherup status - Show status'));
|
|
495
|
+
console.log(colors.dim(' higherup version - Show version'));
|
|
496
|
+
console.log(colors.dim(' higherup update - Update to latest version\n'));
|
|
497
|
+
process.exit(1);
|
|
498
|
+
}
|
|
499
|
+
//# 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
|
+
"version": "2.2.1",
|
|
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,12 +50,22 @@
|
|
|
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
|
-
"
|
|
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"
|