appclean 1.8.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 (154) hide show
  1. package/.github/workflows/publish.yml +41 -0
  2. package/.github/workflows/test.yml +37 -0
  3. package/ACTION_CHECKLIST.md +342 -0
  4. package/APPCLEAN_SUMMARY.md +309 -0
  5. package/CHANGELOG.md +205 -0
  6. package/CODE_OF_CONDUCT.md +49 -0
  7. package/CODE_REVIEW_REPORT.md +447 -0
  8. package/COMMUNITY_POSTS.md +307 -0
  9. package/CONTRIBUTING.md +121 -0
  10. package/DEPLOYMENT_GUIDE.md +345 -0
  11. package/DEPLOYMENT_STATUS.md +182 -0
  12. package/EXECUTIVE_REPORT.md +393 -0
  13. package/GITHUB_OPTIMIZATION.md +383 -0
  14. package/INDEX.md +165 -0
  15. package/LICENSE +21 -0
  16. package/MARKETING_SUMMARY.md +352 -0
  17. package/NPM_PACKAGE_OPTIMIZATION.md +281 -0
  18. package/NPM_PUBLISH.md +116 -0
  19. package/PROJECT_SUMMARY.txt +249 -0
  20. package/QUICKSTART.md +219 -0
  21. package/README.md +548 -0
  22. package/SECURITY.md +104 -0
  23. package/SETUP_GITHUB.md +237 -0
  24. package/TESTING_SUMMARY.md +379 -0
  25. package/dist/core/appUpdateChecker.d.ts +23 -0
  26. package/dist/core/appUpdateChecker.d.ts.map +1 -0
  27. package/dist/core/appUpdateChecker.js +159 -0
  28. package/dist/core/appUpdateChecker.js.map +1 -0
  29. package/dist/core/detector.d.ts +13 -0
  30. package/dist/core/detector.d.ts.map +1 -0
  31. package/dist/core/detector.js +99 -0
  32. package/dist/core/detector.js.map +1 -0
  33. package/dist/core/duplicateFileFinder.d.ts +14 -0
  34. package/dist/core/duplicateFileFinder.d.ts.map +1 -0
  35. package/dist/core/duplicateFileFinder.js +80 -0
  36. package/dist/core/duplicateFileFinder.js.map +1 -0
  37. package/dist/core/orphanedDependencyDetector.d.ts +19 -0
  38. package/dist/core/orphanedDependencyDetector.d.ts.map +1 -0
  39. package/dist/core/orphanedDependencyDetector.js +148 -0
  40. package/dist/core/orphanedDependencyDetector.js.map +1 -0
  41. package/dist/core/performanceOptimizer.d.ts +37 -0
  42. package/dist/core/performanceOptimizer.d.ts.map +1 -0
  43. package/dist/core/performanceOptimizer.js +128 -0
  44. package/dist/core/performanceOptimizer.js.map +1 -0
  45. package/dist/core/permissionHandler.d.ts +9 -0
  46. package/dist/core/permissionHandler.d.ts.map +1 -0
  47. package/dist/core/permissionHandler.js +89 -0
  48. package/dist/core/permissionHandler.js.map +1 -0
  49. package/dist/core/pluginSystem.d.ts +39 -0
  50. package/dist/core/pluginSystem.d.ts.map +1 -0
  51. package/dist/core/pluginSystem.js +120 -0
  52. package/dist/core/pluginSystem.js.map +1 -0
  53. package/dist/core/removalRecorder.d.ts +32 -0
  54. package/dist/core/removalRecorder.d.ts.map +1 -0
  55. package/dist/core/removalRecorder.js +79 -0
  56. package/dist/core/removalRecorder.js.map +1 -0
  57. package/dist/core/remover.d.ts +15 -0
  58. package/dist/core/remover.d.ts.map +1 -0
  59. package/dist/core/remover.js +225 -0
  60. package/dist/core/remover.js.map +1 -0
  61. package/dist/core/reportGenerator.d.ts +9 -0
  62. package/dist/core/reportGenerator.d.ts.map +1 -0
  63. package/dist/core/reportGenerator.js +328 -0
  64. package/dist/core/reportGenerator.js.map +1 -0
  65. package/dist/core/scheduledCleanup.d.ts +38 -0
  66. package/dist/core/scheduledCleanup.d.ts.map +1 -0
  67. package/dist/core/scheduledCleanup.js +127 -0
  68. package/dist/core/scheduledCleanup.js.map +1 -0
  69. package/dist/core/serviceFileDetector.d.ts +18 -0
  70. package/dist/core/serviceFileDetector.d.ts.map +1 -0
  71. package/dist/core/serviceFileDetector.js +136 -0
  72. package/dist/core/serviceFileDetector.js.map +1 -0
  73. package/dist/core/verificationModule.d.ts +14 -0
  74. package/dist/core/verificationModule.d.ts.map +1 -0
  75. package/dist/core/verificationModule.js +102 -0
  76. package/dist/core/verificationModule.js.map +1 -0
  77. package/dist/index.d.ts +3 -0
  78. package/dist/index.d.ts.map +1 -0
  79. package/dist/index.js +333 -0
  80. package/dist/index.js.map +1 -0
  81. package/dist/managers/brewManager.d.ts +10 -0
  82. package/dist/managers/brewManager.d.ts.map +1 -0
  83. package/dist/managers/brewManager.js +130 -0
  84. package/dist/managers/brewManager.js.map +1 -0
  85. package/dist/managers/customManager.d.ts +8 -0
  86. package/dist/managers/customManager.d.ts.map +1 -0
  87. package/dist/managers/customManager.js +139 -0
  88. package/dist/managers/customManager.js.map +1 -0
  89. package/dist/managers/linuxManager.d.ts +10 -0
  90. package/dist/managers/linuxManager.d.ts.map +1 -0
  91. package/dist/managers/linuxManager.js +191 -0
  92. package/dist/managers/linuxManager.js.map +1 -0
  93. package/dist/managers/npmManager.d.ts +10 -0
  94. package/dist/managers/npmManager.d.ts.map +1 -0
  95. package/dist/managers/npmManager.js +119 -0
  96. package/dist/managers/npmManager.js.map +1 -0
  97. package/dist/types/index.d.ts +44 -0
  98. package/dist/types/index.d.ts.map +1 -0
  99. package/dist/types/index.js +3 -0
  100. package/dist/types/index.js.map +1 -0
  101. package/dist/ui/guiServer.d.ts +10 -0
  102. package/dist/ui/guiServer.d.ts.map +1 -0
  103. package/dist/ui/guiServer.js +134 -0
  104. package/dist/ui/guiServer.js.map +1 -0
  105. package/dist/ui/menu.d.ts +6 -0
  106. package/dist/ui/menu.d.ts.map +1 -0
  107. package/dist/ui/menu.js +93 -0
  108. package/dist/ui/menu.js.map +1 -0
  109. package/dist/ui/prompts.d.ts +13 -0
  110. package/dist/ui/prompts.d.ts.map +1 -0
  111. package/dist/ui/prompts.js +161 -0
  112. package/dist/ui/prompts.js.map +1 -0
  113. package/dist/utils/filesystem.d.ts +13 -0
  114. package/dist/utils/filesystem.d.ts.map +1 -0
  115. package/dist/utils/filesystem.js +152 -0
  116. package/dist/utils/filesystem.js.map +1 -0
  117. package/dist/utils/logger.d.ts +12 -0
  118. package/dist/utils/logger.d.ts.map +1 -0
  119. package/dist/utils/logger.js +49 -0
  120. package/dist/utils/logger.js.map +1 -0
  121. package/dist/utils/platform.d.ts +9 -0
  122. package/dist/utils/platform.d.ts.map +1 -0
  123. package/dist/utils/platform.js +75 -0
  124. package/dist/utils/platform.js.map +1 -0
  125. package/jest.config.js +20 -0
  126. package/logo.svg +60 -0
  127. package/package.json +55 -0
  128. package/setup-github.sh +125 -0
  129. package/src/core/appUpdateChecker.ts +220 -0
  130. package/src/core/detector.ts +133 -0
  131. package/src/core/duplicateFileFinder.ts +113 -0
  132. package/src/core/orphanedDependencyDetector.ts +195 -0
  133. package/src/core/performanceOptimizer.ts +209 -0
  134. package/src/core/permissionHandler.ts +121 -0
  135. package/src/core/pluginSystem.ts +194 -0
  136. package/src/core/removalRecorder.ts +146 -0
  137. package/src/core/remover.ts +280 -0
  138. package/src/core/reportGenerator.ts +354 -0
  139. package/src/core/scheduledCleanup.ts +204 -0
  140. package/src/core/serviceFileDetector.ts +181 -0
  141. package/src/core/verificationModule.ts +140 -0
  142. package/src/index.ts +449 -0
  143. package/src/managers/brewManager.ts +149 -0
  144. package/src/managers/customManager.ts +167 -0
  145. package/src/managers/linuxManager.ts +210 -0
  146. package/src/managers/npmManager.ts +137 -0
  147. package/src/types/index.ts +59 -0
  148. package/src/ui/guiServer.ts +155 -0
  149. package/src/ui/menu.ts +100 -0
  150. package/src/ui/prompts.ts +177 -0
  151. package/src/utils/filesystem.ts +145 -0
  152. package/src/utils/logger.ts +48 -0
  153. package/src/utils/platform.ts +75 -0
  154. package/tsconfig.json +20 -0
