appclean 2.0.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 (43) hide show
  1. package/.github/workflows/npm-publish.yml +61 -0
  2. package/DEVELOPMENT.md +84 -0
  3. package/RELEASE_GUIDE.md +236 -0
  4. package/dist/index.js +1 -1
  5. package/dist/ui/client/api/client.d.ts.map +1 -1
  6. package/dist/ui/client/api/client.js +5 -1
  7. package/dist/ui/client/api/client.js.map +1 -1
  8. package/dist/ui/client/app.d.ts +1 -1
  9. package/dist/ui/client/app.d.ts.map +1 -1
  10. package/dist/ui/client/app.js +10 -6
  11. package/dist/ui/client/app.js.map +1 -1
  12. package/dist/ui/client/pages/appSearch.js +12 -1
  13. package/dist/ui/client/pages/appSearch.js.map +1 -1
  14. package/dist/ui/client/pages/dashboard.d.ts.map +1 -1
  15. package/dist/ui/client/pages/dashboard.js +26 -5
  16. package/dist/ui/client/pages/dashboard.js.map +1 -1
  17. package/dist/ui/client/state/appStore.d.ts.map +1 -1
  18. package/dist/ui/client/state/appStore.js +21 -12
  19. package/dist/ui/client/state/appStore.js.map +1 -1
  20. package/dist/ui/client/state/dashboardStore.d.ts.map +1 -1
  21. package/dist/ui/client/state/dashboardStore.js +9 -3
  22. package/dist/ui/client/state/dashboardStore.js.map +1 -1
  23. package/dist/ui/client/styles/animations.css +22 -0
  24. package/dist/ui/guiServer.d.ts +3 -0
  25. package/dist/ui/guiServer.d.ts.map +1 -1
  26. package/dist/ui/guiServer.js +48 -1
  27. package/dist/ui/guiServer.js.map +1 -1
  28. package/dist/utils/upgrade.d.ts +2 -1
  29. package/dist/utils/upgrade.d.ts.map +1 -1
  30. package/dist/utils/upgrade.js +14 -1
  31. package/dist/utils/upgrade.js.map +1 -1
  32. package/package.json +1 -1
  33. package/scripts/publish-npm.sh +64 -0
  34. package/src/index.ts +1 -1
  35. package/src/ui/client/api/client.ts +6 -1
  36. package/src/ui/client/app.ts +15 -11
  37. package/src/ui/client/pages/appSearch.ts +14 -1
  38. package/src/ui/client/pages/dashboard.ts +27 -5
  39. package/src/ui/client/state/appStore.ts +24 -12
  40. package/src/ui/client/state/dashboardStore.ts +13 -3
  41. package/src/ui/client/styles/animations.css +22 -0
  42. package/src/ui/guiServer.ts +67 -1
  43. package/src/utils/upgrade.ts +18 -1
@@ -23,17 +23,20 @@ export class AppStore extends Store {
23
23
  const response = await fetch('/api/apps/list');
24
24
  if (!response.ok)
25
25
  throw new Error('Failed to load apps');
26
- const data = await response.json();
26
+ const json = await response.json();
27
+ const data = json.data || json;
27
28
  this.setState({
28
- apps: data.apps,
29
- total: data.total,
30
- page: data.page,
29
+ apps: data.apps || [],
30
+ total: data.total || 0,
31
+ page: data.page || 1,
31
32
  isLoading: false,
32
33
  });
33
34
  }
34
35
  catch (error) {
36
+ const errorMsg = error instanceof Error ? error.message : 'Unknown error';
37
+ console.error('Failed to load apps:', errorMsg);
35
38
  this.setState({
36
- error: error.message,
39
+ error: errorMsg,
37
40
  isLoading: false,
38
41
  });
39
42
  }
@@ -54,16 +57,19 @@ export class AppStore extends Store {
54
57
  const response = await fetch(`/api/apps/search?${params}`);
55
58
  if (!response.ok)
56
59
  throw new Error('Failed to search apps');
57
- const data = await response.json();
60
+ const json = await response.json();
61
+ const data = json.data || json;
58
62
  this.setState({
59
- apps: data.apps,
60
- total: data.count,
63
+ apps: data.apps || [],
64
+ total: data.count || 0,
61
65
  isLoading: false,
62
66
  });
63
67
  }
64
68
  catch (error) {
69
+ const errorMsg = error instanceof Error ? error.message : 'Unknown error';
70
+ console.error('Failed to search apps:', errorMsg);
65
71
  this.setState({
66
- error: error.message,
72
+ error: errorMsg,
67
73
  isLoading: false,
68
74
  });
69
75
  }
