taskin 2.1.0 → 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.
Files changed (2) hide show
  1. package/dist/index.js +587 -294
  2. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -7180,6 +7180,384 @@ var require_dist = __commonJS({
7180
7180
  init_esm_shims();
7181
7181
  import { Command } from "commander";
7182
7182
 
7183
+ // src/commands/config.ts
7184
+ init_esm_shims();
7185
+ import chalk2 from "chalk";
7186
+ import inquirer from "inquirer";
7187
+
7188
+ // src/lib/colors.ts
7189
+ init_esm_shims();
7190
+ import chalk from "chalk";
7191
+ var colors = {
7192
+ info: chalk.cyan,
7193
+ success: chalk.green,
7194
+ warning: chalk.yellow,
7195
+ error: chalk.red,
7196
+ highlight: chalk.bold.white,
7197
+ secondary: chalk.gray,
7198
+ normal: chalk.white
7199
+ };
7200
+ var icons = {
7201
+ rocket: "\u{1F680}",
7202
+ list: "\u{1F4CA}",
7203
+ check: "\u2705",
7204
+ pause: "\u23F8\uFE0F",
7205
+ info: "\u{1F4A1}",
7206
+ task: "\u{1F4CB}",
7207
+ gear: "\u2699\uFE0F"
7208
+ };
7209
+ function printHeader(title, icon) {
7210
+ console.log();
7211
+ console.log(colors.highlight("\u2550".repeat(60)));
7212
+ console.log(colors.highlight(`${icon} ${title}`));
7213
+ console.log(colors.highlight("\u2550".repeat(60)));
7214
+ console.log();
7215
+ }
7216
+ function success(message) {
7217
+ console.log(colors.success(`\u2713 ${message}`));
7218
+ }
7219
+ function error(message) {
7220
+ console.error(colors.error(`\u2717 ${message}`));
7221
+ }
7222
+ function info(message) {
7223
+ console.log(colors.info(`\u2139 ${message}`));
7224
+ }
7225
+
7226
+ // src/lib/config-manager.ts
7227
+ init_esm_shims();
7228
+ import { TaskinConfigSchema } from "@opentask/taskin-types";
7229
+ import { existsSync, readFileSync, writeFileSync } from "fs";
7230
+ import { join } from "path";
7231
+ function getAutomationBehavior(level, commits) {
7232
+ const presets = {
7233
+ manual: {
7234
+ autoCommitStatusChange: false,
7235
+ autoCommitPause: false,
7236
+ autoCommitFinish: false
7237
+ },
7238
+ assisted: {
7239
+ autoCommitStatusChange: true,
7240
+ autoCommitPause: true,
7241
+ autoCommitFinish: false
7242
+ },
7243
+ autopilot: {
7244
+ autoCommitStatusChange: true,
7245
+ autoCommitPause: true,
7246
+ autoCommitFinish: true
7247
+ }
7248
+ };
7249
+ const behavior = presets[level];
7250
+ if (commits) {
7251
+ return {
7252
+ autoCommitStatusChange: commits.taskStatusChanges ?? behavior.autoCommitStatusChange,
7253
+ autoCommitPause: commits.workInProgress ?? behavior.autoCommitPause,
7254
+ autoCommitFinish: commits.completedWork ?? behavior.autoCommitFinish
7255
+ };
7256
+ }
7257
+ return behavior;
7258
+ }
7259
+ var ConfigManager = class {
7260
+ constructor(projectRoot = process.cwd()) {
7261
+ this.projectRoot = projectRoot;
7262
+ this.configPath = join(projectRoot, ".taskin.json");
7263
+ }
7264
+ configPath;
7265
+ /**
7266
+ * Load configuration from .taskin.json
7267
+ * @throws Error if config file not found or invalid
7268
+ */
7269
+ loadConfig() {
7270
+ if (!existsSync(this.configPath)) {
7271
+ throw new Error(
7272
+ `Taskin configuration not found at ${this.configPath}.
7273
+ Run 'taskin init' to initialize.`
7274
+ );
7275
+ }
7276
+ const content = readFileSync(this.configPath, "utf-8");
7277
+ const json = JSON.parse(content);
7278
+ const result = TaskinConfigSchema.safeParse(json);
7279
+ if (!result.success) {
7280
+ throw new Error(`Invalid Taskin configuration:
7281
+ ${result.error.message}`);
7282
+ }
7283
+ return result.data;
7284
+ }
7285
+ /**
7286
+ * Save configuration to .taskin.json
7287
+ */
7288
+ saveConfig(config) {
7289
+ const validated = TaskinConfigSchema.parse(config);
7290
+ writeFileSync(this.configPath, JSON.stringify(validated, null, 2), "utf-8");
7291
+ }
7292
+ /**
7293
+ * Get automation level from config
7294
+ * Returns 'assisted' as default if not configured
7295
+ */
7296
+ getAutomationLevel() {
7297
+ const config = this.loadConfig();
7298
+ return config.automation?.level ?? "assisted";
7299
+ }
7300
+ /**
7301
+ * Set automation level in config
7302
+ */
7303
+ setAutomationLevel(level) {
7304
+ const config = this.loadConfig();
7305
+ config.automation = {
7306
+ ...config.automation,
7307
+ level
7308
+ };
7309
+ this.saveConfig(config);
7310
+ }
7311
+ /**
7312
+ * Get automation configuration
7313
+ */
7314
+ getAutomationConfig() {
7315
+ const config = this.loadConfig();
7316
+ return config.automation ?? { level: "assisted" };
7317
+ }
7318
+ /**
7319
+ * Set automation configuration
7320
+ */
7321
+ setAutomationConfig(automation) {
7322
+ const config = this.loadConfig();
7323
+ config.automation = automation;
7324
+ this.saveConfig(config);
7325
+ }
7326
+ /**
7327
+ * Get resolved automation behavior
7328
+ */
7329
+ getAutomationBehavior() {
7330
+ const automation = this.getAutomationConfig();
7331
+ return getAutomationBehavior(automation.level, automation.commits);
7332
+ }
7333
+ /**
7334
+ * Check if config file exists
7335
+ */
7336
+ exists() {
7337
+ return existsSync(this.configPath);
7338
+ }
7339
+ };
7340
+
7341
+ // src/lib/project-check.ts
7342
+ init_esm_shims();
7343
+ import { existsSync as existsSync2 } from "fs";
7344
+ import path2 from "path";
7345
+ function isTaskinProject(cwd = process.cwd()) {
7346
+ return existsSync2(path2.join(cwd, ".taskin.json"));
7347
+ }
7348
+ function requireTaskinProject(cwd = process.cwd()) {
7349
+ if (!isTaskinProject(cwd)) {
7350
+ error(
7351
+ 'This directory is not initialized as a taskin project. Run "taskin init" first.'
7352
+ );
7353
+ process.exit(1);
7354
+ }
7355
+ }
7356
+
7357
+ // src/commands/define-command/index.ts
7358
+ init_esm_shims();
7359
+
7360
+ // src/commands/define-command/define-command.ts
7361
+ init_esm_shims();
7362
+ var defineCommand = (config) => {
7363
+ return (program2) => {
7364
+ const cmd = program2.command(config.name).description(config.description);
7365
+ if (config.alias) {
7366
+ cmd.alias(config.alias);
7367
+ }
7368
+ config.options?.forEach((opt) => {
7369
+ cmd.option(opt.flags, opt.description, opt.defaultValue);
7370
+ });
7371
+ cmd.action(async (...args) => {
7372
+ try {
7373
+ await config.handler(...args);
7374
+ } catch (err) {
7375
+ error(
7376
+ `Failed to execute command: ${err instanceof Error ? err.message : String(err)}`
7377
+ );
7378
+ process.exit(1);
7379
+ }
7380
+ });
7381
+ };
7382
+ };
7383
+
7384
+ // src/commands/define-command/define-command.types.ts
7385
+ init_esm_shims();
7386
+
7387
+ // src/commands/config.ts
7388
+ var configCommand = defineCommand({
7389
+ name: "config",
7390
+ description: "\u2699\uFE0F Configure Taskin settings",
7391
+ options: [
7392
+ {
7393
+ flags: "-l, --level <level>",
7394
+ description: "Set automation level (manual|assisted|autopilot)"
7395
+ },
7396
+ {
7397
+ flags: "-s, --show",
7398
+ description: "Show current configuration"
7399
+ }
7400
+ ],
7401
+ handler: async (options) => {
7402
+ await handleConfigCommand(options);
7403
+ }
7404
+ });
7405
+ async function handleConfigCommand(options) {
7406
+ requireTaskinProject();
7407
+ const configManager = new ConfigManager(process.cwd());
7408
+ if (options.show) {
7409
+ await showConfiguration(configManager);
7410
+ return;
7411
+ }
7412
+ if (options.level) {
7413
+ await setAutomationLevel(configManager, options.level);
7414
+ return;
7415
+ }
7416
+ await interactiveConfig(configManager);
7417
+ }
7418
+ async function showConfiguration(configManager) {
7419
+ printHeader("Current Configuration", "\u2699\uFE0F");
7420
+ try {
7421
+ const config = configManager.loadConfig();
7422
+ const automationLevel = configManager.getAutomationLevel();
7423
+ const behavior = configManager.getAutomationBehavior();
7424
+ console.log(chalk2.bold("\n\u{1F4CB} General"));
7425
+ console.log(` Version: ${chalk2.cyan(config.version)}`);
7426
+ console.log(` Provider: ${chalk2.cyan(config.provider.type)}
7427
+ `);
7428
+ console.log(chalk2.bold("\u{1F916} Automation"));
7429
+ console.log(` Level: ${chalk2.cyan(automationLevel)}`);
7430
+ console.log(
7431
+ ` Auto-commit status changes: ${behavior.autoCommitStatusChange ? chalk2.green("\u2713 Yes") : chalk2.red("\u2717 No")}`
7432
+ );
7433
+ console.log(
7434
+ ` Auto-commit on pause: ${behavior.autoCommitPause ? chalk2.green("\u2713 Yes") : chalk2.red("\u2717 No")}`
7435
+ );
7436
+ console.log(
7437
+ ` Auto-commit on finish: ${behavior.autoCommitFinish ? chalk2.green("\u2713 Yes") : chalk2.red("\u2717 No")}
7438
+ `
7439
+ );
7440
+ console.log(chalk2.bold("\u{1F4D6} Available Levels:"));
7441
+ console.log(
7442
+ ` ${chalk2.yellow("manual")} - You're in control: all commits are suggestions only`
7443
+ );
7444
+ console.log(
7445
+ ` ${chalk2.yellow("assisted")} - Smart suggestions: auto-commits status changes, suggests work commits`
7446
+ );
7447
+ console.log(
7448
+ ` ${chalk2.yellow("autopilot")} - Let Taskin drive: auto-commits everything
7449
+ `
7450
+ );
7451
+ } catch (err) {
7452
+ error("Failed to load configuration");
7453
+ if (err instanceof Error) {
7454
+ console.error(chalk2.dim(err.message));
7455
+ }
7456
+ process.exit(1);
7457
+ }
7458
+ }
7459
+ async function setAutomationLevel(configManager, level) {
7460
+ printHeader("Configure Automation Level", "\u2699\uFE0F");
7461
+ const validLevels = ["manual", "assisted", "autopilot"];
7462
+ if (!validLevels.includes(level)) {
7463
+ error(
7464
+ `Invalid automation level: ${level}. Valid options: ${validLevels.join(", ")}`
7465
+ );
7466
+ process.exit(1);
7467
+ }
7468
+ try {
7469
+ const currentLevel = configManager.getAutomationLevel();
7470
+ if (currentLevel === level) {
7471
+ info(`Automation level is already set to ${colors.highlight(level)}`);
7472
+ return;
7473
+ }
7474
+ configManager.setAutomationLevel(level);
7475
+ success(`\u2713 Automation level set to ${colors.highlight(level)}`);
7476
+ const behavior = configManager.getAutomationBehavior();
7477
+ console.log(chalk2.dim("\nCurrent behavior:"));
7478
+ console.log(
7479
+ chalk2.dim(
7480
+ ` Auto-commit status changes: ${behavior.autoCommitStatusChange ? "\u2713" : "\u2717"}`
7481
+ )
7482
+ );
7483
+ console.log(
7484
+ chalk2.dim(
7485
+ ` Auto-commit on pause: ${behavior.autoCommitPause ? "\u2713" : "\u2717"}`
7486
+ )
7487
+ );
7488
+ console.log(
7489
+ chalk2.dim(
7490
+ ` Auto-commit on finish: ${behavior.autoCommitFinish ? "\u2713" : "\u2717"}`
7491
+ )
7492
+ );
7493
+ } catch (err) {
7494
+ error("Failed to update configuration");
7495
+ if (err instanceof Error) {
7496
+ console.error(chalk2.dim(err.message));
7497
+ }
7498
+ process.exit(1);
7499
+ }
7500
+ }
7501
+ async function interactiveConfig(configManager) {
7502
+ printHeader("Configure Taskin", "\u2699\uFE0F");
7503
+ try {
7504
+ const currentLevel = configManager.getAutomationLevel();
7505
+ console.log(`Current automation level: ${chalk2.cyan(currentLevel)}
7506
+ `);
7507
+ const { level } = await inquirer.prompt([
7508
+ {
7509
+ type: "list",
7510
+ name: "level",
7511
+ message: "Select automation level:",
7512
+ default: currentLevel,
7513
+ choices: [
7514
+ {
7515
+ name: "\u{1F527} manual - You control all commits (suggestions only)",
7516
+ value: "manual"
7517
+ },
7518
+ {
7519
+ name: "\u{1F91D} assisted - Auto-commit status changes, suggest work commits (recommended)",
7520
+ value: "assisted"
7521
+ },
7522
+ {
7523
+ name: "\u{1F680} autopilot - Auto-commit everything",
7524
+ value: "autopilot"
7525
+ }
7526
+ ]
7527
+ }
7528
+ ]);
7529
+ if (level === currentLevel) {
7530
+ info(`Keeping current automation level: ${colors.highlight(level)}`);
7531
+ return;
7532
+ }
7533
+ configManager.setAutomationLevel(level);
7534
+ success(`\u2713 Automation level set to ${colors.highlight(level)}`);
7535
+ const behavior = configManager.getAutomationBehavior();
7536
+ console.log(chalk2.dim("\nNew behavior:"));
7537
+ console.log(
7538
+ chalk2.dim(
7539
+ ` Auto-commit status changes: ${behavior.autoCommitStatusChange ? "\u2713" : "\u2717"}`
7540
+ )
7541
+ );
7542
+ console.log(
7543
+ chalk2.dim(
7544
+ ` Auto-commit on pause: ${behavior.autoCommitPause ? "\u2713" : "\u2717"}`
7545
+ )
7546
+ );
7547
+ console.log(
7548
+ chalk2.dim(
7549
+ ` Auto-commit on finish: ${behavior.autoCommitFinish ? "\u2713" : "\u2717"}`
7550
+ )
7551
+ );
7552
+ } catch (err) {
7553
+ error("Configuration cancelled or failed");
7554
+ if (err instanceof Error) {
7555
+ console.error(chalk2.dim(err.message));
7556
+ }
7557
+ process.exit(1);
7558
+ }
7559
+ }
7560
+
7183
7561
  // src/commands/dashboard.ts
7184
7562
  init_esm_shims();
7185
7563
 
@@ -7190,7 +7568,7 @@ init_esm_shims();
7190
7568
  init_esm_shims();
7191
7569
  import { UserStatsSchema } from "@opentask/taskin-types";
7192
7570
  import { promises as fs } from "fs";
7193
- import path2 from "path";
7571
+ import path3 from "path";
7194
7572
  var MILLISECONDS_PER_SECOND = 1e3;
7195
7573
  var SECONDS_PER_MINUTE = 60;
7196
7574
  var MINUTES_PER_HOUR = 60;
@@ -7410,7 +7788,7 @@ var FileSystemMetricsAdapter = class {
7410
7788
  const taskFiles = files.filter((f) => f.startsWith("task-") && f.endsWith(".md"));
7411
7789
  const tasks = [];
7412
7790
  for (const file of taskFiles) {
7413
- const filePath = path2.join(this.tasksDirectory, file);
7791
+ const filePath = path3.join(this.tasksDirectory, file);
7414
7792
  let content;
7415
7793
  try {
7416
7794
  content = await fs.readFile(filePath, "utf-8");
@@ -7741,23 +8119,23 @@ function slugify(text) {
7741
8119
 
7742
8120
  // ../utils/dist/ui.js
7743
8121
  init_esm_shims();
7744
- import chalk from "chalk";
7745
- var colors = {
7746
- primary: chalk.blue,
7747
- secondary: chalk.gray,
7748
- success: chalk.green,
7749
- warning: chalk.yellow,
7750
- error: chalk.red,
7751
- info: chalk.cyan,
7752
- highlight: chalk.magenta,
7753
- normal: chalk.white
8122
+ import chalk3 from "chalk";
8123
+ var colors2 = {
8124
+ primary: chalk3.blue,
8125
+ secondary: chalk3.gray,
8126
+ success: chalk3.green,
8127
+ warning: chalk3.yellow,
8128
+ error: chalk3.red,
8129
+ info: chalk3.cyan,
8130
+ highlight: chalk3.magenta,
8131
+ normal: chalk3.white
7754
8132
  };
7755
8133
 
7756
8134
  // ../file-system-task-provider/dist/fs-task-provider.js
7757
8135
  init_i18n();
7758
8136
  init_task_validator();
7759
8137
  import { promises as fs2 } from "fs";
7760
- import path3 from "path";
8138
+ import path4 from "path";
7761
8139
  var FileSystemTaskProvider = class {
7762
8140
  tasksDirectory;
7763
8141
  userRegistry;
@@ -7775,7 +8153,7 @@ var FileSystemTaskProvider = class {
7775
8153
  if (!taskFile) {
7776
8154
  return void 0;
7777
8155
  }
7778
- const filePath = path3.join(this.tasksDirectory, taskFile);
8156
+ const filePath = path4.join(this.tasksDirectory, taskFile);
7779
8157
  const content = await fs2.readFile(filePath, "utf-8");
7780
8158
  const titleMatch = content.match(/^# .*Task.*?[—-]\s*(.+)$/im);
7781
8159
  const title = titleMatch ? titleMatch[1].trim() : "Untitled";
@@ -7849,7 +8227,7 @@ var FileSystemTaskProvider = class {
7849
8227
  );
7850
8228
  const tasks = [];
7851
8229
  for (const file of taskFiles) {
7852
- const filePath = path3.join(this.tasksDirectory, file);
8230
+ const filePath = path4.join(this.tasksDirectory, file);
7853
8231
  const content = await fs2.readFile(filePath, "utf-8");
7854
8232
  const idMatch = file.match(/^task-(\d+)-/);
7855
8233
  const taskId = idMatch ? idMatch[1] : "unknown";
@@ -7908,7 +8286,7 @@ var FileSystemTaskProvider = class {
7908
8286
  const taskId = String(nextNumber).padStart(3, "0");
7909
8287
  const titleSlug = slugify(options.title);
7910
8288
  const fileName = `task-${taskId}-${titleSlug}.md`;
7911
- const filePath = path3.join(this.tasksDirectory, fileName);
8289
+ const filePath = path4.join(this.tasksDirectory, fileName);
7912
8290
  const fileExists = await fs2.access(filePath).then(() => true).catch(() => false);
7913
8291
  if (fileExists) {
7914
8292
  throw new Error(`Task file already exists: ${fileName}`);
@@ -7961,7 +8339,7 @@ ${i18n.notesPlaceholder}
7961
8339
  }
7962
8340
  async lint(fix) {
7963
8341
  const files = await fs2.readdir(this.tasksDirectory);
7964
- const taskFiles = files.filter((file) => file.startsWith("task-") && file.endsWith(".md")).map((file) => path3.join(this.tasksDirectory, file));
8342
+ const taskFiles = files.filter((file) => file.startsWith("task-") && file.endsWith(".md")).map((file) => path4.join(this.tasksDirectory, file));
7965
8343
  if (fix) {
7966
8344
  let fixedCount = 0;
7967
8345
  for (const filePath of taskFiles) {
@@ -7989,14 +8367,14 @@ init_i18n();
7989
8367
  // ../file-system-task-provider/dist/user-registry.js
7990
8368
  init_esm_shims();
7991
8369
  import { promises as fs3 } from "fs";
7992
- import path4 from "path";
8370
+ import path5 from "path";
7993
8371
  var UserRegistry = class {
7994
8372
  config;
7995
8373
  users = /* @__PURE__ */ new Map();
7996
8374
  usersFilePath;
7997
8375
  constructor(config) {
7998
8376
  this.config = config;
7999
- this.usersFilePath = path4.join(config.taskinDir, "users.json");
8377
+ this.usersFilePath = path5.join(config.taskinDir, "users.json");
8000
8378
  }
8001
8379
  /**
8002
8380
  * Load users from users.json
@@ -8480,97 +8858,11 @@ init_esm_shims();
8480
8858
  init_esm_shims();
8481
8859
 
8482
8860
  // src/commands/dashboard.ts
8483
- import chalk3 from "chalk";
8861
+ import chalk4 from "chalk";
8484
8862
  import express from "express";
8485
8863
  import { createServer } from "http";
8486
8864
  import path6 from "path";
8487
8865
  import { fileURLToPath as fileURLToPath2 } from "url";
8488
-
8489
- // src/lib/colors.ts
8490
- init_esm_shims();
8491
- import chalk2 from "chalk";
8492
- var colors2 = {
8493
- info: chalk2.cyan,
8494
- success: chalk2.green,
8495
- warning: chalk2.yellow,
8496
- error: chalk2.red,
8497
- highlight: chalk2.bold.white,
8498
- secondary: chalk2.gray,
8499
- normal: chalk2.white
8500
- };
8501
- var icons = {
8502
- rocket: "\u{1F680}",
8503
- list: "\u{1F4CA}",
8504
- check: "\u2705",
8505
- pause: "\u23F8\uFE0F",
8506
- info: "\u{1F4A1}",
8507
- task: "\u{1F4CB}",
8508
- gear: "\u2699\uFE0F"
8509
- };
8510
- function printHeader(title, icon) {
8511
- console.log();
8512
- console.log(colors2.highlight("\u2550".repeat(60)));
8513
- console.log(colors2.highlight(`${icon} ${title}`));
8514
- console.log(colors2.highlight("\u2550".repeat(60)));
8515
- console.log();
8516
- }
8517
- function success(message) {
8518
- console.log(colors2.success(`\u2713 ${message}`));
8519
- }
8520
- function error(message) {
8521
- console.error(colors2.error(`\u2717 ${message}`));
8522
- }
8523
- function info(message) {
8524
- console.log(colors2.info(`\u2139 ${message}`));
8525
- }
8526
-
8527
- // src/lib/project-check.ts
8528
- init_esm_shims();
8529
- import { existsSync } from "fs";
8530
- import path5 from "path";
8531
- function isTaskinProject(cwd = process.cwd()) {
8532
- return existsSync(path5.join(cwd, ".taskin.json"));
8533
- }
8534
- function requireTaskinProject(cwd = process.cwd()) {
8535
- if (!isTaskinProject(cwd)) {
8536
- error(
8537
- 'This directory is not initialized as a taskin project. Run "taskin init" first.'
8538
- );
8539
- process.exit(1);
8540
- }
8541
- }
8542
-
8543
- // src/commands/define-command/index.ts
8544
- init_esm_shims();
8545
-
8546
- // src/commands/define-command/define-command.ts
8547
- init_esm_shims();
8548
- var defineCommand = (config) => {
8549
- return (program2) => {
8550
- const cmd = program2.command(config.name).description(config.description);
8551
- if (config.alias) {
8552
- cmd.alias(config.alias);
8553
- }
8554
- config.options?.forEach((opt) => {
8555
- cmd.option(opt.flags, opt.description, opt.defaultValue);
8556
- });
8557
- cmd.action(async (...args) => {
8558
- try {
8559
- await config.handler(...args);
8560
- } catch (err) {
8561
- error(
8562
- `Failed to execute command: ${err instanceof Error ? err.message : String(err)}`
8563
- );
8564
- process.exit(1);
8565
- }
8566
- });
8567
- };
8568
- };
8569
-
8570
- // src/commands/define-command/define-command.types.ts
8571
- init_esm_shims();
8572
-
8573
- // src/commands/dashboard.ts
8574
8866
  var __filename2 = fileURLToPath2(import.meta.url);
8575
8867
  var __dirname2 = path6.dirname(__filename2);
8576
8868
  var dashboardCommand = defineCommand({
@@ -8754,17 +9046,17 @@ async function startDashboard(options) {
8754
9046
  });
8755
9047
  }
8756
9048
  info("");
8757
- info(chalk3.bold("Dashboard Controls:"));
9049
+ info(chalk4.bold("Dashboard Controls:"));
8758
9050
  info(
8759
- ` \u2022 Dashboard: ${chalk3.cyan(`http://${host}:${port}${filterQuery}`)}`
9051
+ ` \u2022 Dashboard: ${chalk4.cyan(`http://${host}:${port}${filterQuery}`)}`
8760
9052
  );
8761
- info(` \u2022 WebSocket: ${chalk3.cyan(`ws://${host}:${wsPort}`)}`);
9053
+ info(` \u2022 WebSocket: ${chalk4.cyan(`ws://${host}:${wsPort}`)}`);
8762
9054
  if (options.filterOpen) {
8763
- info(` \u2022 Filter: ${chalk3.yellow("Open tasks only")}`);
9055
+ info(` \u2022 Filter: ${chalk4.yellow("Open tasks only")}`);
8764
9056
  } else if (options.filterClosed) {
8765
- info(` \u2022 Filter: ${chalk3.yellow("Closed tasks only")}`);
9057
+ info(` \u2022 Filter: ${chalk4.yellow("Closed tasks only")}`);
8766
9058
  }
8767
- info(` \u2022 Press ${chalk3.bold("Ctrl+C")} to stop both servers`);
9059
+ info(` \u2022 Press ${chalk4.bold("Ctrl+C")} to stop both servers`);
8768
9060
  info("");
8769
9061
  const cleanup = async () => {
8770
9062
  info("\nShutting down servers...");
@@ -9198,7 +9490,7 @@ import path9 from "path";
9198
9490
 
9199
9491
  // src/lib/sound-player.ts
9200
9492
  init_esm_shims();
9201
- import { existsSync as existsSync2 } from "fs";
9493
+ import { existsSync as existsSync3 } from "fs";
9202
9494
  import path8 from "path";
9203
9495
  import player from "play-sound";
9204
9496
  var soundPlayer = player({});
@@ -9215,7 +9507,7 @@ function playSound(soundName) {
9215
9507
  // Custom sound in project root
9216
9508
  path8.join(process.cwd(), ".taskin", `${soundName}.mp3`)
9217
9509
  ];
9218
- const soundPath = possiblePaths.find((p) => existsSync2(p));
9510
+ const soundPath = possiblePaths.find((p) => existsSync3(p));
9219
9511
  if (!soundPath) {
9220
9512
  return;
9221
9513
  }
@@ -9282,28 +9574,28 @@ async function finishTask(taskId, options) {
9282
9574
  if (!options.skipUpdate) {
9283
9575
  const commitType = task.type || "feat";
9284
9576
  console.log(
9285
- colors2.secondary(
9577
+ colors.secondary(
9286
9578
  ` 1. Commit the status change: git add TASKS/task-${normalizedId}-*.md && git commit -m "docs(TASKS): task-${normalizedId} - atualiza status para done [skip-ci]"`
9287
9579
  )
9288
9580
  );
9289
- console.log(colors2.secondary(" 2. Review your changes"));
9581
+ console.log(colors.secondary(" 2. Review your changes"));
9290
9582
  console.log(
9291
- colors2.secondary(
9583
+ colors.secondary(
9292
9584
  ` 3. Commit your work: git add . && git commit -m "${commitType}(task-${normalizedId}): ${task.title}"`
9293
9585
  )
9294
9586
  );
9295
- console.log(colors2.secondary(" 4. Push: git push"));
9296
- console.log(colors2.secondary(" 5. Create a Pull Request"));
9587
+ console.log(colors.secondary(" 4. Push: git push"));
9588
+ console.log(colors.secondary(" 5. Create a Pull Request"));
9297
9589
  } else {
9298
9590
  const commitType = task.type || "feat";
9299
- console.log(colors2.secondary(" 1. Review your changes"));
9591
+ console.log(colors.secondary(" 1. Review your changes"));
9300
9592
  console.log(
9301
- colors2.secondary(
9593
+ colors.secondary(
9302
9594
  ` 2. Commit your work: git add . && git commit -m "${commitType}(task-${normalizedId}): ${task.title}"`
9303
9595
  )
9304
9596
  );
9305
- console.log(colors2.secondary(" 3. Push: git push"));
9306
- console.log(colors2.secondary(" 4. Create a Pull Request"));
9597
+ console.log(colors.secondary(" 3. Push: git push"));
9598
+ console.log(colors.secondary(" 4. Create a Pull Request"));
9307
9599
  }
9308
9600
  console.log();
9309
9601
  success("Great work! \u{1F680}");
@@ -9316,14 +9608,14 @@ async function finishTask(taskId, options) {
9316
9608
  // src/commands/init.ts
9317
9609
  init_esm_shims();
9318
9610
  import {
9319
- existsSync as existsSync4,
9611
+ existsSync as existsSync5,
9320
9612
  mkdirSync,
9321
- readFileSync,
9613
+ readFileSync as readFileSync2,
9322
9614
  readdirSync,
9323
- writeFileSync
9615
+ writeFileSync as writeFileSync2
9324
9616
  } from "fs";
9325
- import inquirer from "inquirer";
9326
- import { join } from "path";
9617
+ import inquirer2 from "inquirer";
9618
+ import { join as join2 } from "path";
9327
9619
 
9328
9620
  // src/lib/provider-installer/index.ts
9329
9621
  init_esm_shims();
@@ -9331,12 +9623,12 @@ init_esm_shims();
9331
9623
  // src/lib/provider-installer/provider-installer.ts
9332
9624
  init_esm_shims();
9333
9625
  import { execSync } from "child_process";
9334
- import { existsSync as existsSync3 } from "fs";
9626
+ import { existsSync as existsSync4 } from "fs";
9335
9627
  function detectPackageManager() {
9336
- if (existsSync3("pnpm-lock.yaml")) {
9628
+ if (existsSync4("pnpm-lock.yaml")) {
9337
9629
  return "pnpm";
9338
9630
  }
9339
- if (existsSync3("yarn.lock")) {
9631
+ if (existsSync4("yarn.lock")) {
9340
9632
  return "yarn";
9341
9633
  }
9342
9634
  return "npm";
@@ -9544,8 +9836,8 @@ var initCommand = defineCommand({
9544
9836
  async function initializeTaskin(options) {
9545
9837
  printHeader("Initializing Taskin", "\u{1F3AF}");
9546
9838
  const cwd = process.cwd();
9547
- const configFile = join(cwd, ".taskin.json");
9548
- if (existsSync4(configFile) && !options.force) {
9839
+ const configFile = join2(cwd, ".taskin.json");
9840
+ if (existsSync5(configFile) && !options.force) {
9549
9841
  error("Taskin is already initialized in this project");
9550
9842
  info("Use --force to reinitialize");
9551
9843
  process.exit(1);
@@ -9564,12 +9856,12 @@ async function initializeTaskin(options) {
9564
9856
  let providerId;
9565
9857
  if (options.provider) {
9566
9858
  providerId = options.provider;
9567
- info(`Using provider from command line: ${colors2.highlight(providerId)}`);
9859
+ info(`Using provider from command line: ${colors.highlight(providerId)}`);
9568
9860
  } else if (process.env.CI === "true") {
9569
9861
  providerId = "fs";
9570
9862
  info("CI environment detected, using default provider: fs");
9571
9863
  } else {
9572
- const response = await inquirer.prompt([
9864
+ const response = await inquirer2.prompt([
9573
9865
  {
9574
9866
  type: "list",
9575
9867
  name: "providerId",
@@ -9586,7 +9878,7 @@ async function initializeTaskin(options) {
9586
9878
  process.exit(1);
9587
9879
  }
9588
9880
  console.log();
9589
- info(`Setting up task provider: ${colors2.highlight(selectedProvider.name)}`);
9881
+ info(`Setting up task provider: ${colors.highlight(selectedProvider.name)}`);
9590
9882
  console.log();
9591
9883
  const bundledProviders = ["fs"];
9592
9884
  if (!bundledProviders.includes(selectedProvider.id)) {
@@ -9601,14 +9893,14 @@ async function initializeTaskin(options) {
9601
9893
  }
9602
9894
  };
9603
9895
  info("Creating configuration file...");
9604
- writeFileSync(configFile, JSON.stringify(config, null, 2), "utf-8");
9605
- success(`\u2713 Created ${colors2.highlight(".taskin.json")}`);
9606
- const gitignorePath = join(cwd, ".gitignore");
9607
- if (existsSync4(gitignorePath)) {
9608
- const gitignoreContent = readFileSync(gitignorePath, "utf-8");
9896
+ writeFileSync2(configFile, JSON.stringify(config, null, 2), "utf-8");
9897
+ success(`\u2713 Created ${colors.highlight(".taskin.json")}`);
9898
+ const gitignorePath = join2(cwd, ".gitignore");
9899
+ if (existsSync5(gitignorePath)) {
9900
+ const gitignoreContent = readFileSync2(gitignorePath, "utf-8");
9609
9901
  if (!gitignoreContent.includes(".taskin.json")) {
9610
9902
  info("Adding .taskin.json to .gitignore...");
9611
- writeFileSync(
9903
+ writeFileSync2(
9612
9904
  gitignorePath,
9613
9905
  `${gitignoreContent}
9614
9906
  # Taskin configuration
@@ -9623,13 +9915,13 @@ async function initializeTaskin(options) {
9623
9915
  success("\u{1F389} Taskin initialized successfully!");
9624
9916
  console.log();
9625
9917
  info("Next steps:");
9626
- console.log(colors2.secondary(" 1. Run: taskin list"));
9918
+ console.log(colors.secondary(" 1. Run: taskin list"));
9627
9919
  console.log(
9628
- colors2.secondary(
9920
+ colors.secondary(
9629
9921
  selectedProvider.id === "fs" ? " 2. Create a new task: taskin new (interactive mode)" : ` 2. Tasks will be synced with ${selectedProvider.name}`
9630
9922
  )
9631
9923
  );
9632
- console.log(colors2.secondary(" 3. Start working: taskin start <task-id>"));
9924
+ console.log(colors.secondary(" 3. Start working: taskin start <task-id>"));
9633
9925
  console.log();
9634
9926
  info("For more information, run: taskin --help");
9635
9927
  console.log();
@@ -9653,29 +9945,29 @@ async function setupProviderConfig(provider, cwd) {
9653
9945
  }
9654
9946
  })
9655
9947
  );
9656
- const answers = await inquirer.prompt(questions);
9948
+ const answers = await inquirer2.prompt(questions);
9657
9949
  console.log();
9658
9950
  success(`\u2713 ${provider.name} configuration saved`);
9659
9951
  return answers;
9660
9952
  }
9661
9953
  async function setupFileSystemProvider(cwd) {
9662
- const tasksDir = join(cwd, "TASKS");
9663
- if (!existsSync4(tasksDir)) {
9954
+ const tasksDir = join2(cwd, "TASKS");
9955
+ if (!existsSync5(tasksDir)) {
9664
9956
  info(`Creating TASKS directory...`);
9665
9957
  mkdirSync(tasksDir, { recursive: true });
9666
- success(`\u2713 Created ${colors2.highlight("TASKS/")} directory`);
9958
+ success(`\u2713 Created ${colors.highlight("TASKS/")} directory`);
9667
9959
  } else {
9668
- info(`${colors2.highlight("TASKS/")} directory already exists`);
9960
+ info(`${colors.highlight("TASKS/")} directory already exists`);
9669
9961
  success("\u2713 Directory is ready to use");
9670
9962
  }
9671
9963
  const existingTask001 = readdirSync(tasksDir).find(
9672
9964
  (file) => file.startsWith("task-001-") && file.endsWith(".md")
9673
9965
  );
9674
9966
  if (existingTask001) {
9675
- info(`Sample task already exists: ${colors2.highlight(existingTask001)}`);
9967
+ info(`Sample task already exists: ${colors.highlight(existingTask001)}`);
9676
9968
  info("Skipping sample task creation (users already know the pattern)");
9677
9969
  } else {
9678
- const sampleTaskFile = join(tasksDir, "task-001-setup-project.md");
9970
+ const sampleTaskFile = join2(tasksDir, "task-001-setup-project.md");
9679
9971
  info("Creating sample task...");
9680
9972
  const sampleTask = `# Task 001 \u2014 Setup Project
9681
9973
 
@@ -9697,9 +9989,9 @@ This is a sample task created during Taskin initialization.
9697
9989
 
9698
9990
  You can edit or delete this file. Use \`taskin list\` to see all tasks.
9699
9991
  `;
9700
- writeFileSync(sampleTaskFile, sampleTask, "utf-8");
9992
+ writeFileSync2(sampleTaskFile, sampleTask, "utf-8");
9701
9993
  success(
9702
- `\u2713 Created sample task ${colors2.highlight("task-001-setup-project.md")}`
9994
+ `\u2713 Created sample task ${colors.highlight("task-001-setup-project.md")}`
9703
9995
  );
9704
9996
  }
9705
9997
  return {
@@ -9709,8 +10001,8 @@ You can edit or delete this file. Use \`taskin list\` to see all tasks.
9709
10001
 
9710
10002
  // src/commands/lint.ts
9711
10003
  init_esm_shims();
9712
- import chalk4 from "chalk";
9713
- import { join as join2 } from "path";
10004
+ import chalk5 from "chalk";
10005
+ import { join as join3 } from "path";
9714
10006
  var lintCommand = defineCommand({
9715
10007
  name: "lint",
9716
10008
  description: "\u{1F50D} Validate task markdown files",
@@ -9730,7 +10022,7 @@ var lintCommand = defineCommand({
9730
10022
  }
9731
10023
  });
9732
10024
  async function executeLint(options) {
9733
- const tasksDir = options.path || join2(process.cwd(), "TASKS");
10025
+ const tasksDir = options.path || join3(process.cwd(), "TASKS");
9734
10026
  if (options.fix) {
9735
10027
  console.log(`\u{1F527} Fixing task files in: ${tasksDir}
9736
10028
  `);
@@ -9739,26 +10031,26 @@ async function executeLint(options) {
9739
10031
  `);
9740
10032
  }
9741
10033
  const userRegistry = new UserRegistry({
9742
- taskinDir: join2(process.cwd(), ".taskin")
10034
+ taskinDir: join3(process.cwd(), ".taskin")
9743
10035
  });
9744
10036
  await userRegistry.load();
9745
10037
  const provider = new FileSystemTaskProvider(tasksDir, userRegistry);
9746
10038
  const result = await provider.lint(options.fix);
9747
10039
  if (result.valid) {
9748
- console.log(chalk4.green(`\u2705 All task files are valid!
10040
+ console.log(chalk5.green(`\u2705 All task files are valid!
9749
10041
  `));
9750
10042
  } else {
9751
- console.log(chalk4.red(`
10043
+ console.log(chalk5.red(`
9752
10044
  \u274C Found ${result.issues.length} issue(s):
9753
10045
  `));
9754
10046
  for (const issue of result.issues) {
9755
- console.log(chalk4.yellow(` ${issue.file}: ${issue.message}`));
10047
+ console.log(chalk5.yellow(` ${issue.file}: ${issue.message}`));
9756
10048
  }
9757
10049
  console.log();
9758
10050
  }
9759
10051
  if (!result.valid && !options.fix) {
9760
10052
  console.log(
9761
- chalk4.blue(`\u{1F4A1} Run with --fix to automatically fix format issues
10053
+ chalk5.blue(`\u{1F4A1} Run with --fix to automatically fix format issues
9762
10054
  `)
9763
10055
  );
9764
10056
  process.exit(1);
@@ -9809,7 +10101,7 @@ async function listTasks(filter, options) {
9809
10101
  const taskProvider = new FileSystemTaskProvider(tasksDir, userRegistry);
9810
10102
  const tasks = await taskProvider.getAllTasks();
9811
10103
  if (tasks.length === 0) {
9812
- console.log(colors2.warning("No tasks found in TASKS/ directory"));
10104
+ console.log(colors.warning("No tasks found in TASKS/ directory"));
9813
10105
  return;
9814
10106
  }
9815
10107
  const openStatuses = ["pending", "in-progress", "blocked"];
@@ -9841,24 +10133,24 @@ async function listTasks(filter, options) {
9841
10133
  );
9842
10134
  }
9843
10135
  if (filteredTasks.length === 0) {
9844
- console.log(colors2.warning("No tasks match the filters"));
10136
+ console.log(colors.warning("No tasks match the filters"));
9845
10137
  return;
9846
10138
  }
9847
10139
  console.log(
9848
- colors2.highlight(
10140
+ colors.highlight(
9849
10141
  `${"ID".padEnd(15)} ${"Status".padEnd(15)} ${"Type".padEnd(12)} ${"User".padEnd(15)} ${"Title"}`
9850
10142
  )
9851
10143
  );
9852
- console.log(colors2.secondary("\u2500".repeat(100)));
10144
+ console.log(colors.secondary("\u2500".repeat(100)));
9853
10145
  filteredTasks.forEach((task) => {
9854
10146
  const statusColor = getStatusColor(task.status);
9855
10147
  const typeColor = getTypeColor(task.type);
9856
10148
  console.log(
9857
- `${colors2.info(task.id.padEnd(15))} ${statusColor(task.status.padEnd(15))} ${typeColor(task.type.padEnd(12))} ${colors2.secondary((task.assignee?.name || "unassigned").padEnd(15))} ${colors2.normal(task.title)}`
10149
+ `${colors.info(task.id.padEnd(15))} ${statusColor(task.status.padEnd(15))} ${typeColor(task.type.padEnd(12))} ${colors.secondary((task.assignee?.name || "unassigned").padEnd(15))} ${colors.normal(task.title)}`
9858
10150
  );
9859
10151
  });
9860
10152
  console.log();
9861
- console.log(colors2.secondary("\u2500".repeat(100)));
10153
+ console.log(colors.secondary("\u2500".repeat(100)));
9862
10154
  const statusCounts = {
9863
10155
  pending: filteredTasks.filter((t) => t.status === "pending").length,
9864
10156
  "in-progress": filteredTasks.filter((t) => t.status === "in-progress").length,
@@ -9866,7 +10158,7 @@ async function listTasks(filter, options) {
9866
10158
  blocked: filteredTasks.filter((t) => t.status === "blocked").length
9867
10159
  };
9868
10160
  console.log(
9869
- colors2.info(
10161
+ colors.info(
9870
10162
  `\u{1F4CA} Total: ${filteredTasks.length} tasks | \u23F3 Pending: ${statusCounts.pending} | \u{1F680} In Progress: ${statusCounts["in-progress"]} | \u2705 Done: ${statusCounts.done} | \u{1F6AB} Blocked: ${statusCounts.blocked}`
9871
10163
  )
9872
10164
  );
@@ -9875,33 +10167,33 @@ async function listTasks(filter, options) {
9875
10167
  function getStatusColor(status) {
9876
10168
  switch (status) {
9877
10169
  case "pending":
9878
- return colors2.secondary;
10170
+ return colors.secondary;
9879
10171
  case "in-progress":
9880
- return colors2.info;
10172
+ return colors.info;
9881
10173
  case "done":
9882
- return colors2.success;
10174
+ return colors.success;
9883
10175
  case "blocked":
9884
- return colors2.error;
10176
+ return colors.error;
9885
10177
  default:
9886
- return colors2.normal;
10178
+ return colors.normal;
9887
10179
  }
9888
10180
  }
9889
10181
  function getTypeColor(type) {
9890
10182
  switch (type) {
9891
10183
  case "feat":
9892
- return colors2.success;
10184
+ return colors.success;
9893
10185
  case "fix":
9894
- return colors2.error;
10186
+ return colors.error;
9895
10187
  case "refactor":
9896
- return colors2.warning;
10188
+ return colors.warning;
9897
10189
  case "docs":
9898
- return colors2.info;
10190
+ return colors.info;
9899
10191
  case "test":
9900
- return colors2.secondary;
10192
+ return colors.secondary;
9901
10193
  case "chore":
9902
- return colors2.normal;
10194
+ return colors.normal;
9903
10195
  default:
9904
- return colors2.normal;
10196
+ return colors.normal;
9905
10197
  }
9906
10198
  }
9907
10199
 
@@ -13633,7 +13925,7 @@ Let me start by marking the task as done using the finish_task tool.`
13633
13925
  init_esm_shims();
13634
13926
 
13635
13927
  // src/commands/mcp-server.ts
13636
- import chalk5 from "chalk";
13928
+ import chalk6 from "chalk";
13637
13929
  import path11 from "path";
13638
13930
  var mcpServerCommand = defineCommand({
13639
13931
  name: "mcp-server",
@@ -13679,27 +13971,27 @@ async function startMCPServer(options) {
13679
13971
  await mcpServer.connect({ transport });
13680
13972
  success("\u2713 MCP server started successfully");
13681
13973
  info("");
13682
- info(chalk5.bold("Server Information:"));
13683
- info(` \u2022 Transport: ${chalk5.cyan(transport)}`);
13684
- info(` \u2022 Debug: ${chalk5.cyan(debug ? "enabled" : "disabled")}`);
13974
+ info(chalk6.bold("Server Information:"));
13975
+ info(` \u2022 Transport: ${chalk6.cyan(transport)}`);
13976
+ info(` \u2022 Debug: ${chalk6.cyan(debug ? "enabled" : "disabled")}`);
13685
13977
  info("");
13686
- info(chalk5.bold("Available Tools:"));
13687
- info(` \u2022 ${chalk5.green("start_task")} - Start working on a task`);
13688
- info(` \u2022 ${chalk5.green("finish_task")} - Mark a task as finished`);
13978
+ info(chalk6.bold("Available Tools:"));
13979
+ info(` \u2022 ${chalk6.green("start_task")} - Start working on a task`);
13980
+ info(` \u2022 ${chalk6.green("finish_task")} - Mark a task as finished`);
13689
13981
  info("");
13690
- info(chalk5.bold("Available Prompts:"));
13982
+ info(chalk6.bold("Available Prompts:"));
13691
13983
  info(
13692
- ` \u2022 ${chalk5.green("start-task-workflow")} - Guide for starting tasks`
13984
+ ` \u2022 ${chalk6.green("start-task-workflow")} - Guide for starting tasks`
13693
13985
  );
13694
13986
  info(
13695
- ` \u2022 ${chalk5.green("finish-task-workflow")} - Guide for finishing tasks`
13987
+ ` \u2022 ${chalk6.green("finish-task-workflow")} - Guide for finishing tasks`
13696
13988
  );
13697
- info(` \u2022 ${chalk5.green("task-summary")} - Get task summary and insights`);
13989
+ info(` \u2022 ${chalk6.green("task-summary")} - Get task summary and insights`);
13698
13990
  info("");
13699
- info(chalk5.bold("Available Resources:"));
13700
- info(` \u2022 ${chalk5.green("taskin://tasks")} - Access all tasks`);
13991
+ info(chalk6.bold("Available Resources:"));
13992
+ info(` \u2022 ${chalk6.green("taskin://tasks")} - Access all tasks`);
13701
13993
  info("");
13702
- info(`Press ${chalk5.bold("Ctrl+C")} to stop the server`);
13994
+ info(`Press ${chalk6.bold("Ctrl+C")} to stop the server`);
13703
13995
  info("");
13704
13996
  const cleanup = async () => {
13705
13997
  info("\nShutting down MCP server...");
@@ -13724,8 +14016,8 @@ async function startMCPServer(options) {
13724
14016
 
13725
14017
  // src/commands/new.ts
13726
14018
  init_esm_shims();
13727
- import { existsSync as existsSync5, mkdirSync as mkdirSync2, writeFileSync as writeFileSync2 } from "fs";
13728
- import inquirer2 from "inquirer";
14019
+ import { existsSync as existsSync6, mkdirSync as mkdirSync2, writeFileSync as writeFileSync3 } from "fs";
14020
+ import inquirer3 from "inquirer";
13729
14021
  import path12 from "path";
13730
14022
  var createCommand = defineCommand({
13731
14023
  name: "new",
@@ -13760,7 +14052,7 @@ async function createTask(options) {
13760
14052
  if (!options.type && !options.title) {
13761
14053
  info("Interactive mode - Answer the questions below:");
13762
14054
  console.log();
13763
- const answers = await inquirer2.prompt([
14055
+ const answers = await inquirer3.prompt([
13764
14056
  {
13765
14057
  type: "list",
13766
14058
  name: "type",
@@ -13819,7 +14111,7 @@ async function createTask(options) {
13819
14111
  return;
13820
14112
  }
13821
14113
  const tasksDir = path12.join(process.cwd(), "TASKS");
13822
- if (!existsSync5(tasksDir)) {
14114
+ if (!existsSync6(tasksDir)) {
13823
14115
  mkdirSync2(tasksDir, { recursive: true });
13824
14116
  }
13825
14117
  const monorepoRoot = path12.dirname(tasksDir);
@@ -13837,7 +14129,7 @@ async function createTask(options) {
13837
14129
  const titleSlug = slugify(options.title);
13838
14130
  const fileName = `task-${taskId}-${titleSlug}.md`;
13839
14131
  const filePath = path12.join(tasksDir, fileName);
13840
- if (existsSync5(filePath)) {
14132
+ if (existsSync6(filePath)) {
13841
14133
  error(`Task file already exists: ${fileName}`);
13842
14134
  return;
13843
14135
  }
@@ -13848,17 +14140,17 @@ async function createTask(options) {
13848
14140
  description: options.description || "",
13849
14141
  user: options.user || "A definir"
13850
14142
  });
13851
- writeFileSync2(filePath, taskContent, "utf-8");
14143
+ writeFileSync3(filePath, taskContent, "utf-8");
13852
14144
  console.log();
13853
14145
  success(`Task ${taskId} created successfully!`);
13854
- console.log(colors2.secondary(`\u{1F4C4} File: ${fileName}`));
13855
- console.log(colors2.secondary(`\u{1F4C1} Path: ${filePath}`));
14146
+ console.log(colors.secondary(`\u{1F4C4} File: ${fileName}`));
14147
+ console.log(colors.secondary(`\u{1F4C1} Path: ${filePath}`));
13856
14148
  console.log();
13857
- console.log(colors2.info("Next steps:"));
13858
- console.log(colors2.normal(` 1. Edit the task file to add more details`));
14149
+ console.log(colors.info("Next steps:"));
14150
+ console.log(colors.normal(` 1. Edit the task file to add more details`));
13859
14151
  console.log(
13860
- colors2.normal(
13861
- ` 2. Run ${colors2.highlight("taskin start " + taskId)} to begin working on it`
14152
+ colors.normal(
14153
+ ` 2. Run ${colors.highlight("taskin start " + taskId)} to begin working on it`
13862
14154
  )
13863
14155
  );
13864
14156
  console.log();
@@ -13936,12 +14228,12 @@ async function pauseTask(taskId, options) {
13936
14228
  const commitMessage = options.message || `WIP: task-${normalizedId} - ${task.title}`;
13937
14229
  if (options.skipCommit) {
13938
14230
  info("Would create commit with message:");
13939
- console.log(colors2.highlight(` "${commitMessage}"`));
14231
+ console.log(colors.highlight(` "${commitMessage}"`));
13940
14232
  console.log();
13941
14233
  info("Use without --skip-commit to actually commit");
13942
14234
  } else {
13943
14235
  info("Creating commit...");
13944
- console.log(colors2.secondary(` Message: "${commitMessage}"`));
14236
+ console.log(colors.secondary(` Message: "${commitMessage}"`));
13945
14237
  console.log();
13946
14238
  try {
13947
14239
  execSync2("git add -A", { cwd: process.cwd(), stdio: "ignore" });
@@ -13958,9 +14250,9 @@ async function pauseTask(taskId, options) {
13958
14250
  info("Status updated to pending");
13959
14251
  console.log();
13960
14252
  info("Next steps:");
13961
- console.log(colors2.secondary(" 1. Switch to another task"));
14253
+ console.log(colors.secondary(" 1. Switch to another task"));
13962
14254
  console.log(
13963
- colors2.secondary(" 2. Or continue later with the same branch")
14255
+ colors.secondary(" 2. Or continue later with the same branch")
13964
14256
  );
13965
14257
  if (options.sound !== false) {
13966
14258
  playSound("stop");
@@ -14027,17 +14319,17 @@ async function startTask(taskId, _options) {
14027
14319
  console.log();
14028
14320
  info("Next steps (suggestions):");
14029
14321
  console.log(
14030
- colors2.secondary(
14322
+ colors.secondary(
14031
14323
  ` 1. Commit the status change: git add TASKS/task-${normalizedId}-*.md && git commit -m "docs(TASKS): task-${normalizedId} - atualiza status para in-progress [skip ci]"`
14032
14324
  )
14033
14325
  );
14034
14326
  console.log(
14035
- colors2.secondary(
14327
+ colors.secondary(
14036
14328
  " 2. Create a branch: git checkout -b feat/task-" + normalizedId
14037
14329
  )
14038
14330
  );
14039
- console.log(colors2.secondary(" 3. Start coding! \u{1F4BB}"));
14040
- console.log(colors2.secondary(' 4. Use "taskin pause" to save progress'));
14331
+ console.log(colors.secondary(" 3. Start coding! \u{1F4BB}"));
14332
+ console.log(colors.secondary(' 4. Use "taskin pause" to save progress'));
14041
14333
  console.log();
14042
14334
  if (_options.sound !== false) {
14043
14335
  playSound("start");
@@ -14046,7 +14338,7 @@ async function startTask(taskId, _options) {
14046
14338
 
14047
14339
  // src/commands/stats.ts
14048
14340
  init_esm_shims();
14049
- import chalk6 from "chalk";
14341
+ import chalk7 from "chalk";
14050
14342
  import path15 from "path";
14051
14343
  var statsCommand = defineCommand({
14052
14344
  name: "stats",
@@ -14109,27 +14401,27 @@ async function showStats(options) {
14109
14401
  displayUserStats(stats, options.detailed);
14110
14402
  }
14111
14403
  } catch (error2) {
14112
- console.error(chalk6.red("\n\u274C Error fetching stats:"), error2);
14404
+ console.error(chalk7.red("\n\u274C Error fetching stats:"), error2);
14113
14405
  process.exit(1);
14114
14406
  }
14115
14407
  }
14116
14408
  function displayUserStats(stats, detailed = false) {
14117
14409
  console.log(
14118
- `${chalk6.dim("Period:")} ${stats.period} (${formatDate(stats.periodStart)} to ${formatDate(stats.periodEnd)})
14410
+ `${chalk7.dim("Period:")} ${stats.period} (${formatDate(stats.periodStart)} to ${formatDate(stats.periodEnd)})
14119
14411
  `
14120
14412
  );
14121
- console.log(chalk6.bold("\u{1F4DD} Code Metrics"));
14413
+ console.log(chalk7.bold("\u{1F4DD} Code Metrics"));
14122
14414
  console.log(
14123
- ` ${chalk6.green("+")}${stats.codeMetrics.linesAdded} lines added`
14415
+ ` ${chalk7.green("+")}${stats.codeMetrics.linesAdded} lines added`
14124
14416
  );
14125
14417
  console.log(
14126
- ` ${chalk6.red("-")}${stats.codeMetrics.linesRemoved} lines removed`
14418
+ ` ${chalk7.red("-")}${stats.codeMetrics.linesRemoved} lines removed`
14127
14419
  );
14128
- console.log(` ${chalk6.cyan("=")}${stats.codeMetrics.netChange} net change`);
14420
+ console.log(` ${chalk7.cyan("=")}${stats.codeMetrics.netChange} net change`);
14129
14421
  console.log(` \u{1F4C1} ${stats.codeMetrics.filesChanged} files changed`);
14130
14422
  console.log(` \u{1F4BE} ${stats.codeMetrics.commits} commits
14131
14423
  `);
14132
- console.log(chalk6.bold("\u{1F3AF} Contribution"));
14424
+ console.log(chalk7.bold("\u{1F3AF} Contribution"));
14133
14425
  console.log(
14134
14426
  ` \u2705 ${stats.contributionMetrics.tasksCompleted} tasks completed`
14135
14427
  );
@@ -14137,7 +14429,7 @@ function displayUserStats(stats, detailed = false) {
14137
14429
  ` \u{1F4CA} ${stats.contributionMetrics.activityFrequency.toFixed(2)} commits/day
14138
14430
  `
14139
14431
  );
14140
- console.log(chalk6.bold("\u26A1 Engagement"));
14432
+ console.log(chalk7.bold("\u26A1 Engagement"));
14141
14433
  console.log(
14142
14434
  ` \u{1F525} ${(stats.engagementMetrics.completionRate * 100).toFixed(1)}% completion rate`
14143
14435
  );
@@ -14146,7 +14438,7 @@ function displayUserStats(stats, detailed = false) {
14146
14438
  `
14147
14439
  );
14148
14440
  if (detailed) {
14149
- console.log(chalk6.bold("\u23F0 Temporal Patterns"));
14441
+ console.log(chalk7.bold("\u23F0 Temporal Patterns"));
14150
14442
  console.log(" By Day of Week:");
14151
14443
  const days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
14152
14444
  Object.entries(stats.temporalMetrics.byDayOfWeek).forEach(
@@ -14179,25 +14471,25 @@ function displayUserStats(stats, detailed = false) {
14179
14471
  }
14180
14472
  function displayTeamStats(stats, detailed = false) {
14181
14473
  console.log(
14182
- `${chalk6.dim("Period:")} ${stats.period} (${formatDate(stats.periodStart)} to ${formatDate(stats.periodEnd)})
14474
+ `${chalk7.dim("Period:")} ${stats.period} (${formatDate(stats.periodStart)} to ${formatDate(stats.periodEnd)})
14183
14475
  `
14184
14476
  );
14185
- console.log(chalk6.bold("\u{1F465} Team Overview"));
14477
+ console.log(chalk7.bold("\u{1F465} Team Overview"));
14186
14478
  console.log(` \u{1F464} ${stats.totalContributors} contributors`);
14187
14479
  console.log(` \u{1F4BE} ${stats.totalCommits} total commits`);
14188
14480
  console.log(` \u2705 ${stats.totalTasksCompleted} tasks completed
14189
14481
  `);
14190
- console.log(chalk6.bold("\u{1F4DD} Code Metrics"));
14482
+ console.log(chalk7.bold("\u{1F4DD} Code Metrics"));
14191
14483
  console.log(
14192
- ` ${chalk6.green("+")}${stats.codeMetrics.linesAdded} lines added`
14484
+ ` ${chalk7.green("+")}${stats.codeMetrics.linesAdded} lines added`
14193
14485
  );
14194
14486
  console.log(
14195
- ` ${chalk6.red("-")}${stats.codeMetrics.linesRemoved} lines removed`
14487
+ ` ${chalk7.red("-")}${stats.codeMetrics.linesRemoved} lines removed`
14196
14488
  );
14197
14489
  console.log(` \u{1F4C1} ${stats.codeMetrics.filesChanged} files changed
14198
14490
  `);
14199
14491
  if (detailed && stats.contributors.length > 0) {
14200
- console.log(chalk6.bold("\u{1F3C6} Top Contributors"));
14492
+ console.log(chalk7.bold("\u{1F3C6} Top Contributors"));
14201
14493
  stats.contributors.sort((a, b) => {
14202
14494
  if (b.commits !== a.commits) {
14203
14495
  return b.commits - a.commits;
@@ -14214,24 +14506,24 @@ function displayTeamStats(stats, detailed = false) {
14214
14506
  }
14215
14507
  }
14216
14508
  function displayTaskStats(stats, _detailed = false) {
14217
- console.log(`${chalk6.dim("Task:")} ${stats.taskId} - ${stats.title}
14509
+ console.log(`${chalk7.dim("Task:")} ${stats.taskId} - ${stats.title}
14218
14510
  `);
14219
- console.log(chalk6.bold("\u{1F4CB} Task Info"));
14511
+ console.log(chalk7.bold("\u{1F4CB} Task Info"));
14220
14512
  console.log(` Status: ${getStatusEmoji(stats.status)} ${stats.status}`);
14221
14513
  console.log(` Type: ${stats.type}`);
14222
14514
  console.log(` Assignee: ${stats.assignee || "unassigned"}
14223
14515
  `);
14224
- console.log(chalk6.bold("\u{1F4DD} Code Metrics"));
14516
+ console.log(chalk7.bold("\u{1F4DD} Code Metrics"));
14225
14517
  console.log(
14226
- ` ${chalk6.green("+")}${stats.codeMetrics.linesAdded} lines added`
14518
+ ` ${chalk7.green("+")}${stats.codeMetrics.linesAdded} lines added`
14227
14519
  );
14228
14520
  console.log(
14229
- ` ${chalk6.red("-")}${stats.codeMetrics.linesRemoved} lines removed`
14521
+ ` ${chalk7.red("-")}${stats.codeMetrics.linesRemoved} lines removed`
14230
14522
  );
14231
14523
  console.log(` \u{1F4C1} ${stats.codeMetrics.filesChanged} files changed
14232
14524
  `);
14233
14525
  if (stats.contributors.length > 0) {
14234
- console.log(chalk6.bold("\u{1F465} Contributors"));
14526
+ console.log(chalk7.bold("\u{1F465} Contributors"));
14235
14527
  stats.contributors.forEach((c) => {
14236
14528
  console.log(` \u2022 ${c}`);
14237
14529
  });
@@ -14243,7 +14535,7 @@ function formatDate(isoString) {
14243
14535
  function createBar(value, max, length = 20) {
14244
14536
  if (max === 0) return "\u2591".repeat(length);
14245
14537
  const filled = Math.round(value / max * length);
14246
- return chalk6.cyan("\u2588".repeat(filled)) + chalk6.dim("\u2591".repeat(length - filled));
14538
+ return chalk7.cyan("\u2588".repeat(filled)) + chalk7.dim("\u2591".repeat(length - filled));
14247
14539
  }
14248
14540
  function getTrendEmoji(trend) {
14249
14541
  switch (trend) {
@@ -14274,20 +14566,20 @@ function getStatusEmoji(status) {
14274
14566
  init_esm_shims();
14275
14567
  function showCustomHelp() {
14276
14568
  printHeader("Taskin - Task Management System", icons.rocket);
14277
- console.log(colors2.info("\u{1F4CB} AVAILABLE COMMANDS"));
14278
- console.log(colors2.highlight("\u2550".repeat(60)));
14569
+ console.log(colors.info("\u{1F4CB} AVAILABLE COMMANDS"));
14570
+ console.log(colors.highlight("\u2550".repeat(60)));
14279
14571
  console.log();
14280
14572
  const commands = [
14281
14573
  {
14282
- name: colors2.highlight("taskin init"),
14283
- alias: colors2.secondary("Alias: setup"),
14574
+ name: colors.highlight("taskin init"),
14575
+ alias: colors.secondary("Alias: setup"),
14284
14576
  description: "Initialize Taskin in your project",
14285
14577
  examples: ["taskin init", "taskin setup"],
14286
14578
  icon: "\u{1F3AF}"
14287
14579
  },
14288
14580
  {
14289
- name: colors2.highlight("taskin list") + colors2.normal(" [filter]"),
14290
- alias: colors2.secondary("Alias: ls"),
14581
+ name: colors.highlight("taskin list") + colors.normal(" [filter]"),
14582
+ alias: colors.secondary("Alias: ls"),
14291
14583
  description: "List all tasks in the project",
14292
14584
  examples: [
14293
14585
  "taskin list",
@@ -14298,8 +14590,8 @@ function showCustomHelp() {
14298
14590
  icon: "\u{1F4CA}"
14299
14591
  },
14300
14592
  {
14301
- name: colors2.highlight("taskin new"),
14302
- alias: colors2.secondary("Alias: create"),
14593
+ name: colors.highlight("taskin new"),
14594
+ alias: colors.secondary("Alias: create"),
14303
14595
  description: "Create a new task",
14304
14596
  examples: [
14305
14597
  'taskin new -t feat -T "Add login" -d "Implement user authentication"',
@@ -14309,8 +14601,8 @@ function showCustomHelp() {
14309
14601
  icon: "\u{1F4DD}"
14310
14602
  },
14311
14603
  {
14312
- name: colors2.highlight("taskin start") + colors2.normal(" <task-id>"),
14313
- alias: colors2.secondary("Alias: begin"),
14604
+ name: colors.highlight("taskin start") + colors.normal(" <task-id>"),
14605
+ alias: colors.secondary("Alias: begin"),
14314
14606
  description: "Start working on a task (suggests commits)",
14315
14607
  examples: [
14316
14608
  "taskin start 001",
@@ -14320,22 +14612,22 @@ function showCustomHelp() {
14320
14612
  icon: "\u{1F680}"
14321
14613
  },
14322
14614
  {
14323
- name: colors2.highlight("taskin pause") + colors2.normal(" <task-id>"),
14324
- alias: colors2.secondary("Alias: stop"),
14615
+ name: colors.highlight("taskin pause") + colors.normal(" <task-id>"),
14616
+ alias: colors.secondary("Alias: stop"),
14325
14617
  description: "Pause a task (auto-commits work in progress)",
14326
14618
  examples: ["taskin pause 001", 'taskin pause 001 -m "saving progress"'],
14327
14619
  icon: "\u23F8\uFE0F"
14328
14620
  },
14329
14621
  {
14330
- name: colors2.highlight("taskin finish") + colors2.normal(" <task-id>"),
14331
- alias: colors2.secondary("Alias: done"),
14622
+ name: colors.highlight("taskin finish") + colors.normal(" <task-id>"),
14623
+ alias: colors.secondary("Alias: done"),
14332
14624
  description: "Finish a task (suggests commits)",
14333
14625
  examples: ["taskin finish 001", "taskin done task-001"],
14334
14626
  icon: "\u2705"
14335
14627
  },
14336
14628
  {
14337
- name: colors2.highlight("taskin config") + colors2.normal(" [options]"),
14338
- alias: colors2.secondary("Options: --level <manual|assisted|autopilot>"),
14629
+ name: colors.highlight("taskin config") + colors.normal(" [options]"),
14630
+ alias: colors.secondary("Options: --level <manual|assisted|autopilot>"),
14339
14631
  description: "Configure automation level",
14340
14632
  examples: [
14341
14633
  "taskin config",
@@ -14345,8 +14637,8 @@ function showCustomHelp() {
14345
14637
  icon: "\u2699\uFE0F"
14346
14638
  },
14347
14639
  {
14348
- name: colors2.highlight("taskin lint") + colors2.normal(" [options]"),
14349
- alias: colors2.secondary("Options: -p, --path <directory>"),
14640
+ name: colors.highlight("taskin lint") + colors.normal(" [options]"),
14641
+ alias: colors.secondary("Options: -p, --path <directory>"),
14350
14642
  description: "Validate task markdown files",
14351
14643
  examples: [
14352
14644
  "taskin lint",
@@ -14356,8 +14648,8 @@ function showCustomHelp() {
14356
14648
  icon: "\u{1F50D}"
14357
14649
  },
14358
14650
  {
14359
- name: colors2.highlight("taskin dashboard") + colors2.normal(" [options]"),
14360
- alias: colors2.secondary(
14651
+ name: colors.highlight("taskin dashboard") + colors.normal(" [options]"),
14652
+ alias: colors.secondary(
14361
14653
  "Options: --host, --port, --filter-open, --filter-closed"
14362
14654
  ),
14363
14655
  description: "Start the web dashboard",
@@ -14370,56 +14662,56 @@ function showCustomHelp() {
14370
14662
  icon: "\u{1F4CA}"
14371
14663
  },
14372
14664
  {
14373
- name: colors2.highlight("taskin mcp-server"),
14374
- alias: colors2.secondary("Alias: mcp"),
14665
+ name: colors.highlight("taskin mcp-server"),
14666
+ alias: colors.secondary("Alias: mcp"),
14375
14667
  description: "Start MCP server for Claude Desktop integration",
14376
14668
  examples: ["taskin mcp-server", "taskin mcp"],
14377
14669
  icon: "\u{1F916}"
14378
14670
  }
14379
14671
  ];
14380
14672
  commands.forEach((cmd, index) => {
14381
- console.log(colors2.warning(`${cmd.icon} ${cmd.name}`));
14382
- console.log(colors2.normal(` ${cmd.alias}`));
14383
- console.log(colors2.info(` ${cmd.description}`));
14673
+ console.log(colors.warning(`${cmd.icon} ${cmd.name}`));
14674
+ console.log(colors.normal(` ${cmd.alias}`));
14675
+ console.log(colors.info(` ${cmd.description}`));
14384
14676
  console.log();
14385
- console.log(colors2.normal(` ${colors2.info("\u{1F4DD} Examples:")}`));
14677
+ console.log(colors.normal(` ${colors.info("\u{1F4DD} Examples:")}`));
14386
14678
  cmd.examples.forEach((example) => {
14387
- console.log(colors2.secondary(` ${example}`));
14679
+ console.log(colors.secondary(` ${example}`));
14388
14680
  });
14389
14681
  if (index < commands.length - 1) {
14390
14682
  console.log();
14391
- console.log(colors2.normal(" " + colors2.secondary("\u2500".repeat(50))));
14683
+ console.log(colors.normal(" " + colors.secondary("\u2500".repeat(50))));
14392
14684
  console.log();
14393
14685
  }
14394
14686
  });
14395
14687
  console.log();
14396
- console.log(colors2.highlight("\u2550".repeat(60)));
14688
+ console.log(colors.highlight("\u2550".repeat(60)));
14397
14689
  console.log();
14398
- console.log(colors2.info("\u{1F4A1} QUICK TIPS"));
14690
+ console.log(colors.info("\u{1F4A1} QUICK TIPS"));
14399
14691
  console.log(
14400
- colors2.normal(
14401
- `${colors2.warning("\u2022")} Use short IDs: ${colors2.highlight("001")}, ${colors2.highlight("task-001")}`
14692
+ colors.normal(
14693
+ `${colors.warning("\u2022")} Use short IDs: ${colors.highlight("001")}, ${colors.highlight("task-001")}`
14402
14694
  )
14403
14695
  );
14404
14696
  console.log(
14405
- colors2.normal(
14406
- `${colors2.warning("\u2022")} Configure automation with ${colors2.highlight("taskin config --level <manual|assisted|autopilot>")}`
14697
+ colors.normal(
14698
+ `${colors.warning("\u2022")} Configure automation with ${colors.highlight("taskin config --level <manual|assisted|autopilot>")}`
14407
14699
  )
14408
14700
  );
14409
14701
  console.log(
14410
- colors2.normal(
14411
- `${colors2.warning("\u2022")} All commands support ${colors2.highlight("--help")} for more options`
14702
+ colors.normal(
14703
+ `${colors.warning("\u2022")} All commands support ${colors.highlight("--help")} for more options`
14412
14704
  )
14413
14705
  );
14414
14706
  console.log(
14415
- colors2.normal(
14416
- `${colors2.warning("\u2022")} Use aliases for faster commands: ${colors2.highlight("ls")}, ${colors2.highlight("begin")}, ${colors2.highlight("stop")}, ${colors2.highlight("done")}`
14707
+ colors.normal(
14708
+ `${colors.warning("\u2022")} Use aliases for faster commands: ${colors.highlight("ls")}, ${colors.highlight("begin")}, ${colors.highlight("stop")}, ${colors.highlight("done")}`
14417
14709
  )
14418
14710
  );
14419
14711
  console.log();
14420
- console.log(colors2.info("\u{1F527} FOR MORE HELP"));
14712
+ console.log(colors.info("\u{1F527} FOR MORE HELP"));
14421
14713
  console.log(
14422
- colors2.secondary("taskin ") + colors2.highlight("<command>") + colors2.secondary(" --help")
14714
+ colors.secondary("taskin ") + colors.highlight("<command>") + colors.secondary(" --help")
14423
14715
  );
14424
14716
  console.log();
14425
14717
  return "";
@@ -14427,15 +14719,15 @@ function showCustomHelp() {
14427
14719
 
14428
14720
  // src/version.ts
14429
14721
  init_esm_shims();
14430
- import { readFileSync as readFileSync2 } from "fs";
14431
- import { dirname, join as join3 } from "path";
14722
+ import { readFileSync as readFileSync3 } from "fs";
14723
+ import { dirname, join as join4 } from "path";
14432
14724
  import { fileURLToPath as fileURLToPath3 } from "url";
14433
14725
  var __filename3 = fileURLToPath3(import.meta.url);
14434
14726
  var __dirname3 = dirname(__filename3);
14435
14727
  function getVersion() {
14436
14728
  try {
14437
- const packageJsonPath = join3(__dirname3, "../package.json");
14438
- const packageJson = JSON.parse(readFileSync2(packageJsonPath, "utf-8"));
14729
+ const packageJsonPath = join4(__dirname3, "../package.json");
14730
+ const packageJson = JSON.parse(readFileSync3(packageJsonPath, "utf-8"));
14439
14731
  return packageJson.version;
14440
14732
  } catch {
14441
14733
  return "0.0.0";
@@ -14444,16 +14736,16 @@ function getVersion() {
14444
14736
 
14445
14737
  // src/main.ts
14446
14738
  init_esm_shims();
14447
- import { dirname as dirname2, join as join5 } from "path";
14739
+ import { dirname as dirname2, join as join6 } from "path";
14448
14740
 
14449
14741
  // src/lib/file-system-task-linter/index.ts
14450
14742
  init_esm_shims();
14451
14743
 
14452
14744
  // src/lib/file-system-task-linter/file-system-task-linter.ts
14453
14745
  init_esm_shims();
14454
- import chalk7 from "chalk";
14746
+ import chalk8 from "chalk";
14455
14747
  import { readdir, readFile as readFile2 } from "fs/promises";
14456
- import { join as join4 } from "path";
14748
+ import { join as join5 } from "path";
14457
14749
  var VALID_STATUSES = ["pending", "in-progress", "done", "blocked"];
14458
14750
  var VALID_TYPES = ["feat", "fix", "chore", "docs", "refactor", "test"];
14459
14751
  var FileSystemTaskLinter = class {
@@ -14607,7 +14899,7 @@ var FileSystemTaskLinter = class {
14607
14899
  if (fileNameError) {
14608
14900
  this.addError(file, fileNameError.message, fileNameError.severity);
14609
14901
  }
14610
- const content = await readFile2(join4(tasksDir, file), "utf-8");
14902
+ const content = await readFile2(join5(tasksDir, file), "utf-8");
14611
14903
  this.validateContent(file, content);
14612
14904
  }
14613
14905
  const errors = this.errors.filter((e) => e.severity === "error");
@@ -14625,13 +14917,13 @@ var FileSystemTaskLinter = class {
14625
14917
  static printResults(result) {
14626
14918
  if (result.errors.length === 0 && result.warnings.length === 0) {
14627
14919
  console.log(
14628
- chalk7.green(`\u2705 All ${result.filesChecked} task files are valid!
14920
+ chalk8.green(`\u2705 All ${result.filesChecked} task files are valid!
14629
14921
  `)
14630
14922
  );
14631
14923
  return;
14632
14924
  }
14633
14925
  console.log(
14634
- chalk7.bold(
14926
+ chalk8.bold(
14635
14927
  `
14636
14928
  \u{1F4CA} Validation Results (${result.filesChecked} files checked):
14637
14929
  `
@@ -14645,19 +14937,19 @@ var FileSystemTaskLinter = class {
14645
14937
  errorsByFile.get(error2.file).push(error2);
14646
14938
  });
14647
14939
  for (const [file, fileErrors] of errorsByFile) {
14648
- console.log(chalk7.cyan(`
14940
+ console.log(chalk8.cyan(`
14649
14941
  \u{1F4C4} ${file}`));
14650
14942
  for (const error2 of fileErrors) {
14651
- const icon = error2.severity === "error" ? chalk7.red("\u274C") : chalk7.yellow("\u26A0\uFE0F");
14943
+ const icon = error2.severity === "error" ? chalk8.red("\u274C") : chalk8.yellow("\u26A0\uFE0F");
14652
14944
  const location = error2.line ? `:${error2.line}` : "";
14653
14945
  console.log(` ${icon} ${error2.message}${location}`);
14654
14946
  }
14655
14947
  }
14656
14948
  console.log("\n" + "\u2500".repeat(60));
14657
14949
  console.log(
14658
- chalk7.bold(
14950
+ chalk8.bold(
14659
14951
  `
14660
- \u{1F4CA} Summary: ${chalk7.red(result.errors.length + " error(s)")}, ${chalk7.yellow(result.warnings.length + " warning(s)")}
14952
+ \u{1F4CA} Summary: ${chalk8.red(result.errors.length + " error(s)")}, ${chalk8.yellow(result.warnings.length + " warning(s)")}
14661
14953
  `
14662
14954
  )
14663
14955
  );
@@ -14805,8 +15097,8 @@ var Taskin = class {
14805
15097
 
14806
15098
  // src/main.ts
14807
15099
  function createTaskin(tasksDir) {
14808
- const resolvedTasksDir = tasksDir || join5(process.cwd(), "TASKS");
14809
- const taskinDir = join5(dirname2(resolvedTasksDir), ".taskin");
15100
+ const resolvedTasksDir = tasksDir || join6(process.cwd(), "TASKS");
15101
+ const taskinDir = join6(dirname2(resolvedTasksDir), ".taskin");
14810
15102
  const userRegistry = new UserRegistry({ taskinDir });
14811
15103
  const taskProvider = new FileSystemTaskProvider(
14812
15104
  resolvedTasksDir,
@@ -14834,6 +15126,7 @@ startCommand(program);
14834
15126
  pauseCommand(program);
14835
15127
  finishCommand(program);
14836
15128
  statsCommand(program);
15129
+ configCommand(program);
14837
15130
  registerExportCommand(program);
14838
15131
  lintCommand(program);
14839
15132
  dashboardCommand(program);