aliasmate 1.6.2 → 2.0.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 (203) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +61 -894
  3. package/dist/cli/completion.d.ts +5 -0
  4. package/dist/cli/completion.d.ts.map +1 -0
  5. package/dist/cli/completion.js +144 -0
  6. package/dist/cli/completion.js.map +1 -0
  7. package/dist/cli/manage.d.ts +20 -0
  8. package/dist/cli/manage.d.ts.map +1 -0
  9. package/dist/cli/manage.js +213 -0
  10. package/dist/cli/manage.js.map +1 -0
  11. package/dist/cli/run.d.ts +6 -0
  12. package/dist/cli/run.d.ts.map +1 -0
  13. package/dist/cli/run.js +46 -0
  14. package/dist/cli/run.js.map +1 -0
  15. package/dist/cli/save.d.ts +9 -0
  16. package/dist/cli/save.d.ts.map +1 -0
  17. package/dist/cli/save.js +52 -0
  18. package/dist/cli/save.js.map +1 -0
  19. package/dist/cli/transfer.d.ts +5 -0
  20. package/dist/cli/transfer.d.ts.map +1 -0
  21. package/dist/cli/transfer.js +118 -0
  22. package/dist/cli/transfer.js.map +1 -0
  23. package/dist/core/commands.d.ts +27 -0
  24. package/dist/core/commands.d.ts.map +1 -0
  25. package/dist/core/commands.js +194 -0
  26. package/dist/core/commands.js.map +1 -0
  27. package/dist/core/env.d.ts +9 -0
  28. package/dist/core/env.d.ts.map +1 -0
  29. package/dist/core/env.js +45 -0
  30. package/dist/core/env.js.map +1 -0
  31. package/dist/core/executor.d.ts +7 -0
  32. package/dist/core/executor.d.ts.map +1 -0
  33. package/dist/{utils → core}/executor.js +10 -46
  34. package/dist/core/executor.js.map +1 -0
  35. package/dist/core/history.d.ts +11 -0
  36. package/dist/core/history.d.ts.map +1 -0
  37. package/dist/core/history.js +117 -0
  38. package/dist/core/history.js.map +1 -0
  39. package/dist/core/recent.d.ts +14 -0
  40. package/dist/core/recent.d.ts.map +1 -0
  41. package/dist/core/recent.js +54 -0
  42. package/dist/core/recent.js.map +1 -0
  43. package/dist/core/runner.d.ts +13 -0
  44. package/dist/core/runner.d.ts.map +1 -0
  45. package/dist/core/runner.js +83 -0
  46. package/dist/core/runner.js.map +1 -0
  47. package/dist/core/store.d.ts +29 -0
  48. package/dist/core/store.d.ts.map +1 -0
  49. package/dist/core/store.js +131 -0
  50. package/dist/core/store.js.map +1 -0
  51. package/dist/core/types.d.ts +29 -0
  52. package/dist/core/types.d.ts.map +1 -0
  53. package/dist/core/types.js +3 -0
  54. package/dist/core/types.js.map +1 -0
  55. package/dist/core/validate.d.ts +6 -0
  56. package/dist/core/validate.d.ts.map +1 -0
  57. package/dist/core/validate.js +139 -0
  58. package/dist/core/validate.js.map +1 -0
  59. package/dist/index.d.ts +3 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +169 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/ui/format.d.ts +16 -0
  64. package/dist/ui/format.d.ts.map +1 -0
  65. package/dist/ui/format.js +112 -0
  66. package/dist/ui/format.js.map +1 -0
  67. package/dist/ui/interactive.d.ts +6 -0
  68. package/dist/ui/interactive.d.ts.map +1 -0
  69. package/dist/ui/interactive.js +147 -0
  70. package/dist/ui/interactive.js.map +1 -0
  71. package/dist/ui/onboarding.d.ts +3 -0
  72. package/dist/ui/onboarding.d.ts.map +1 -0
  73. package/dist/ui/onboarding.js +82 -0
  74. package/dist/ui/onboarding.js.map +1 -0
  75. package/dist/ui/prompts.d.ts +14 -0
  76. package/dist/ui/prompts.d.ts.map +1 -0
  77. package/dist/ui/prompts.js +96 -0
  78. package/dist/ui/prompts.js.map +1 -0
  79. package/dist/ui/theme.d.ts +28 -0
  80. package/dist/ui/theme.d.ts.map +1 -0
  81. package/dist/ui/theme.js +43 -0
  82. package/dist/ui/theme.js.map +1 -0
  83. package/package.json +4 -5
  84. package/dist/cli.d.ts +0 -3
  85. package/dist/cli.d.ts.map +0 -1
  86. package/dist/cli.js +0 -253
  87. package/dist/cli.js.map +0 -1
  88. package/dist/commands/alias.d.ts +0 -30
  89. package/dist/commands/alias.d.ts.map +0 -1
  90. package/dist/commands/alias.js +0 -213
  91. package/dist/commands/alias.js.map +0 -1
  92. package/dist/commands/changelog.d.ts +0 -9
  93. package/dist/commands/changelog.d.ts.map +0 -1
  94. package/dist/commands/changelog.js +0 -72
  95. package/dist/commands/changelog.js.map +0 -1
  96. package/dist/commands/completion.d.ts +0 -31
  97. package/dist/commands/completion.d.ts.map +0 -1
  98. package/dist/commands/completion.js +0 -522
  99. package/dist/commands/completion.js.map +0 -1
  100. package/dist/commands/delete.d.ts +0 -14
  101. package/dist/commands/delete.d.ts.map +0 -1
  102. package/dist/commands/delete.js +0 -54
  103. package/dist/commands/delete.js.map +0 -1
  104. package/dist/commands/edit.d.ts +0 -16
  105. package/dist/commands/edit.d.ts.map +0 -1
  106. package/dist/commands/edit.js +0 -231
  107. package/dist/commands/edit.js.map +0 -1
  108. package/dist/commands/export.d.ts +0 -23
  109. package/dist/commands/export.d.ts.map +0 -1
  110. package/dist/commands/export.js +0 -122
  111. package/dist/commands/export.js.map +0 -1
  112. package/dist/commands/import.d.ts +0 -23
  113. package/dist/commands/import.d.ts.map +0 -1
  114. package/dist/commands/import.js +0 -235
  115. package/dist/commands/import.js.map +0 -1
  116. package/dist/commands/list.d.ts +0 -25
  117. package/dist/commands/list.d.ts.map +0 -1
  118. package/dist/commands/list.js +0 -58
  119. package/dist/commands/list.js.map +0 -1
  120. package/dist/commands/prev.d.ts +0 -15
  121. package/dist/commands/prev.d.ts.map +0 -1
  122. package/dist/commands/prev.js +0 -138
  123. package/dist/commands/prev.js.map +0 -1
  124. package/dist/commands/recent.d.ts +0 -24
  125. package/dist/commands/recent.d.ts.map +0 -1
  126. package/dist/commands/recent.js +0 -132
  127. package/dist/commands/recent.js.map +0 -1
  128. package/dist/commands/run.d.ts +0 -22
  129. package/dist/commands/run.d.ts.map +0 -1
  130. package/dist/commands/run.js +0 -217
  131. package/dist/commands/run.js.map +0 -1
  132. package/dist/commands/save.d.ts +0 -17
  133. package/dist/commands/save.d.ts.map +0 -1
  134. package/dist/commands/save.js +0 -232
  135. package/dist/commands/save.js.map +0 -1
  136. package/dist/commands/search.d.ts +0 -19
  137. package/dist/commands/search.d.ts.map +0 -1
  138. package/dist/commands/search.js +0 -113
  139. package/dist/commands/search.js.map +0 -1
  140. package/dist/commands/validate.d.ts +0 -10
  141. package/dist/commands/validate.d.ts.map +0 -1
  142. package/dist/commands/validate.js +0 -162
  143. package/dist/commands/validate.js.map +0 -1
  144. package/dist/storage/index.d.ts +0 -117
  145. package/dist/storage/index.d.ts.map +0 -1
  146. package/dist/storage/index.js +0 -262
  147. package/dist/storage/index.js.map +0 -1
  148. package/dist/utils/changelog.d.ts +0 -41
  149. package/dist/utils/changelog.d.ts.map +0 -1
  150. package/dist/utils/changelog.js +0 -192
  151. package/dist/utils/changelog.js.map +0 -1
  152. package/dist/utils/constants.d.ts +0 -48
  153. package/dist/utils/constants.d.ts.map +0 -1
  154. package/dist/utils/constants.js +0 -51
  155. package/dist/utils/constants.js.map +0 -1
  156. package/dist/utils/env.d.ts +0 -64
  157. package/dist/utils/env.d.ts.map +0 -1
  158. package/dist/utils/env.js +0 -199
  159. package/dist/utils/env.js.map +0 -1
  160. package/dist/utils/errors.d.ts +0 -30
  161. package/dist/utils/errors.d.ts.map +0 -1
  162. package/dist/utils/errors.js +0 -62
  163. package/dist/utils/errors.js.map +0 -1
  164. package/dist/utils/executor.d.ts +0 -33
  165. package/dist/utils/executor.d.ts.map +0 -1
  166. package/dist/utils/executor.js.map +0 -1
  167. package/dist/utils/formatters.d.ts +0 -30
  168. package/dist/utils/formatters.d.ts.map +0 -1
  169. package/dist/utils/formatters.js +0 -188
  170. package/dist/utils/formatters.js.map +0 -1
  171. package/dist/utils/history.d.ts +0 -37
  172. package/dist/utils/history.d.ts.map +0 -1
  173. package/dist/utils/history.js +0 -179
  174. package/dist/utils/history.js.map +0 -1
  175. package/dist/utils/llm-generator.d.ts +0 -21
  176. package/dist/utils/llm-generator.d.ts.map +0 -1
  177. package/dist/utils/llm-generator.js +0 -915
  178. package/dist/utils/llm-generator.js.map +0 -1
  179. package/dist/utils/onboarding.d.ts +0 -10
  180. package/dist/utils/onboarding.d.ts.map +0 -1
  181. package/dist/utils/onboarding.js +0 -316
  182. package/dist/utils/onboarding.js.map +0 -1
  183. package/dist/utils/paths.d.ts +0 -44
  184. package/dist/utils/paths.d.ts.map +0 -1
  185. package/dist/utils/paths.js +0 -115
  186. package/dist/utils/paths.js.map +0 -1
  187. package/dist/utils/prompts.d.ts +0 -66
  188. package/dist/utils/prompts.d.ts.map +0 -1
  189. package/dist/utils/prompts.js +0 -51
  190. package/dist/utils/prompts.js.map +0 -1
  191. package/dist/utils/recent.d.ts +0 -55
  192. package/dist/utils/recent.d.ts.map +0 -1
  193. package/dist/utils/recent.js +0 -102
  194. package/dist/utils/recent.js.map +0 -1
  195. package/dist/utils/validator.d.ts +0 -56
  196. package/dist/utils/validator.d.ts.map +0 -1
  197. package/dist/utils/validator.js +0 -413
  198. package/dist/utils/validator.js.map +0 -1
  199. package/dist/utils/version-checker.d.ts +0 -29
  200. package/dist/utils/version-checker.d.ts.map +0 -1
  201. package/dist/utils/version-checker.js +0 -191
  202. package/dist/utils/version-checker.js.map +0 -1
  203. package/whats-new.json +0 -217
