minivibe 0.2.1 → 0.2.3
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/agent/agent.js +21 -0
- package/package.json +1 -1
- package/vibe.js +27 -10
package/agent/agent.js
CHANGED
|
@@ -1340,10 +1340,12 @@ ${colors.cyan}${colors.bold}vibe-agent${colors.reset} - Persistent daemon for re
|
|
|
1340
1340
|
${colors.bold}Usage:${colors.reset}
|
|
1341
1341
|
vibe-agent Start agent daemon
|
|
1342
1342
|
vibe-agent --login Sign in with Google (one-time)
|
|
1343
|
+
vibe-agent --logout Sign out and clear credentials
|
|
1343
1344
|
vibe-agent --status Show agent status
|
|
1344
1345
|
|
|
1345
1346
|
${colors.bold}Options:${colors.reset}
|
|
1346
1347
|
--login Sign in via device code flow
|
|
1348
|
+
--logout Sign out and clear saved credentials
|
|
1347
1349
|
--name <name> Set host display name
|
|
1348
1350
|
--status Show current status and exit
|
|
1349
1351
|
--help, -h Show this help
|
|
@@ -1365,6 +1367,7 @@ function parseArgs() {
|
|
|
1365
1367
|
bridge: null,
|
|
1366
1368
|
token: null,
|
|
1367
1369
|
login: false,
|
|
1370
|
+
logout: false,
|
|
1368
1371
|
name: null,
|
|
1369
1372
|
status: false,
|
|
1370
1373
|
help: false
|
|
@@ -1382,6 +1385,9 @@ function parseArgs() {
|
|
|
1382
1385
|
case '--login':
|
|
1383
1386
|
options.login = true;
|
|
1384
1387
|
break;
|
|
1388
|
+
case '--logout':
|
|
1389
|
+
options.logout = true;
|
|
1390
|
+
break;
|
|
1385
1391
|
case '--name':
|
|
1386
1392
|
options.name = args[++i];
|
|
1387
1393
|
break;
|
|
@@ -1443,6 +1449,21 @@ async function main() {
|
|
|
1443
1449
|
process.exit(0);
|
|
1444
1450
|
}
|
|
1445
1451
|
|
|
1452
|
+
// Logout flow
|
|
1453
|
+
if (options.logout) {
|
|
1454
|
+
try {
|
|
1455
|
+
if (fs.existsSync(AUTH_FILE)) {
|
|
1456
|
+
fs.unlinkSync(AUTH_FILE);
|
|
1457
|
+
log('Logged out successfully', colors.green);
|
|
1458
|
+
} else {
|
|
1459
|
+
log('Not logged in', colors.yellow);
|
|
1460
|
+
}
|
|
1461
|
+
} catch (err) {
|
|
1462
|
+
log(`Logout failed: ${err.message}`, colors.red);
|
|
1463
|
+
}
|
|
1464
|
+
process.exit(0);
|
|
1465
|
+
}
|
|
1466
|
+
|
|
1446
1467
|
// Login flow
|
|
1447
1468
|
if (options.login) {
|
|
1448
1469
|
const httpUrl = bridgeUrl.replace('wss://', 'https://').replace('ws://', 'http://');
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "minivibe",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.3",
|
|
4
4
|
"description": "CLI wrapper for Claude Code with mobile remote control via MiniVibe iOS app",
|
|
5
5
|
"author": "MiniVibe <hello@minivibeapp.com>",
|
|
6
6
|
"homepage": "https://github.com/minivibeapp/minivibe",
|
package/vibe.js
CHANGED
|
@@ -316,9 +316,6 @@ async function startLoginFlow(openBrowser = true) {
|
|
|
316
316
|
}
|
|
317
317
|
}
|
|
318
318
|
|
|
319
|
-
// Default bridge URL for headless login
|
|
320
|
-
const DEFAULT_BRIDGE_URL = 'wss://ws.minivibeapp.com';
|
|
321
|
-
|
|
322
319
|
// Production web app URL for device pairing
|
|
323
320
|
const WEB_APP_URL = 'https://minivibeapp.com';
|
|
324
321
|
|
|
@@ -431,15 +428,35 @@ For local-only use without remote control, run 'claude' directly.
|
|
|
431
428
|
console.log('Token stored successfully');
|
|
432
429
|
i++;
|
|
433
430
|
} else if (args[i] === '--logout') {
|
|
434
|
-
|
|
435
|
-
|
|
431
|
+
let loggedOut = false;
|
|
432
|
+
let errors = [];
|
|
433
|
+
|
|
434
|
+
// Try to delete AUTH_FILE
|
|
435
|
+
if (fs.existsSync(AUTH_FILE)) {
|
|
436
|
+
try {
|
|
437
|
+
fs.unlinkSync(AUTH_FILE);
|
|
438
|
+
loggedOut = true;
|
|
439
|
+
} catch (err) {
|
|
440
|
+
errors.push(`auth.json: ${err.message}`);
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
// Try to delete TOKEN_FILE regardless of first result
|
|
445
|
+
if (fs.existsSync(TOKEN_FILE)) {
|
|
446
|
+
try {
|
|
436
447
|
fs.unlinkSync(TOKEN_FILE);
|
|
437
|
-
|
|
438
|
-
}
|
|
439
|
-
|
|
448
|
+
loggedOut = true;
|
|
449
|
+
} catch (err) {
|
|
450
|
+
errors.push(`token: ${err.message}`);
|
|
440
451
|
}
|
|
441
|
-
}
|
|
442
|
-
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
if (errors.length > 0) {
|
|
455
|
+
console.error('Logout partially failed:', errors.join(', '));
|
|
456
|
+
} else if (loggedOut) {
|
|
457
|
+
console.log('Logged out successfully');
|
|
458
|
+
} else {
|
|
459
|
+
console.log('Not logged in');
|
|
443
460
|
}
|
|
444
461
|
process.exit(0);
|
|
445
462
|
} else if (args[i] === '--node-pty') {
|