appclean 1.9.0 → 2.0.2

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 (212) hide show
  1. package/.github/workflows/npm-publish.yml +61 -0
  2. package/DEVELOPMENT.md +84 -0
  3. package/GUI_IMPLEMENTATION_STATUS.md +143 -0
  4. package/MD_Files/INDEX.md +51 -0
  5. package/PHASE2_COMPLETION.md +281 -0
  6. package/PHASE3_COMPLETION.md +364 -0
  7. package/README.md +411 -91
  8. package/RELEASE_GUIDE.md +236 -0
  9. package/assets/logo.svg +34 -0
  10. package/dist/core/appUpdateChecker.js +12 -16
  11. package/dist/core/appUpdateChecker.js.map +1 -1
  12. package/dist/core/detector.js +14 -18
  13. package/dist/core/detector.js.map +1 -1
  14. package/dist/core/duplicateFileFinder.js +12 -19
  15. package/dist/core/duplicateFileFinder.js.map +1 -1
  16. package/dist/core/orphanedDependencyDetector.js +19 -26
  17. package/dist/core/orphanedDependencyDetector.js.map +1 -1
  18. package/dist/core/performanceOptimizer.js +6 -10
  19. package/dist/core/performanceOptimizer.js.map +1 -1
  20. package/dist/core/permissionHandler.js +21 -25
  21. package/dist/core/permissionHandler.js.map +1 -1
  22. package/dist/core/pluginSystem.js +9 -13
  23. package/dist/core/pluginSystem.js.map +1 -1
  24. package/dist/core/removalRecorder.js +12 -19
  25. package/dist/core/removalRecorder.js.map +1 -1
  26. package/dist/core/remover.js +59 -66
  27. package/dist/core/remover.js.map +1 -1
  28. package/dist/core/reportGenerator.d.ts +1 -1
  29. package/dist/core/reportGenerator.d.ts.map +1 -1
  30. package/dist/core/reportGenerator.js +27 -34
  31. package/dist/core/reportGenerator.js.map +1 -1
  32. package/dist/core/scheduledCleanup.js +23 -30
  33. package/dist/core/scheduledCleanup.js.map +1 -1
  34. package/dist/core/serviceFileDetector.js +24 -31
  35. package/dist/core/serviceFileDetector.js.map +1 -1
  36. package/dist/core/verificationModule.js +10 -14
  37. package/dist/core/verificationModule.js.map +1 -1
  38. package/dist/index.js +118 -156
  39. package/dist/index.js.map +1 -1
  40. package/dist/managers/brewManager.js +30 -37
  41. package/dist/managers/brewManager.js.map +1 -1
  42. package/dist/managers/customManager.js +23 -30
  43. package/dist/managers/customManager.js.map +1 -1
  44. package/dist/managers/linuxManager.js +29 -36
  45. package/dist/managers/linuxManager.js.map +1 -1
  46. package/dist/managers/npmManager.js +27 -34
  47. package/dist/managers/npmManager.js.map +1 -1
  48. package/dist/types/index.js +1 -2
  49. package/dist/ui/client/api/client.d.ts +24 -0
  50. package/dist/ui/client/api/client.d.ts.map +1 -0
  51. package/dist/ui/client/api/client.js +100 -0
  52. package/dist/ui/client/api/client.js.map +1 -0
  53. package/dist/ui/client/app.d.ts +7 -0
  54. package/dist/ui/client/app.d.ts.map +1 -0
  55. package/dist/ui/client/app.js +75 -0
  56. package/dist/ui/client/app.js.map +1 -0
  57. package/dist/ui/client/index.html +107 -0
  58. package/dist/ui/client/pages/appDetails.d.ts +8 -0
  59. package/dist/ui/client/pages/appDetails.d.ts.map +1 -0
  60. package/dist/ui/client/pages/appDetails.js +287 -0
  61. package/dist/ui/client/pages/appDetails.js.map +1 -0
  62. package/dist/ui/client/pages/appSearch.d.ts +2 -0
  63. package/dist/ui/client/pages/appSearch.d.ts.map +1 -0
  64. package/dist/ui/client/pages/appSearch.js +221 -0
  65. package/dist/ui/client/pages/appSearch.js.map +1 -0
  66. package/dist/ui/client/pages/dashboard.d.ts +2 -0
  67. package/dist/ui/client/pages/dashboard.d.ts.map +1 -0
  68. package/dist/ui/client/pages/dashboard.js +175 -0
  69. package/dist/ui/client/pages/dashboard.js.map +1 -0
  70. package/dist/ui/client/pages/settings.d.ts +7 -0
  71. package/dist/ui/client/pages/settings.d.ts.map +1 -0
  72. package/dist/ui/client/pages/settings.js +279 -0
  73. package/dist/ui/client/pages/settings.js.map +1 -0
  74. package/dist/ui/client/state/appStore.d.ts +38 -0
  75. package/dist/ui/client/state/appStore.d.ts.map +1 -0
  76. package/dist/ui/client/state/appStore.js +130 -0
  77. package/dist/ui/client/state/appStore.js.map +1 -0
  78. package/dist/ui/client/state/dashboardStore.d.ts +31 -0
  79. package/dist/ui/client/state/dashboardStore.d.ts.map +1 -0
  80. package/dist/ui/client/state/dashboardStore.js +76 -0
  81. package/dist/ui/client/state/dashboardStore.js.map +1 -0
  82. package/dist/ui/client/state/uiStore.d.ts +43 -0
  83. package/dist/ui/client/state/uiStore.d.ts.map +1 -0
  84. package/dist/ui/client/state/uiStore.js +109 -0
  85. package/dist/ui/client/state/uiStore.js.map +1 -0
  86. package/dist/ui/client/styles/animations.css +349 -0
  87. package/dist/ui/client/styles/base.css +214 -0
  88. package/dist/ui/client/styles/components.css +400 -0
  89. package/dist/ui/client/styles/layout.css +224 -0
  90. package/dist/ui/client/styles/variables.css +140 -0
  91. package/dist/ui/client/utils/events.d.ts +19 -0
  92. package/dist/ui/client/utils/events.d.ts.map +1 -0
  93. package/dist/ui/client/utils/events.js +54 -0
  94. package/dist/ui/client/utils/events.js.map +1 -0
  95. package/dist/ui/client/utils/formatting.d.ts +11 -0
  96. package/dist/ui/client/utils/formatting.d.ts.map +1 -0
  97. package/dist/ui/client/utils/formatting.js +104 -0
  98. package/dist/ui/client/utils/formatting.js.map +1 -0
  99. package/dist/ui/client/utils/router.d.ts +25 -0
  100. package/dist/ui/client/utils/router.d.ts.map +1 -0
  101. package/dist/ui/client/utils/router.js +90 -0
  102. package/dist/ui/client/utils/router.js.map +1 -0
  103. package/dist/ui/guiServer.d.ts +11 -5
  104. package/dist/ui/guiServer.d.ts.map +1 -1
  105. package/dist/ui/guiServer.js +180 -501
  106. package/dist/ui/guiServer.js.map +1 -1
  107. package/dist/ui/menu.js +18 -27
  108. package/dist/ui/menu.js.map +1 -1
  109. package/dist/ui/prompts.js +34 -47
  110. package/dist/ui/prompts.js.map +1 -1
  111. package/dist/ui/server/middleware/errorHandler.d.ts +19 -0
  112. package/dist/ui/server/middleware/errorHandler.d.ts.map +1 -0
  113. package/dist/ui/server/middleware/errorHandler.js +100 -0
  114. package/dist/ui/server/middleware/errorHandler.js.map +1 -0
  115. package/dist/ui/server/routes/apps.d.ts +8 -0
  116. package/dist/ui/server/routes/apps.d.ts.map +1 -0
  117. package/dist/ui/server/routes/apps.js +74 -0
  118. package/dist/ui/server/routes/apps.js.map +1 -0
  119. package/dist/ui/server/routes/dashboard.d.ts +4 -0
  120. package/dist/ui/server/routes/dashboard.d.ts.map +1 -0
  121. package/dist/ui/server/routes/dashboard.js +57 -0
  122. package/dist/ui/server/routes/dashboard.js.map +1 -0
  123. package/dist/ui/server/routes/settings.d.ts +6 -0
  124. package/dist/ui/server/routes/settings.d.ts.map +1 -0
  125. package/dist/ui/server/routes/settings.js +31 -0
  126. package/dist/ui/server/routes/settings.js.map +1 -0
  127. package/dist/ui/server/services/appService.d.ts +45 -0
  128. package/dist/ui/server/services/appService.d.ts.map +1 -0
  129. package/dist/ui/server/services/appService.js +114 -0
  130. package/dist/ui/server/services/appService.js.map +1 -0
  131. package/dist/ui/server/services/removalService.d.ts +24 -0
  132. package/dist/ui/server/services/removalService.d.ts.map +1 -0
  133. package/dist/ui/server/services/removalService.js +83 -0
  134. package/dist/ui/server/services/removalService.js.map +1 -0
  135. package/dist/utils/filesystem.js +32 -49
  136. package/dist/utils/filesystem.js.map +1 -1
  137. package/dist/utils/logger.js +9 -18
  138. package/dist/utils/logger.js.map +1 -1
  139. package/dist/utils/platform.js +10 -22
  140. package/dist/utils/platform.js.map +1 -1
  141. package/dist/utils/upgrade.d.ts +2 -1
  142. package/dist/utils/upgrade.d.ts.map +1 -1
  143. package/dist/utils/upgrade.js +24 -15
  144. package/dist/utils/upgrade.js.map +1 -1
  145. package/package.json +4 -2
  146. package/scripts/publish-npm.sh +64 -0
  147. package/src/core/appUpdateChecker.ts +1 -1
  148. package/src/core/detector.ts +6 -6
  149. package/src/core/duplicateFileFinder.ts +1 -1
  150. package/src/core/orphanedDependencyDetector.ts +2 -2
  151. package/src/core/performanceOptimizer.ts +1 -1
  152. package/src/core/permissionHandler.ts +2 -2
  153. package/src/core/pluginSystem.ts +1 -1
  154. package/src/core/removalRecorder.ts +2 -2
  155. package/src/core/remover.ts +11 -11
  156. package/src/core/reportGenerator.ts +2 -2
  157. package/src/core/scheduledCleanup.ts +2 -2
  158. package/src/core/serviceFileDetector.ts +2 -2
  159. package/src/core/verificationModule.ts +2 -2
  160. package/src/index.ts +8 -8
  161. package/src/managers/brewManager.ts +3 -3
  162. package/src/managers/customManager.ts +2 -2
  163. package/src/managers/linuxManager.ts +3 -3
  164. package/src/managers/npmManager.ts +3 -3
  165. package/src/ui/client/api/client.ts +168 -0
  166. package/src/ui/client/app.ts +125 -0
  167. package/src/ui/client/index.html +107 -0
  168. package/src/ui/client/pages/appDetails.ts +356 -0
  169. package/src/ui/client/pages/appSearch.ts +283 -0
  170. package/src/ui/client/pages/dashboard.ts +211 -0
  171. package/src/ui/client/pages/settings.ts +342 -0
  172. package/src/ui/client/state/appStore.ts +181 -0
  173. package/src/ui/client/state/dashboardStore.ts +123 -0
  174. package/src/ui/client/state/uiStore.ts +166 -0
  175. package/src/ui/client/styles/animations.css +349 -0
  176. package/src/ui/client/styles/base.css +214 -0
  177. package/src/ui/client/styles/components.css +400 -0
  178. package/src/ui/client/styles/layout.css +224 -0
  179. package/src/ui/client/styles/variables.css +140 -0
  180. package/src/ui/client/utils/events.ts +74 -0
  181. package/src/ui/client/utils/formatting.ts +157 -0
  182. package/src/ui/client/utils/router.ts +161 -0
  183. package/src/ui/guiServer.ts +245 -498
  184. package/src/ui/prompts.ts +1 -1
  185. package/src/ui/server/middleware/errorHandler.ts +174 -0
  186. package/src/ui/server/routes/apps.ts +132 -0
  187. package/src/ui/server/routes/dashboard.ts +93 -0
  188. package/src/ui/server/routes/settings.ts +63 -0
  189. package/src/ui/server/services/appService.ts +184 -0
  190. package/src/ui/server/services/removalService.ts +138 -0
  191. package/src/utils/upgrade.ts +19 -2
  192. package/tsconfig.json +3 -2
  193. package/INDEX.md +0 -165
  194. /package/{ACTION_CHECKLIST.md → MD_Files/ACTION_CHECKLIST.md} +0 -0
  195. /package/{APPCLEAN_SUMMARY.md → MD_Files/APPCLEAN_SUMMARY.md} +0 -0
  196. /package/{CHANGELOG.md → MD_Files/CHANGELOG.md} +0 -0
  197. /package/{CODE_OF_CONDUCT.md → MD_Files/CODE_OF_CONDUCT.md} +0 -0
  198. /package/{CODE_REVIEW_REPORT.md → MD_Files/CODE_REVIEW_REPORT.md} +0 -0
  199. /package/{COMMUNITY_POSTS.md → MD_Files/COMMUNITY_POSTS.md} +0 -0
  200. /package/{DEPLOYMENT_GUIDE.md → MD_Files/DEPLOYMENT_GUIDE.md} +0 -0
  201. /package/{DEPLOYMENT_STATUS.md → MD_Files/DEPLOYMENT_STATUS.md} +0 -0
  202. /package/{EXECUTIVE_REPORT.md → MD_Files/EXECUTIVE_REPORT.md} +0 -0
  203. /package/{GITHUB_OPTIMIZATION.md → MD_Files/GITHUB_OPTIMIZATION.md} +0 -0
  204. /package/{MARKETING_SUMMARY.md → MD_Files/MARKETING_SUMMARY.md} +0 -0
  205. /package/{NPM_PACKAGE_OPTIMIZATION.md → MD_Files/NPM_PACKAGE_OPTIMIZATION.md} +0 -0
  206. /package/{NPM_PUBLISH.md → MD_Files/NPM_PUBLISH.md} +0 -0
  207. /package/{PROJECT_SUMMARY.txt → MD_Files/PROJECT_SUMMARY.txt} +0 -0
  208. /package/{PUBLICATION_SUCCESS_REPORT.md → MD_Files/PUBLICATION_SUCCESS_REPORT.md} +0 -0
  209. /package/{QUICKSTART.md → MD_Files/QUICKSTART.md} +0 -0
  210. /package/{SETUP_GITHUB.md → MD_Files/SETUP_GITHUB.md} +0 -0
  211. /package/{TESTING_SUMMARY.md → MD_Files/TESTING_SUMMARY.md} +0 -0
  212. /package/{setup-github.sh → MD_Files/setup-github.sh} +0 -0
