aliasmate 1.0.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/CHANGELOG.md +159 -0
  2. package/README.md +188 -3
  3. package/dist/cli.js +66 -15
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/delete.d.ts +12 -0
  6. package/dist/commands/delete.d.ts.map +1 -1
  7. package/dist/commands/delete.js +29 -8
  8. package/dist/commands/delete.js.map +1 -1
  9. package/dist/commands/edit.d.ts +13 -0
  10. package/dist/commands/edit.d.ts.map +1 -1
  11. package/dist/commands/edit.js +72 -26
  12. package/dist/commands/edit.js.map +1 -1
  13. package/dist/commands/export.d.ts +17 -0
  14. package/dist/commands/export.d.ts.map +1 -1
  15. package/dist/commands/export.js +42 -7
  16. package/dist/commands/export.js.map +1 -1
  17. package/dist/commands/import.d.ts +21 -0
  18. package/dist/commands/import.d.ts.map +1 -1
  19. package/dist/commands/import.js +93 -48
  20. package/dist/commands/import.js.map +1 -1
  21. package/dist/commands/list.d.ts +20 -0
  22. package/dist/commands/list.d.ts.map +1 -1
  23. package/dist/commands/list.js +83 -6
  24. package/dist/commands/list.js.map +1 -1
  25. package/dist/commands/prev.d.ts +14 -1
  26. package/dist/commands/prev.d.ts.map +1 -1
  27. package/dist/commands/prev.js +43 -14
  28. package/dist/commands/prev.js.map +1 -1
  29. package/dist/commands/run.d.ts +16 -1
  30. package/dist/commands/run.d.ts.map +1 -1
  31. package/dist/commands/run.js +52 -11
  32. package/dist/commands/run.js.map +1 -1
  33. package/dist/commands/save.d.ts +15 -1
  34. package/dist/commands/save.d.ts.map +1 -1
  35. package/dist/commands/save.js +82 -35
  36. package/dist/commands/save.js.map +1 -1
  37. package/dist/commands/search.d.ts +19 -0
  38. package/dist/commands/search.d.ts.map +1 -0
  39. package/dist/commands/search.js +113 -0
  40. package/dist/commands/search.js.map +1 -0
  41. package/dist/storage/index.d.ts +44 -8
  42. package/dist/storage/index.d.ts.map +1 -1
  43. package/dist/storage/index.js +58 -12
  44. package/dist/storage/index.js.map +1 -1
  45. package/dist/utils/constants.d.ts +48 -0
  46. package/dist/utils/constants.d.ts.map +1 -0
  47. package/dist/utils/constants.js +51 -0
  48. package/dist/utils/constants.js.map +1 -0
  49. package/dist/utils/errors.d.ts +30 -0
  50. package/dist/utils/errors.d.ts.map +1 -0
  51. package/dist/utils/errors.js +62 -0
  52. package/dist/utils/errors.js.map +1 -0
  53. package/dist/utils/executor.d.ts +22 -1
  54. package/dist/utils/executor.d.ts.map +1 -1
  55. package/dist/utils/executor.js +36 -11
  56. package/dist/utils/executor.js.map +1 -1
  57. package/dist/utils/history.d.ts +21 -3
  58. package/dist/utils/history.d.ts.map +1 -1
  59. package/dist/utils/history.js +28 -14
  60. package/dist/utils/history.js.map +1 -1
  61. package/dist/utils/llm-generator.d.ts +21 -0
  62. package/dist/utils/llm-generator.d.ts.map +1 -0
  63. package/dist/utils/llm-generator.js +337 -0
  64. package/dist/utils/llm-generator.js.map +1 -0
  65. package/dist/utils/onboarding.d.ts +10 -0
  66. package/dist/utils/onboarding.d.ts.map +1 -0
  67. package/dist/utils/onboarding.js +201 -0
  68. package/dist/utils/onboarding.js.map +1 -0
  69. package/dist/utils/paths.d.ts +39 -1
  70. package/dist/utils/paths.d.ts.map +1 -1
  71. package/dist/utils/paths.js +56 -1
  72. package/dist/utils/paths.js.map +1 -1
  73. package/dist/utils/prompts.d.ts +56 -0
  74. package/dist/utils/prompts.d.ts.map +1 -0
  75. package/dist/utils/prompts.js +51 -0
  76. package/dist/utils/prompts.js.map +1 -0
  77. package/package.json +22 -6