package/dist/index.js ADDED
@@ -0,0 +1,333 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const ora_1 = __importDefault(require("ora"));
10
+ const detector_1 = require("./core/detector");
11
+ const remover_1 = require("./core/remover");
12
+ const menu_1 = require("./ui/menu");
13
+ const prompts_1 = require("./ui/prompts");
14
+ const logger_1 = require("./utils/logger");
15
+ const VERSION = '1.8.0';
16
+ async function interactiveMode() {
17
+ (0, menu_1.showHeader)();
18
+ const detector = new detector_1.Detector();
19
+ let running = true;
20
+ while (running) {
21
+ const action = await (0, menu_1.showMainMenu)();
22
+ switch (action) {
23
+ case 'search': {
24
+ await handleSearch(detector);
25
+ break;
26
+ }
27
+ case 'list-all': {
28
+ await handleListAll(detector);
29
+ break;
30
+ }
31
+ case 'help': {
32
+ (0, menu_1.showHelp)();
33
+ await new Promise((resolve) => setTimeout(resolve, 3000));
34
+ break;
35
+ }
36
+ case 'exit': {
37
+ running = false;
38
+ logger_1.Logger.space();
39
+ logger_1.Logger.info('Goodbye!');
40
+ break;
41
+ }
42
+ }
43
+ }
44
+ }
45
+ async function handleSearch(detector) {
46
+ logger_1.Logger.space();
47
+ const query = await (0, prompts_1.promptSearchQuery)();
48
+ if (!query.trim()) {
49
+ logger_1.Logger.warn('Please enter a search query');
50
+ return;
51
+ }
52
+ const spinner = (0, ora_1.default)('Searching for apps...').start();
53
+ try {
54
+ const results = await detector.searchApps({ query });
55
+ spinner.succeed(`Found ${results.length} app(s)`);
56
+ logger_1.Logger.space();
57
+ if (results.length === 0) {
58
+ logger_1.Logger.warn('No apps found matching your query');
59
+ return;
60
+ }
61
+ const selectedApp = await (0, prompts_1.promptSelectApp)(results);
62
+ if (!selectedApp) {
63
+ return;
64
+ }
65
+ await handleAppSelected(selectedApp, detector);
66
+ }
67
+ catch (error) {
68
+ spinner.fail(error.message);
69
+ }
70
+ }
71
+ async function handleListAll(detector) {
72
+ logger_1.Logger.space();
73
+ const filterMethod = await (0, prompts_1.promptInstallMethodFilter)();
74
+ const sortBy = await (0, prompts_1.promptSortBy)();
75
+ const spinner = (0, ora_1.default)('Scanning installed apps...').start();
76
+ try {
77
+ const apps = await detector.searchApps({
78
+ installMethod: filterMethod || undefined,
79
+ sortBy,
80
+ });
81
+ spinner.succeed(`Found ${apps.length} app(s)`);
82
+ logger_1.Logger.space();
83
+ if (apps.length === 0) {
84
+ logger_1.Logger.warn('No apps found');
85
+ return;
86
+ }
87
+ const table = apps.map((app) => ({
88
+ Name: app.name,
89
+ Version: app.version,
90
+ Method: app.installMethod,
91
+ Size: app.size ? (0, logger_1.formatBytes)(app.size) : 'N/A',
92
+ }));
93
+ logger_1.Logger.table(table);
94
+ logger_1.Logger.space();
95
+ const selectedApp = await (0, prompts_1.promptSelectApp)(apps);
96
+ if (!selectedApp) {
97
+ return;
98
+ }
99
+ await handleAppSelected(selectedApp, detector);
100
+ }
101
+ catch (error) {
102
+ spinner.fail(error.message);
103
+ }
104
+ }
105
+ async function handleAppSelected(app, detector) {
106
+ logger_1.Logger.space();
107
+ const action = await (0, menu_1.showAppMenu)();
108
+ switch (action) {
109
+ case 'details': {
110
+ const spinner = (0, ora_1.default)('Analyzing artifacts...').start();
111
+ try {
112
+ const artifacts = await detector.findArtifacts(app.name, app.installMethod);
113
+ spinner.succeed('Analysis complete');
114
+ (0, prompts_1.displayAppDetails)(app, artifacts);
115
+ logger_1.Logger.space();
116
+ }
117
+ catch (error) {
118
+ spinner.fail(error.message);
119
+ }
120
+ break;
121
+ }
122
+ case 'remove': {
123
+ await handleRemoveApp(app, detector);
124
+ break;
125
+ }
126
+ case 'back':
127
+ default:
128
+ break;
129
+ }
130
+ }
131
+ async function handleRemoveApp(app, detector) {
132
+ const confirmed = await (0, prompts_1.promptConfirmRemoval)(app.name);
133
+ if (!confirmed) {
134
+ logger_1.Logger.info('Removal cancelled');
135
+ return;
136
+ }
137
+ const options = await (0, prompts_1.promptRemovalOptions)();
138
+ logger_1.Logger.space();
139
+ const spinner = (0, ora_1.default)('Analyzing artifacts...').start();
140
+ try {
141
+ const artifacts = await detector.findArtifacts(app.name, app.installMethod);
142
+ spinner.succeed('Analysis complete');
143
+ const remover = new remover_1.Remover();
144
+ if (options.dryRun) {
145
+ logger_1.Logger.info(`${chalk_1.default.bold('DRY RUN:')} Preview of files to be removed:`);
146
+ logger_1.Logger.space();
147
+ await remover.previewRemoval(artifacts);
148
+ logger_1.Logger.space();
149
+ logger_1.Logger.warn('This is a preview only. No files were removed.');
150
+ }
151
+ else {
152
+ const finalConfirm = await (0, prompts_1.promptFinalConfirmation)(app.name);
153
+ if (!finalConfirm) {
154
+ logger_1.Logger.info('Removal cancelled');
155
+ return;
156
+ }
157
+ const removeSpinner = (0, ora_1.default)('Removing app and artifacts...').start();
158
+ try {
159
+ const result = await remover.removeApp(app.name, app.installMethod, artifacts, {
160
+ createBackup: options.createBackup,
161
+ });
162
+ if (result.success) {
163
+ removeSpinner.succeed(`Successfully removed ${app.name} (freed ${(0, logger_1.formatBytes)(result.freedSpace)})`);
164
+ if (result.backupPath) {
165
+ logger_1.Logger.info(`Backup saved at: ${result.backupPath}`);
166
+ }
167
+ }
168
+ else {
169
+ removeSpinner.warn(`Removal completed with issues`);
170
+ if (result.errors && result.errors.length > 0) {
171
+ logger_1.Logger.warn('Errors:');
172
+ result.errors.forEach((error) => console.log(` • ${error}`));
173
+ }
174
+ }
175
+ }
176
+ catch (error) {
177
+ removeSpinner.fail(error.message);
178
+ }
179
+ }
180
+ }
181
+ catch (error) {
182
+ spinner.fail(error.message);
183
+ }
184
+ logger_1.Logger.space();
185
+ }
186
+ async function main() {
187
+ const program = new commander_1.Command();
188
+ program
189
+ .name('appclean')
190
+ .description('Intelligently find and remove applications with all their artifacts')
191
+ .version(VERSION);
192
+ program
193
+ .command('search [query]')
194
+ .description('Search for installed applications')
195
+ .action(async (query) => {
196
+ const detector = new detector_1.Detector();
197
+ const searchQuery = query || (await (0, prompts_1.promptSearchQuery)());
198
+ const spinner = (0, ora_1.default)('Searching for apps...').start();
199
+ try {
200
+ const results = await detector.searchApps({ query: searchQuery });
201
+ spinner.succeed(`Found ${results.length} app(s)`);
202
+ if (results.length === 0) {
203
+ logger_1.Logger.warn('No apps found');
204
+ return;
205
+ }
206
+ logger_1.Logger.space();
207
+ const selectedApp = await (0, prompts_1.promptSelectApp)(results);
208
+ if (selectedApp) {
209
+ await handleAppSelected(selectedApp, detector);
210
+ }
211
+ }
212
+ catch (error) {
213
+ spinner.fail(error.message);
214
+ }
215
+ });
216
+ program
217
+ .command('list')
218
+ .description('List all installed applications')
219
+ .action(async () => {
220
+ const detector = new detector_1.Detector();
221
+ const spinner = (0, ora_1.default)('Scanning installed apps...').start();
222
+ try {
223
+ const apps = await detector.searchApps({ sortBy: 'name' });
224
+ spinner.succeed(`Found ${apps.length} app(s)`);
225
+ if (apps.length === 0) {
226
+ logger_1.Logger.warn('No apps found');
227
+ return;
228
+ }
229
+ logger_1.Logger.space();
230
+ const table = apps.map((app) => ({
231
+ Name: app.name,
232
+ Version: app.version,
233
+ Method: app.installMethod,
234
+ }));
235
+ logger_1.Logger.table(table);
236
+ }
237
+ catch (error) {
238
+ spinner.fail(error.message);
239
+ }
240
+ });
241
+ program
242
+ .command('analyze <appName>')
243
+ .description('Analyze an application and show its artifacts')
244
+ .action(async (appName) => {
245
+ const detector = new detector_1.Detector();
246
+ const spinner = (0, ora_1.default)('Analyzing app...').start();
247
+ try {
248
+ const apps = await detector.searchApps({ query: appName });
249
+ if (apps.length === 0) {
250
+ spinner.fail('App not found');
251
+ return;
252
+ }
253
+ const app = apps[0];
254
+ const artifacts = await detector.findArtifacts(app.name, app.installMethod);
255
+ spinner.succeed('Analysis complete');
256
+ (0, prompts_1.displayAppDetails)(app, artifacts);
257
+ }
258
+ catch (error) {
259
+ spinner.fail(error.message);
260
+ }
261
+ });
262
+ program
263
+ .command('remove <appName>')
264
+ .description('Remove an application')
265
+ .option('--dry-run', 'Preview without removing')
266
+ .option('--backup', 'Create backup before removal')
267
+ .option('--force', 'Skip confirmation prompts')
268
+ .action(async (appName, options) => {
269
+ const detector = new detector_1.Detector();
270
+ const spinner = (0, ora_1.default)('Searching for app...').start();
271
+ try {
272
+ const apps = await detector.searchApps({ query: appName });
273
+ if (apps.length === 0) {
274
+ spinner.fail('App not found');
275
+ return;
276
+ }
277
+ const app = apps[0];
278
+ spinner.text = 'Analyzing artifacts...';
279
+ const artifacts = await detector.findArtifacts(app.name, app.installMethod);
280
+ spinner.succeed('Analysis complete');
281
+ const remover = new remover_1.Remover();
282
+ logger_1.Logger.space();
283
+ logger_1.Logger.info(`App: ${chalk_1.default.cyan(app.name)}`);
284
+ logger_1.Logger.info(`Method: ${chalk_1.default.yellow(app.installMethod)}`);
285
+ logger_1.Logger.space();
286
+ if (options.dryRun) {
287
+ logger_1.Logger.info('DRY RUN - Preview of files to be removed:');
288
+ logger_1.Logger.space();
289
+ await remover.previewRemoval(artifacts);
290
+ }
291
+ else {
292
+ if (!options.force) {
293
+ const confirmed = await (0, prompts_1.promptFinalConfirmation)(app.name);
294
+ if (!confirmed) {
295
+ logger_1.Logger.info('Removal cancelled');
296
+ return;
297
+ }
298
+ }
299
+ const removeSpinner = (0, ora_1.default)('Removing app...').start();
300
+ const result = await remover.removeApp(app.name, app.installMethod, artifacts, { createBackup: options.backup });
301
+ if (result.success) {
302
+ removeSpinner.succeed(`Removed ${app.name} (freed ${(0, logger_1.formatBytes)(result.freedSpace)})`);
303
+ }
304
+ else {
305
+ removeSpinner.warn('Removal completed with errors');
306
+ }
307
+ }
308
+ }
309
+ catch (error) {
310
+ spinner.fail(error.message);
311
+ }
312
+ });
313
+ program.on('command:*', () => {
314
+ if (process.argv.length < 3) {
315
+ interactiveMode().catch((error) => {
316
+ logger_1.Logger.error(error.message);
317
+ process.exit(1);
318
+ });
319
+ }
320
+ });
321
+ program.parse(process.argv);
322
+ if (process.argv.length < 3) {
323
+ interactiveMode().catch((error) => {
324
+ logger_1.Logger.error(error.message);
325
+ process.exit(1);
326
+ });
327
+ }
328
+ }
329
+ main().catch((error) => {
330
+ logger_1.Logger.error(error.message);
331
+ process.exit(1);
332
+ });
333
+ //# 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,10 @@
1
+ import { InstalledApp, ArtifactPath } from '../types';
2
+ export declare class BrewManager {
3
+ private brewPrefix;
4
+ constructor();
5
+ private getBrewPrefix;
6
+ getInstalledPackages(): Promise<InstalledApp[]>;
7
+ findArtifacts(appName: string): Promise<ArtifactPath[]>;
8
+ removePackage(appName: string): Promise<boolean>;
9
+ }
10
+ //# sourceMappingURL=brewManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brewManager.d.ts","sourceRoot":"","sources":["../../src/managers/brewManager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGtD,qBAAa,WAAW;IACtB,OAAO,CAAC,UAAU,CAAS;;IAM3B,OAAO,CAAC,aAAa;IAYf,oBAAoB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAwB/C,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAyFvD,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CASvD"}
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.BrewManager = void 0;
7
+ const child_process_1 = require("child_process");
8
+ const path_1 = __importDefault(require("path"));
9
+ const platform_1 = require("../utils/platform");
10
+ const filesystem_1 = require("../utils/filesystem");
11
+ const logger_1 = require("../utils/logger");
12
+ class BrewManager {
13
+ constructor() {
14
+ this.brewPrefix = this.getBrewPrefix();
15
+ }
16
+ getBrewPrefix() {
17
+ try {
18
+ return (0, child_process_1.execSync)('brew --prefix').toString().trim();
19
+ }
20
+ catch {
21
+ if (process.arch === 'arm64') {
22
+ return '/opt/homebrew';
23
+ }
24
+ return '/usr/local';
25
+ }
26
+ }
27
+ async getInstalledPackages() {
28
+ const packages = [];
29
+ try {
30
+ const output = (0, child_process_1.execSync)('brew list --json').toString();
31
+ const data = JSON.parse(output);
32
+ for (const pkg of data) {
33
+ const cellPath = path_1.default.join(this.brewPrefix, 'Cellar', pkg);
34
+ packages.push({
35
+ name: pkg,
36
+ version: 'unknown',
37
+ installMethod: 'brew',
38
+ mainPath: cellPath,
39
+ installedDate: undefined,
40
+ });
41
+ }
42
+ }
43
+ catch (error) {
44
+ logger_1.Logger.debug('Failed to get brew packages: ' + error.message);
45
+ }
46
+ return packages;
47
+ }
48
+ async findArtifacts(appName) {
49
+ const artifacts = [];
50
+ const home = (0, platform_1.getHomeDir)();
51
+ const cellarPath = path_1.default.join(this.brewPrefix, 'Cellar', appName);
52
+ if ((0, filesystem_1.pathExists)(cellarPath)) {
53
+ artifacts.push({
54
+ path: cellarPath,
55
+ type: 'other',
56
+ size: 0,
57
+ description: 'Cellar directory',
58
+ });
59
+ }
60
+ const binPath = path_1.default.join(this.brewPrefix, 'bin', appName);
61
+ if ((0, filesystem_1.pathExists)(binPath)) {
62
+ artifacts.push({
63
+ path: binPath,
64
+ type: 'binary',
65
+ size: 0,
66
+ description: 'Binary symlink',
67
+ });
68
+ }
69
+ const manPath = path_1.default.join(this.brewPrefix, 'share', 'man', 'man1', `${appName}.1`);
70
+ if ((0, filesystem_1.pathExists)(manPath)) {
71
+ artifacts.push({
72
+ path: manPath,
73
+ type: 'data',
74
+ size: 0,
75
+ description: 'Man page',
76
+ });
77
+ }
78
+ const prefPath = path_1.default.join(home, 'Library', 'Preferences', `com.${appName}*`);
79
+ const prefDir = path_1.default.join(home, 'Library', 'Preferences');
80
+ if ((0, filesystem_1.pathExists)(prefDir)) {
81
+ const files = (0, filesystem_1.listDirectory)(prefDir);
82
+ for (const file of files) {
83
+ if (file.includes(appName)) {
84
+ artifacts.push({
85
+ path: path_1.default.join(prefDir, file),
86
+ type: 'config',
87
+ size: 0,
88
+ description: 'Preference file',
89
+ });
90
+ }
91
+ }
92
+ }
93
+ const appSupportPath = path_1.default.join(home, 'Library', 'Application Support', appName);
94
+ if ((0, filesystem_1.pathExists)(appSupportPath)) {
95
+ artifacts.push({
96
+ path: appSupportPath,
97
+ type: 'config',
98
+ size: 0,
99
+ description: 'Application support directory',
100
+ });
101
+ }
102
+ const launchAgentsPath = path_1.default.join(home, 'Library', 'LaunchAgents');
103
+ if ((0, filesystem_1.pathExists)(launchAgentsPath)) {
104
+ const files = (0, filesystem_1.listDirectory)(launchAgentsPath);
105
+ for (const file of files) {
106
+ if (file.includes(appName)) {
107
+ artifacts.push({
108
+ path: path_1.default.join(launchAgentsPath, file),
109
+ type: 'service',
110
+ size: 0,
111
+ description: 'Launch agent',
112
+ });
113
+ }
114
+ }
115
+ }
116
+ return artifacts;
117
+ }
118
+ async removePackage(appName) {
119
+ try {
120
+ (0, child_process_1.execSync)(`brew uninstall ${appName}`);
121
+ return true;
122
+ }
123
+ catch (error) {
124
+ logger_1.Logger.debug('Failed to uninstall brew package: ' + error.message);
125
+ return false;
126
+ }
127
+ }
128
+ }
129
+ exports.BrewManager = BrewManager;
130
+ //# sourceMappingURL=brewManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brewManager.js","sourceRoot":"","sources":["../../src/managers/brewManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { InstalledApp, ArtifactPath } from '../types';
2
+ export declare class CustomManager {
3
+ findCustomInstalledApps(): Promise<InstalledApp[]>;
4
+ private detectInstallMethod;
5
+ findArtifacts(appName: string): Promise<ArtifactPath[]>;
6
+ searchByName(query: string): Promise<string[]>;
7
+ }
8
+ //# sourceMappingURL=customManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"customManager.d.ts","sourceRoot":"","sources":["../../src/managers/customManager.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAEtD,qBAAa,aAAa;IAClB,uBAAuB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YA0C1C,mBAAmB;IAwB3B,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAkEvD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAuBrD"}
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CustomManager = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ const platform_1 = require("../utils/platform");
9
+ const filesystem_1 = require("../utils/filesystem");
10
+ class CustomManager {
11
+ async findCustomInstalledApps() {
12
+ const apps = [];
13
+ const home = (0, platform_1.getHomeDir)();
14
+ const customBinPaths = [
15
+ '/usr/local/bin',
16
+ '/usr/bin',
17
+ `${home}/.local/bin`,
18
+ ];
19
+ const foundBinaries = new Set();
20
+ for (const binPath of customBinPaths) {
21
+ if (!(0, filesystem_1.pathExists)(binPath))
22
+ continue;
23
+ const binaries = (0, filesystem_1.listDirectory)(binPath);
24
+ for (const binary of binaries) {
25
+ const fullPath = path_1.default.join(binPath, binary);
26
+ if (foundBinaries.has(binary))
27
+ continue;
28
+ const method = await this.detectInstallMethod(fullPath);
29
+ if (method === 'custom') {
30
+ foundBinaries.add(binary);
31
+ apps.push({
32
+ name: binary,
33
+ version: 'unknown',
34
+ installMethod: 'custom',
35
+ mainPath: fullPath,
36
+ installedDate: undefined,
37
+ });
38
+ }
39
+ }
40
+ }
41
+ return apps;
42
+ }
43
+ async detectInstallMethod(binaryPath) {
44
+ try {
45
+ const content = (0, filesystem_1.readFile)(binaryPath);
46
+ if (!content)
47
+ return 'unknown';
48
+ if (content.includes('node') || content.includes('#!/usr/bin/env node')) {
49
+ return 'custom';
50
+ }
51
+ if (content.includes('python') || content.includes('#!/usr/bin/env python')) {
52
+ return 'custom';
53
+ }
54
+ if (content.startsWith('#!/bin/bash') || content.startsWith('#!/bin/sh')) {
55
+ return 'custom';
56
+ }
57
+ return 'custom';
58
+ }
59
+ catch {
60
+ return 'unknown';
61
+ }
62
+ }
63
+ async findArtifacts(appName) {
64
+ const artifacts = [];
65
+ const home = (0, platform_1.getHomeDir)();
66
+ const binPaths = [
67
+ `/usr/local/bin/${appName}`,
68
+ `/usr/bin/${appName}`,
69
+ `${home}/.local/bin/${appName}`,
70
+ ];
71
+ for (const binPath of binPaths) {
72
+ if ((0, filesystem_1.pathExists)(binPath)) {
73
+ artifacts.push({
74
+ path: binPath,
75
+ type: 'binary',
76
+ size: 0,
77
+ description: 'Custom binary',
78
+ });
79
+ }
80
+ }
81
+ const configPatterns = [
82
+ path_1.default.join(home, `.config`, appName),
83
+ path_1.default.join(home, `.${appName}`),
84
+ path_1.default.join(home, `.${appName}rc`),
85
+ path_1.default.join(home, `.${appName}rc.json`),
86
+ ];
87
+ for (const configPath of configPatterns) {
88
+ if ((0, filesystem_1.pathExists)(configPath)) {
89
+ artifacts.push({
90
+ path: configPath,
91
+ type: 'config',
92
+ size: 0,
93
+ description: 'Configuration',
94
+ });
95
+ }
96
+ }
97
+ const dataPath = path_1.default.join(home, `.local`, `share`, appName);
98
+ if ((0, filesystem_1.pathExists)(dataPath)) {
99
+ artifacts.push({
100
+ path: dataPath,
101
+ type: 'data',
102
+ size: 0,
103
+ description: 'Data directory',
104
+ });
105
+ }
106
+ const cachePath = path_1.default.join(home, `.cache`, appName);
107
+ if ((0, filesystem_1.pathExists)(cachePath)) {
108
+ artifacts.push({
109
+ path: cachePath,
110
+ type: 'cache',
111
+ size: 0,
112
+ description: 'Cache directory',
113
+ });
114
+ }
115
+ return artifacts;
116
+ }
117
+ async searchByName(query) {
118
+ const results = [];
119
+ const home = (0, platform_1.getHomeDir)();
120
+ const binPaths = [
121
+ '/usr/local/bin',
122
+ '/usr/bin',
123
+ `${home}/.local/bin`,
124
+ ];
125
+ for (const binPath of binPaths) {
126
+ if (!(0, filesystem_1.pathExists)(binPath))
127
+ continue;
128
+ const binaries = (0, filesystem_1.listDirectory)(binPath);
129
+ for (const binary of binaries) {
130
+ if (binary.toLowerCase().includes(query.toLowerCase())) {
131
+ results.push(binary);
132
+ }
133
+ }
134
+ }
135
+ return results;
136
+ }
137
+ }
138
+ exports.CustomManager = CustomManager;
139
+ //# sourceMappingURL=customManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"customManager.js","sourceRoot":"","sources":["../../src/managers/customManager.ts"],"names":[],"mappings":"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"}