@vibetasks/cli 0.5.0 → 0.5.2

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 (2) hide show
  1. package/dist/bin/vibetasks.js +90 -164
  2. package/package.json +3 -3
@@ -16,10 +16,7 @@ import { createRequire } from "module";
16
16
 
17
17
  // src/commands/login.ts
18
18
  import { Command } from "commander";
19
- import inquirer from "inquirer";
20
- import ora2 from "ora";
21
19
  import chalk2 from "chalk";
22
- import { AuthManager as AuthManager2, createSupabaseClient } from "@vibetasks/core";
23
20
 
24
21
  // src/utils/browser-auth.ts
25
22
  import { createServer } from "http";
@@ -363,88 +360,17 @@ async function getAvailablePort(startPort = 3737) {
363
360
  }
364
361
 
365
362
  // src/commands/login.ts
366
- var loginCommand = new Command("login").description("Authenticate with TaskFlow").option("-b, --browser", "Login via browser (recommended)").option("-e, --email <email>", "Email for non-interactive login").option("-p, --password <password>", "Password for non-interactive login").action(async (options) => {
367
- if (options.browser) {
368
- await loginWithBrowser();
369
- return;
370
- }
371
- let email = options.email;
372
- let password = options.password;
373
- if (email && password) {
374
- console.log(chalk2.blue.bold("\nVibeTasks Login\n"));
375
- } else if (!process.stdin.isTTY) {
376
- console.log(chalk2.red("Error: Non-interactive environment requires --email and --password flags"));
377
- console.log(chalk2.gray("\nUsage: vibetasks login --email you@example.com --password yourpassword"));
378
- console.log(chalk2.gray(" Or: vibetasks login --browser (opens browser for OAuth)"));
379
- process.exit(1);
380
- } else {
381
- console.log(chalk2.blue.bold("\nVibeTasks Login\n"));
382
- const answers = await inquirer.prompt([
383
- {
384
- type: "input",
385
- name: "email",
386
- message: "Email:",
387
- validate: (input) => {
388
- if (!input.includes("@")) return "Please enter a valid email address";
389
- return true;
390
- }
391
- },
392
- {
393
- type: "password",
394
- name: "password",
395
- message: "Password:",
396
- mask: "*",
397
- validate: (input) => {
398
- if (input.length < 6) return "Password must be at least 6 characters";
399
- return true;
400
- }
401
- }
402
- ]);
403
- email = answers.email;
404
- password = answers.password;
405
- }
406
- const spinner = ora2("Authenticating...").start();
407
- try {
408
- const authManager = new AuthManager2();
409
- const supabaseUrl = process.env.TASKFLOW_SUPABASE_URL || "https://cbkkztbcoitrfcleghfd.supabase.co";
410
- const supabaseKey = process.env.TASKFLOW_SUPABASE_KEY || process.env.SUPABASE_ANON_KEY || "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImNia2t6dGJjb2l0cmZjbGVnaGZkIiwicm9sZSI6ImFub24iLCJpYXQiOjE3Njc3NTc0MjgsImV4cCI6MjA4MzMzMzQyOH0.G7ILx-nntP0NbxO1gKt5yASb7nt7OmpJ8qtykeGYbQA";
411
- await authManager.setConfig("supabase_url", supabaseUrl);
412
- await authManager.setConfig("supabase_key", supabaseKey);
413
- const supabase = createSupabaseClient({
414
- supabaseUrl,
415
- supabaseKey
416
- });
417
- const { data, error } = await supabase.auth.signInWithPassword({
418
- email,
419
- password
420
- });
421
- if (error) throw error;
422
- if (!data.session) {
423
- throw new Error("Authentication failed - no session returned");
424
- }
425
- await authManager.setAccessToken(data.session.access_token);
426
- await authManager.setRefreshToken(data.session.refresh_token);
427
- const storageMethod = authManager.getStorageMethod();
428
- const storageLocation = storageMethod === "keychain" ? "system keychain" : authManager["configManager"].getConfigPath();
429
- spinner.succeed(chalk2.green("Successfully authenticated!"));
430
- console.log(chalk2.gray(`
431
- Logged in as: ${data.user.email}`));
432
- console.log(chalk2.gray(`Tokens stored in: ${storageLocation}`));
433
- console.log(chalk2.blue.bold("\n\u2728 You can now use TaskFlow CLI commands\n"));
434
- process.exit(0);
435
- } catch (error) {
436
- spinner.fail(chalk2.red("Authentication failed"));
437
- console.error(chalk2.red(`
438
- Error: ${error.message}`));
439
- process.exit(1);
440
- }
363
+ var loginCommand = new Command("login").description("Authenticate with VibeTasks via browser (Google OAuth)").option("-b, --browser", "Login via browser (default)").action(async () => {
364
+ console.log(chalk2.blue.bold("\n\u{1F510} VibeTasks Login\n"));
365
+ console.log(chalk2.gray("Opening browser for Google sign-in...\n"));
366
+ await loginWithBrowser();
441
367
  });
442
368
 
443
369
  // src/commands/add.ts
444
370
  import { Command as Command2 } from "commander";
445
- import ora3 from "ora";
371
+ import ora2 from "ora";
446
372
  import chalk3 from "chalk";
447
- import { AuthManager as AuthManager3, TaskOperations } from "@vibetasks/core";
373
+ import { AuthManager as AuthManager2, TaskOperations } from "@vibetasks/core";
448
374
 
449
375
  // src/utils/date-parser.ts
450
376
  import { addDays, addWeeks, addMonths, format, parse, isValid } from "date-fns";
@@ -706,9 +632,9 @@ function getSessionManager() {
706
632
 
707
633
  // src/commands/add.ts
708
634
  var addCommand = new Command2("add").description("Add a new task").argument("<title>", "Task title").option("-n, --notes <notes>", "Task notes (markdown supported)").option("-d, --due <date>", 'Due date (YYYY-MM-DD, "today", "tomorrow", "+3d")').option("-p, --priority <level>", "Priority: low, medium, high", "none").option("-t, --tags <tags...>", "Tags (space-separated)").option("-s, --subtasks <subtasks...>", "Subtasks (space-separated, use quotes for multi-word)").option("--project <name>", "Override auto-detected project").option("-e, --energy <level>", "Energy required: low, medium, high").action(async (title, options) => {
709
- const spinner = ora3("Creating task...").start();
635
+ const spinner = ora2("Creating task...").start();
710
636
  try {
711
- const authManager = new AuthManager3();
637
+ const authManager = new AuthManager2();
712
638
  const taskOps = await TaskOperations.fromAuthManager(authManager);
713
639
  let projectTag;
714
640
  if (options.project) {
@@ -841,7 +767,7 @@ function isRunningInClaudeCode() {
841
767
  import { Command as Command3 } from "commander";
842
768
  import chalk4 from "chalk";
843
769
  import Table from "cli-table3";
844
- import { AuthManager as AuthManager4, TaskOperations as TaskOperations2 } from "@vibetasks/core";
770
+ import { AuthManager as AuthManager3, TaskOperations as TaskOperations2 } from "@vibetasks/core";
845
771
 
846
772
  // src/utils/short-ids.ts
847
773
  import { writeFile as writeFile2, readFile as readFile2, mkdir as mkdir2 } from "fs/promises";
@@ -924,7 +850,7 @@ var listCommand = new Command3("list").description("List tasks").argument("[filt
924
850
  console.error(chalk4.gray(`Valid filters: ${validFilters.join(", ")}`));
925
851
  process.exit(1);
926
852
  }
927
- const authManager = new AuthManager4();
853
+ const authManager = new AuthManager3();
928
854
  const taskOps = await TaskOperations2.fromAuthManager(authManager);
929
855
  let tasks = await taskOps.getTasks(filter);
930
856
  if (options.project) {
@@ -1052,13 +978,13 @@ Error: ${error.message}
1052
978
 
1053
979
  // src/commands/done.ts
1054
980
  import { Command as Command4 } from "commander";
1055
- import ora4 from "ora";
981
+ import ora3 from "ora";
1056
982
  import chalk5 from "chalk";
1057
- import { AuthManager as AuthManager5, TaskOperations as TaskOperations3 } from "@vibetasks/core";
983
+ import { AuthManager as AuthManager4, TaskOperations as TaskOperations3 } from "@vibetasks/core";
1058
984
  var doneCommand = new Command4("done").description("Mark a task as complete").argument("<id>", "Task ID, short # (1-99), or first 8 characters").action(async (id) => {
1059
- const spinner = ora4("Completing task...").start();
985
+ const spinner = ora3("Completing task...").start();
1060
986
  try {
1061
- const authManager = new AuthManager5();
987
+ const authManager = new AuthManager4();
1062
988
  const taskOps = await TaskOperations3.fromAuthManager(authManager);
1063
989
  const shortIdManager = new ShortIdManager();
1064
990
  let taskId = await shortIdManager.resolveId(id);
@@ -1105,14 +1031,14 @@ Error: ${error.message}
1105
1031
  // src/commands/vibing.ts
1106
1032
  import { Command as Command5 } from "commander";
1107
1033
  import chalk6 from "chalk";
1108
- import ora5 from "ora";
1109
- import inquirer2 from "inquirer";
1110
- import { AuthManager as AuthManager6, TaskOperations as TaskOperations4 } from "@vibetasks/core";
1034
+ import ora4 from "ora";
1035
+ import inquirer from "inquirer";
1036
+ import { AuthManager as AuthManager5, TaskOperations as TaskOperations4 } from "@vibetasks/core";
1111
1037
  var WIP_LIMIT = 3;
1112
1038
  var vibingCommand = new Command5("vibing").alias("start").alias("v").description("Start working on a task (move to vibing status)").argument("[task-id]", "Task ID or short # (1-99) to start vibing on").option("-p, --pick", "Pick from todo tasks interactively").action(async (taskIdInput, options) => {
1113
- const spinner = ora5();
1039
+ const spinner = ora4();
1114
1040
  try {
1115
- const authManager = new AuthManager6();
1041
+ const authManager = new AuthManager5();
1116
1042
  const taskOps = await TaskOperations4.fromAuthManager(authManager);
1117
1043
  const shortIdManager = new ShortIdManager();
1118
1044
  let taskId;
@@ -1130,7 +1056,7 @@ var vibingCommand = new Command5("vibing").alias("start").alias("v").description
1130
1056
  console.log(chalk6.magenta(` ${i + 1}. ${t.title}`));
1131
1057
  });
1132
1058
  console.log("");
1133
- const { proceed } = await inquirer2.prompt([{
1059
+ const { proceed } = await inquirer.prompt([{
1134
1060
  type: "confirm",
1135
1061
  name: "proceed",
1136
1062
  message: "Start another task anyway?",
@@ -1147,7 +1073,7 @@ var vibingCommand = new Command5("vibing").alias("start").alias("v").description
1147
1073
  console.log(chalk6.yellow('\nNo todo tasks found. Add one with `vibetasks add "task title"`\n'));
1148
1074
  process.exit(0);
1149
1075
  }
1150
- const { selectedTask } = await inquirer2.prompt([{
1076
+ const { selectedTask } = await inquirer.prompt([{
1151
1077
  type: "list",
1152
1078
  name: "selectedTask",
1153
1079
  message: "Pick a task to start:",
@@ -1183,10 +1109,10 @@ var vibingCommand = new Command5("vibing").alias("start").alias("v").description
1183
1109
  import { Command as Command6 } from "commander";
1184
1110
  import chalk7 from "chalk";
1185
1111
  import Table2 from "cli-table3";
1186
- import { AuthManager as AuthManager7, TaskOperations as TaskOperations5 } from "@vibetasks/core";
1112
+ import { AuthManager as AuthManager6, TaskOperations as TaskOperations5 } from "@vibetasks/core";
1187
1113
  var searchCommand = new Command6("search").description("Search tasks by title").argument("<query>", "Search query").option("-l, --limit <number>", "Maximum number of results", "20").action(async (query, options) => {
1188
1114
  try {
1189
- const authManager = new AuthManager7();
1115
+ const authManager = new AuthManager6();
1190
1116
  const taskOps = await TaskOperations5.fromAuthManager(authManager);
1191
1117
  const limit = parseInt(options.limit, 10);
1192
1118
  const tasks = await taskOps.searchTasks(query, limit);
@@ -1241,18 +1167,18 @@ Error: ${error.message}
1241
1167
 
1242
1168
  // src/commands/update.ts
1243
1169
  import { Command as Command7 } from "commander";
1244
- import ora6 from "ora";
1170
+ import ora5 from "ora";
1245
1171
  import chalk8 from "chalk";
1246
- import { AuthManager as AuthManager8, TaskOperations as TaskOperations6 } from "@vibetasks/core";
1172
+ import { AuthManager as AuthManager7, TaskOperations as TaskOperations6 } from "@vibetasks/core";
1247
1173
  var updateCommand = new Command7("update").description("Update a task").argument("<id>", "Task ID (full or first 8 characters)").option("-t, --title <title>", "New title").option("-n, --notes <notes>", "New notes").option("-d, --due <date>", "New due date").option("-p, --priority <level>", "New priority: low, medium, high, none").option("-s, --status <status>", "New status: todo, vibing, done").option("--project <name>", "New project tag").option("-e, --energy <level>", "Energy required: low, medium, high").option("-c, --context <notes>", "Update context notes").action(async (id, options) => {
1248
1174
  if (!options.title && !options.notes && !options.due && !options.priority && !options.status && !options.project && !options.energy && !options.context) {
1249
1175
  console.error(chalk8.red("\nError: No updates specified"));
1250
1176
  console.error(chalk8.gray("Provide at least one option: --title, --notes, --due, --priority, --status, --project, --energy, or --context\n"));
1251
1177
  process.exit(1);
1252
1178
  }
1253
- const spinner = ora6("Updating task...").start();
1179
+ const spinner = ora5("Updating task...").start();
1254
1180
  try {
1255
- const authManager = new AuthManager8();
1181
+ const authManager = new AuthManager7();
1256
1182
  const taskOps = await TaskOperations6.fromAuthManager(authManager);
1257
1183
  let taskId = id;
1258
1184
  if (id.length < 32) {
@@ -1316,13 +1242,13 @@ Error: ${error.message}
1316
1242
 
1317
1243
  // src/commands/delete.ts
1318
1244
  import { Command as Command8 } from "commander";
1319
- import ora7 from "ora";
1245
+ import ora6 from "ora";
1320
1246
  import chalk9 from "chalk";
1321
- import inquirer3 from "inquirer";
1322
- import { AuthManager as AuthManager9, TaskOperations as TaskOperations7 } from "@vibetasks/core";
1247
+ import inquirer2 from "inquirer";
1248
+ import { AuthManager as AuthManager8, TaskOperations as TaskOperations7 } from "@vibetasks/core";
1323
1249
  var deleteCommand = new Command8("delete").description("Delete a task").argument("<id>", "Task ID (full or first 8 characters)").option("-y, --yes", "Skip confirmation").action(async (id, options) => {
1324
1250
  try {
1325
- const authManager = new AuthManager9();
1251
+ const authManager = new AuthManager8();
1326
1252
  const taskOps = await TaskOperations7.fromAuthManager(authManager);
1327
1253
  let taskId = id;
1328
1254
  let taskTitle = "";
@@ -1342,7 +1268,7 @@ var deleteCommand = new Command8("delete").description("Delete a task").argument
1342
1268
  taskTitle = task.title;
1343
1269
  }
1344
1270
  if (!options.yes) {
1345
- const answers = await inquirer3.prompt([
1271
+ const answers = await inquirer2.prompt([
1346
1272
  {
1347
1273
  type: "confirm",
1348
1274
  name: "confirm",
@@ -1355,7 +1281,7 @@ var deleteCommand = new Command8("delete").description("Delete a task").argument
1355
1281
  process.exit(0);
1356
1282
  }
1357
1283
  }
1358
- const spinner = ora7("Deleting task...").start();
1284
+ const spinner = ora6("Deleting task...").start();
1359
1285
  await taskOps.deleteTask(taskId);
1360
1286
  spinner.succeed(chalk9.green("Task deleted!"));
1361
1287
  console.log(chalk9.gray(`
@@ -1378,10 +1304,10 @@ var deleteCommand = new Command8("delete").description("Delete a task").argument
1378
1304
  // src/commands/config.ts
1379
1305
  import { Command as Command9 } from "commander";
1380
1306
  import chalk10 from "chalk";
1381
- import { AuthManager as AuthManager10 } from "@vibetasks/core";
1307
+ import { AuthManager as AuthManager9 } from "@vibetasks/core";
1382
1308
  var configCommand = new Command9("config").description("View or set configuration").argument("[key]", "Configuration key").argument("[value]", "Configuration value").action(async (key, value) => {
1383
1309
  try {
1384
- const authManager = new AuthManager10();
1310
+ const authManager = new AuthManager9();
1385
1311
  if (!key) {
1386
1312
  const configManager = authManager["configManager"];
1387
1313
  const config = await configManager.getConfig();
@@ -1438,7 +1364,7 @@ Error: ${error.message}
1438
1364
  // src/commands/hooks.ts
1439
1365
  import { Command as Command10 } from "commander";
1440
1366
  import chalk11 from "chalk";
1441
- import ora8 from "ora";
1367
+ import ora7 from "ora";
1442
1368
  import fs from "fs/promises";
1443
1369
  import path from "path";
1444
1370
  function getVibetasksHooksPath() {
@@ -1448,7 +1374,7 @@ function getVibetasksHooksPath() {
1448
1374
  }
1449
1375
  var hooksCommand = new Command10("hooks").description("Manage hooks integration (git and Claude Code)");
1450
1376
  hooksCommand.command("install").description("Install git hooks in current repository").action(async () => {
1451
- const spinner = ora8("Installing git hooks...").start();
1377
+ const spinner = ora7("Installing git hooks...").start();
1452
1378
  try {
1453
1379
  const gitDir = path.join(process.cwd(), ".git");
1454
1380
  try {
@@ -1510,7 +1436,7 @@ Error: ${error.message}
1510
1436
  }
1511
1437
  });
1512
1438
  hooksCommand.command("claude").description("Generate Claude Code hook configuration for TodoWrite sync").option("--project <path>", "Project path (defaults to current directory)").option("--output", "Output config to stdout instead of installing").action(async (options) => {
1513
- const spinner = ora8("Generating Claude Code hook configuration...").start();
1439
+ const spinner = ora7("Generating Claude Code hook configuration...").start();
1514
1440
  try {
1515
1441
  const projectPath = options.project || process.cwd();
1516
1442
  const hooksPath = getVibetasksHooksPath();
@@ -1612,15 +1538,15 @@ hooksCommand.command("status").description("Show status of installed hooks").act
1612
1538
 
1613
1539
  // src/commands/init.ts
1614
1540
  import { Command as Command11 } from "commander";
1615
- import inquirer4 from "inquirer";
1616
- import ora9 from "ora";
1541
+ import inquirer3 from "inquirer";
1542
+ import ora8 from "ora";
1617
1543
  import chalk12 from "chalk";
1618
- import { AuthManager as AuthManager11 } from "@vibetasks/core";
1544
+ import { AuthManager as AuthManager10 } from "@vibetasks/core";
1619
1545
  import { detectProject as detectProject2 } from "@vibetasks/shared/utils/project-detector";
1620
1546
  var initCommand = new Command11("init").description("Initialize TaskFlow for current project (auto-detect from git)").option("--name <name>", "Manually specify project name").action(async (options) => {
1621
- const spinner = ora9("Detecting project...").start();
1547
+ const spinner = ora8("Detecting project...").start();
1622
1548
  try {
1623
- const authManager = new AuthManager11();
1549
+ const authManager = new AuthManager10();
1624
1550
  const cwd = process.cwd();
1625
1551
  let project;
1626
1552
  if (options.name) {
@@ -1639,7 +1565,7 @@ var initCommand = new Command11("init").description("Initialize TaskFlow for cur
1639
1565
  console.log(chalk12.gray(` Source: ${chalk12.white(project.source)}`));
1640
1566
  console.log(chalk12.gray(` Path: ${chalk12.white(project.path)}
1641
1567
  `));
1642
- const answers = await inquirer4.prompt([
1568
+ const answers = await inquirer3.prompt([
1643
1569
  {
1644
1570
  type: "confirm",
1645
1571
  name: "confirm",
@@ -1676,8 +1602,8 @@ Error: ${error.message}
1676
1602
 
1677
1603
  // src/commands/setup.ts
1678
1604
  import { Command as Command12 } from "commander";
1679
- import inquirer5 from "inquirer";
1680
- import ora10 from "ora";
1605
+ import inquirer4 from "inquirer";
1606
+ import ora9 from "ora";
1681
1607
  import chalk13 from "chalk";
1682
1608
  import fs2 from "fs/promises";
1683
1609
  import path2 from "path";
@@ -1685,7 +1611,7 @@ import os from "os";
1685
1611
  import { createServer as createServer2 } from "http";
1686
1612
  import { exec as exec2 } from "child_process";
1687
1613
  import { promisify as promisify2 } from "util";
1688
- import { AuthManager as AuthManager12, TaskOperations as TaskOperations8, createSupabaseClient as createSupabaseClient2 } from "@vibetasks/core";
1614
+ import { AuthManager as AuthManager11, TaskOperations as TaskOperations8, createSupabaseClient } from "@vibetasks/core";
1689
1615
  import { detectProject as detectProject3 } from "@vibetasks/shared/utils/project-detector";
1690
1616
  var execAsync2 = promisify2(exec2);
1691
1617
  var SUPABASE_URL = "https://cbkkztbcoitrfcleghfd.supabase.co";
@@ -1750,12 +1676,12 @@ function showWelcome() {
1750
1676
  }
1751
1677
  async function checkExistingAuth() {
1752
1678
  try {
1753
- const authManager = new AuthManager12();
1679
+ const authManager = new AuthManager11();
1754
1680
  const token = await authManager.getAccessToken();
1755
1681
  if (!token) return { authenticated: false };
1756
1682
  const supabaseUrl = await authManager.getConfig("supabase_url") || SUPABASE_URL;
1757
1683
  const supabaseKey = await authManager.getConfig("supabase_key") || SUPABASE_ANON_KEY;
1758
- const supabase = createSupabaseClient2({ supabaseUrl, supabaseKey, accessToken: token });
1684
+ const supabase = createSupabaseClient({ supabaseUrl, supabaseKey, accessToken: token });
1759
1685
  const { data: { user } } = await supabase.auth.getUser();
1760
1686
  if (user?.email) {
1761
1687
  return { authenticated: true, email: user.email };
@@ -1794,7 +1720,7 @@ async function runBrowserAuth() {
1794
1720
  return;
1795
1721
  }
1796
1722
  try {
1797
- const authManager = new AuthManager12();
1723
+ const authManager = new AuthManager11();
1798
1724
  await authManager.setAccessToken(accessToken);
1799
1725
  await authManager.setRefreshToken(refreshToken);
1800
1726
  if (supabaseUrl) await authManager.setConfig("supabase_url", supabaseUrl);
@@ -1838,7 +1764,7 @@ async function stepAuthentication() {
1838
1764
  const existing = await checkExistingAuth();
1839
1765
  if (existing.authenticated) {
1840
1766
  console.log(chalk13.green(" \u2713") + chalk13.white(` Already logged in as ${chalk13.cyan(existing.email)}`));
1841
- const { reauth } = await inquirer5.prompt([{
1767
+ const { reauth } = await inquirer4.prompt([{
1842
1768
  type: "confirm",
1843
1769
  name: "reauth",
1844
1770
  message: "Re-authenticate with a different account?",
@@ -1848,7 +1774,7 @@ async function stepAuthentication() {
1848
1774
  return { success: true, email: existing.email, skipped: true };
1849
1775
  }
1850
1776
  }
1851
- const { authMethod } = await inquirer5.prompt([{
1777
+ const { authMethod } = await inquirer4.prompt([{
1852
1778
  type: "list",
1853
1779
  name: "authMethod",
1854
1780
  message: "How would you like to authenticate?",
@@ -1858,7 +1784,7 @@ async function stepAuthentication() {
1858
1784
  ]
1859
1785
  }]);
1860
1786
  if (authMethod === "browser") {
1861
- const spinner = ora10("Opening browser for authentication...").start();
1787
+ const spinner = ora9("Opening browser for authentication...").start();
1862
1788
  spinner.stop();
1863
1789
  console.log(chalk13.gray(" Waiting for browser authentication...\n"));
1864
1790
  const result = await runBrowserAuth();
@@ -1870,7 +1796,7 @@ async function stepAuthentication() {
1870
1796
  }
1871
1797
  return result;
1872
1798
  } else {
1873
- const answers = await inquirer5.prompt([
1799
+ const answers = await inquirer4.prompt([
1874
1800
  {
1875
1801
  type: "input",
1876
1802
  name: "email",
@@ -1885,12 +1811,12 @@ async function stepAuthentication() {
1885
1811
  validate: (input) => input.length >= 6 || "Password must be at least 6 characters"
1886
1812
  }
1887
1813
  ]);
1888
- const spinner = ora10("Authenticating...").start();
1814
+ const spinner = ora9("Authenticating...").start();
1889
1815
  try {
1890
- const authManager = new AuthManager12();
1816
+ const authManager = new AuthManager11();
1891
1817
  await authManager.setConfig("supabase_url", SUPABASE_URL);
1892
1818
  await authManager.setConfig("supabase_key", SUPABASE_ANON_KEY);
1893
- const supabase = createSupabaseClient2({
1819
+ const supabase = createSupabaseClient({
1894
1820
  supabaseUrl: SUPABASE_URL,
1895
1821
  supabaseKey: SUPABASE_ANON_KEY
1896
1822
  });
@@ -1920,7 +1846,7 @@ async function stepClaudeCodeConfig() {
1920
1846
  if (!hasClaudeCode) {
1921
1847
  console.log(chalk13.yellow(" \u26A0") + chalk13.gray(" Claude Code config directory not found"));
1922
1848
  console.log(chalk13.gray(" Run this command again after installing Claude Code"));
1923
- const { createAnyway } = await inquirer5.prompt([{
1849
+ const { createAnyway } = await inquirer4.prompt([{
1924
1850
  type: "confirm",
1925
1851
  name: "createAnyway",
1926
1852
  message: "Create config directory anyway?",
@@ -1930,7 +1856,7 @@ async function stepClaudeCodeConfig() {
1930
1856
  return { success: true, skipped: true };
1931
1857
  }
1932
1858
  }
1933
- const { configure } = await inquirer5.prompt([{
1859
+ const { configure } = await inquirer4.prompt([{
1934
1860
  type: "confirm",
1935
1861
  name: "configure",
1936
1862
  message: "Configure VibeTasks MCP server for Claude Code?",
@@ -1939,7 +1865,7 @@ async function stepClaudeCodeConfig() {
1939
1865
  if (!configure) {
1940
1866
  return { success: true, skipped: true };
1941
1867
  }
1942
- const spinner = ora10("Configuring Claude Code...").start();
1868
+ const spinner = ora9("Configuring Claude Code...").start();
1943
1869
  try {
1944
1870
  const configPath = getClaudeConfigPath();
1945
1871
  const configDir = path2.dirname(configPath);
@@ -2015,7 +1941,7 @@ async function stepClaudeCodeConfig() {
2015
1941
  }
2016
1942
  async function stepProjectInit() {
2017
1943
  console.log(chalk13.bold.blue("\n\u2501\u2501\u2501 Step 3: Project Setup (Optional) \u2501\u2501\u2501\n"));
2018
- const spinner = ora10("Detecting project...").start();
1944
+ const spinner = ora9("Detecting project...").start();
2019
1945
  let project;
2020
1946
  try {
2021
1947
  project = await detectProject3(process.cwd());
@@ -2026,7 +1952,7 @@ async function stepProjectInit() {
2026
1952
  spinner.info(chalk13.gray("No project detected in current directory"));
2027
1953
  return { success: true, skipped: true };
2028
1954
  }
2029
- const { setupProject } = await inquirer5.prompt([{
1955
+ const { setupProject } = await inquirer4.prompt([{
2030
1956
  type: "confirm",
2031
1957
  name: "setupProject",
2032
1958
  message: `Auto-tag tasks created here as "${project.name}"?`,
@@ -2036,7 +1962,7 @@ async function stepProjectInit() {
2036
1962
  return { success: true, skipped: true };
2037
1963
  }
2038
1964
  try {
2039
- const authManager = new AuthManager12();
1965
+ const authManager = new AuthManager11();
2040
1966
  await authManager.setConfig(`project_${process.cwd()}`, project.name);
2041
1967
  console.log(chalk13.green("\n \u2713") + chalk13.white(` Project "${project.name}" configured`));
2042
1968
  return { success: true, projectName: project.name };
@@ -2051,9 +1977,9 @@ async function stepVerify() {
2051
1977
  supabaseConnected: false,
2052
1978
  mcpConfigured: false
2053
1979
  };
2054
- const supabaseSpinner = ora10("Testing Supabase connection...").start();
1980
+ const supabaseSpinner = ora9("Testing Supabase connection...").start();
2055
1981
  try {
2056
- const authManager = new AuthManager12();
1982
+ const authManager = new AuthManager11();
2057
1983
  const taskOps = await TaskOperations8.fromAuthManager(authManager);
2058
1984
  const tasks = await taskOps.getTasks("all");
2059
1985
  result.supabaseConnected = true;
@@ -2063,7 +1989,7 @@ async function stepVerify() {
2063
1989
  supabaseSpinner.fail(chalk13.red("Supabase connection failed"));
2064
1990
  console.log(chalk13.gray(` ${error.message}`));
2065
1991
  }
2066
- const mcpSpinner = ora10("Checking MCP configuration...").start();
1992
+ const mcpSpinner = ora9("Checking MCP configuration...").start();
2067
1993
  try {
2068
1994
  const configPath = getClaudeConfigPath();
2069
1995
  const configContent = await fs2.readFile(configPath, "utf-8");
@@ -2224,7 +2150,7 @@ async function runNonInteractiveSetup() {
2224
2150
  if (authResult.success) {
2225
2151
  console.log(chalk13.gray("\nVerifying connection..."));
2226
2152
  try {
2227
- const authManager = new AuthManager12();
2153
+ const authManager = new AuthManager11();
2228
2154
  const taskOps = await TaskOperations8.fromAuthManager(authManager);
2229
2155
  const tasks = await taskOps.getTasks("all");
2230
2156
  console.log(chalk13.green("\u2713") + ` Connected (${tasks.length} tasks)`);
@@ -2251,7 +2177,7 @@ var setupCommand = new Command12("setup").description("Interactive setup wizard
2251
2177
  process.exit(0);
2252
2178
  }
2253
2179
  showWelcome();
2254
- const { proceed } = await inquirer5.prompt([{
2180
+ const { proceed } = await inquirer4.prompt([{
2255
2181
  type: "confirm",
2256
2182
  name: "proceed",
2257
2183
  message: "Ready to begin setup?",
@@ -2293,9 +2219,9 @@ var setupCommand = new Command12("setup").description("Interactive setup wizard
2293
2219
  // src/commands/watch.ts
2294
2220
  import { Command as Command13 } from "commander";
2295
2221
  import chalk14 from "chalk";
2296
- import ora11 from "ora";
2297
- import inquirer6 from "inquirer";
2298
- import { AuthManager as AuthManager13, TaskOperations as TaskOperations9 } from "@vibetasks/core";
2222
+ import ora10 from "ora";
2223
+ import inquirer5 from "inquirer";
2224
+ import { AuthManager as AuthManager12, TaskOperations as TaskOperations9 } from "@vibetasks/core";
2299
2225
  import { detectProject as detectProject4 } from "@vibetasks/shared/utils/project-detector";
2300
2226
  var watchCommand = new Command13("watch").description("Monitor clipboard for errors and offer to capture them as tasks").option("-i, --interval <ms>", "Polling interval in milliseconds", "1000").option("-a, --auto", "Auto-create tasks without prompting").option("-q, --quiet", "Minimal output (only show errors)").option("--project <name>", "Override auto-detected project").action(async (options) => {
2301
2227
  const interval = parseInt(options.interval || "1000", 10);
@@ -2308,7 +2234,7 @@ var watchCommand = new Command13("watch").description("Monitor clipboard for err
2308
2234
  let authManager;
2309
2235
  let taskOps;
2310
2236
  try {
2311
- authManager = new AuthManager13();
2237
+ authManager = new AuthManager12();
2312
2238
  taskOps = await TaskOperations9.fromAuthManager(authManager);
2313
2239
  } catch (error) {
2314
2240
  if (error.message.includes("Not authenticated")) {
@@ -2353,7 +2279,7 @@ Error: ${error.message}
2353
2279
  recentErrors.add(errorHash);
2354
2280
  return;
2355
2281
  }
2356
- const { action } = await inquirer6.prompt([
2282
+ const { action } = await inquirer5.prompt([
2357
2283
  {
2358
2284
  type: "list",
2359
2285
  name: "action",
@@ -2377,7 +2303,7 @@ Error: ${error.message}
2377
2303
  console.log(error.rawText);
2378
2304
  console.log(chalk14.gray("\u2500".repeat(50)));
2379
2305
  console.log();
2380
- const { afterShow } = await inquirer6.prompt([
2306
+ const { afterShow } = await inquirer5.prompt([
2381
2307
  {
2382
2308
  type: "list",
2383
2309
  name: "afterShow",
@@ -2441,7 +2367,7 @@ Error: ${error.message}
2441
2367
  });
2442
2368
  });
2443
2369
  async function createTaskFromError(error, taskOps, projectTag) {
2444
- const spinner = ora11("Creating task...").start();
2370
+ const spinner = ora10("Creating task...").start();
2445
2371
  try {
2446
2372
  const title = generateTaskTitle(error);
2447
2373
  const task = await taskOps.createTask({
@@ -2548,13 +2474,13 @@ var checkCommand = new Command13("check-clipboard").description("Check clipboard
2548
2474
  // src/commands/archive.ts
2549
2475
  import { Command as Command14 } from "commander";
2550
2476
  import chalk15 from "chalk";
2551
- import ora12 from "ora";
2552
- import inquirer7 from "inquirer";
2553
- import { AuthManager as AuthManager14, TaskOperations as TaskOperations10 } from "@vibetasks/core";
2477
+ import ora11 from "ora";
2478
+ import inquirer6 from "inquirer";
2479
+ import { AuthManager as AuthManager13, TaskOperations as TaskOperations10 } from "@vibetasks/core";
2554
2480
  var archiveCommand = new Command14("archive").description("Archive a task or manage archived tasks").argument("[task-id]", "Task ID to archive (full or first 8 characters)").option("-l, --list", "List all archived tasks").option("-u, --unarchive <id>", "Unarchive a task by ID").option("--pick", "Pick from completed tasks to archive").action(async (taskId, options) => {
2555
- const spinner = ora12();
2481
+ const spinner = ora11();
2556
2482
  try {
2557
- const authManager = new AuthManager14();
2483
+ const authManager = new AuthManager13();
2558
2484
  const taskOps = await TaskOperations10.fromAuthManager(authManager);
2559
2485
  if (options.list) {
2560
2486
  spinner.start("Fetching archived tasks...");
@@ -2606,7 +2532,7 @@ Restored: ${task2.title}`));
2606
2532
  console.log(chalk15.yellow("\nNo completed tasks to archive. Complete some tasks first!\n"));
2607
2533
  process.exit(0);
2608
2534
  }
2609
- const { selectedTask } = await inquirer7.prompt([{
2535
+ const { selectedTask } = await inquirer6.prompt([{
2610
2536
  type: "list",
2611
2537
  name: "selectedTask",
2612
2538
  message: "Pick a completed task to archive:",
@@ -2664,17 +2590,17 @@ Error: ${error.message}
2664
2590
  // src/commands/daemon.ts
2665
2591
  import { Command as Command15 } from "commander";
2666
2592
  import chalk16 from "chalk";
2667
- import ora13 from "ora";
2593
+ import ora12 from "ora";
2668
2594
  import { spawn } from "child_process";
2669
2595
  import path3 from "path";
2670
2596
  import { fileURLToPath } from "url";
2671
- import { AuthManager as AuthManager15, TaskOperations as TaskOperations11 } from "@vibetasks/core";
2597
+ import { AuthManager as AuthManager14, TaskOperations as TaskOperations11 } from "@vibetasks/core";
2672
2598
  var __filename2 = fileURLToPath(import.meta.url);
2673
2599
  var __dirname2 = path3.dirname(__filename2);
2674
2600
  var daemonCommand = new Command15("daemon").description("Manage the VibeTasks error capture daemon").addCommand(createStartCommand()).addCommand(createStopCommand()).addCommand(createStatusCommand()).addCommand(createConfigureCommand()).addCommand(createCaptureCommand());
2675
2601
  function createStartCommand() {
2676
2602
  return new Command15("start").description("Start the error capture daemon").option("-f, --foreground", "Run in foreground (useful for debugging)").option("--no-notify", "Disable startup notification").action(async (options) => {
2677
- const spinner = ora13("Starting VibeTasks daemon...").start();
2603
+ const spinner = ora12("Starting VibeTasks daemon...").start();
2678
2604
  try {
2679
2605
  if (await daemonConfigManager.isDaemonRunning()) {
2680
2606
  spinner.warn(chalk16.yellow("Daemon is already running"));
@@ -2715,7 +2641,7 @@ function createStartCommand() {
2715
2641
  }
2716
2642
  function createStopCommand() {
2717
2643
  return new Command15("stop").description("Stop the error capture daemon").action(async () => {
2718
- const spinner = ora13("Stopping VibeTasks daemon...").start();
2644
+ const spinner = ora12("Stopping VibeTasks daemon...").start();
2719
2645
  try {
2720
2646
  const pid = await daemonConfigManager.getPid();
2721
2647
  if (!pid) {
@@ -2812,7 +2738,7 @@ function createConfigureCommand() {
2812
2738
  }
2813
2739
  function createCaptureCommand() {
2814
2740
  return new Command15("capture").description("Manually capture clipboard and check for errors").option("--create-task", "Create a task from the captured error").option("--raw", "Show raw clipboard content").action(async (options) => {
2815
- const spinner = ora13("Capturing clipboard...").start();
2741
+ const spinner = ora12("Capturing clipboard...").start();
2816
2742
  try {
2817
2743
  const clipboard = await import("clipboardy");
2818
2744
  const content = await clipboard.default.read();
@@ -3024,9 +2950,9 @@ function getCategoryPrefix2(category) {
3024
2950
  return prefixes[category] || "Fix";
3025
2951
  }
3026
2952
  async function createTaskFromError2(error) {
3027
- const spinner = ora13("Creating task from error...").start();
2953
+ const spinner = ora12("Creating task from error...").start();
3028
2954
  try {
3029
- const authManager = new AuthManager15();
2955
+ const authManager = new AuthManager14();
3030
2956
  const taskOps = await TaskOperations11.fromAuthManager(authManager);
3031
2957
  const title = generateTaskTitle2(error);
3032
2958
  const notes = formatErrorForNotes(error);
@@ -3086,11 +3012,11 @@ function getTagColor2(category) {
3086
3012
  // src/commands/next.ts
3087
3013
  import { Command as Command16 } from "commander";
3088
3014
  import chalk17 from "chalk";
3089
- import { AuthManager as AuthManager16, TaskOperations as TaskOperations12 } from "@vibetasks/core";
3015
+ import { AuthManager as AuthManager15, TaskOperations as TaskOperations12 } from "@vibetasks/core";
3090
3016
  var PRIORITY_ORDER = { high: 0, medium: 1, low: 2, none: 3 };
3091
3017
  var nextCommand = new Command16("next").description("Show and optionally start the highest priority task").option("-s, --start", "Start vibing on the task immediately").option("--project <name>", "Filter by project tag").action(async (options) => {
3092
3018
  try {
3093
- const authManager = new AuthManager16();
3019
+ const authManager = new AuthManager15();
3094
3020
  const taskOps = await TaskOperations12.fromAuthManager(authManager);
3095
3021
  let tasks = await taskOps.getTasks("all");
3096
3022
  tasks = tasks.filter((t) => t.status !== "done" && t.status !== "archived" && !t.completed);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibetasks/cli",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
4
4
  "description": "VibeTasks CLI - Lightning-fast task management from your terminal. Works with Claude Code, Cursor, and all AI coding tools.",
5
5
  "author": "Vyas",
6
6
  "license": "MIT",
@@ -45,8 +45,8 @@
45
45
  "typecheck": "tsc --noEmit"
46
46
  },
47
47
  "dependencies": {
48
- "@vibetasks/core": "^0.5.0",
49
- "@vibetasks/shared": "^1.2.0",
48
+ "@vibetasks/core": "^0.5.2",
49
+ "@vibetasks/shared": "^1.2.2",
50
50
  "commander": "^11.1.0",
51
51
  "chalk": "^5.3.0",
52
52
  "ora": "^8.0.1",