@@ -0,0 +1,138 @@
1
+ /**
2
+ * RemovalService - Wraps Remover to provide safe app removal
3
+ */
4
+
5
+ import { Remover } from '../../../core/remover.js';
6
+ import { Detector } from '../../../core/detector.js';
7
+ import { Logger } from '../../../utils/logger.js';
8
+
9
+ export interface RemovalOptions {
10
+ dryRun?: boolean;
11
+ createBackup?: boolean;
12
+ }
13
+
14
+ export interface RemovalResult {
15
+ success: boolean;
16
+ appName: string;
17
+ removedFiles: number;
18
+ freedSpace: number;
19
+ backupPath?: string;
20
+ errors?: string[];
21
+ }
22
+
23
+ export class RemovalService {
24
+ private remover: Remover;
25
+ private detector: Detector;
26
+ private sessionRemovals: RemovalResult[] = [];
27
+
28
+ constructor() {
29
+ this.remover = new Remover();
30
+ this.detector = new Detector();
31
+ }
32
+
33
+ /**
34
+ * Execute app removal
35
+ */
36
+ async removeApp(appName: string, options: RemovalOptions = {}): Promise<RemovalResult> {
37
+ try {
38
+ // Find the app
39
+ const allApps = await this.detector.searchApps({ query: appName });
40
+ const app = allApps.find((a) => a.name.toLowerCase() === appName.toLowerCase());
41
+
42
+ if (!app) {
43
+ throw new Error(`App "${appName}" not found`);
44
+ }
45
+
46
+ // Find artifacts
47
+ const artifacts = await this.detector.findArtifacts(app.name, app.installMethod);
48
+
49
+ if (artifacts.length === 0) {
50
+ return {
51
+ success: true,
52
+ appName: app.name,
53
+ removedFiles: 0,
54
+ freedSpace: 0,
55
+ };
56
+ }
57
+
58
+ // Calculate freed space
59
+ const freedSpace = artifacts.reduce((sum, a) => sum + (a.size || 0), 0);
60
+
61
+ // Handle dry-run
62
+ if (options.dryRun) {
63
+ Logger.info(`[DRY RUN] Would remove ${artifacts.length} artifacts (${this.formatBytes(freedSpace)}) for ${appName}`);
64
+ return {
65
+ success: true,
66
+ appName: app.name,
67
+ removedFiles: artifacts.length,
68
+ freedSpace,
69
+ };
70
+ }
71
+
72
+ // Create backup if requested
73
+ let backupPath: string | undefined;
74
+ if (options.createBackup) {
75
+ try {
76
+ backupPath = await this.remover.createBackup(app.name, artifacts);
77
+ Logger.info(`Created backup at: ${backupPath}`);
78
+ } catch (error) {
79
+ Logger.warn(`Failed to create backup: ${(error as Error).message}`);
80
+ }
81
+ }
82
+
83
+ // Remove artifacts using Remover class
84
+ const removalResult = await this.remover.removeArtifacts(artifacts, { dryRun: false });
85
+
86
+ const result: RemovalResult = {
87
+ success: removalResult.failed === 0,
88
+ appName: app.name,
89
+ removedFiles: removalResult.success,
90
+ freedSpace,
91
+ };
92
+
93
+ if (backupPath) {
94
+ result.backupPath = backupPath;
95
+ }
96
+
97
+ if (removalResult.errors.length > 0) {
98
+ result.errors = removalResult.errors;
99
+ }
100
+
101
+ // Track removal for dashboard
102
+ this.sessionRemovals.push(result);
103
+
104
+ Logger.success(`Successfully removed ${app.name} (freed ${this.formatBytes(freedSpace)})`);
105
+ return result;
106
+ } catch (error) {
107
+ throw new Error(`Removal failed: ${(error as Error).message}`);
108
+ }
109
+ }
110
+
111
+ /**
112
+ * Get session removals for dashboard
113
+ */
114
+ getSessionRemovals(): RemovalResult[] {
115
+ return this.sessionRemovals;
116
+ }
117
+
118
+ /**
119
+ * Clear session removals
120
+ */
121
+ clearSessionRemovals(): void {
122
+ this.sessionRemovals = [];
123
+ }
124
+
125
+ /**
126
+ * Format bytes to human readable
127
+ */
128
+ private formatBytes(bytes: number): string {
129
+ if (bytes === 0) return '0 Bytes';
130
+ const k = 1024;
131
+ const sizes = ['Bytes', 'KB', 'MB', 'GB'];
132
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
133
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
134
+ }
135
+ }
136
+
137
+ // Export singleton
138
+ export const removalService = new RemovalService();
@@ -1,5 +1,8 @@
1
1
  import { execSync } from 'child_process';