@@ -99,16 +105,19 @@ export class AppStore extends Store {
99
105
  const response = await fetch(`/api/apps/search?${params}`);
100
106
  if (!response.ok)
101
107
  throw new Error('Failed to load more apps');
102
- const data = await response.json();
108
+ const json = await response.json();
109
+ const data = json.data || json;
103
110
  this.setState({
104
- apps: [...this.state.apps, ...data.apps],
111
+ apps: [...this.state.apps, ...(data.apps || [])],
105
112
  page: nextPage,
106
113
  isLoading: false,
107
114
  });
108
115
  }
109
116
  catch (error) {
117
+ const errorMsg = error instanceof Error ? error.message : 'Unknown error';
118
+ console.error('Failed to load next page:', errorMsg);
110
119
  this.setState({
111
- error: error.message,
120
+ error: errorMsg,
112
121
  isLoading: false,
113
122
  });
114
123
  }
@@ -1 +1 @@
1
- {"version":3,"file":"appStore.js","sourceRoot":"","sources":["../../../../src/ui/client/state/appStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"appStore.js","sourceRoot":"","sources":["../../../../src/ui/client/state/appStore.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AA4B3C,MAAM,aAAa,GAAkB;IACnC,IAAI,EAAE,EAAE;IACR,aAAa,EAAE;QACb,KAAK,EAAE,EAAE;QACT,aAAa,EAAE,SAAS;QACxB,MAAM,EAAE,MAAM;KACf;IACD,WAAW,EAAE,IAAI;IACjB,SAAS,EAAE,KAAK;IAChB,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,QAAQ,EAAE,EAAE;CACb,CAAC;AAEF,MAAM,OAAO,QAAS,SAAQ,KAAoB;IAChD;QACE,KAAK,CAAC,aAAa,CAAC,CAAC;IACvB,CAAC;IAGD,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC/C,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAEzD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;YAE/B,IAAI,CAAC,QAAQ,CAAC;gBACZ,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;gBACrB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC;gBACtB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC;gBACpB,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YAC1E,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC;YAChD,IAAI,CAAC,QAAQ,CAAC;gBACZ,KAAK,EAAE,QAAQ;gBACf,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAGD,KAAK,CAAC,UAAU,CAAC,OAA+B;QAC9C,MAAM,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;QAClE,IAAI,CAAC,QAAQ,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAExE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YACrC,IAAI,aAAa,CAAC,KAAK;gBAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;YACjE,IAAI,aAAa,CAAC,aAAa;gBAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;YACtF,IAAI,aAAa,CAAC,MAAM;gBAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;YACtE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;YACpD,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAE7B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oBAAoB,MAAM,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;YAE3D,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;YAE/B,IAAI,CAAC,QAAQ,CAAC;gBACZ,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;gBACrB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC;gBACtB,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YAC1E,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,QAAQ,CAAC,CAAC;YAClD,IAAI,CAAC,QAAQ,CAAC;gBACZ,KAAK,EAAE,QAAQ;gBACf,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAGD,cAAc,CAAC,KAAa;QAC1B,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7B,CAAC;IAGD,sBAAsB,CAAC,MAAe;QACpC,IAAI,CAAC,UAAU,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7C,CAAC;IAGD,SAAS,CAAC,MAAgC;QACxC,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9B,CAAC;IAGD,SAAS,CAAC,GAAiB;QACzB,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;IACtC,CAAC;IAGD,cAAc;QACZ,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;IAGD,KAAK,CAAC,YAAY;QAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QAEpD,IAAI,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK;gBAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACvF,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;gBAC3C,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;YAClE,CAAC;YACD,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;YACpD,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAExC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oBAAoB,MAAM,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAE9D,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;YAE/B,IAAI,CAAC,QAAQ,CAAC;gBACZ,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBAChD,IAAI,EAAE,QAAQ;gBACd,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YAC1E,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,QAAQ,CAAC,CAAC;YACrD,IAAI,CAAC,QAAQ,CAAC;gBACZ,KAAK,EAAE,QAAQ;gBACf,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAGD,UAAU;QACR,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACjC,CAAC;CACF;AAGD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"dashboardStore.d.ts","sourceRoot":"","sources":["../../../../src/ui/client/state/dashboardStore.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,aAAa,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AASD,qBAAa,cAAe,SAAQ,KAAK,CAAC,mBAAmB,CAAC;;IAMtD,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB1B,YAAY,CAAC,KAAK,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAahD,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAe7C,iBAAiB,IAAI,IAAI;IAezB,UAAU,IAAI,IAAI;CAGnB;AAGD,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
1
+ {"version":3,"file":"dashboardStore.d.ts","sourceRoot":"","sources":["../../../../src/ui/client/state/dashboardStore.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,aAAa,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AASD,qBAAa,cAAe,SAAQ,KAAK,CAAC,mBAAmB,CAAC;;IAMtD,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IA+B1B,YAAY,CAAC,KAAK,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAahD,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAe7C,iBAAiB,IAAI,IAAI;IAezB,UAAU,IAAI,IAAI;CAGnB;AAGD,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
@@ -14,8 +14,12 @@ export class DashboardStore extends Store {
14
14
  try {
15
15
  const response = await fetch('/api/dashboard/stats');
16
16
  if (!response.ok)
17
- throw new Error('Failed to load dashboard stats');
18
- const stats = await response.json();
17
+ throw new Error(`Failed to load dashboard stats: ${response.status}`);
18
+ const data = await response.json();
19
+ const stats = data.data || data;
20
+ if (!stats) {
21
+ throw new Error('Invalid response format from server');
22
+ }
19
23
  this.setState({
20
24
  stats,
21
25
  isLoading: false,
@@ -23,8 +27,10 @@ export class DashboardStore extends Store {
23
27
  });
24
28
  }
25
29
  catch (error) {
30
+ const errorMsg = error instanceof Error ? error.message : 'Unknown error';
31
+ console.error('Failed to load dashboard stats:', errorMsg);
26
32
  this.setState({
27
- error: error.message,
33
+ error: errorMsg,
28
34
  isLoading: false,
29
35
  });
30
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dashboardStore.js","sourceRoot":"","sources":["../../../../src/ui/client/state/dashboardStore.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAyB3C,MAAM,aAAa,GAAwB;IACzC,KAAK,EAAE,IAAI;IACX,SAAS,EAAE,KAAK;IAChB,KAAK,EAAE,IAAI;IACX,WAAW,EAAE,IAAI;CAClB,CAAC;AAEF,MAAM,OAAO,cAAe,SAAQ,KAA0B;IAC5D;QACE,KAAK,CAAC,aAAa,CAAC,CAAC;IACvB,CAAC;IAGD,KAAK,CAAC,SAAS;QACb,IAAI,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACrD,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAEpE,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,IAAI,CAAC,QAAQ,CAAC;gBACZ,KAAK;gBACL,SAAS,EAAE,KAAK;gBAChB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;aACxB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,QAAQ,CAAC;gBACZ,KAAK,EAAG,KAAe,CAAC,OAAO;gBAC/B,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAGD,KAAK,CAAC,YAAY,CAAC,KAAK,GAAG,KAAK;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;QAChD,MAAM,mBAAmB,GAAG,GAAG,GAAG,WAAW,CAAC;QAE9C,IAAI,CAAC,KAAK,IAAI,mBAAmB,GAAG,IAAI,EAAE,CAAC;YACzC,OAAO;QACT,CAAC;QAED,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;IACzB,CAAC;IAGD,gBAAgB,CAAC,MAAqB;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,MAAM,YAAY,GAAG;YACnB,GAAG,KAAK;YACR,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,GAAG,CAAC;YAChD,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,GAAG,MAAM,CAAC,UAAU;YAC9D,eAAe,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACjE,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;IACzC,CAAC;IAGD,iBAAiB;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,MAAM,UAAU,GAAG;YACjB,GAAG,KAAK;YACR,kBAAkB,EAAE,CAAC;YACrB,iBAAiB,EAAE,CAAC;YACpB,eAAe,EAAE,EAAE;SACpB,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IACvC,CAAC;IAGD,UAAU;QACR,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACjC,CAAC;CACF;AAGD,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"dashboardStore.js","sourceRoot":"","sources":["../../../../src/ui/client/state/dashboardStore.ts"],"names":[],"mappings":"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"}
@@ -39,6 +39,28 @@
39
39
  }
40
40
  }
41
41
 
42
+ @keyframes slideUp {
43
+ from {
44
+ opacity: 0;
45
+ transform: translateY(20px);
46
+ }
47
+ to {
48
+ opacity: 1;
49
+ transform: translateY(0);
50
+ }
51
+ }
52
+
53
+ @keyframes slideIn {
54
+ from {
55
+ opacity: 0;
56
+ transform: translateX(-10px);
57
+ }
58
+ to {
59
+ opacity: 1;
60
+ transform: translateX(0);
61
+ }
62
+ }
63
+
42
64
  @keyframes slideOutDown {
43
65
  from {
44
66
  opacity: 1;
@@ -2,9 +2,12 @@ export declare class GUIServer {
2
2
  private port;
3
3
  private server;
4
4
  private spaHtml;
5
+ private browserProcess;
5
6
  constructor(port?: number);
6
7
  start(): Promise<void>;
7
8
  stop(): Promise<void>;
9
+ private openBrowser;
10
+ private closeBrowser;
8
11
  private handleRequest;
9
12
  private handleAPIRequest;
10
13
  private serveStaticAsset;
@@ -1 +1 @@
1
- {"version":3,"file":"guiServer.d.ts","sourceRoot":"","sources":["../../src/ui/guiServer.ts"],"names":[],"mappings":"AAoBA,qBAAa,SAAS;IACpB,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,OAAO,CAAuB;gBAE1B,IAAI,GAAE,MAAa;IAOzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAUb,aAAa;IAqC3B,OAAO,CAAC,gBAAgB;IA4BxB,OAAO,CAAC,gBAAgB;IAqCxB,OAAO,CAAC,QAAQ;IAkChB,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,cAAc;IA2BtB,OAAO,CAAC,cAAc;CAMvB;AAGD,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"guiServer.d.ts","sourceRoot":"","sources":["../../src/ui/guiServer.ts"],"names":[],"mappings":"AAqBA,qBAAa,SAAS;IACpB,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,cAAc,CAA6B;gBAEvC,IAAI,GAAE,MAAa;IAOzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA0BtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAab,WAAW;YA4BX,YAAY;YA6BZ,aAAa;IAqC3B,OAAO,CAAC,gBAAgB;IA4BxB,OAAO,CAAC,gBAAgB;IAqCxB,OAAO,CAAC,QAAQ;IAkChB,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,cAAc;IA2BtB,OAAO,CAAC,cAAc;CAMvB;AAGD,eAAe,SAAS,CAAC"}
@@ -3,6 +3,7 @@ import { readFileSync, existsSync } from 'fs';
3
3
  import { join } from 'path';
4
4
  import { fileURLToPath } from 'url';
5
5
  import { dirname } from 'path';
6
+ import { execFile } from 'child_process';
6
7
  import { Logger } from '../utils/logger.js';
7
8
  import { sendError } from './server/middleware/errorHandler.js';
8
9
  import { handleAppRoutes } from './server/routes/apps.js';
@@ -14,6 +15,7 @@ export class GUIServer {
14
15
  constructor(port = 3000) {
15
16
  this.port = 3000;
16
17
  this.spaHtml = null;
18
+ this.browserProcess = null;
17
19
  this.port = port;
18
20
  }
19
21
  async start() {
@@ -23,19 +25,64 @@ export class GUIServer {
23
25
  this.handleRequest(req, res);
24
26
  });
25
27
  return new Promise((resolve) => {
26
- this.server.listen(this.port, () => {
28
+ this.server.listen(this.port, async () => {
27
29
  Logger.success(`โœจ AppClean GUI running at http://localhost:${this.port}`);
28
30
  Logger.info('Press Ctrl+C to stop the server');
31
+ await this.openBrowser();
29
32
  resolve();
30
33
  });
31
34
  });
32
35
  }
33
36
  async stop() {
37
+ await this.closeBrowser();
34
38
  if (this.server) {
35
39
  this.server.close();
36
40
  Logger.info('GUI server stopped');
37
41
  }
38
42
  }
43
+ async openBrowser() {
44
+ const url = `http://localhost:${this.port}`;
45
+ try {
46
+ const platform = process.platform;
47
+ if (platform === 'darwin') {
48
+ this.browserProcess = execFile('open', [url]);
49
+ }
50
+ else if (platform === 'win32') {
51
+ this.browserProcess = execFile('cmd', ['/c', 'start', url]);
52
+ }
53
+ else {
54
+ this.browserProcess = execFile('xdg-open', [url]);
55
+ }
56
+ this.browserProcess.on('error', (error) => {
57
+ Logger.warn(`Could not open browser: ${error.message}`);
58
+ });
59
+ }
60
+ catch (error) {
61
+ Logger.warn(`Failed to open browser: ${error.message}`);
62
+ }
63
+ }
64
+ async closeBrowser() {
65
+ if (!this.browserProcess) {
66
+ return;
67
+ }
68
+ try {
69
+ const platform = process.platform;
70
+ if (platform === 'win32') {
71
+ if (this.browserProcess.pid) {
72
+ process.kill(this.browserProcess.pid, 'SIGTERM');
73
+ }
74
+ }
75
+ else {
76
+ if (this.browserProcess.pid) {
77
+ process.kill(this.browserProcess.pid);
78
+ }
79
+ }
80
+ this.browserProcess = null;
81
+ }
82
+ catch (error) {
83
+ Logger.debug(`Note: Could not close browser process: ${error.message}`);
84
+ }
85
+ }
39
86
  async handleRequest(req, res) {
40
87
  const url = req.url || '/';
41
88
  const method = req.method || 'GET';
@@ -1 +1 @@
1
- {"version":3,"file":"guiServer.js","sourceRoot":"","sources":["../../src/ui/guiServer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"guiServer.js","sourceRoot":"","sources":["../../src/ui/guiServer.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAmC,MAAM,MAAM,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAA4B,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAY,SAAS,EAAoB,MAAM,qCAAqC,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGnE,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,MAAM,OAAO,SAAS;IAMpB,YAAY,OAAe,IAAI;QALvB,SAAI,GAAW,IAAI,CAAC;QAEpB,YAAO,GAAkB,IAAI,CAAC;QAC9B,mBAAc,GAAwB,IAAI,CAAC;QAGjD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAKD,KAAK,CAAC,KAAK;QACT,MAAM,CAAC,IAAI,CAAC,wCAAwC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC;QAGpE,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACtC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;gBACvC,MAAM,CAAC,OAAO,CAAC,8CAA8C,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC1E,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;gBAG/C,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;gBAEzB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAKD,KAAK,CAAC,IAAI;QAER,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAE1B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAKO,KAAK,CAAC,WAAW;QACvB,MAAM,GAAG,GAAG,oBAAoB,IAAI,CAAC,IAAI,EAAE,CAAC;QAE5C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;YAElC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAE1B,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAChD,CAAC;iBAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;gBAEhC,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBAEN,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACpD,CAAC;YAED,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACxC,MAAM,CAAC,IAAI,CAAC,2BAA2B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1D,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,2BAA4B,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAKO,KAAK,CAAC,YAAY;QACxB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;YAElC,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;gBAEzB,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC;oBAC5B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;iBAAM,CAAC;gBAEN,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC;oBAC5B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;YAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,0CAA2C,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IAKO,KAAK,CAAC,aAAa,CAAC,GAAoB,EAAE,GAAmB;QACnE,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC;QAC3B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC;QACnC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAGnC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAGzB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,GAAG,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YAEH,IAAI,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACjC,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAC3D,CAAC;YAGD,IAAI,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBACpC,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC9C,CAAC;YAGD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,kBAAmB,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3D,SAAS,CAAC,GAAG,EAAE,uBAAuB,EAAE,GAAG,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAKO,gBAAgB,CACtB,MAAc,EACd,QAAgB,EAChB,GAAoB,EACpB,GAAmB;QAGnB,IAAI,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;YAChD,OAAO;QACT,CAAC;QAGD,IAAI,qBAAqB,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;YACtD,OAAO;QACT,CAAC;QAGD,IAAI,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;YACrD,OAAO;QACT,CAAC;QAGD,SAAS,CAAC,GAAG,EAAE,wBAAwB,EAAE,GAAG,CAAC,CAAC;IAChD,CAAC;IAKO,gBAAgB,CAAC,QAAgB,EAAE,GAAmB;QAE5D,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAGvC,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,SAAS,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QAGD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;QAGzD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,SAAS,CAAC,GAAG,EAAE,iBAAiB,EAAE,GAAG,CAAC,CAAC;YACvC,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;YACvC,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAElD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;gBACjB,cAAc,EAAE,WAAW;gBAC3B,eAAe,EAAE,sBAAsB;aACxC,CAAC,CAAC;YACH,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,yBAAyB,QAAQ,KAAM,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9E,SAAS,CAAC,GAAG,EAAE,sBAAsB,EAAE,GAAG,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAKO,QAAQ,CAAC,GAAmB;QAClC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAElB,MAAM,YAAY,GAAG;;;;;;;;;;;;;;QAcnB,CAAC;YAEH,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;YACpD,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACtB,OAAO;QACT,CAAC;QAED,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;YACjB,cAAc,EAAE,WAAW;YAC3B,eAAe,EAAE,UAAU;SAC5B,CAAC,CAAC;QACH,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAKO,WAAW;QACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;QAEzD,IAAI,CAAC;YACH,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC/C,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,6BAA6B,QAAQ,EAAE,CAAC,CAAC;gBACrD,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,4BAA6B,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAKO,cAAc,CAAC,QAAgB;QACrC,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QAEpD,MAAM,OAAO,GAA2B;YACtC,IAAI,EAAE,uCAAuC;YAC7C,KAAK,EAAE,yBAAyB;YAChC,MAAM,EAAE,0BAA0B;YAClC,MAAM,EAAE,iCAAiC;YACzC,KAAK,EAAE,eAAe;YACtB,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,YAAY;YACnB,MAAM,EAAE,YAAY;YACpB,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,cAAc;YACrB,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE,WAAW;YACnB,OAAO,EAAE,YAAY;YACrB,KAAK,EAAE,UAAU;YACjB,KAAK,EAAE,+BAA+B;SACvC,CAAC;QAEF,OAAO,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,0BAA0B,CAAC;IAC1D,CAAC;IAKO,cAAc,CAAC,GAAmB;QACxC,GAAG,CAAC,SAAS,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;QAClD,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,iCAAiC,CAAC,CAAC;QACjF,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,6BAA6B,CAAC,CAAC;QAC7E,GAAG,CAAC,SAAS,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;IAClD,CAAC;CACF;AAGD,eAAe,SAAS,CAAC"}
@@ -5,7 +5,8 @@ export interface VersionInfo {
5
5
  }
6
6
  export declare class UpgradeManager {
7
7
  private readonly packageName;
8
- private readonly currentVersion;
8
+ private currentVersion;
9
+ constructor();
9
10
  getVersionInfo(): Promise<VersionInfo>;
10
11
  private compareVersions;
11
12
  upgrade(): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/utils/upgrade.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAW;IAKpC,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC;IAmC5C,OAAO,CAAC,eAAe;IAkBjB,OAAO,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAsC/D,iBAAiB,IAAI,MAAM;IAOrB,eAAe,IAAI,OAAO,CAAC,WAAW,CAAC;IAOvC,SAAS,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAqBlE"}
1
+ {"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/utils/upgrade.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,cAAc,CAAS;;IAmBzB,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC;IAmC5C,OAAO,CAAC,eAAe;IAkBjB,OAAO,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAsC/D,iBAAiB,IAAI,MAAM;IAOrB,eAAe,IAAI,OAAO,CAAC,WAAW,CAAC;IAOvC,SAAS,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAqBlE"}
@@ -1,9 +1,22 @@
1
1
  import { execSync } from 'child_process';
2
2
  import { Logger } from './logger.js';
3
+ import { readFileSync } from 'fs';
4
+ import { fileURLToPath } from 'url';
5
+ import { dirname, join } from 'path';
3
6
  export class UpgradeManager {
4
7
  constructor() {
5
8
  this.packageName = 'appclean';
6
- this.currentVersion = '1.9.0';
9
+ try {
10
+ const __filename = fileURLToPath(import.meta.url);
11
+ const __dirname = dirname(__filename);
12
+ const packagePath = join(__dirname, '../../package.json');
13
+ const packageData = JSON.parse(readFileSync(packagePath, 'utf-8'));
14
+ this.currentVersion = packageData.version || '2.0.0';
15
+ }
16
+ catch (error) {
17
+ Logger.debug('Failed to read version from package.json, using fallback');
18
+ this.currentVersion = '2.0.0';
19
+ }
7
20
  }
8
21
  async getVersionInfo() {
9
22
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/utils/upgrade.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/utils/upgrade.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "appclean",
3
- "version": "2.0.0",
3
+ "version": "2.0.2",
4
4
  "type": "module",
5
5
  "description": "A powerful CLI tool to intelligently find and safely uninstall applications from your system with all their artifacts",
6
6
  "main": "dist/index.js",
@@ -0,0 +1,64 @@
1
+ #!/bin/bash
2
+
3
+ # AppClean NPM Publishing Script
4
+ # Usage: ./scripts/publish-npm.sh [version]
5
+ # Example: ./scripts/publish-npm.sh 2.0.1
6
+
7
+ set -e
8
+
9
+ VERSION=${1:-}
10
+
11
+ if [ -z "$VERSION" ]; then
12
+ echo "Usage: ./scripts/publish-npm.sh <version>"
13
+ echo "Example: ./scripts/publish-npm.sh 2.0.1"
14
+ exit 1
15
+ fi
16
+
17
+ # Check if npm is logged in
18
+ if ! npm whoami &>/dev/null; then
19
+ echo "โŒ Not logged into npm"
20
+ echo "Please run: npm login"
21
+ exit 1
22
+ fi
23
+
24
+ echo "๐Ÿ“ฆ Publishing AppClean v$VERSION to npm..."
25
+
26
+ # Ensure clean working directory
27
+ if [ -n "$(git status --porcelain)" ]; then
28
+ echo "โŒ Working directory not clean. Please commit all changes."
29
+ git status
30
+ exit 1
31
+ fi
32
+
33
+ # Update version in package.json and src/index.ts
34
+ echo "๐Ÿ“ Updating version to $VERSION..."
35
+ sed -i.bak "s/\"version\": \"[^\"]*\"/\"version\": \"$VERSION\"/" package.json
36
+ sed -i.bak "s/const VERSION = '[^']*'/const VERSION = '$VERSION'/" src/index.ts
37
+ rm -f package.json.bak src/index.ts.bak
38
+
39
+ # Build the project
40
+ echo "๐Ÿ”จ Building project..."
41
+ npm run build
42
+
43
+ # Commit version changes
44
+ echo "๐Ÿ“Œ Committing version changes..."
45
+ git add package.json src/index.ts
46
+ git commit -m "chore: Bump version to $VERSION"
47
+
48
+ # Create git tag
49
+ echo "๐Ÿท๏ธ Creating git tag v$VERSION..."
50
+ git tag -a "v$VERSION" -m "AppClean v$VERSION - Published to npm" || true
51
+
52
+ # Publish to npm
53
+ echo "๐Ÿš€ Publishing to npm..."
54
+ npm publish
55
+
56
+ # Push changes and tags to origin
57
+ echo "๐Ÿ“ค Pushing changes to origin..."
58
+ git push origin main
59
+ git push origin "v$VERSION" || true
60
+
61
+ echo ""
62
+ echo "โœ… Successfully published AppClean v$VERSION"
63
+ echo "๐Ÿ“ View on npm: https://www.npmjs.com/package/appclean"
64
+ echo "๐Ÿท๏ธ View on GitHub: https://github.com/praveenkay/AppClean/releases/tag/v$VERSION"
package/src/index.ts CHANGED
@@ -26,7 +26,7 @@ import { Logger, formatBytes } from './utils/logger.js';
26
26
  import { UpgradeManager } from './utils/upgrade.js';
27
27
  import { InstalledApp } from './types';
28
28
 
29
- const VERSION = '2.0.0';
29
+ const VERSION = '2.0.2';
30
30
 
31
31
  async function interactiveMode(): Promise<void> {
32
32
  showHeader();
@@ -119,7 +119,12 @@ export class ApiClient {
119
119
  const contentType = response.headers.get('content-type');
120
120
 
121
121
  if (contentType?.includes('application/json')) {
122
- return response.json();
122
+ const json = await response.json();
123
+ // Extract data from wrapped response format: { success: true, data: T }
124
+ if (json && typeof json === 'object' && 'data' in json && 'success' in json) {
125
+ return json.data as T;
126
+ }
127
+ return json as T;
123
128
  }
124
129
 
125
130
  if (contentType?.includes('text/')) {
@@ -17,18 +17,18 @@ import { renderSettings } from './pages/settings.js';
17
17
  /**
18
18
  * Initialize the SPA
19
19
  */
20
- export function initApp(): void {
20
+ export async function initApp(): Promise<void> {
21
21
  console.log('๐Ÿงน AppClean GUI v1.0.0 initializing...');
22
22
 
23
- // Register routes
23
+ // Register routes first
24
24
  registerRoutes();
25
25
 
26
- // Initialize stores
27
- initializeStores();
28
-
29
26
  // Setup UI listeners
30
27
  setupUIListeners();
31
28
 
29
+ // Initialize stores with data
30
+ await initializeStores();
31
+
32
32
  // Navigate to initial route
33
33
  router.navigate('');
34
34
 
@@ -65,11 +65,13 @@ function registerRoutes(): void {
65
65
  */
66
66
  async function initializeStores(): Promise<void> {
67
67
  try {
68
- // Load dashboard stats
68
+ // Load dashboard stats (required for initial render)
69
69
  await dashboardStore.loadStats();
70
70
 
71
- // Load initial app list
72
- await appStore.loadApps();
71
+ // Load app list in background (don't block on this)
72
+ appStore.loadApps().catch((error) => {
73
+ console.error('Failed to load apps:', error);
74
+ });
73
75
  } catch (error) {
74
76
  console.error('Failed to initialize stores:', error);
75
77
  uiStore.showError('Failed to load application data');
@@ -87,7 +89,9 @@ function setupUIListeners(): void {
87
89
 
88
90
  // Subscribe to app store changes
89
91
  appStore.subscribe((state) => {
90
- console.log(`Apps loaded: ${state.apps.length}`);
92
+ if (state && state.apps) {
93
+ console.log(`Apps loaded: ${state.apps.length}`);
94
+ }
91
95
  });
92
96
 
93
97
  // Subscribe to dashboard store changes
@@ -115,7 +119,7 @@ export { appStore, dashboardStore, uiStore, router };
115
119
 
116
120
  // Initialize on DOM ready
117
121
  if (document.readyState === 'loading') {
118
- document.addEventListener('DOMContentLoaded', initApp);
122
+ document.addEventListener('DOMContentLoaded', () => initApp().catch(e => console.error('Init error:', e)));
119
123
  } else {
120
- initApp();
124
+ initApp().catch(e => console.error('Init error:', e));
121
125
  }
@@ -40,6 +40,19 @@ export function renderAppSearch(): void {
40
40
  function renderAppSearchContent(container: HTMLElement): void {
41
41
  const state = appStore.getState();
42
42
 
43
+ // Ensure state has apps array
44
+ if (!state || !state.apps) {
45
+ console.error('AppStore state is invalid:', state);
46
+ container.innerHTML = `
47
+ <div class="alert alert-danger">
48
+ <h3>Error Loading Apps</h3>
49
+ <p>Failed to load application state. Please refresh the page.</p>
50
+ <button class="btn btn-primary btn-sm mt-4" onclick="window.location.reload()">Reload</button>
51
+ </div>
52
+ `;
53
+ return;
54
+ }
55
+
43
56
  container.innerHTML = `
44
57
  <div class="app-search-page">
45
58
  <!-- Header -->
@@ -82,7 +95,7 @@ function renderAppSearchContent(container: HTMLElement): void {
82
95
  <!-- Apps Grid -->
83
96
  <div class="apps-grid">
84
97
  ${
85
- state.apps.length > 0
98
+ (state.apps && state.apps.length > 0)
86
99
  ? `
87
100
  <div class="grid grid-cols-1 md:grid-cols-2 gap-4">
88
101
  ${state.apps.map((app) => renderAppCard(app)).join('')}
@@ -25,11 +25,24 @@ export function renderDashboard(): void {
25
25
  dashboardStore.refreshStats(true).then(() => {
26
26
  const state = dashboardStore.getState();
27
27
  const stats = state.stats;
28
+ const error = state.error;
29
+
30
+ if (error) {
31
+ container.innerHTML = `
32
+ <div class="alert alert-danger" style="margin: 20px;">
33
+ <h3 style="margin-top: 0;">โš ๏ธ Error Loading Dashboard</h3>
34
+ <p>${escapeHtml(error)}</p>
35
+ <button class="btn btn-primary btn-sm" onclick="window.location.reload()">Retry</button>
36
+ </div>
37
+ `;
38
+ return;
39
+ }
28
40
 
29
41
  if (!stats) {
30
42
  container.innerHTML = `
31
- <div class="alert alert-danger">
32
- <span>Failed to load dashboard stats</span>
43
+ <div class="alert alert-warning" style="margin: 20px;">
44
+ <h3 style="margin-top: 0;">โณ Initializing</h3>
45
+ <p>Dashboard is loading. Please wait...</p>
33
46
  </div>
34
47
  `;
35
48
  return;
@@ -43,6 +56,15 @@ export function renderDashboard(): void {
43
56
  renderDashboardContent(container, newState.stats);
44
57
  }
45
58
  });
59
+ }).catch((error) => {
60
+ console.error('Dashboard error:', error);
61
+ container.innerHTML = `
62
+ <div class="alert alert-danger" style="margin: 20px;">
63
+ <h3 style="margin-top: 0;">โŒ Failed to Load Dashboard</h3>
64
+ <p>An unexpected error occurred. Please check the console for details.</p>
65
+ <button class="btn btn-primary btn-sm" onclick="window.location.reload()">Reload Page</button>
66
+ </div>
67
+ `;
46
68
  });
47
69
  }
48
70
 
@@ -51,7 +73,7 @@ export function renderDashboard(): void {
51
73
  */
52
74
  function renderDashboardContent(container: HTMLElement, stats: DashboardStats): void {
53
75
  container.innerHTML = `
54
- <div class="dashboard-page">
76
+ <div class="dashboard-page fade-in">
55
77
  <!-- Header -->
56
78
  <div class="page-header mb-8">
57
79
  <h1 class="text-3xl font-bold">๐Ÿ“Š Dashboard</h1>
@@ -88,10 +110,10 @@ function renderDashboardContent(container: HTMLElement, stats: DashboardStats):
88
110
  </div>
89
111
  <p class="text-sm text-muted">
90
112
  ${stats.diskUsagePercent < 80
91
- ? 'โœ“ Disk usage is healthy'
113
+ ? 'โœ… Disk usage is healthy'
92
114
  : stats.diskUsagePercent < 90
93
115
  ? 'โš ๏ธ Disk usage is getting high'
94
- : 'โŒ Disk usage is critical'}
116
+ : '๐Ÿ”ด Disk usage is critical'}
95
117
  </p>
96
118
  </div>
97
119
  </div>