aliasmate 1.6.2 → 2.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 (211) hide show
  1. package/CHANGELOG.md +61 -3
  2. package/README.md +84 -884
  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 +19 -0
  8. package/dist/cli/manage.d.ts.map +1 -0
  9. package/dist/cli/manage.js +231 -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 +48 -0
  14. package/dist/cli/run.js.map +1 -0
  15. package/dist/cli/save.d.ts +8 -0
  16. package/dist/cli/save.d.ts.map +1 -0
  17. package/dist/cli/save.js +90 -0
  18. package/dist/cli/save.js.map +1 -0
  19. package/dist/cli/transfer.d.ts +6 -0
  20. package/dist/cli/transfer.d.ts.map +1 -0
  21. package/dist/cli/transfer.js +99 -0
  22. package/dist/cli/transfer.js.map +1 -0
  23. package/dist/core/commands.d.ts +29 -0
  24. package/dist/core/commands.d.ts.map +1 -0
  25. package/dist/core/commands.js +232 -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/transfer.d.ts +20 -0
  52. package/dist/core/transfer.d.ts.map +1 -0
  53. package/dist/core/transfer.js +110 -0
  54. package/dist/core/transfer.js.map +1 -0
  55. package/dist/core/types.d.ts +29 -0
  56. package/dist/core/types.d.ts.map +1 -0
  57. package/dist/core/types.js +3 -0
  58. package/dist/core/types.js.map +1 -0
  59. package/dist/core/validate.d.ts +6 -0
  60. package/dist/core/validate.d.ts.map +1 -0
  61. package/dist/core/validate.js +139 -0
  62. package/dist/core/validate.js.map +1 -0
  63. package/dist/index.d.ts +3 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +172 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/ui/format.d.ts +19 -0
  68. package/dist/ui/format.d.ts.map +1 -0
  69. package/dist/ui/format.js +155 -0
  70. package/dist/ui/format.js.map +1 -0
  71. package/dist/ui/interactive.d.ts +62 -0
  72. package/dist/ui/interactive.d.ts.map +1 -0
  73. package/dist/ui/interactive.js +657 -0
  74. package/dist/ui/interactive.js.map +1 -0
  75. package/dist/ui/onboarding.d.ts +3 -0
  76. package/dist/ui/onboarding.d.ts.map +1 -0
  77. package/dist/ui/onboarding.js +82 -0
  78. package/dist/ui/onboarding.js.map +1 -0
  79. package/dist/ui/prompts.d.ts +3 -0
  80. package/dist/ui/prompts.d.ts.map +1 -0
  81. package/dist/ui/prompts.js +50 -0
  82. package/dist/ui/prompts.js.map +1 -0
  83. package/dist/ui/table.d.ts +18 -0
  84. package/dist/ui/table.d.ts.map +1 -0
  85. package/dist/ui/table.js +54 -0
  86. package/dist/ui/table.js.map +1 -0
  87. package/dist/ui/theme.d.ts +30 -0
  88. package/dist/ui/theme.d.ts.map +1 -0
  89. package/dist/ui/theme.js +58 -0
  90. package/dist/ui/theme.js.map +1 -0
  91. package/package.json +10 -11
  92. package/dist/cli.d.ts +0 -3
  93. package/dist/cli.d.ts.map +0 -1
  94. package/dist/cli.js +0 -253
  95. package/dist/cli.js.map +0 -1
  96. package/dist/commands/alias.d.ts +0 -30
  97. package/dist/commands/alias.d.ts.map +0 -1
  98. package/dist/commands/alias.js +0 -213
  99. package/dist/commands/alias.js.map +0 -1
  100. package/dist/commands/changelog.d.ts +0 -9
  101. package/dist/commands/changelog.d.ts.map +0 -1
  102. package/dist/commands/changelog.js +0 -72
  103. package/dist/commands/changelog.js.map +0 -1
  104. package/dist/commands/completion.d.ts +0 -31
  105. package/dist/commands/completion.d.ts.map +0 -1
  106. package/dist/commands/completion.js +0 -522
  107. package/dist/commands/completion.js.map +0 -1
  108. package/dist/commands/delete.d.ts +0 -14
  109. package/dist/commands/delete.d.ts.map +0 -1
  110. package/dist/commands/delete.js +0 -54
  111. package/dist/commands/delete.js.map +0 -1
  112. package/dist/commands/edit.d.ts +0 -16
  113. package/dist/commands/edit.d.ts.map +0 -1
  114. package/dist/commands/edit.js +0 -231
  115. package/dist/commands/edit.js.map +0 -1
  116. package/dist/commands/export.d.ts +0 -23
  117. package/dist/commands/export.d.ts.map +0 -1
  118. package/dist/commands/export.js +0 -122
  119. package/dist/commands/export.js.map +0 -1
  120. package/dist/commands/import.d.ts +0 -23
  121. package/dist/commands/import.d.ts.map +0 -1
  122. package/dist/commands/import.js +0 -235
  123. package/dist/commands/import.js.map +0 -1
  124. package/dist/commands/list.d.ts +0 -25
  125. package/dist/commands/list.d.ts.map +0 -1
  126. package/dist/commands/list.js +0 -58
  127. package/dist/commands/list.js.map +0 -1
  128. package/dist/commands/prev.d.ts +0 -15
  129. package/dist/commands/prev.d.ts.map +0 -1
  130. package/dist/commands/prev.js +0 -138
  131. package/dist/commands/prev.js.map +0 -1
  132. package/dist/commands/recent.d.ts +0 -24
  133. package/dist/commands/recent.d.ts.map +0 -1
  134. package/dist/commands/recent.js +0 -132
  135. package/dist/commands/recent.js.map +0 -1
  136. package/dist/commands/run.d.ts +0 -22
  137. package/dist/commands/run.d.ts.map +0 -1
  138. package/dist/commands/run.js +0 -217
  139. package/dist/commands/run.js.map +0 -1
  140. package/dist/commands/save.d.ts +0 -17
  141. package/dist/commands/save.d.ts.map +0 -1
  142. package/dist/commands/save.js +0 -232
  143. package/dist/commands/save.js.map +0 -1
  144. package/dist/commands/search.d.ts +0 -19
  145. package/dist/commands/search.d.ts.map +0 -1
  146. package/dist/commands/search.js +0 -113
  147. package/dist/commands/search.js.map +0 -1
  148. package/dist/commands/validate.d.ts +0 -10
  149. package/dist/commands/validate.d.ts.map +0 -1
  150. package/dist/commands/validate.js +0 -162
  151. package/dist/commands/validate.js.map +0 -1
  152. package/dist/storage/index.d.ts +0 -117
  153. package/dist/storage/index.d.ts.map +0 -1
  154. package/dist/storage/index.js +0 -262
  155. package/dist/storage/index.js.map +0 -1
  156. package/dist/utils/changelog.d.ts +0 -41
  157. package/dist/utils/changelog.d.ts.map +0 -1
  158. package/dist/utils/changelog.js +0 -192
  159. package/dist/utils/changelog.js.map +0 -1
  160. package/dist/utils/constants.d.ts +0 -48
  161. package/dist/utils/constants.d.ts.map +0 -1
  162. package/dist/utils/constants.js +0 -51
  163. package/dist/utils/constants.js.map +0 -1
  164. package/dist/utils/env.d.ts +0 -64
  165. package/dist/utils/env.d.ts.map +0 -1
  166. package/dist/utils/env.js +0 -199
  167. package/dist/utils/env.js.map +0 -1
  168. package/dist/utils/errors.d.ts +0 -30
  169. package/dist/utils/errors.d.ts.map +0 -1
  170. package/dist/utils/errors.js +0 -62
  171. package/dist/utils/errors.js.map +0 -1
  172. package/dist/utils/executor.d.ts +0 -33
  173. package/dist/utils/executor.d.ts.map +0 -1
  174. package/dist/utils/executor.js.map +0 -1
  175. package/dist/utils/formatters.d.ts +0 -30
  176. package/dist/utils/formatters.d.ts.map +0 -1
  177. package/dist/utils/formatters.js +0 -188
  178. package/dist/utils/formatters.js.map +0 -1
  179. package/dist/utils/history.d.ts +0 -37
  180. package/dist/utils/history.d.ts.map +0 -1
  181. package/dist/utils/history.js +0 -179
  182. package/dist/utils/history.js.map +0 -1
  183. package/dist/utils/llm-generator.d.ts +0 -21
  184. package/dist/utils/llm-generator.d.ts.map +0 -1
  185. package/dist/utils/llm-generator.js +0 -915
  186. package/dist/utils/llm-generator.js.map +0 -1
  187. package/dist/utils/onboarding.d.ts +0 -10
  188. package/dist/utils/onboarding.d.ts.map +0 -1
  189. package/dist/utils/onboarding.js +0 -316
  190. package/dist/utils/onboarding.js.map +0 -1
  191. package/dist/utils/paths.d.ts +0 -44
  192. package/dist/utils/paths.d.ts.map +0 -1
  193. package/dist/utils/paths.js +0 -115
  194. package/dist/utils/paths.js.map +0 -1
  195. package/dist/utils/prompts.d.ts +0 -66
  196. package/dist/utils/prompts.d.ts.map +0 -1
  197. package/dist/utils/prompts.js +0 -51
  198. package/dist/utils/prompts.js.map +0 -1
  199. package/dist/utils/recent.d.ts +0 -55
  200. package/dist/utils/recent.d.ts.map +0 -1
  201. package/dist/utils/recent.js +0 -102
  202. package/dist/utils/recent.js.map +0 -1
  203. package/dist/utils/validator.d.ts +0 -56
  204. package/dist/utils/validator.d.ts.map +0 -1
  205. package/dist/utils/validator.js +0 -413
  206. package/dist/utils/validator.js.map +0 -1
  207. package/dist/utils/version-checker.d.ts +0 -29
  208. package/dist/utils/version-checker.d.ts.map +0 -1
  209. package/dist/utils/version-checker.js +0 -191
  210. package/dist/utils/version-checker.js.map +0 -1
  211. package/whats-new.json +0 -217
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAE3C,yFAAyF;AACzF,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAEtD,iDAAiD;AACjD,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE9C,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import { SavedCommand, ValidationIssue } from './types';
2
+ /** Static checks on a saved command; errors block execution, warnings do not. */
3
+ export declare function validateSavedCommand(cmd: SavedCommand): ValidationIssue[];
4
+ /** Human-readable warnings when a command looks destructive. */
5
+ export declare function getDangerWarnings(command: string): string[];
6
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/core/validate.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAwDxD,iFAAiF;AACjF,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,YAAY,GAAG,eAAe,EAAE,CAkCzE;AAUD,gEAAgE;AAChE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAI3D"}
@@ -0,0 +1,139 @@
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.validateSavedCommand = validateSavedCommand;
37
+ exports.getDangerWarnings = getDangerWarnings;
38
+ const fs = __importStar(require("fs"));
39
+ const os = __importStar(require("os"));
40
+ const path = __importStar(require("path"));
41
+ const SHELL_BUILTINS = new Set([
42
+ 'cd',
43
+ 'echo',
44
+ 'export',
45
+ 'source',
46
+ 'alias',
47
+ 'set',
48
+ 'unset',
49
+ 'read',
50
+ 'eval',
51
+ 'exec',
52
+ 'exit',
53
+ 'true',
54
+ 'false',
55
+ 'test',
56
+ 'pwd',
57
+ 'type',
58
+ 'command',
59
+ 'wait',
60
+ ]);
61
+ function executableExistsInPath(name) {
62
+ const pathVar = process.env.PATH ?? '';
63
+ const exts = os.platform() === 'win32' ? (process.env.PATHEXT ?? '.EXE;.CMD;.BAT').split(';') : [''];
64
+ for (const dir of pathVar.split(path.delimiter)) {
65
+ if (!dir)
66
+ continue;
67
+ for (const ext of exts) {
68
+ try {
69
+ const candidate = path.join(dir, name + ext.toLowerCase());
70
+ if (fs.existsSync(candidate) || fs.existsSync(path.join(dir, name + ext)))
71
+ return true;
72
+ }
73
+ catch {
74
+ // Unreadable PATH entry; skip.
75
+ }
76
+ }
77
+ }
78
+ return false;
79
+ }
80
+ function hasBalancedQuotes(command) {
81
+ let single = false;
82
+ let double = false;
83
+ for (let i = 0; i < command.length; i++) {
84
+ const ch = command[i];
85
+ if (ch === '\\' && !single) {
86
+ i++;
87
+ continue;
88
+ }
89
+ if (ch === "'" && !double)
90
+ single = !single;
91
+ if (ch === '"' && !single)
92
+ double = !double;
93
+ }
94
+ return !single && !double;
95
+ }
96
+ /** Static checks on a saved command; errors block execution, warnings do not. */
97
+ function validateSavedCommand(cmd) {
98
+ const issues = [];
99
+ const executable = cmd.command.trim().split(/\s+/)[0] ?? '';
100
+ const looksLikePath = executable.includes('/') || executable.includes('\\');
101
+ const isEnvAssignment = /^[A-Za-z_][A-Za-z0-9_]*=/.test(executable);
102
+ if (executable && !looksLikePath && !isEnvAssignment) {
103
+ if (!SHELL_BUILTINS.has(executable) && !executableExistsInPath(executable)) {
104
+ issues.push({ level: 'warning', message: `Command "${executable}" not found in PATH` });
105
+ }
106
+ }
107
+ else if (looksLikePath) {
108
+ const resolved = path.isAbsolute(executable)
109
+ ? executable
110
+ : path.join(cmd.directory, executable);
111
+ if (!fs.existsSync(resolved)) {
112
+ issues.push({ level: 'warning', message: `File "${executable}" does not exist` });
113
+ }
114
+ }
115
+ if (!hasBalancedQuotes(cmd.command)) {
116
+ issues.push({ level: 'error', message: 'Unbalanced quotes in command' });
117
+ }
118
+ if ((cmd.pathMode ?? 'saved') === 'saved' && !fs.existsSync(cmd.directory)) {
119
+ issues.push({ level: 'error', message: `Directory does not exist: ${cmd.directory}` });
120
+ }
121
+ for (const key of Object.keys(cmd.env ?? {})) {
122
+ if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key)) {
123
+ issues.push({ level: 'warning', message: `Invalid environment variable name: ${key}` });
124
+ }
125
+ }
126
+ return issues;
127
+ }
128
+ const DANGEROUS_PATTERNS = [
129
+ { pattern: /rm\s+(-[a-z]*[rf][a-z]*\s+)+/i, label: 'recursive/forced delete (rm -rf)' },
130
+ { pattern: /\bdd\s+.*of=/i, label: 'raw disk write (dd)' },
131
+ { pattern: /\bmkfs(\.\w+)?\b/i, label: 'filesystem format (mkfs)' },
132
+ { pattern: />\s*\/dev\/sd[a-z]/i, label: 'write to block device' },
133
+ { pattern: /:\(\)\s*\{.*\};\s*:/, label: 'fork bomb' },
134
+ ];
135
+ /** Human-readable warnings when a command looks destructive. */
136
+ function getDangerWarnings(command) {
137
+ return DANGEROUS_PATTERNS.filter(({ pattern }) => pattern.test(command)).map(({ label }) => label);
138
+ }
139
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/core/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,172 @@
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('Open the TUI with a blank new-command form')
71
+ .action(() => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/save')))).saveHandler()));
72
+ program
73
+ .command('prev [name]')
74
+ .description('Capture your previous shell command and open the TUI form prefilled')
75
+ .action((name) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/save')))).prevHandler(name)));
76
+ program
77
+ .command('list')
78
+ .alias('ls')
79
+ .description('List all saved commands')
80
+ .option('--format <type>', 'Output format: table, json, yaml, compact', 'table')
81
+ .action((options) => wrap(async () => {
82
+ const valid = ['table', 'json', 'yaml', 'compact'];
83
+ if (!valid.includes(options.format))
84
+ throw new Error(`Invalid format "${options.format}" (${valid.join(', ')})`);
85
+ (await Promise.resolve().then(() => __importStar(require('./cli/manage')))).listHandler(options.format);
86
+ }));
87
+ program
88
+ .command('search <query>')
89
+ .alias('find')
90
+ .description('Search commands by name, text, or directory')
91
+ .action((query) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/manage')))).searchHandler(query)));
92
+ program
93
+ .command('edit <name>')
94
+ .description('Edit a saved command in the TUI')
95
+ .action((name) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/manage')))).editHandler(name)));
96
+ program
97
+ .command('rename <old> <new>')
98
+ .alias('mv')
99
+ .description('Rename a saved command (aliases and history follow)')
100
+ .action((oldName, newName) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/manage')))).renameHandler(oldName, newName)));
101
+ program
102
+ .command('delete <name>')
103
+ .alias('rm')
104
+ .description('Delete a saved command')
105
+ .option('-f, --force', 'Delete without confirmation')
106
+ .action((name, options) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/manage')))).deleteHandler(name, options)));
107
+ program
108
+ .command('alias [short] [command]')
109
+ .description('Create, list, or remove shortcut aliases')
110
+ .option('--list', 'List all aliases')
111
+ .option('--remove <alias>', 'Remove an alias')
112
+ .action((short, command, options) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/manage')))).aliasHandler(short, command, options)));
113
+ program
114
+ .command('recent')
115
+ .description('Show recently run commands (@N references)')
116
+ .option('--limit <n>', 'Maximum entries to show', (v) => parseInt(v, 10))
117
+ .option('--clear', 'Clear execution history')
118
+ .action((options) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/manage')))).recentHandler(options)));
119
+ program
120
+ .command('stats')
121
+ .description('Show usage statistics for your commands')
122
+ .action(() => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/manage')))).statsHandler()));
123
+ program
124
+ .command('validate [name]')
125
+ .description('Validate one command, or all commands')
126
+ .option('--all', 'Validate all saved commands')
127
+ .action((name, options) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/manage')))).validateHandler(options.all ? undefined : name)));
128
+ program
129
+ .command('export <file>')
130
+ .description('Export commands to a JSON or YAML file (secrets masked unless --full)')
131
+ .option('--format <type>', 'json or yaml')
132
+ .option('--full', 'Include real secret env values (restorable backup)')
133
+ .action((file, options) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/transfer')))).exportHandler(file, options)));
134
+ program
135
+ .command('import <file>')
136
+ .description('Import commands from a JSON file (auto-backup first)')
137
+ .action((file) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/transfer')))).importHandler(file)));
138
+ program
139
+ .command('completion [shell]')
140
+ .description('Generate or install shell completion (bash, zsh, fish)')
141
+ .option('--install', 'Install completion for your current shell')
142
+ .option('--names', 'Print saved command names (used by completion scripts)')
143
+ .action((shell, options) => wrap(async () => (await Promise.resolve().then(() => __importStar(require('./cli/completion')))).completionHandler(shell, options)));
144
+ program
145
+ .command('config')
146
+ .description('Show where your commands are stored')
147
+ .action(() => wrap(async () => {
148
+ const { getConfigDir, getConfigPath } = await Promise.resolve().then(() => __importStar(require('./core/store')));
149
+ const { listCommands } = await Promise.resolve().then(() => __importStar(require('./core/commands')));
150
+ console.log(`Config directory: ${getConfigDir()}`);
151
+ console.log(`Config file: ${getConfigPath()}`);
152
+ console.log(`Saved commands: ${Object.keys(listCommands()).length}`);
153
+ }));
154
+ program.showSuggestionAfterError(true);
155
+ const args = process.argv.slice(2);
156
+ if (args.length === 0) {
157
+ // Zero-args: interactive home screen (with first-run welcome).
158
+ wrap(async () => {
159
+ const { maybeShowOnboarding } = await Promise.resolve().then(() => __importStar(require('./ui/onboarding')));
160
+ maybeShowOnboarding(APP_VERSION);
161
+ if (process.stdout.isTTY && process.stdin.isTTY) {
162
+ await (await Promise.resolve().then(() => __importStar(require('./ui/interactive')))).interactiveHome();
163
+ }
164
+ else {
165
+ program.outputHelp();
166
+ }
167
+ });
168
+ }
169
+ else {
170
+ program.parse(process.argv);
171
+ }
172
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,yCAAoC;AAEpC,uEAAuE;AACvE,8DAA8D;AAC9D,MAAM,WAAW,GAAY,OAAO,CAAC,iBAAiB,CAAyB,CAAC,OAAO,CAAC;AAExF;;;;GAIG;AACH,SAAS,IAAI,CAAC,EAA8B;IAC1C,OAAO,CAAC,OAAO,EAAE;SACd,IAAI,CAAC,EAAE,CAAC;SACR,KAAK,CAAC,CAAC,KAAY,EAAE,EAAE;QACtB,qDAAqD;QACrD,IAAI,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,mBAAmB,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,KAAK,CAAC,aAAa,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,kFAAkF,CAAC;KAC/F,OAAO,CAAC,WAAW,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,mBAAmB,CAAC;KAC5B,WAAW,CAAC,2DAA2D,CAAC;KACxE,MAAM,CAAC,WAAW,EAAE,+CAA+C,CAAC;KACpE,MAAM,CAAC,WAAW,EAAE,qCAAqC,CAAC;KAC1D,MAAM,CAAC,CAAC,IAAY,EAAE,YAAgC,EAAE,OAAO,EAAE,EAAE,CAClE,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,wDAAa,WAAW,GAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CACtF,CAAC;AAEJ,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,wDAAa,YAAY,GAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AAE9E,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,qEAAqE,CAAC;KAClF,MAAM,CAAC,CAAC,IAAwB,EAAE,EAAE,CACnC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,wDAAa,YAAY,GAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CACjE,CAAC;AAEJ,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,KAAK,CAAC,IAAI,CAAC;KACX,WAAW,CAAC,yBAAyB,CAAC;KACtC,MAAM,CAAC,iBAAiB,EAAE,2CAA2C,EAAE,OAAO,CAAC;KAC/E,MAAM,CAAC,CAAC,OAA2B,EAAE,EAAE,CACtC,IAAI,CAAC,KAAK,IAAI,EAAE;IACd,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACnD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,mBAAmB,OAAO,CAAC,MAAM,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9E,CAAC,wDAAa,cAAc,GAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,MAAe,CAAC,CAAC;AACtE,CAAC,CAAC,CACH,CAAC;AAEJ,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,KAAK,CAAC,MAAM,CAAC;KACb,WAAW,CAAC,6CAA6C,CAAC;KAC1D,MAAM,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,wDAAa,cAAc,GAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEpG,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,iCAAiC,CAAC;KAC9C,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,wDAAa,cAAc,GAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEhG,OAAO;KACJ,OAAO,CAAC,oBAAoB,CAAC;KAC7B,KAAK,CAAC,IAAI,CAAC;KACX,WAAW,CAAC,qDAAqD,CAAC;KAClE,MAAM,CAAC,CAAC,OAAe,EAAE,OAAe,EAAE,EAAE,CAC3C,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,wDAAa,cAAc,GAAC,CAAC,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CACjF,CAAC;AAEJ,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,KAAK,CAAC,IAAI,CAAC;KACX,WAAW,CAAC,wBAAwB,CAAC;KACrC,MAAM,CAAC,aAAa,EAAE,6BAA6B,CAAC;KACpD,MAAM,CAAC,CAAC,IAAY,EAAE,OAAO,EAAE,EAAE,CAChC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,wDAAa,cAAc,GAAC,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAC9E,CAAC;AAEJ,OAAO;KACJ,OAAO,CAAC,yBAAyB,CAAC;KAClC,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,QAAQ,EAAE,kBAAkB,CAAC;KACpC,MAAM,CAAC,kBAAkB,EAAE,iBAAiB,CAAC;KAC7C,MAAM,CAAC,CAAC,KAAyB,EAAE,OAA2B,EAAE,OAAO,EAAE,EAAE,CAC1E,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,wDAAa,cAAc,GAAC,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CACvF,CAAC;AAEJ,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,aAAa,EAAE,yBAAyB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;KACxE,MAAM,CAAC,SAAS,EAAE,yBAAyB,CAAC;KAC5C,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,wDAAa,cAAc,GAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAEhG,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,wDAAa,cAAc,GAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;AAEjF,OAAO;KACJ,OAAO,CAAC,iBAAiB,CAAC;KAC1B,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CAAC,OAAO,EAAE,6BAA6B,CAAC;KAC9C,MAAM,CAAC,CAAC,IAAwB,EAAE,OAA0B,EAAE,EAAE,CAC/D,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,wDAAa,cAAc,GAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CACjG,CAAC;AAEJ,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,uEAAuE,CAAC;KACpF,MAAM,CAAC,iBAAiB,EAAE,cAAc,CAAC;KACzC,MAAM,CAAC,QAAQ,EAAE,oDAAoD,CAAC;KACtE,MAAM,CAAC,CAAC,IAAY,EAAE,OAAO,EAAE,EAAE,CAChC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,wDAAa,gBAAgB,GAAC,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAChF,CAAC;AAEJ,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,sDAAsD,CAAC;KACnE,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,wDAAa,gBAAgB,GAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEpG,OAAO;KACJ,OAAO,CAAC,oBAAoB,CAAC;KAC7B,WAAW,CAAC,wDAAwD,CAAC;KACrE,MAAM,CAAC,WAAW,EAAE,2CAA2C,CAAC;KAChE,MAAM,CAAC,SAAS,EAAE,wDAAwD,CAAC;KAC3E,MAAM,CAAC,CAAC,KAAyB,EAAE,OAAO,EAAE,EAAE,CAC7C,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,wDAAa,kBAAkB,GAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CACvF,CAAC;AAEJ,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,GAAG,EAAE,CACX,IAAI,CAAC,KAAK,IAAI,EAAE;IACd,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,wDAAa,cAAc,GAAC,CAAC;IACrE,MAAM,EAAE,YAAY,EAAE,GAAG,wDAAa,iBAAiB,GAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,qBAAqB,YAAY,EAAE,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,qBAAqB,aAAa,EAAE,EAAE,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AACzE,CAAC,CAAC,CACH,CAAC;AAEJ,OAAO,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;AAEvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IACtB,+DAA+D;IAC/D,IAAI,CAAC,KAAK,IAAI,EAAE;QACd,MAAM,EAAE,mBAAmB,EAAE,GAAG,wDAAa,iBAAiB,GAAC,CAAC;QAChE,mBAAmB,CAAC,WAAW,CAAC,CAAC;QACjC,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YAChD,MAAM,CAAC,wDAAa,kBAAkB,GAAC,CAAC,CAAC,eAAe,EAAE,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;KAAM,CAAC;IACN,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,19 @@
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
+ lastRuns?: Map<string, string>;
11
+ }
12
+ /** Shorten a path for display: home becomes ~. */
13
+ export declare function prettyPath(dir: string): string;
14
+ /** Boxed, width-aware table sorted by usage. */
15
+ export declare function toTable(commands: CommandMap, options?: TableOptions): string;
16
+ export declare function render(commands: CommandMap, format: ListFormat, options?: TableOptions): string;
17
+ /** One-line summary of a command used in confirmation output. */
18
+ export declare function summarize(name: string, cmd: SavedCommand): string;
19
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/ui/format.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAKrE,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;IAChC,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,kDAAkD;AAClD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG9C;AAED,gDAAgD;AAChD,wBAAgB,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,GAAE,YAAiB,GAAG,MAAM,CAiChF;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,155 @@
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.timeAgo = timeAgo;
37
+ exports.truncate = truncate;
38
+ exports.toJson = toJson;
39
+ exports.toYaml = toYaml;
40
+ exports.toCompact = toCompact;
41
+ exports.prettyPath = prettyPath;
42
+ exports.toTable = toTable;
43
+ exports.render = render;
44
+ exports.summarize = summarize;
45
+ const os = __importStar(require("os"));
46
+ const env_1 = require("../core/env");
47
+ const table_1 = require("./table");
48
+ const theme_1 = require("./theme");
49
+ /** "2 minutes ago" style relative time. */
50
+ function timeAgo(iso, now = new Date()) {
51
+ const seconds = Math.max(0, Math.floor((now.getTime() - new Date(iso).getTime()) / 1000));
52
+ const units = [
53
+ [31536000, 'year'],
54
+ [2592000, 'month'],
55
+ [86400, 'day'],
56
+ [3600, 'hour'],
57
+ [60, 'minute'],
58
+ ];
59
+ for (const [size, label] of units) {
60
+ const count = Math.floor(seconds / size);
61
+ if (count >= 1)
62
+ return `${count} ${label}${count > 1 ? 's' : ''} ago`;
63
+ }
64
+ return 'just now';
65
+ }
66
+ function truncate(text, max) {
67
+ return text.length <= max ? text : `${text.slice(0, max - 1)}…`;
68
+ }
69
+ function maskedCopy(commands) {
70
+ const out = {};
71
+ for (const [name, cmd] of Object.entries(commands)) {
72
+ out[name] = cmd.env ? { ...cmd, env: (0, env_1.maskSensitive)(cmd.env) } : cmd;
73
+ }
74
+ return out;
75
+ }
76
+ function toJson(commands, mask = true) {
77
+ return JSON.stringify(mask ? maskedCopy(commands) : commands, null, 2);
78
+ }
79
+ function yamlQuote(value) {
80
+ return /^[\w./-]+$/.test(value) ? value : JSON.stringify(value);
81
+ }
82
+ function toYaml(commands, mask = true) {
83
+ const data = mask ? maskedCopy(commands) : commands;
84
+ const lines = [];
85
+ for (const [name, cmd] of Object.entries(data)) {
86
+ lines.push(`${yamlQuote(name)}:`);
87
+ lines.push(` command: ${yamlQuote(cmd.command)}`);
88
+ lines.push(` directory: ${yamlQuote(cmd.directory)}`);
89
+ lines.push(` pathMode: ${cmd.pathMode ?? 'saved'}`);
90
+ if (cmd.env && Object.keys(cmd.env).length > 0) {
91
+ lines.push(' env:');
92
+ for (const [k, v] of Object.entries(cmd.env))
93
+ lines.push(` ${k}: ${yamlQuote(v)}`);
94
+ }
95
+ lines.push(` createdAt: ${yamlQuote(cmd.createdAt)}`);
96
+ lines.push(` updatedAt: ${yamlQuote(cmd.updatedAt)}`);
97
+ }
98
+ return lines.join('\n') + '\n';
99
+ }
100
+ function toCompact(commands) {
101
+ return Object.entries(commands)
102
+ .map(([name, cmd]) => `${name}: ${cmd.command} (${cmd.directory})`)
103
+ .join('\n');
104
+ }
105
+ /** Shorten a path for display: home becomes ~. */
106
+ function prettyPath(dir) {
107
+ const home = os.homedir();
108
+ return dir.startsWith(home) ? `~${dir.slice(home.length)}` : dir;
109
+ }
110
+ /** Boxed, width-aware table sorted by usage. */
111
+ function toTable(commands, options = {}) {
112
+ const names = Object.keys(commands).sort((a, b) => {
113
+ const runsA = options.runCounts?.get(a) ?? 0;
114
+ const runsB = options.runCounts?.get(b) ?? 0;
115
+ return runsB - runsA || a.localeCompare(b);
116
+ });
117
+ const rows = names.map((name) => {
118
+ const cmd = commands[name];
119
+ const runs = options.runCounts?.get(name) ?? 0;
120
+ const lastRun = options.lastRuns?.get(name);
121
+ const envCount = cmd.env ? Object.keys(cmd.env).length : 0;
122
+ const where = (cmd.pathMode ?? 'saved') === 'current' ? '(current dir)' : prettyPath(cmd.directory);
123
+ return [
124
+ name + (envCount > 0 ? ` ⁺${envCount}` : ''),
125
+ cmd.command,
126
+ where,
127
+ runs > 0 ? String(runs) : '·',
128
+ lastRun ? timeAgo(lastRun) : '—',
129
+ ];
130
+ });
131
+ return (0, table_1.renderTable)([
132
+ { header: 'Name', min: 12, flex: 1, style: (t) => theme_1.theme.name(t) },
133
+ { header: 'Command', min: 24, flex: 4 },
134
+ { header: 'Where', min: 14, flex: 2, style: (t) => theme_1.theme.dim(t) },
135
+ { header: 'Runs', min: 4, flex: 0, align: 'right', style: (t) => theme_1.theme.accent(t) },
136
+ { header: 'Last run', min: 14, flex: 0, style: (t) => theme_1.theme.dim(t) },
137
+ ], rows);
138
+ }
139
+ function render(commands, format, options = {}) {
140
+ switch (format) {
141
+ case 'json':
142
+ return toJson(commands);
143
+ case 'yaml':
144
+ return toYaml(commands);
145
+ case 'compact':
146
+ return toCompact(commands);
147
+ case 'table':
148
+ return toTable(commands, options);
149
+ }
150
+ }
151
+ /** One-line summary of a command used in confirmation output. */
152
+ function summarize(name, cmd) {
153
+ return `${theme_1.theme.name(name)} ${theme_1.theme.dim('→')} ${cmd.command} ${theme_1.theme.dim(`(${cmd.directory})`)}`;
154
+ }
155
+ //# 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,62 @@
1
+ import * as readline from 'readline';
2
+ import { PathMode } from '../core/types';
3
+ /** Simple subsequence fuzzy match: every query char appears in order. */
4
+ export declare function fuzzyMatch(query: string, text: string): boolean;
5
+ export interface FormSeed {
6
+ name?: string;
7
+ command?: string;
8
+ directory?: string;
9
+ pathMode?: PathMode;
10
+ /** When editing, the original name (kept fixed) and its saved env. */
11
+ editing?: string;
12
+ env?: Record<string, string>;
13
+ }
14
+ export type TuiAction = {
15
+ kind: 'run';
16
+ name: string;
17
+ } | null;
18
+ export declare class Tui {
19
+ private readonly out;
20
+ private mode;
21
+ private filter;
22
+ private selected;
23
+ private rows;
24
+ private form;
25
+ private input;
26
+ private message;
27
+ private resolve;
28
+ constructor(out?: (text: string) => void);
29
+ private get width();
30
+ private get height();
31
+ private visibleRows;
32
+ refresh(): void;
33
+ openForm(seed?: FormSeed): void;
34
+ private header;
35
+ private listPane;
36
+ private detailPane;
37
+ private statsPane;
38
+ private formPane;
39
+ private inputPane;
40
+ private footer;
41
+ render(): void;
42
+ /** Clear the filter but keep the same row highlighted. */
43
+ private clearFilter;
44
+ private move;
45
+ private openInput;
46
+ private handleInputKey;
47
+ private submitInput;
48
+ private submitForm;
49
+ private handleFormKey;
50
+ handleKey(str: string | undefined, key: readline.Key): void;
51
+ private selectRun;
52
+ private finish;
53
+ /** Show the TUI until the user runs a command or quits (null). */
54
+ waitForAction(): Promise<TuiAction>;
55
+ }
56
+ /**
57
+ * The full-screen home: everything (browse, create, edit, delete, stats)
58
+ * happens in the TUI. Only running a command hands the terminal back so
59
+ * output lands in normal scrollback.
60
+ */
61
+ export declare function interactiveHome(seed?: FormSeed): Promise<void>;
62
+ //# sourceMappingURL=interactive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../src/ui/interactive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAYrC,OAAO,EAAE,QAAQ,EAAgB,MAAM,eAAe,CAAC;AAIvD,yEAAyE;AACzE,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAS/D;AAKD,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAmED,MAAM,MAAM,SAAS,GAAG;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC;AAqB7D,qBAAa,GAAG;IAUF,OAAO,CAAC,QAAQ,CAAC,GAAG;IAThC,OAAO,CAAC,IAAI,CAAkB;IAC9B,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,IAAI,CAA0B;IACtC,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,OAAO,CAA8C;gBAEhC,GAAG,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAqC;IAEzF,OAAO,KAAK,KAAK,GAEhB;IACD,OAAO,KAAK,MAAM,GAEjB;IAED,OAAO,CAAC,WAAW;IAUnB,OAAO,IAAI,IAAI;IAKf,QAAQ,CAAC,IAAI,GAAE,QAAa,GAAG,IAAI;IAqBnC,OAAO,CAAC,MAAM;IASd,OAAO,CAAC,QAAQ;IAgChB,OAAO,CAAC,UAAU;IAuBlB,OAAO,CAAC,SAAS;IAkBjB,OAAO,CAAC,QAAQ;IA6ChB,OAAO,CAAC,SAAS;IAejB,OAAO,CAAC,MAAM;IAgCd,MAAM,IAAI,IAAI;IAoCd,0DAA0D;IAC1D,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,WAAW;IA8BnB,OAAO,CAAC,UAAU;IAkDlB,OAAO,CAAC,aAAa;IA6CrB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,GAAG,IAAI;IAoF3D,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,MAAM;IAMd,kEAAkE;IAClE,aAAa,IAAI,OAAO,CAAC,SAAS,CAAC;CAMpC;AAgBD;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBpE"}