2
- import { Logger } from './logger';
2
+ import { Logger } from './logger.js';
3
+ import { readFileSync } from 'fs';
4
+ import { fileURLToPath } from 'url';
5
+ import { dirname, join } from 'path';
3
6
 
4
7
  export interface VersionInfo {
5
8
  current: string;
@@ -9,7 +12,21 @@ export interface VersionInfo {
9
12
 
10
13
  export class UpgradeManager {
11
14
  private readonly packageName = 'appclean';
12
- private readonly currentVersion = '1.9.0';
15
+ private currentVersion: string;
16
+
17
+ constructor() {
18
+ // Dynamically read version from package.json
19
+ try {
20
+ const __filename = fileURLToPath(import.meta.url);
21
+ const __dirname = dirname(__filename);
22
+ const packagePath = join(__dirname, '../../package.json');
23
+ const packageData = JSON.parse(readFileSync(packagePath, 'utf-8'));
24
+ this.currentVersion = packageData.version || '2.0.0';
25
+ } catch (error) {
26
+ Logger.debug('Failed to read version from package.json, using fallback');
27
+ this.currentVersion = '2.0.0';
28
+ }
29
+ }
13
30
 
14
31
  /**
15
32
  * Get version information from npm registry
package/tsconfig.json CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "compilerOptions": {
3
3
  "target": "ES2020",
4
- "module": "commonjs",
5
- "lib": ["ES2020"],
4
+ "module": "ES2020",
5
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
6
6
  "outDir": "./dist",
7
7
  "rootDir": "./src",
8
+ "moduleResolution": "node",
8
9
  "strict": true,
9
10
  "esModuleInterop": true,
10
11
  "skipLibCheck": true,
package/INDEX.md DELETED
@@ -1,165 +0,0 @@
1
- # 📑 AppClean Documentation Index
2
-
3
- Welcome to AppClean! This index helps you navigate all documentation and resources.
4
-
5
- ## 🚀 Getting Started (Start Here!)
6
-
7
- ### For New Users
8
- 1. **[QUICKSTART.md](QUICKSTART.md)** - Quick start guide and 3-step deployment
9
- 2. **[SETUP_GITHUB.md](SETUP_GITHUB.md)** - Detailed GitHub & npm setup instructions
10
- 3. **[README.md](README.md)** - Full user documentation with examples
11
-
12
- ### For Developers
13
- 1. **[CONTRIBUTING.md](CONTRIBUTING.md)** - Developer guidelines and workflow
14
- 2. **[DEPLOYMENT_GUIDE.md](DEPLOYMENT_GUIDE.md)** - Full deployment checklist
15
- 3. **[APPCLEAN_SUMMARY.md](APPCLEAN_SUMMARY.md)** - Complete technical summary
16
-
17
- ## 📚 Documentation by Purpose
18
-
19
- ### Installation & Setup
20
- | File | Purpose |
21
- |------|---------|
22
- | [QUICKSTART.md](QUICKSTART.md) | Quick start overview |
23
- | [SETUP_GITHUB.md](SETUP_GITHUB.md) | GitHub & npm deployment |
24
- | [setup-github.sh](setup-github.sh) | Automated setup script |
25
-
26
- ### User Documentation
27
- | File | Purpose |
28
- |------|---------|
29
- | [README.md](README.md) | Features, installation, usage, examples |
30
- | [PROJECT_SUMMARY.txt](PROJECT_SUMMARY.txt) | Project overview |
31
- | [APPCLEAN_SUMMARY.md](APPCLEAN_SUMMARY.md) | Detailed summary |
32
-
33
- ### Developer Resources
34
- | File | Purpose |
35
- |------|---------|
36
- | [CONTRIBUTING.md](CONTRIBUTING.md) | How to contribute |
37
- | [DEPLOYMENT_GUIDE.md](DEPLOYMENT_GUIDE.md) | Deployment steps & checklist |
38
- | [CHANGELOG.md](CHANGELOG.md) | Version history & roadmap |
39
-
40
- ### Code & Configuration
41
- | File | Purpose |
42
- |------|---------|
43
- | [package.json](package.json) | Project metadata & dependencies |
44
- | [tsconfig.json](tsconfig.json) | TypeScript configuration |
45
- | [jest.config.js](jest.config.js) | Test configuration |
46
- | [.gitignore](.gitignore) | Git ignore rules |
47
-
48
- ### GitHub Actions
49
- | File | Purpose |
50
- |------|---------|
51
- | [.github/workflows/test.yml](.github/workflows/test.yml) | Automated testing |
52
- | [.github/workflows/publish.yml](.github/workflows/publish.yml) | npm publishing |
53
-
54
- ### License
55
- | File | Purpose |
56
- |------|---------|
57
- | [LICENSE](LICENSE) | MIT License |
58
-
59
- ## 🔍 Quick Navigation
60
-
61
- ### I want to...
62
-
63
- **Deploy to GitHub**
64
- → Read [SETUP_GITHUB.md](SETUP_GITHUB.md)
65
-
66
- **Publish to npm**
67
- → Read [SETUP_GITHUB.md](SETUP_GITHUB.md) (Section: "Setup npm Publishing")
68
-
69
- **Contribute code**
70
- → Read [CONTRIBUTING.md](CONTRIBUTING.md)
71
-
72
- **Understand the project**
73
- → Read [README.md](README.md) then [APPCLEAN_SUMMARY.md](APPCLEAN_SUMMARY.md)
74
-
75
- **Get started quickly**
76
- → Read [QUICKSTART.md](QUICKSTART.md)
77
-
78
- **Set up development environment**
79
- → Read [CONTRIBUTING.md](CONTRIBUTING.md) (Section: "Development Setup")
80
-
81
- ## 📊 Project Structure
82
-
83
- ```
84
- appclean/
85
- ├── src/ # Source code (13 files)
86
- │ ├── index.ts # Main CLI entry point
87
- │ ├── core/
88
- │ │ ├── detector.ts # App detection engine
89
- │ │ └── remover.ts # Safe removal engine
90
- │ ├── managers/
91
- │ │ ├── npmManager.ts # npm/yarn/pnpm
92
- │ │ ├── brewManager.ts # Homebrew
93
- │ │ ├── linuxManager.ts # apt/yum/dnf
94
- │ │ └── customManager.ts # Custom installers
95
- │ ├── ui/
96
- │ │ ├── menu.ts # Interactive menus
97
- │ │ └── prompts.ts # User prompts
98
- │ ├── types/
99
- │ │ └── index.ts # TypeScript types
100
- │ └── utils/
101
- │ ├── platform.ts # Platform detection
102
- │ ├── filesystem.ts # File operations
103
- │ └── logger.ts # Logging
104
- ├── .github/workflows/ # CI/CD workflows
105
- ├── Configuration files # 4 config files
106
- ├── Documentation files # 8+ guides
107
- └── LICENSE # MIT License
108
- ```
109
-
110
- ## 🎯 Deployment Checklist
111
-
112
- - [ ] Read [QUICKSTART.md](QUICKSTART.md)
113
- - [ ] Review [SETUP_GITHUB.md](SETUP_GITHUB.md)
114
- - [ ] Create GitHub repository
115
- - [ ] Update package.json with your info
116
- - [ ] Push code to GitHub
117
- - [ ] Create npm account
118
- - [ ] Publish to npm registry
119
- - [ ] Update GitHub repository topics
120
- - [ ] Add GitHub Actions secret (NPM_TOKEN)
121
-
122
- See [DEPLOYMENT_GUIDE.md](DEPLOYMENT_GUIDE.md) for detailed checklist.
123
-
124
- ## 📖 Recommended Reading Order
125
-
126
- 1. **First Time?** → [QUICKSTART.md](QUICKSTART.md)
127
- 2. **Ready to Deploy?** → [SETUP_GITHUB.md](SETUP_GITHUB.md)
128
- 3. **Want to Understand More?** → [README.md](README.md)
129
- 4. **Contributing Code?** → [CONTRIBUTING.md](CONTRIBUTING.md)
130
- 5. **Need Details?** → [APPCLEAN_SUMMARY.md](APPCLEAN_SUMMARY.md)
131
- 6. **Managing Project?** → [DEPLOYMENT_GUIDE.md](DEPLOYMENT_GUIDE.md)
132
-
133
- ## 🔗 External Links
134
-
135
- - **GitHub**: https://github.com/new (Create repository)
136
- - **npm**: https://www.npmjs.com/signup (Create account)
137
- - **TypeScript**: https://www.typescriptlang.org/docs/
138
- - **Node.js**: https://nodejs.org/
139
-
140
- ## 📞 Support & Questions
141
-
142
- - **Bug Reports**: GitHub Issues
143
- - **Questions**: GitHub Discussions
144
- - **Documentation**: Check files in this directory
145
- - **Help**: See [CONTRIBUTING.md](CONTRIBUTING.md) for development help
146
-
147
- ## ✨ Key Features
148
-
149
- 🔍 **Smart Detection** - Finds apps from 8+ installation methods
150
- 📊 **Deep Analysis** - Locates all related files and artifacts
151
- 🛡️ **Safe Removal** - Dry-run preview and backup support
152
- 🎨 **Beautiful UI** - Interactive menus with colors and animations
153
- 🚀 **Cross-Platform** - Works on macOS, Linux, Windows
154
-
155
- ## 🌟 You're All Set!
156
-
157
- Your AppClean project is production-ready.
158
-
159
- **Next Step:** Open [SETUP_GITHUB.md](SETUP_GITHUB.md) to begin deployment!
160
-
161
- ---
162
-
163
- **Last Updated:** 2024-01-20
164
- **License:** MIT
165
- **Status:** ✅ Ready for Production
File without changes
File without changes
File without changes
File without changes
File without changes