@@ -1,18 +1,74 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
37
  };
5
38
  Object.defineProperty(exports, "__esModule", { value: true });
6
39
  exports.listCommand = listCommand;
7
40
  const chalk_1 = __importDefault(require("chalk"));
41
+ const fs = __importStar(require("fs"));
8
42
  const storage_1 = require("../storage");
43
+ const errors_1 = require("../utils/errors");
44
+ const constants_1 = require("../utils/constants");
45
+ /**
46
+ * List all saved commands with their details
47
+ *
48
+ * Displays commands alphabetically with their command text and working directory.
49
+ * If no commands are saved, provides guidance on how to save commands.
50
+ *
51
+ * @example
52
+ * ```
53
+ * // Output:
54
+ * // Saved commands (3):
55
+ * //
56
+ * // build-prod
57
+ * // Command: npm run build --production
58
+ * // Directory: /home/user/project
59
+ * //
60
+ * // deploy
61
+ * // Command: ./deploy.sh
62
+ * // Directory: /home/user/scripts
63
+ * ```
64
+ */
9
65
  function listCommand() {
10
66
  try {
11
67
  const aliases = (0, storage_1.loadAliases)();
12
68
  const names = Object.keys(aliases);
13
69
  if (names.length === 0) {
14
- console.log(chalk_1.default.yellow('No saved commands found.'));
15
- console.log(chalk_1.default.gray('Use "aliasmate save" or "aliasmate prev <name>" to save a command'));
70
+ console.log(chalk_1.default.yellow(constants_1.HELP_MESSAGES.noCommands));
71
+ console.log(chalk_1.default.gray(constants_1.HELP_MESSAGES.useSaveOrPrev));
16
72
  return;
17
73
  }
18
74
  console.log(chalk_1.default.bold(`\nSaved commands (${names.length}):\n`));
@@ -20,15 +76,36 @@ function listCommand() {
20
76
  names.sort();
21
77
  for (const name of names) {
22
78
  const alias = aliases[name];
23
- console.log(chalk_1.default.cyan(` ${name}`));
24
- console.log(chalk_1.default.gray(` Command: ${alias.command}`));
79
+ // Check if directory still exists
80
+ const dirExists = fs.existsSync(alias.directory);
81
+ const dirIndicator = dirExists ? '' : chalk_1.default.red(' [DIR NOT FOUND]');
82
+ // Get path mode with backward compatibility
83
+ const pathMode = alias.pathMode || 'saved';
84
+ // Truncate long commands for display
85
+ const maxCommandLength = 100;
86
+ let displayCommand = alias.command;
87
+ if (displayCommand.length > maxCommandLength) {
88
+ // Check if it's the llm command or other multi-line command
89
+ const firstLine = displayCommand.split('\n')[0];
90
+ if (firstLine.length > maxCommandLength) {
91
+ displayCommand = firstLine.substring(0, maxCommandLength) + '...';
92
+ }
93
+ else {
94
+ displayCommand = firstLine + ' [...]';
95
+ }
96
+ }
97
+ console.log(chalk_1.default.cyan(` ${name}${dirIndicator}`));
98
+ console.log(chalk_1.default.gray(` Command: ${displayCommand}`));
25
99
  console.log(chalk_1.default.gray(` Directory: ${alias.directory}`));
100
+ console.log(chalk_1.default.gray(` Path Mode: ${pathMode === 'saved' ? '📁 Saved' : '📍 Current'}`));
101
+ if (alias.createdAt) {
102
+ console.log(chalk_1.default.gray(` Created: ${new Date(alias.createdAt).toLocaleString()}`));
103
+ }
26
104
  console.log();
27
105
  }
28
106
  }
29
107
  catch (error) {
30
- console.error(chalk_1.default.red('Error:'), error.message);
31
- process.exit(1);
108
+ (0, errors_1.handleError)(error, 'Failed to list commands');
32
109
  }
33
110
  }
34
111
  //# sourceMappingURL=list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":";;;;;AAGA,kCA2BC;AA9BD,kDAA0B;AAC1B,wCAAyC;AAEzC,SAAgB,WAAW;IACzB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,qBAAW,GAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC,CAAC;YAC7F,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,qBAAqB,KAAK,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC;QAEjE,sBAAsB;QACtB,KAAK,CAAC,IAAI,EAAE,CAAC;QAEb,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,kBAAkB,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,15 @@
1
- export declare function prevCommand(name: string, _options: any, cwd?: string): Promise<void>;
1
+ /**
2
+ * Save the previous command from shell history
3
+ *
4
+ * @param name - The name to save the command under
5
+ * @param cwd - The working directory to save with the command (defaults to process.cwd())
6
+ *
7
+ * @example
8
+ * ```
9
+ * // After running: npm run build --production
10
+ * // Execute: aliasmate prev build-prod
11
+ * // The npm command is saved and can be re-run from anywhere
12
+ * ```
13
+ */
14
+ export declare function prevCommand(name: string, cwd?: string): void;
2
15
  //# sourceMappingURL=prev.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prev.d.ts","sourceRoot":"","sources":["../../src/commands/prev.ts"],"names":[],"mappings":"AAIA,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BzG"}
1
+ {"version":3,"file":"prev.d.ts","sourceRoot":"","sources":["../../src/commands/prev.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,MAAsB,GAAG,IAAI,CA+C3E"}
@@ -7,34 +7,63 @@ exports.prevCommand = prevCommand;
7
7
  const chalk_1 = __importDefault(require("chalk"));
8
8
  const history_1 = require("../utils/history");
9
9
  const storage_1 = require("../storage");
10
- async function prevCommand(name, _options, cwd = process.cwd()) {
10
+ const errors_1 = require("../utils/errors");
11
+ const constants_1 = require("../utils/constants");
12
+ /**
13
+ * Save the previous command from shell history
14
+ *
15
+ * @param name - The name to save the command under
16
+ * @param cwd - The working directory to save with the command (defaults to process.cwd())
17
+ *
18
+ * @example
19
+ * ```
20
+ * // After running: npm run build --production
21
+ * // Execute: aliasmate prev build-prod
22
+ * // The npm command is saved and can be re-run from anywhere
23
+ * ```
24
+ */
25
+ function prevCommand(name, cwd = process.cwd()) {
11
26
  try {
12
27
  // Get the last command from history
13
28
  const lastCommand = (0, history_1.getLastCommand)();
14
29
  if (!lastCommand) {
15
- console.error(chalk_1.default.red('Error: Could not retrieve previous command from history.'));
30
+ console.error(chalk_1.default.red(`Error: ${constants_1.ERROR_MESSAGES.historyNotAvailable}`));
16
31
  console.log(chalk_1.default.yellow('\nTroubleshooting:'));
17
32
  console.log(chalk_1.default.gray('1. Make sure your shell history is enabled'));
18
33
  console.log(chalk_1.default.gray('2. For real-time history capture, configure your shell:'));
19
34
  console.log(chalk_1.default.gray(` ${(0, history_1.getHistoryConfigInstructions)()}`));
20
35
  console.log(chalk_1.default.gray('3. Or use "aliasmate save" to manually enter the command'));
21
- process.exit(1);
36
+ process.exit(errors_1.ExitCode.GeneralError);
22
37
  }
23
- // Save the command with the current directory
24
- const success = (0, storage_1.setAlias)(name, lastCommand, cwd);
25
- if (success) {
26
- console.log(chalk_1.default.green(`✓ Saved command as "${name}"`));
27
- console.log(chalk_1.default.gray(` Command: ${lastCommand}`));
28
- console.log(chalk_1.default.gray(` Directory: ${cwd}`));
38
+ // Validate command name
39
+ if (!name || !name.trim()) {
40
+ (0, errors_1.exitWithError)('Command name cannot be empty', errors_1.ExitCode.InvalidInput);
29
41
  }
30
- else {
31
- console.error(chalk_1.default.red('Error: Could not save command'));
32
- process.exit(1);
42
+ if (name.includes(' ')) {
43
+ (0, errors_1.exitWithError)('Command name cannot contain spaces', errors_1.ExitCode.InvalidInput);
44
+ }
45
+ if (!/^[a-zA-Z0-9_-]+$/.test(name)) {
46
+ (0, errors_1.exitWithError)('Command name can only contain letters, numbers, hyphens, and underscores', errors_1.ExitCode.InvalidInput);
47
+ }
48
+ // Save the command with the current directory (default to 'saved' path mode for prev command)
49
+ try {
50
+ const success = (0, storage_1.setAlias)(name, lastCommand, cwd, 'saved');
51
+ if (success) {
52
+ console.log(chalk_1.default.green(`✓ ${constants_1.SUCCESS_MESSAGES.saved(name)}`));
53
+ console.log(chalk_1.default.gray(` Command: ${lastCommand}`));
54
+ console.log(chalk_1.default.gray(` Directory: ${cwd}`));
55
+ console.log(chalk_1.default.gray(` Path Mode: saved (use 'aliasmate edit ${name}' to change)`));
56
+ }
57
+ else {
58
+ (0, errors_1.exitWithError)(constants_1.ERROR_MESSAGES.couldNotSave);
59
+ }
60
+ }
61
+ catch (error) {
62
+ (0, errors_1.exitWithError)(`${constants_1.ERROR_MESSAGES.couldNotSave}: ${error.message}`);
33
63
  }
34
64
  }
35
65
  catch (error) {
36
- console.error(chalk_1.default.red('Error:'), error.message);
37
- process.exit(1);
66
+ (0, errors_1.handleError)(error, 'Failed to save command from history');
38
67
  }
39
68
  }
40
69
  //# sourceMappingURL=prev.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prev.js","sourceRoot":"","sources":["../../src/commands/prev.ts"],"names":[],"mappings":";;;;;AAIA,kCA8BC;AAlCD,kDAA0B;AAC1B,8CAAgF;AAChF,wCAAsC;AAE/B,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,QAAa,EAAE,MAAc,OAAO,CAAC,GAAG,EAAE;IACxF,IAAI,CAAC;QACH,oCAAoC;QACpC,MAAM,WAAW,GAAG,IAAA,wBAAc,GAAE,CAAC;QAErC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC,CAAC;YACrF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAC;YACtE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC,CAAC;YACnF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,MAAM,IAAA,sCAA4B,GAAE,EAAE,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC,CAAC;YACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,8CAA8C;QAC9C,MAAM,OAAO,GAAG,IAAA,kBAAQ,EAAC,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;QAEjD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,uBAAuB,IAAI,GAAG,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,cAAc,WAAW,EAAE,CAAC,CAAC,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAC;YAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"prev.js","sourceRoot":"","sources":["../../src/commands/prev.ts"],"names":[],"mappings":";;;;;AAmBA,kCA+CC;AAlED,kDAA0B;AAC1B,8CAAgF;AAChF,wCAAsC;AACtC,4CAAuE;AACvE,kDAAsE;AAEtE;;;;;;;;;;;;GAYG;AACH,SAAgB,WAAW,CAAC,IAAY,EAAE,MAAc,OAAO,CAAC,GAAG,EAAE;IACnE,IAAI,CAAC;QACH,oCAAoC;QACpC,MAAM,WAAW,GAAG,IAAA,wBAAc,GAAE,CAAC;QAErC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,UAAU,0BAAc,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAC;YACtE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC,CAAC;YACnF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,MAAM,IAAA,sCAA4B,GAAE,EAAE,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC,CAAC;YACpF,OAAO,CAAC,IAAI,CAAC,iBAAQ,CAAC,YAAY,CAAC,CAAC;QACtC,CAAC;QAED,wBAAwB;QACxB,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAC1B,IAAA,sBAAa,EAAC,8BAA8B,EAAE,iBAAQ,CAAC,YAAY,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,IAAA,sBAAa,EAAC,oCAAoC,EAAE,iBAAQ,CAAC,YAAY,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,IAAA,sBAAa,EACX,0EAA0E,EAC1E,iBAAQ,CAAC,YAAY,CACtB,CAAC;QACJ,CAAC;QAED,8FAA8F;QAC9F,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAA,kBAAQ,EAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YAE1D,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,KAAK,4BAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,cAAc,WAAW,EAAE,CAAC,CAAC,CAAC;gBACrD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC/C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,2CAA2C,IAAI,cAAc,CAAC,CAAC,CAAC;YACzF,CAAC;iBAAM,CAAC;gBACN,IAAA,sBAAa,EAAC,0BAAc,CAAC,YAAY,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,sBAAa,EAAC,GAAG,0BAAc,CAAC,YAAY,KAAM,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAA,oBAAW,EAAC,KAAK,EAAE,qCAAqC,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC"}
@@ -1,2 +1,17 @@
1
- export declare function runCommand(name: string, overridePath?: string, _options?: any): Promise<void>;
1
+ /**
2
+ * Run a saved command, optionally overriding its working directory
3
+ *
4
+ * @param name - The name of the saved command to run
5
+ * @param overridePath - Optional path to override the saved working directory
6
+ *
7
+ * @example
8
+ * ```
9
+ * // Run command in its saved directory
10
+ * await runCommand('build-prod');
11
+ *
12
+ * // Run command in a different directory
13
+ * await runCommand('build-prod', '/path/to/other/project');
14
+ * ```
15
+ */
16
+ export declare function runCommand(name: string, overridePath?: string): Promise<void>;
2
17
  //# sourceMappingURL=run.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAKA,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCnG"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyDnF"}
@@ -8,36 +8,77 @@ const chalk_1 = __importDefault(require("chalk"));
8
8
  const storage_1 = require("../storage");
9
9
  const executor_1 = require("../utils/executor");
10
10
  const paths_1 = require("../utils/paths");
11
- async function runCommand(name, overridePath, _options) {
11
+ const errors_1 = require("../utils/errors");
12
+ const constants_1 = require("../utils/constants");
13
+ /**
14
+ * Run a saved command, optionally overriding its working directory
15
+ *
16
+ * @param name - The name of the saved command to run
17
+ * @param overridePath - Optional path to override the saved working directory
18
+ *
19
+ * @example
20
+ * ```
21
+ * // Run command in its saved directory
22
+ * await runCommand('build-prod');
23
+ *
24
+ * // Run command in a different directory
25
+ * await runCommand('build-prod', '/path/to/other/project');
26
+ * ```
27
+ */
28
+ async function runCommand(name, overridePath) {
12
29
  try {
13
30
  // Get the saved alias
14
31
  const alias = (0, storage_1.getAlias)(name);
15
32
  if (!alias) {
16
- console.error(chalk_1.default.red(`Error: No saved command found with name "${name}"`));
17
- console.log(chalk_1.default.yellow('Use "aliasmate list" to see all saved commands'));
18
- process.exit(1);
33
+ console.error(chalk_1.default.red(`Error: ${constants_1.ERROR_MESSAGES.commandNotFound(name)}`));
34
+ console.log(chalk_1.default.yellow(constants_1.HELP_MESSAGES.useList));
35
+ process.exit(errors_1.ExitCode.InvalidInput);
36
+ }
37
+ // Determine the directory to run in based on path mode and override
38
+ let runDir;
39
+ if (overridePath) {
40
+ // User explicitly provided a path override
41
+ runDir = (0, paths_1.resolvePath)(overridePath, process.cwd());
42
+ }
43
+ else {
44
+ // Use path mode to determine directory
45
+ const pathMode = alias.pathMode || 'saved'; // Default to 'saved' for backward compatibility
46
+ if (pathMode === 'current') {
47
+ runDir = process.cwd();
48
+ }
49
+ else {
50
+ runDir = alias.directory;
51
+ }
19
52
  }
20
- // Determine the directory to run in
21
- const runDir = overridePath
22
- ? (0, paths_1.resolvePath)(overridePath, process.cwd())
23
- : alias.directory;
24
53
  // Show what we're about to run
25
54
  console.log(chalk_1.default.blue(`Running: ${alias.command}`));
26
55
  console.log(chalk_1.default.gray(`Directory: ${runDir}`));
56
+ const pathMode = alias.pathMode || 'saved';
57
+ if (overridePath) {
58
+ console.log(chalk_1.default.gray(`Path Mode: overridden`));
59
+ }
60
+ else {
61
+ console.log(chalk_1.default.gray(`Path Mode: ${pathMode}`));
62
+ }
27
63
  console.log();
28
64
  // Execute the command
29
65
  const result = await (0, executor_1.executeCommand)(alias.command, runDir);
30
66
  if (!result.success) {
31
67
  console.error(chalk_1.default.red('\n✗ Command failed'));
68
+ if (result.exitCode !== undefined) {
69
+ console.error(chalk_1.default.red(`Exit code: ${result.exitCode}`));
70
+ }
32
71
  if (result.stderr) {
33
72
  console.error(result.stderr);
34
73
  }
35
- process.exit(1);
74
+ process.exit(result.exitCode || errors_1.ExitCode.GeneralError);
75
+ }
76
+ else {
77
+ console.log(chalk_1.default.green('\n✓ Command completed successfully'));
36
78
  }
37
79
  }
38
80
  catch (error) {
39
- console.error(chalk_1.default.red('Error:'), error.message);
40
- process.exit(1);
81
+ (0, errors_1.handleError)(error, 'Failed to run command');
41
82
  }
42
83
  }
43
84
  //# sourceMappingURL=run.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":";;;;;AAKA,gCAoCC;AAzCD,kDAA0B;AAC1B,wCAAsC;AACtC,gDAAmD;AACnD,0CAA6C;AAEtC,KAAK,UAAU,UAAU,CAAC,IAAY,EAAE,YAAqB,EAAE,QAAc;IAClF,IAAI,CAAC;QACH,sBAAsB;QACtB,MAAM,KAAK,GAAG,IAAA,kBAAQ,EAAC,IAAI,CAAC,CAAC;QAE7B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,4CAA4C,IAAI,GAAG,CAAC,CAAC,CAAC;YAC9E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,gDAAgD,CAAC,CAAC,CAAC;YAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,oCAAoC;QACpC,MAAM,MAAM,GAAG,YAAY;YACzB,CAAC,CAAC,IAAA,mBAAW,EAAC,YAAY,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;YAC1C,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;QAEpB,+BAA+B;QAC/B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,cAAc,MAAM,EAAE,CAAC,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,sBAAsB;QACtB,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAc,EAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAE3D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAC/C,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC/B,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IAEH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,16 @@
1
- export declare function saveCommand(_options: any, cwd?: string): Promise<void>;
1
+ /**
2
+ * Interactively save a new command with prompts
3
+ *
4
+ * @param cwd - The default working directory to suggest (defaults to process.cwd())
5
+ *
6
+ * @example
7
+ * ```
8
+ * // User is prompted for:
9
+ * // - Command name (e.g., 'deploy-prod')
10
+ * // - Command to save (e.g., 'npm run deploy')
11
+ * // - Working directory (defaults to current directory)
12
+ * await saveCommand();
13
+ * ```
14
+ */
15
+ export declare function saveCommand(cwd?: string): Promise<void>;
2
16
  //# sourceMappingURL=save.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../src/commands/save.ts"],"names":[],"mappings":"AAIA,wBAAsB,WAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyE3F"}
1
+ {"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../src/commands/save.ts"],"names":[],"mappings":"AAYA;;;;;;;;;;;;;GAaG;AACH,wBAAsB,WAAW,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmH5E"}
@@ -4,26 +4,47 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.saveCommand = saveCommand;
7
- const inquirer_1 = __importDefault(require("inquirer"));
8
7
  const chalk_1 = __importDefault(require("chalk"));
9
8
  const storage_1 = require("../storage");
10
- async function saveCommand(_options, cwd = process.cwd()) {
9
+ const errors_1 = require("../utils/errors");
10
+ const constants_1 = require("../utils/constants");
11
+ const prompts_1 = require("../utils/prompts");
12
+ /**
13
+ * Interactively save a new command with prompts
14
+ *
15
+ * @param cwd - The default working directory to suggest (defaults to process.cwd())
16
+ *
17
+ * @example
18
+ * ```
19
+ * // User is prompted for:
20
+ * // - Command name (e.g., 'deploy-prod')
21
+ * // - Command to save (e.g., 'npm run deploy')
22
+ * // - Working directory (defaults to current directory)
23
+ * await saveCommand();
24
+ * ```
25
+ */
26
+ async function saveCommand(cwd = process.cwd()) {
11
27
  try {
12
- // Prompt for command details
13
- const answers = await inquirer_1.default.prompt([
28
+ // Prompt for command details including path mode
29
+ const prompts = [
14
30
  {
15
31
  type: 'input',
16
32
  name: 'name',
17
33
  message: 'Enter a name for this command:',
18
34
  validate: (input) => {
19
- if (!input.trim()) {
20
- return 'Name cannot be empty';
35
+ const trimmed = input.trim();
36
+ if (!trimmed) {
37
+ return constants_1.HELP_MESSAGES.emptyValue('Name');
38
+ }
39
+ if (trimmed.includes(' ')) {
40
+ return constants_1.HELP_MESSAGES.invalidName;
21
41
  }
22
- if (input.includes(' ')) {
23
- return 'Name cannot contain spaces';
42
+ // Check for invalid characters
43
+ if (!/^[a-zA-Z0-9_-]+$/.test(trimmed)) {
44
+ return 'Name can only contain letters, numbers, hyphens, and underscores';
24
45
  }
25
46
  return true;
26
- }
47
+ },
27
48
  },
28
49
  {
29
50
  type: 'input',
@@ -31,53 +52,79 @@ async function saveCommand(_options, cwd = process.cwd()) {
31
52
  message: 'Enter the command to save:',
32
53
  validate: (input) => {
33
54
  if (!input.trim()) {
34
- return 'Command cannot be empty';
55
+ return constants_1.HELP_MESSAGES.emptyValue('Command');
35
56
  }
36
57
  return true;
37
- }
58
+ },
38
59
  },
39
60
  {
40
61
  type: 'input',
41
62
  name: 'directory',
42
63
  message: 'Enter the working directory:',
43
- default: cwd
44
- }
45
- ]);
64
+ default: cwd,
65
+ validate: (input) => {
66
+ const trimmed = input.trim();
67
+ if (!trimmed) {
68
+ return constants_1.HELP_MESSAGES.emptyValue('Directory');
69
+ }
70
+ return true;
71
+ },
72
+ },
73
+ {
74
+ type: 'list',
75
+ name: 'pathMode',
76
+ message: 'Choose path mode:',
77
+ choices: [
78
+ {
79
+ name: 'Saved Directory (always run in the directory above)',
80
+ value: 'saved',
81
+ },
82
+ {
83
+ name: 'Current Directory (run in your current working directory)',
84
+ value: 'current',
85
+ },
86
+ ],
87
+ },
88
+ ];
89
+ const answers = await (0, prompts_1.promptMultiple)(prompts);
46
90
  // Check if alias already exists
47
91
  if ((0, storage_1.aliasExists)(answers.name)) {
48
- const { confirm } = await inquirer_1.default.prompt([
49
- {
50
- type: 'confirm',
51
- name: 'confirm',
52
- message: `A command named "${answers.name}" already exists. Overwrite?`,
53
- default: false
54
- }
55
- ]);
92
+ const confirmPrompt = {
93
+ type: 'confirm',
94
+ name: 'confirm',
95
+ message: `A command named "${answers.name}" already exists. Overwrite?`,
96
+ default: false,
97
+ };
98
+ const confirm = await (0, prompts_1.promptConfirm)(confirmPrompt);
56
99
  if (!confirm) {
57
100
  console.log(chalk_1.default.yellow('Save cancelled'));
58
101
  return;
59
102
  }
60
103
  }
61
- // Save the command
62
- const success = (0, storage_1.setAlias)(answers.name, answers.command, answers.directory);
63
- if (success) {
64
- console.log(chalk_1.default.green(`✓ Saved command as "${answers.name}"`));
65
- console.log(chalk_1.default.gray(` Command: ${answers.command}`));
66
- console.log(chalk_1.default.gray(` Directory: ${answers.directory}`));
104
+ // Save the command with path mode
105
+ try {
106
+ const success = (0, storage_1.setAlias)(answers.name.trim(), answers.command, answers.directory, answers.pathMode);
107
+ if (success) {
108
+ console.log(chalk_1.default.green(`✓ ${constants_1.SUCCESS_MESSAGES.saved(answers.name.trim())}`));
109
+ console.log(chalk_1.default.gray(` Command: ${answers.command}`));
110
+ console.log(chalk_1.default.gray(` Directory: ${answers.directory}`));
111
+ console.log(chalk_1.default.gray(` Path Mode: ${answers.pathMode}`));
112
+ }
113
+ else {
114
+ (0, errors_1.exitWithError)(constants_1.ERROR_MESSAGES.couldNotSave);
115
+ }
67
116
  }
68
- else {
69
- console.error(chalk_1.default.red('Error: Could not save command'));
70
- process.exit(1);
117
+ catch (error) {
118
+ (0, errors_1.exitWithError)(`${constants_1.ERROR_MESSAGES.couldNotSave}: ${error.message}`);
71
119
  }
72
120
  }
73
121
  catch (error) {
74
- if (error.isTtyError) {
75
- console.error(chalk_1.default.red('Error: Interactive prompt not supported in this environment'));
122
+ if ((0, errors_1.isInquirerTTYError)(error)) {
123
+ (0, errors_1.exitWithError)(constants_1.ERROR_MESSAGES.interactiveNotSupported, errors_1.ExitCode.GeneralError);
76
124
  }
77
125
  else {
78
- console.error(chalk_1.default.red('Error:'), error.message);
126
+ (0, errors_1.handleError)(error, 'Failed to save command');
79
127
  }
80
- process.exit(1);
81
128
  }
82
129
  }
83
130
  //# sourceMappingURL=save.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"save.js","sourceRoot":"","sources":["../../src/commands/save.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"save.js","sourceRoot":"","sources":["../../src/commands/save.ts"],"names":[],"mappings":";;;;;AA0BA,kCAmHC;AA7ID,kDAA0B;AAC1B,wCAA6D;AAC7D,4CAA2F;AAC3F,kDAAqF;AACrF,8CAM0B;AAE1B;;;;;;;;;;;;;GAaG;AACI,KAAK,UAAU,WAAW,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAC3D,IAAI,CAAC;QACH,iDAAiD;QACjD,MAAM,OAAO,GAAqC;YAChD;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,gCAAgC;gBACzC,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;oBAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;oBAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;wBACb,OAAO,yBAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;oBAC1C,CAAC;oBACD,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC1B,OAAO,yBAAa,CAAC,WAAW,CAAC;oBACnC,CAAC;oBACD,+BAA+B;oBAC/B,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;wBACtC,OAAO,kEAAkE,CAAC;oBAC5E,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC;aACF;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,4BAA4B;gBACrC,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;oBAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;wBAClB,OAAO,yBAAa,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;oBAC7C,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC;aACF;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,8BAA8B;gBACvC,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;oBAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;oBAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;wBACb,OAAO,yBAAa,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;oBAC/C,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC;aACF;YACD;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,mBAAmB;gBAC5B,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,qDAAqD;wBAC3D,KAAK,EAAE,OAAO;qBACf;oBACD;wBACE,IAAI,EAAE,2DAA2D;wBACjE,KAAK,EAAE,SAAS;qBACjB;iBACF;aACF;SACF,CAAC;QAEF,MAAM,OAAO,GAAG,MAAM,IAAA,wBAAc,EAKjC,OAAO,CAAC,CAAC;QAEZ,gCAAgC;QAChC,IAAI,IAAA,qBAAW,EAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,MAAM,aAAa,GAAkB;gBACnC,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,oBAAoB,OAAO,CAAC,IAAI,8BAA8B;gBACvE,OAAO,EAAE,KAAK;aACf,CAAC;YAEF,MAAM,OAAO,GAAG,MAAM,IAAA,uBAAa,EAAC,aAAa,CAAC,CAAC;YAEnD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;gBAC5C,OAAO;YACT,CAAC;QACH,CAAC;QAED,kCAAkC;QAClC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAA,kBAAQ,EACtB,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EACnB,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,QAAQ,CACjB,CAAC;YAEF,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,KAAK,4BAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC7E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,cAAc,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACzD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;gBAC7D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACN,IAAA,sBAAa,EAAC,0BAAc,CAAC,YAAY,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,sBAAa,EAAC,GAAG,0BAAc,CAAC,YAAY,KAAM,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,IAAA,2BAAkB,EAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,IAAA,sBAAa,EAAC,0BAAc,CAAC,uBAAuB,EAAE,iBAAQ,CAAC,YAAY,CAAC,CAAC;QAC/E,CAAC;aAAM,CAAC;YACN,IAAA,oBAAW,EAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Search for commands by name or command text
3
+ *
4
+ * Performs case-insensitive search across command names and command text.
5
+ *
6
+ * @param query - The search query string
7
+ *
8
+ * @example
9
+ * ```
10
+ * // Search for commands containing 'build'
11
+ * searchCommand('build');
12
+ * // Output:
13
+ * // build-prod
14
+ * // Command: npm run build --production
15
+ * // Directory: /home/user/project
16
+ * ```
17
+ */
18
+ export declare function searchCommand(query: string): void;
19
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CA0DjD"}