package/dist/index.js ADDED
@@ -0,0 +1,169 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ const commander_1 = require("commander");
38
+ // Version comes from package.json so releases can't drift out of sync.
39
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
40
+ const APP_VERSION = require('../package.json').version;
41
+ /**
42
+ * Command handlers are required lazily inside actions: `aliasmate run x`
43
+ * never pays to load inquirer, and the interactive menu never loads execa
44
+ * until a command actually runs.
45
+ */
46
+ function wrap(fn) {
47
+ Promise.resolve()
48
+ .then(fn)
49
+ .catch((error) => {
50
+ // Ctrl+C inside inquirer surfaces as a benign abort.
51
+ if (error?.message?.includes('User force closed'))
52
+ process.exit(0);
53
+ console.error(`\x1b[31m✗ ${error.message}\x1b[0m`);
54
+ process.exit(1);
55
+ });
56
+ }
57
+ const program = new commander_1.Command();
58
+ program
59
+ .name('aliasmate')
60
+ .description('Save shell commands with their working directories and re-run them from anywhere')
61
+ .version(APP_VERSION);
62
+ program
63
+ .command('run <name> [path]')
64
+ .description('Run a saved command (name, alias, or @N recent reference)')
65
+ .option('--dry-run', 'Preview what would execute without running it')
66
+ .option('--verbose', 'Show full details in dry-run output')
67
+ .action((name, pathOverride, options) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/run')))).runHandler(name, pathOverride, options)));
68
+ program
69
+ .command('save')
70
+ .description('Interactively save a new command')
71
+ .option('--no-validate', 'Skip validation checks')
72
+ .action((options) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/save')))).saveHandler(options)));
73
+ program
74
+ .command('prev <name>')
75
+ .description('Save your previous shell command under a name')
76
+ .option('--no-validate', 'Skip validation checks')
77
+ .action((name, options) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/save')))).prevHandler(name, options)));
78
+ program
79
+ .command('list')
80
+ .alias('ls')
81
+ .description('List all saved commands')
82
+ .option('--format <type>', 'Output format: table, json, yaml, compact', 'table')
83
+ .action((options) => wrap(async () => {
84
+ const valid = ['table', 'json', 'yaml', 'compact'];
85
+ if (!valid.includes(options.format))
86
+ throw new Error(`Invalid format "${options.format}" (${valid.join(', ')})`);
87
+ (await Promise.resolve().then(() => __importStar(require('./cli/manage')))).listHandler(options.format);
88
+ }));
89
+ program
90
+ .command('search <query>')
91
+ .alias('find')
92
+ .description('Search commands by name, text, or directory')
93
+ .action((query) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/manage')))).searchHandler(query)));
94
+ program
95
+ .command('edit <name>')
96
+ .description('Edit a saved command')
97
+ .option('--no-validate', 'Skip validation checks')
98
+ .action((name, options) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/manage')))).editHandler(name, options)));
99
+ program
100
+ .command('delete <name>')
101
+ .alias('rm')
102
+ .description('Delete a saved command')
103
+ .option('-f, --force', 'Delete without confirmation')
104
+ .action((name, options) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/manage')))).deleteHandler(name, options)));
105
+ program
106
+ .command('alias [short] [command]')
107
+ .description('Create, list, or remove shortcut aliases')
108
+ .option('--list', 'List all aliases')
109
+ .option('--remove <alias>', 'Remove an alias')
110
+ .action((short, command, options) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/manage')))).aliasHandler(short, command, options)));
111
+ program
112
+ .command('recent')
113
+ .description('Show recently run commands (@N references)')
114
+ .option('--limit <n>', 'Maximum entries to show', (v) => parseInt(v, 10))
115
+ .option('--clear', 'Clear execution history')
116
+ .action((options) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/manage')))).recentHandler(options)));
117
+ program
118
+ .command('stats')
119
+ .description('Show usage statistics for your commands')
120
+ .action(() => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/manage')))).statsHandler()));
121
+ program
122
+ .command('validate [name]')
123
+ .description('Validate one command, or all commands')
124
+ .option('--all', 'Validate all saved commands')
125
+ .action((name, options) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/manage')))).validateHandler(options.all ? undefined : name)));
126
+ program
127
+ .command('export <file>')
128
+ .description('Export commands to a JSON or YAML file (secrets masked)')
129
+ .option('--format <type>', 'json or yaml')
130
+ .action((file, options) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/transfer')))).exportHandler(file, options)));
131
+ program
132
+ .command('import <file>')
133
+ .description('Import commands from a JSON file (auto-backup first)')
134
+ .action((file) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/transfer')))).importHandler(file)));
135
+ program
136
+ .command('completion [shell]')
137
+ .description('Generate or install shell completion (bash, zsh, fish)')
138
+ .option('--install', 'Install completion for your current shell')
139
+ .option('--names', 'Print saved command names (used by completion scripts)')
140
+ .action((shell, options) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/completion')))).completionHandler(shell, options)));
141
+ program
142
+ .command('config')
143
+ .description('Show where your commands are stored')
144
+ .action(() => wrap(async () => {
145
+ const { getConfigDir, getConfigPath } = await Promise.resolve().then(() => __importStar(require('./core/store')));
146
+ const { listCommands } = await Promise.resolve().then(() => __importStar(require('./core/commands')));
147
+ console.log(`Config directory: ${getConfigDir()}`);
148
+ console.log(`Config file: ${getConfigPath()}`);
149
+ console.log(`Saved commands: ${Object.keys(listCommands()).length}`);
150
+ }));
151
+ program.showSuggestionAfterError(true);
152
+ const args = process.argv.slice(2);
153
+ if (args.length === 0) {
154
+ // Zero-args: interactive home screen (with first-run welcome).
155
+ wrap(async () => {
156
+ const { maybeShowOnboarding } = await Promise.resolve().then(() => __importStar(require('./ui/onboarding')));
157
+ maybeShowOnboarding(APP_VERSION);
158
+ if (process.stdout.isTTY && process.stdin.isTTY) {
159
+ await (await Promise.resolve().then(() => __importStar(require('./ui/interactive')))).interactiveHome();
160
+ }
161
+ else {
162
+ program.outputHelp();
163
+ }
164
+ });
165
+ }
166
+ else {
167
+ program.parse(process.argv);
168
+ }
169
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { CommandMap, ListFormat, SavedCommand } from '../core/types';
2
+ /** "2 minutes ago" style relative time. */
3
+ export declare function timeAgo(iso: string, now?: Date): string;
4
+ export declare function truncate(text: string, max: number): string;
5
+ export declare function toJson(commands: CommandMap, mask?: boolean): string;
6
+ export declare function toYaml(commands: CommandMap, mask?: boolean): string;
7
+ export declare function toCompact(commands: CommandMap): string;
8
+ export interface TableOptions {
9
+ runCounts?: Map<string, number>;
10
+ }
11
+ /** Rich human-readable listing with usage badges and env indicators. */
12
+ export declare function toTable(commands: CommandMap, options?: TableOptions): string;
13
+ export declare function render(commands: CommandMap, format: ListFormat, options?: TableOptions): string;
14
+ /** One-line summary of a command used in confirmation output. */
15
+ export declare function summarize(name: string, cmd: SavedCommand): string;
16
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/ui/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAIrE,2CAA2C;AAC3C,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAcnE;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE1D;AAUD,wBAAgB,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,UAAO,GAAG,MAAM,CAEhE;AAMD,wBAAgB,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,UAAO,GAAG,MAAM,CAgBhE;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,CAItD;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,wEAAwE;AACxE,wBAAgB,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,GAAE,YAAiB,GAAG,MAAM,CAyBhF;AAED,wBAAgB,MAAM,CACpB,QAAQ,EAAE,UAAU,EACpB,MAAM,EAAE,UAAU,EAClB,OAAO,GAAE,YAAiB,GACzB,MAAM,CAWR;AAED,iEAAiE;AACjE,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,MAAM,CAEjE"}
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.timeAgo = timeAgo;
4
+ exports.truncate = truncate;
5
+ exports.toJson = toJson;
6
+ exports.toYaml = toYaml;
7
+ exports.toCompact = toCompact;
8
+ exports.toTable = toTable;
9
+ exports.render = render;
10
+ exports.summarize = summarize;
11
+ const env_1 = require("../core/env");
12
+ const theme_1 = require("./theme");
13
+ /** "2 minutes ago" style relative time. */
14
+ function timeAgo(iso, now = new Date()) {
15
+ const seconds = Math.max(0, Math.floor((now.getTime() - new Date(iso).getTime()) / 1000));
16
+ const units = [
17
+ [31536000, 'year'],
18
+ [2592000, 'month'],
19
+ [86400, 'day'],
20
+ [3600, 'hour'],
21
+ [60, 'minute'],
22
+ ];
23
+ for (const [size, label] of units) {
24
+ const count = Math.floor(seconds / size);
25
+ if (count >= 1)
26
+ return `${count} ${label}${count > 1 ? 's' : ''} ago`;
27
+ }
28
+ return 'just now';
29
+ }
30
+ function truncate(text, max) {
31
+ return text.length <= max ? text : `${text.slice(0, max - 1)}…`;
32
+ }
33
+ function maskedCopy(commands) {
34
+ const out = {};
35
+ for (const [name, cmd] of Object.entries(commands)) {
36
+ out[name] = cmd.env ? { ...cmd, env: (0, env_1.maskSensitive)(cmd.env) } : cmd;
37
+ }
38
+ return out;
39
+ }
40
+ function toJson(commands, mask = true) {
41
+ return JSON.stringify(mask ? maskedCopy(commands) : commands, null, 2);
42
+ }
43
+ function yamlQuote(value) {
44
+ return /^[\w./-]+$/.test(value) ? value : JSON.stringify(value);
45
+ }
46
+ function toYaml(commands, mask = true) {
47
+ const data = mask ? maskedCopy(commands) : commands;
48
+ const lines = [];
49
+ for (const [name, cmd] of Object.entries(data)) {
50
+ lines.push(`${yamlQuote(name)}:`);
51
+ lines.push(` command: ${yamlQuote(cmd.command)}`);
52
+ lines.push(` directory: ${yamlQuote(cmd.directory)}`);
53
+ lines.push(` pathMode: ${cmd.pathMode ?? 'saved'}`);
54
+ if (cmd.env && Object.keys(cmd.env).length > 0) {
55
+ lines.push(' env:');
56
+ for (const [k, v] of Object.entries(cmd.env))
57
+ lines.push(` ${k}: ${yamlQuote(v)}`);
58
+ }
59
+ lines.push(` createdAt: ${yamlQuote(cmd.createdAt)}`);
60
+ lines.push(` updatedAt: ${yamlQuote(cmd.updatedAt)}`);
61
+ }
62
+ return lines.join('\n') + '\n';
63
+ }
64
+ function toCompact(commands) {
65
+ return Object.entries(commands)
66
+ .map(([name, cmd]) => `${name}: ${cmd.command} (${cmd.directory})`)
67
+ .join('\n');
68
+ }
69
+ /** Rich human-readable listing with usage badges and env indicators. */
70
+ function toTable(commands, options = {}) {
71
+ const names = Object.keys(commands).sort((a, b) => {
72
+ const runsA = options.runCounts?.get(a) ?? 0;
73
+ const runsB = options.runCounts?.get(b) ?? 0;
74
+ return runsB - runsA || a.localeCompare(b);
75
+ });
76
+ const lines = [];
77
+ for (const name of names) {
78
+ const cmd = commands[name];
79
+ const runs = options.runCounts?.get(name) ?? 0;
80
+ const badges = [
81
+ runs > 0 ? theme_1.theme.dim(`${theme_1.icons.fire} ${runs} run${runs > 1 ? 's' : ''}`) : '',
82
+ cmd.env && Object.keys(cmd.env).length > 0
83
+ ? `${theme_1.icons.env} ${theme_1.theme.dim(`${Object.keys(cmd.env).length} env`)}`
84
+ : '',
85
+ (cmd.pathMode ?? 'saved') === 'current' ? theme_1.theme.dim('[current dir]') : '',
86
+ ]
87
+ .filter(Boolean)
88
+ .join(' ');
89
+ lines.push(` ${theme_1.theme.name(name)}${badges ? ` ${badges}` : ''}`);
90
+ lines.push(` ${theme_1.theme.command(truncate(cmd.command, 100))}`);
91
+ lines.push(` ${theme_1.icons.folder} ${theme_1.theme.dim(cmd.directory)}`);
92
+ lines.push('');
93
+ }
94
+ return lines.join('\n').trimEnd();
95
+ }
96
+ function render(commands, format, options = {}) {
97
+ switch (format) {
98
+ case 'json':
99
+ return toJson(commands);
100
+ case 'yaml':
101
+ return toYaml(commands);
102
+ case 'compact':
103
+ return toCompact(commands);
104
+ case 'table':
105
+ return toTable(commands, options);
106
+ }
107
+ }
108
+ /** One-line summary of a command used in confirmation output. */
109
+ function summarize(name, cmd) {
110
+ return `${theme_1.theme.name(name)} ${theme_1.theme.dim('→')} ${cmd.command} ${theme_1.theme.dim(`(${cmd.directory})`)}`;
111
+ }
112
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/ui/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * The zero-args experience: a menu that makes running your most-used
3
+ * commands a two-keystroke habit.
4
+ */
5
+ export declare function interactiveHome(): Promise<void>;
6
+ //# sourceMappingURL=interactive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../src/ui/interactive.ts"],"names":[],"mappings":"AAsDA;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CA0DrD"}
@@ -0,0 +1,147 @@
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
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.interactiveHome = interactiveHome;
40
+ const inquirer_1 = __importDefault(require("inquirer"));
41
+ const commands_1 = require("../core/commands");
42
+ const recent_1 = require("../core/recent");
43
+ const format_1 = require("./format");
44
+ const theme_1 = require("./theme");
45
+ function banner(commandCount, totalRuns) {
46
+ console.log();
47
+ console.log(theme_1.theme.brand(' ⚡ AliasMate'));
48
+ console.log(theme_1.theme.dim(` ${commandCount} saved commands · ${totalRuns} total runs`));
49
+ console.log();
50
+ }
51
+ async function pickCommand(message) {
52
+ const commands = (0, commands_1.listCommands)();
53
+ const counts = new Map((0, recent_1.getUsageStats)().map((s) => [s.name, s.runCount]));
54
+ const names = Object.keys(commands).sort((a, b) => (counts.get(b) ?? 0) - (counts.get(a) ?? 0) || a.localeCompare(b));
55
+ if (names.length === 0)
56
+ return null;
57
+ const { picked } = await inquirer_1.default.prompt([
58
+ {
59
+ type: 'list',
60
+ name: 'picked',
61
+ message,
62
+ pageSize: 12,
63
+ loop: false,
64
+ choices: [
65
+ ...names.map((name) => {
66
+ const runs = counts.get(name) ?? 0;
67
+ const runsLabel = runs > 0 ? theme_1.theme.dim(` · ${theme_1.icons.fire} ${runs}`) : '';
68
+ return {
69
+ name: `${name.padEnd(18)} ${theme_1.theme.dim((0, format_1.truncate)(commands[name].command, 50))}${runsLabel}`,
70
+ value: name,
71
+ short: name,
72
+ };
73
+ }),
74
+ new inquirer_1.default.Separator(),
75
+ { name: theme_1.theme.dim('← Back'), value: '__back__' },
76
+ ],
77
+ },
78
+ ]);
79
+ return picked === '__back__' ? null : picked;
80
+ }
81
+ /**
82
+ * The zero-args experience: a menu that makes running your most-used
83
+ * commands a two-keystroke habit.
84
+ */
85
+ async function interactiveHome() {
86
+ // Lazy imports keep the plain-command startup path fast.
87
+ const { runHandler } = await Promise.resolve().then(() => __importStar(require('../cli/run')));
88
+ const { saveHandler } = await Promise.resolve().then(() => __importStar(require('../cli/save')));
89
+ const { editHandler, deleteHandler, statsHandler } = await Promise.resolve().then(() => __importStar(require('../cli/manage')));
90
+ for (;;) {
91
+ const commands = (0, commands_1.listCommands)();
92
+ const stats = (0, recent_1.getUsageStats)();
93
+ const totalRuns = stats.reduce((sum, s) => sum + s.runCount, 0);
94
+ banner(Object.keys(commands).length, totalRuns);
95
+ const hasCommands = Object.keys(commands).length > 0;
96
+ const { action } = await inquirer_1.default.prompt([
97
+ {
98
+ type: 'list',
99
+ name: 'action',
100
+ message: 'What do you want to do?',
101
+ loop: false,
102
+ choices: [
103
+ ...(hasCommands ? [{ name: `${theme_1.icons.run} Run a command`, value: 'run' }] : []),
104
+ { name: `${theme_1.icons.spark} Save a new command`, value: 'save' },
105
+ ...(hasCommands
106
+ ? [
107
+ { name: '✏️ Edit a command', value: 'edit' },
108
+ { name: '🗑 Delete a command', value: 'delete' },
109
+ { name: '📊 View stats', value: 'stats' },
110
+ ]
111
+ : []),
112
+ new inquirer_1.default.Separator(),
113
+ { name: theme_1.theme.dim('Quit'), value: 'quit' },
114
+ ],
115
+ },
116
+ ]);
117
+ try {
118
+ if (action === 'quit')
119
+ return;
120
+ if (action === 'save')
121
+ await saveHandler({});
122
+ if (action === 'stats')
123
+ statsHandler();
124
+ if (action === 'run') {
125
+ const name = await pickCommand('Run which command?');
126
+ if (name) {
127
+ await runHandler(name, undefined, {});
128
+ return; // Hand the terminal back after a run.
129
+ }
130
+ }
131
+ if (action === 'edit') {
132
+ const name = await pickCommand('Edit which command?');
133
+ if (name)
134
+ await editHandler(name, {});
135
+ }
136
+ if (action === 'delete') {
137
+ const name = await pickCommand('Delete which command?');
138
+ if (name)
139
+ await deleteHandler(name, {});
140
+ }
141
+ }
142
+ catch (error) {
143
+ console.error(theme_1.theme.error(`\n${error.message}`));
144
+ }
145
+ }
146
+ }
147
+ //# sourceMappingURL=interactive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../src/ui/interactive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Show the welcome tour on first run, a short note on upgrades. */
2
+ export declare function maybeShowOnboarding(currentVersion: string): boolean;
3
+ //# sourceMappingURL=onboarding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding.d.ts","sourceRoot":"","sources":["../../src/ui/onboarding.ts"],"names":[],"mappings":"AA0BA,oEAAoE;AACpE,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CA4BnE"}
@@ -0,0 +1,82 @@
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
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.maybeShowOnboarding = maybeShowOnboarding;
37
+ const fs = __importStar(require("fs"));
38
+ const store_1 = require("../core/store");
39
+ const theme_1 = require("./theme");
40
+ function readState() {
41
+ const file = (0, store_1.getOnboardingPath)();
42
+ if (!fs.existsSync(file))
43
+ return {};
44
+ try {
45
+ return JSON.parse(fs.readFileSync(file, 'utf8'));
46
+ }
47
+ catch {
48
+ return {};
49
+ }
50
+ }
51
+ function writeState(state) {
52
+ try {
53
+ fs.writeFileSync((0, store_1.getOnboardingPath)(), JSON.stringify(state, null, 2), 'utf8');
54
+ }
55
+ catch {
56
+ // Onboarding is best-effort; never block the CLI.
57
+ }
58
+ }
59
+ /** Show the welcome tour on first run, a short note on upgrades. */
60
+ function maybeShowOnboarding(currentVersion) {
61
+ const state = readState();
62
+ if (state.lastSeenVersion === currentVersion)
63
+ return false;
64
+ const firstRun = !state.lastSeenVersion;
65
+ writeState({ lastSeenVersion: currentVersion });
66
+ if (firstRun) {
67
+ console.log();
68
+ console.log(theme_1.theme.brand(' ⚡ Welcome to AliasMate!'));
69
+ console.log(theme_1.theme.dim(' Save commands once, run them from anywhere.\n'));
70
+ console.log(` ${theme_1.icons.spark} After running any command: ${theme_1.theme.name('aliasmate prev <name>')}`);
71
+ console.log(` ${theme_1.icons.run} Run it from anywhere: ${theme_1.theme.name('aliasmate run <name>')}`);
72
+ console.log(` 📋 Browse everything: ${theme_1.theme.name('aliasmate')} ${theme_1.theme.dim('(interactive menu)')}`);
73
+ console.log();
74
+ console.log(theme_1.theme.dim(' Tip: install tab completion with "aliasmate completion install"'));
75
+ console.log();
76
+ }
77
+ else {
78
+ console.log(theme_1.theme.dim(`\n${theme_1.icons.spark} AliasMate updated to v${currentVersion} — see CHANGELOG for details.\n`));
79
+ }
80
+ return true;
81
+ }
82
+ //# sourceMappingURL=onboarding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../src/ui/onboarding.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,kDA4BC;AAvDD,uCAAyB;AACzB,yCAAkD;AAClD,mCAAuC;AAMvC,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,IAAA,yBAAiB,GAAE,CAAC;IACjC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAoB,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAsB;IACxC,IAAI,CAAC;QACH,EAAE,CAAC,aAAa,CAAC,IAAA,yBAAiB,GAAE,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAChF,CAAC;IAAC,MAAM,CAAC;QACP,kDAAkD;IACpD,CAAC;AACH,CAAC;AAED,oEAAoE;AACpE,SAAgB,mBAAmB,CAAC,cAAsB;IACxD,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,IAAI,KAAK,CAAC,eAAe,KAAK,cAAc;QAAE,OAAO,KAAK,CAAC;IAC3D,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC;IACxC,UAAU,CAAC,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,CAAC;IAEhD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,aAAK,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,aAAK,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CACT,KAAK,aAAK,CAAC,KAAK,gCAAgC,aAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,EAAE,CACtF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,KAAK,aAAK,CAAC,GAAG,gCAAgC,aAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;QAChG,OAAO,CAAC,GAAG,CACT,oCAAoC,aAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,aAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,CACjG,CAAC;QACF,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,aAAK,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC,CAAC;QAC5F,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CACT,aAAK,CAAC,GAAG,CACP,KAAK,aAAK,CAAC,KAAK,0BAA0B,cAAc,iCAAiC,CAC1F,CACF,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { PathMode } from '../core/types';
2
+ export interface CommandDetails {
3
+ name: string;
4
+ command: string;
5
+ directory: string;
6
+ pathMode: PathMode;
7
+ env?: Record<string, string>;
8
+ }
9
+ /** Interactive prompts shared by save/edit flows. */
10
+ export declare function promptCommandDetails(defaults: Partial<CommandDetails>, cwd: string): Promise<CommandDetails>;
11
+ /** Checkbox picker over captured env vars, secrets shown masked. */
12
+ export declare function promptEnvSelection(candidates: Record<string, string>): Promise<Record<string, string>>;
13
+ export declare function confirm(message: string, defaultValue?: boolean): Promise<boolean>;
14
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/ui/prompts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,qDAAqD;AACrD,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,OAAO,CAAC,cAAc,CAAC,EACjC,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,cAAc,CAAC,CA6DzB;AAED,oEAAoE;AACpE,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAmBjC;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAKrF"}