@masuidrive/procman 0.1.2 → 0.2.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 (204) hide show
  1. package/dist/src/cli/commands/help.d.ts.map +1 -1
  2. package/dist/src/cli/commands/help.js +3 -1
  3. package/dist/src/cli/commands/help.js.map +1 -1
  4. package/dist/src/cli/index.js +6 -2
  5. package/dist/src/cli/index.js.map +1 -1
  6. package/dist/src/cli/parser.d.ts.map +1 -1
  7. package/dist/src/cli/parser.js +20 -0
  8. package/dist/src/cli/parser.js.map +1 -1
  9. package/dist/src/cli/utils/find-package-json.d.ts +4 -0
  10. package/dist/src/cli/utils/find-package-json.d.ts.map +1 -0
  11. package/dist/src/cli/utils/find-package-json.js +15 -0
  12. package/dist/src/cli/utils/find-package-json.js.map +1 -0
  13. package/dist/src/config/config-loader.d.ts +1 -0
  14. package/dist/src/config/config-loader.d.ts.map +1 -1
  15. package/dist/src/config/config-loader.js +16 -6
  16. package/dist/src/config/config-loader.js.map +1 -1
  17. package/dist/src/config/config-validator.d.ts +18 -49
  18. package/dist/src/config/config-validator.d.ts.map +1 -1
  19. package/dist/src/config/config-validator.js +64 -172
  20. package/dist/src/config/config-validator.js.map +1 -1
  21. package/dist/src/config/path-security-validator.d.ts +39 -0
  22. package/dist/src/config/path-security-validator.d.ts.map +1 -0
  23. package/dist/src/config/path-security-validator.js +134 -0
  24. package/dist/src/config/path-security-validator.js.map +1 -0
  25. package/dist/src/config/secure-config-loader.d.ts.map +1 -1
  26. package/dist/src/config/secure-config-loader.js +10 -2
  27. package/dist/src/config/secure-config-loader.js.map +1 -1
  28. package/dist/src/config/validation-suggestions.d.ts +13 -0
  29. package/dist/src/config/validation-suggestions.d.ts.map +1 -0
  30. package/dist/src/config/validation-suggestions.js +40 -0
  31. package/dist/src/config/validation-suggestions.js.map +1 -0
  32. package/dist/src/config/validation-types.d.ts +38 -0
  33. package/dist/src/config/validation-types.d.ts.map +1 -0
  34. package/dist/src/config/validation-types.js +7 -0
  35. package/dist/src/config/validation-types.js.map +1 -0
  36. package/dist/src/daemon/component-command-wiring.d.ts +19 -0
  37. package/dist/src/daemon/component-command-wiring.d.ts.map +1 -0
  38. package/dist/src/daemon/component-command-wiring.js +27 -0
  39. package/dist/src/daemon/component-command-wiring.js.map +1 -0
  40. package/dist/src/daemon/component-daemon-interface.d.ts +38 -0
  41. package/dist/src/daemon/component-daemon-interface.d.ts.map +1 -0
  42. package/dist/src/daemon/component-daemon-interface.js +72 -0
  43. package/dist/src/daemon/component-daemon-interface.js.map +1 -0
  44. package/dist/src/daemon/component-health.d.ts +38 -0
  45. package/dist/src/daemon/component-health.d.ts.map +1 -0
  46. package/dist/src/daemon/component-health.js +146 -0
  47. package/dist/src/daemon/component-health.js.map +1 -0
  48. package/dist/src/daemon/component-manager-errors.d.ts +20 -0
  49. package/dist/src/daemon/component-manager-errors.d.ts.map +1 -0
  50. package/dist/src/daemon/component-manager-errors.js +30 -0
  51. package/dist/src/daemon/component-manager-errors.js.map +1 -0
  52. package/dist/src/daemon/component-manager-types.d.ts +23 -0
  53. package/dist/src/daemon/component-manager-types.d.ts.map +1 -0
  54. package/dist/src/daemon/component-manager-types.js +5 -0
  55. package/dist/src/daemon/component-manager-types.js.map +1 -0
  56. package/dist/src/daemon/component-manager.d.ts +16 -64
  57. package/dist/src/daemon/component-manager.d.ts.map +1 -1
  58. package/dist/src/daemon/component-manager.js +72 -509
  59. package/dist/src/daemon/component-manager.js.map +1 -1
  60. package/dist/src/daemon/component-registration.d.ts +14 -0
  61. package/dist/src/daemon/component-registration.d.ts.map +1 -0
  62. package/dist/src/daemon/component-registration.js +92 -0
  63. package/dist/src/daemon/component-registration.js.map +1 -0
  64. package/dist/src/daemon/component-streaming.d.ts +36 -0
  65. package/dist/src/daemon/component-streaming.d.ts.map +1 -0
  66. package/dist/src/daemon/component-streaming.js +112 -0
  67. package/dist/src/daemon/component-streaming.js.map +1 -0
  68. package/dist/src/daemon/daemon-lifecycle.d.ts +37 -0
  69. package/dist/src/daemon/daemon-lifecycle.d.ts.map +1 -0
  70. package/dist/src/daemon/daemon-lifecycle.js +362 -0
  71. package/dist/src/daemon/daemon-lifecycle.js.map +1 -0
  72. package/dist/src/daemon/daemon-queries.d.ts +53 -0
  73. package/dist/src/daemon/daemon-queries.d.ts.map +1 -0
  74. package/dist/src/daemon/daemon-queries.js +113 -0
  75. package/dist/src/daemon/daemon-queries.js.map +1 -0
  76. package/dist/src/daemon/daemon-types.d.ts +30 -0
  77. package/dist/src/daemon/daemon-types.d.ts.map +1 -0
  78. package/dist/src/daemon/daemon-types.js +8 -0
  79. package/dist/src/daemon/daemon-types.js.map +1 -0
  80. package/dist/src/daemon/disposable-base.d.ts +49 -0
  81. package/dist/src/daemon/disposable-base.d.ts.map +1 -0
  82. package/dist/src/daemon/disposable-base.js +70 -0
  83. package/dist/src/daemon/disposable-base.js.map +1 -0
  84. package/dist/src/daemon/disposal-guard.d.ts +27 -0
  85. package/dist/src/daemon/disposal-guard.d.ts.map +1 -0
  86. package/dist/src/daemon/disposal-guard.js +58 -0
  87. package/dist/src/daemon/disposal-guard.js.map +1 -0
  88. package/dist/src/daemon/ipc-command-handler.d.ts +8 -34
  89. package/dist/src/daemon/ipc-command-handler.d.ts.map +1 -1
  90. package/dist/src/daemon/ipc-command-handler.js +14 -362
  91. package/dist/src/daemon/ipc-command-handler.js.map +1 -1
  92. package/dist/src/daemon/log-command-handlers.d.ts +19 -0
  93. package/dist/src/daemon/log-command-handlers.d.ts.map +1 -0
  94. package/dist/src/daemon/log-command-handlers.js +114 -0
  95. package/dist/src/daemon/log-command-handlers.js.map +1 -0
  96. package/dist/src/daemon/process-command-handlers.d.ts +32 -0
  97. package/dist/src/daemon/process-command-handlers.d.ts.map +1 -0
  98. package/dist/src/daemon/process-command-handlers.js +223 -0
  99. package/dist/src/daemon/process-command-handlers.js.map +1 -0
  100. package/dist/src/daemon/procman-daemon.d.ts +22 -98
  101. package/dist/src/daemon/procman-daemon.d.ts.map +1 -1
  102. package/dist/src/daemon/procman-daemon.js +107 -604
  103. package/dist/src/daemon/procman-daemon.js.map +1 -1
  104. package/dist/src/daemon/resource-manager.d.ts +6 -124
  105. package/dist/src/daemon/resource-manager.d.ts.map +1 -1
  106. package/dist/src/daemon/resource-manager.js +5 -231
  107. package/dist/src/daemon/resource-manager.js.map +1 -1
  108. package/dist/src/daemon/resource-types.d.ts +23 -0
  109. package/dist/src/daemon/resource-types.d.ts.map +1 -0
  110. package/dist/src/daemon/resource-types.js +7 -0
  111. package/dist/src/daemon/resource-types.js.map +1 -0
  112. package/dist/src/daemon/shutdown-orchestrator.d.ts +32 -0
  113. package/dist/src/daemon/shutdown-orchestrator.d.ts.map +1 -0
  114. package/dist/src/daemon/shutdown-orchestrator.js +123 -0
  115. package/dist/src/daemon/shutdown-orchestrator.js.map +1 -0
  116. package/dist/src/daemon/tracked-resources.d.ts +60 -0
  117. package/dist/src/daemon/tracked-resources.d.ts.map +1 -0
  118. package/dist/src/daemon/tracked-resources.js +124 -0
  119. package/dist/src/daemon/tracked-resources.js.map +1 -0
  120. package/dist/src/process-manager/index.d.ts +5 -1
  121. package/dist/src/process-manager/index.d.ts.map +1 -1
  122. package/dist/src/process-manager/index.js +3 -0
  123. package/dist/src/process-manager/index.js.map +1 -1
  124. package/dist/src/process-manager/interfaces/process-group.d.ts +6 -0
  125. package/dist/src/process-manager/interfaces/process-group.d.ts.map +1 -1
  126. package/dist/src/process-manager/managed-process-events.d.ts +22 -0
  127. package/dist/src/process-manager/managed-process-events.d.ts.map +1 -0
  128. package/dist/src/process-manager/managed-process-events.js +5 -0
  129. package/dist/src/process-manager/managed-process-events.js.map +1 -0
  130. package/dist/src/process-manager/managed-process-info.d.ts +11 -53
  131. package/dist/src/process-manager/managed-process-info.d.ts.map +1 -1
  132. package/dist/src/process-manager/managed-process-info.js +46 -133
  133. package/dist/src/process-manager/managed-process-info.js.map +1 -1
  134. package/dist/src/process-manager/process-batch-operations.d.ts +62 -0
  135. package/dist/src/process-manager/process-batch-operations.d.ts.map +1 -0
  136. package/dist/src/process-manager/process-batch-operations.js +80 -0
  137. package/dist/src/process-manager/process-batch-operations.js.map +1 -0
  138. package/dist/src/process-manager/process-config.d.ts +49 -0
  139. package/dist/src/process-manager/process-config.d.ts.map +1 -0
  140. package/dist/src/process-manager/process-config.js +68 -0
  141. package/dist/src/process-manager/process-config.js.map +1 -0
  142. package/dist/src/process-manager/process-event-forwarding.d.ts +18 -0
  143. package/dist/src/process-manager/process-event-forwarding.d.ts.map +1 -0
  144. package/dist/src/process-manager/process-event-forwarding.js +105 -0
  145. package/dist/src/process-manager/process-event-forwarding.js.map +1 -0
  146. package/dist/src/process-manager/process-group-manager.d.ts.map +1 -1
  147. package/dist/src/process-manager/process-group-manager.js +0 -1
  148. package/dist/src/process-manager/process-group-manager.js.map +1 -1
  149. package/dist/src/process-manager/process-info-queries.d.ts +48 -0
  150. package/dist/src/process-manager/process-info-queries.d.ts.map +1 -0
  151. package/dist/src/process-manager/process-info-queries.js +92 -0
  152. package/dist/src/process-manager/process-info-queries.js.map +1 -0
  153. package/dist/src/process-manager/process-manager.d.ts +5 -174
  154. package/dist/src/process-manager/process-manager.d.ts.map +1 -1
  155. package/dist/src/process-manager/process-manager.js +58 -398
  156. package/dist/src/process-manager/process-manager.js.map +1 -1
  157. package/dist/src/process-manager/process-monitoring.d.ts +80 -0
  158. package/dist/src/process-manager/process-monitoring.d.ts.map +1 -0
  159. package/dist/src/process-manager/process-monitoring.js +142 -0
  160. package/dist/src/process-manager/process-monitoring.js.map +1 -0
  161. package/dist/src/process-manager/process-statistics.d.ts +37 -0
  162. package/dist/src/process-manager/process-statistics.d.ts.map +1 -0
  163. package/dist/src/process-manager/process-statistics.js +24 -0
  164. package/dist/src/process-manager/process-statistics.js.map +1 -0
  165. package/dist/src/process-manager/restart-manager.d.ts +82 -0
  166. package/dist/src/process-manager/restart-manager.d.ts.map +1 -0
  167. package/dist/src/process-manager/restart-manager.js +150 -0
  168. package/dist/src/process-manager/restart-manager.js.map +1 -0
  169. package/dist/src/services/app-logger.d.ts +144 -0
  170. package/dist/src/services/app-logger.d.ts.map +1 -0
  171. package/dist/src/services/app-logger.js +489 -0
  172. package/dist/src/services/app-logger.js.map +1 -0
  173. package/dist/src/services/log-buffer.d.ts +35 -0
  174. package/dist/src/services/log-buffer.d.ts.map +1 -0
  175. package/dist/src/services/log-buffer.js +87 -0
  176. package/dist/src/services/log-buffer.js.map +1 -0
  177. package/dist/src/services/log-event-manager.d.ts +32 -0
  178. package/dist/src/services/log-event-manager.d.ts.map +1 -0
  179. package/dist/src/services/log-event-manager.js +31 -0
  180. package/dist/src/services/log-event-manager.js.map +1 -0
  181. package/dist/src/services/log-file-manager.d.ts +46 -0
  182. package/dist/src/services/log-file-manager.d.ts.map +1 -0
  183. package/dist/src/services/log-file-manager.js +156 -0
  184. package/dist/src/services/log-file-manager.js.map +1 -0
  185. package/dist/src/services/log-level-strategy.d.ts +19 -0
  186. package/dist/src/services/log-level-strategy.d.ts.map +1 -0
  187. package/dist/src/services/log-level-strategy.js +40 -0
  188. package/dist/src/services/log-level-strategy.js.map +1 -0
  189. package/dist/src/services/log-manager-types.d.ts +117 -0
  190. package/dist/src/services/log-manager-types.d.ts.map +1 -0
  191. package/dist/src/services/log-manager-types.js +12 -0
  192. package/dist/src/services/log-manager-types.js.map +1 -0
  193. package/dist/src/services/log-manager.d.ts +8 -35
  194. package/dist/src/services/log-manager.d.ts.map +1 -1
  195. package/dist/src/services/log-manager.js +10 -870
  196. package/dist/src/services/log-manager.js.map +1 -1
  197. package/dist/src/services/log-preprocessor.d.ts +30 -0
  198. package/dist/src/services/log-preprocessor.d.ts.map +1 -0
  199. package/dist/src/services/log-preprocessor.js +65 -0
  200. package/dist/src/services/log-preprocessor.js.map +1 -0
  201. package/dist/src/services/process-log-integration.d.ts +7 -2
  202. package/dist/src/services/process-log-integration.d.ts.map +1 -1
  203. package/dist/src/services/process-log-integration.js.map +1 -1
  204. package/package.json +5 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disposable-base.d.ts","sourceRoot":"","sources":["../../../src/daemon/disposable-base.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAEnE;;GAEG;AACH,8BAAsB,cAAe,YAAW,WAAW;IACzD,OAAO,CAAC,QAAQ,CAAS;IACzB,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;;IAMpD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB9B;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,SAAS,CAAC,iBAAiB,IAAI,IAAI;IAMnC;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAE/C;;OAEG;IACH,SAAS,CAAC,cAAc,CACtB,QAAQ,EAAE,MAAM,IAAI,EACpB,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,cAAc;IAKjB;;OAEG;IACH,SAAS,CAAC,eAAe,CACvB,QAAQ,EAAE,MAAM,IAAI,EACpB,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,eAAe;IAKlB;;OAEG;IACH,SAAS,CAAC,oBAAoB,CAC5B,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,EAClC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,oBAAoB;CASxB"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Disposable Base Class
3
+ *
4
+ * Abstract base class implementing the Disposable pattern with
5
+ * integrated resource management.
6
+ */
7
+ import { ResourceManager } from './resource-manager.js';
8
+ /**
9
+ * Abstract base class implementing the Disposable pattern
10
+ */
11
+ export class DisposableBase {
12
+ disposed = false;
13
+ resourceManager;
14
+ constructor() {
15
+ this.resourceManager = new ResourceManager();
16
+ }
17
+ /**
18
+ * Dispose the object and all its resources
19
+ */
20
+ async dispose() {
21
+ if (this.disposed) {
22
+ return;
23
+ }
24
+ this.disposed = true;
25
+ try {
26
+ // Call the derived class cleanup method
27
+ await this.disposeCore();
28
+ }
29
+ finally {
30
+ // Always dispose the resource manager
31
+ await this.resourceManager.dispose();
32
+ }
33
+ }
34
+ /**
35
+ * Check if the object is disposed
36
+ */
37
+ isDisposed() {
38
+ return this.disposed;
39
+ }
40
+ /**
41
+ * Ensure the object is not disposed
42
+ */
43
+ ensureNotDisposed() {
44
+ if (this.disposed) {
45
+ throw new Error(`${this.constructor.name} has been disposed`);
46
+ }
47
+ }
48
+ /**
49
+ * Helper method to safely track timeouts
50
+ */
51
+ safeSetTimeout(callback, delay, metadata) {
52
+ this.ensureNotDisposed();
53
+ return this.resourceManager.trackTimeout(callback, delay, metadata);
54
+ }
55
+ /**
56
+ * Helper method to safely track intervals
57
+ */
58
+ safeSetInterval(callback, interval, metadata) {
59
+ this.ensureNotDisposed();
60
+ return this.resourceManager.trackInterval(callback, interval, metadata);
61
+ }
62
+ /**
63
+ * Helper method to safely track event listeners
64
+ */
65
+ safeAddEventListener(emitter, event, listener, metadata) {
66
+ this.ensureNotDisposed();
67
+ return this.resourceManager.trackEventListener(emitter, event, listener, metadata);
68
+ }
69
+ }
70
+ //# sourceMappingURL=disposable-base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disposable-base.js","sourceRoot":"","sources":["../../../src/daemon/disposable-base.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAKxD;;GAEG;AACH,MAAM,OAAgB,cAAc;IAC1B,QAAQ,GAAG,KAAK,CAAC;IACN,eAAe,CAAkB;IAEpD;QACE,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,IAAI,CAAC;YACH,wCAAwC;YACxC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAC3B,CAAC;gBAAS,CAAC;YACT,sCAAsC;YACtC,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;QACvC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;OAEG;IACO,iBAAiB;QACzB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,oBAAoB,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAOD;;OAEG;IACO,cAAc,CACtB,QAAoB,EACpB,KAAa,EACb,QAAkC;QAElC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACtE,CAAC;IAED;;OAEG;IACO,eAAe,CACvB,QAAoB,EACpB,QAAgB,EAChB,QAAkC;QAElC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC1E,CAAC;IAED;;OAEG;IACO,oBAAoB,CAC5B,OAAqB,EACrB,KAAa,EACb,QAAkC,EAClC,QAAkC;QAElC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAC5C,OAAO,EACP,KAAK,EACL,QAAQ,EACR,QAAQ,CACT,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Disposal Guard
3
+ *
4
+ * Utility class for preventing race conditions during disposal.
5
+ */
6
+ /**
7
+ * Utility class for preventing race conditions during disposal
8
+ */
9
+ export declare class DisposalGuard {
10
+ private disposing;
11
+ private disposed;
12
+ /**
13
+ * Execute an operation with disposal protection
14
+ */
15
+ executeWithGuard<T>(operation: () => Promise<T>): Promise<T>;
16
+ /**
17
+ * Execute disposal with race condition protection
18
+ */
19
+ executeDisposal(disposalFunc: () => Promise<void>): Promise<boolean>;
20
+ isDisposed(): boolean;
21
+ isDisposing(): boolean;
22
+ }
23
+ /**
24
+ * Create a new disposal guard instance
25
+ */
26
+ export declare function createDisposalGuard(): DisposalGuard;
27
+ //# sourceMappingURL=disposal-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disposal-guard.d.ts","sourceRoot":"","sources":["../../../src/daemon/disposal-guard.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAS;IAEzB;;OAEG;IACG,gBAAgB,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAYlE;;OAEG;IACG,eAAe,CAAC,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAqB1E,UAAU,IAAI,OAAO;IAIrB,WAAW,IAAI,OAAO;CAGvB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CAEnD"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Disposal Guard
3
+ *
4
+ * Utility class for preventing race conditions during disposal.
5
+ */
6
+ /**
7
+ * Utility class for preventing race conditions during disposal
8
+ */
9
+ export class DisposalGuard {
10
+ disposing = false;
11
+ disposed = false;
12
+ /**
13
+ * Execute an operation with disposal protection
14
+ */
15
+ async executeWithGuard(operation) {
16
+ if (this.disposed) {
17
+ throw new Error('Object has been disposed');
18
+ }
19
+ if (this.disposing) {
20
+ throw new Error('Object is being disposed');
21
+ }
22
+ return operation();
23
+ }
24
+ /**
25
+ * Execute disposal with race condition protection
26
+ */
27
+ async executeDisposal(disposalFunc) {
28
+ if (this.disposed) {
29
+ return false; // Already disposed
30
+ }
31
+ if (this.disposing) {
32
+ return false; // Already disposing
33
+ }
34
+ this.disposing = true;
35
+ try {
36
+ await disposalFunc();
37
+ this.disposed = true;
38
+ return true;
39
+ }
40
+ catch (error) {
41
+ this.disposing = false; // Reset on error
42
+ throw error;
43
+ }
44
+ }
45
+ isDisposed() {
46
+ return this.disposed;
47
+ }
48
+ isDisposing() {
49
+ return this.disposing;
50
+ }
51
+ }
52
+ /**
53
+ * Create a new disposal guard instance
54
+ */
55
+ export function createDisposalGuard() {
56
+ return new DisposalGuard();
57
+ }
58
+ //# sourceMappingURL=disposal-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disposal-guard.js","sourceRoot":"","sources":["../../../src/daemon/disposal-guard.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,OAAO,aAAa;IAChB,SAAS,GAAG,KAAK,CAAC;IAClB,QAAQ,GAAG,KAAK,CAAC;IAEzB;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAI,SAA2B;QACnD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,SAAS,EAAE,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,YAAiC;QACrD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,CAAC,mBAAmB;QACnC,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO,KAAK,CAAC,CAAC,oBAAoB;QACpC,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,IAAI,CAAC;YACH,MAAM,YAAY,EAAE,CAAC;YACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,iBAAiB;YACzC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,aAAa,EAAE,CAAC;AAC7B,CAAC"}
@@ -3,6 +3,9 @@
3
3
  *
4
4
  * ProcmanDaemonで受信したIPCコマンドを処理する責務を持つ。
5
5
  * 各コマンドの実装を提供し、適切なレスポンスを生成する。
6
+ *
7
+ * Process-related handlers are in ./process-command-handlers.ts
8
+ * Log-related handlers are in ./log-command-handlers.ts
6
9
  */
7
10
  import { EventEmitter } from 'events';
8
11
  import { ConfigLoader } from '../config/config-loader.js';
@@ -10,6 +13,7 @@ import { ProcessManager } from '../process-manager/process-manager.js';
10
13
  import { LogManager } from '../services/log-manager.js';
11
14
  import { AppConfig } from '../shared/config.js';
12
15
  import { CommandType, IPCMessage, IPCResponse } from '../shared/ipc.js';
16
+ import type { LogOptions } from '../shared/logs.js';
13
17
  import { LOG_STREAM_EVENTS } from '../shared/constants-streaming.js';
14
18
  /**
15
19
  * Daemon interface for command handler
@@ -33,7 +37,7 @@ export interface CommandHandlerEvents {
33
37
  [LOG_STREAM_EVENTS.START_LOG_STREAM]: (config: {
34
38
  messageId: string;
35
39
  target: string;
36
- options: any;
40
+ options?: LogOptions;
37
41
  connectionId?: string;
38
42
  }) => void;
39
43
  [LOG_STREAM_EVENTS.STOP_LOG_STREAM]: (config: {
@@ -54,39 +58,9 @@ export declare class IPCCommandHandler extends EventEmitter {
54
58
  /**
55
59
  * Handle incoming IPC message
56
60
  */
57
- handleMessage(message: IPCMessage, connection?: any): Promise<IPCResponse>;
58
- /**
59
- * Handle LOAD command
60
- */
61
- private handleLoadCommand;
62
- /**
63
- * Handle START command
64
- */
65
- private handleStartCommand;
66
- /**
67
- * Handle STOP command
68
- */
69
- private handleStopCommand;
70
- /**
71
- * Handle RESTART command
72
- */
73
- private handleRestartCommand;
74
- /**
75
- * Handle LIST command
76
- */
77
- private handleListCommand;
78
- /**
79
- * Handle LOG command
80
- */
81
- private handleLogCommand;
82
- /**
83
- * Handle CLEAR_LOG command
84
- */
85
- private handleClearLogCommand;
86
- /**
87
- * Handle EXIT command
88
- */
89
- private handleExitCommand;
61
+ handleMessage(message: IPCMessage, connection?: {
62
+ id?: string;
63
+ }): Promise<IPCResponse>;
90
64
  /**
91
65
  * Clean up all managed listeners
92
66
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ipc-command-handler.d.ts","sourceRoot":"","sources":["../../../src/daemon/ipc-command-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ipc-command-handler.d.ts","sourceRoot":"","sources":["../../../src/daemon/ipc-command-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EACL,WAAW,EACX,UAAU,EACV,WAAW,EASZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AA6BrE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,eAAe,IAAI,YAAY,GAAG,SAAS,CAAC;IAC5C,iBAAiB,IAAI,cAAc,GAAG,SAAS,CAAC;IAChD,aAAa,IAAI,UAAU,GAAG,SAAS,CAAC;IAExC,qBAAqB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,SAAS,IAAI,SAAS,EAAE,GAAG,SAAS,CAAC;IACrC,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACzD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,kBAAkB,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,mBAAmB,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,eAAe,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC1E,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE;QAC7C,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,UAAU,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,KAAK,IAAI,CAAC;IACX,CAAC,iBAAiB,CAAC,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAC9E;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,YAAY;IAIrC,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA4B;gBAExC,MAAM,EAAE,eAAe;IAM3C;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;OAEG;IACG,aAAa,CACjB,OAAO,EAAE,UAAU,EACnB,UAAU,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3B,OAAO,CAAC,WAAW,CAAC;IA0FvB;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAWrC;;OAEG;IACI,gBAAgB,IAAI;QACzB,gBAAgB,EAAE,MAAM,CAAC;QACzB,YAAY,EAAE,MAAM,CAAC;KACtB;IAcD;;OAEG;IACH,EAAE,CAAC,CAAC,SAAS,MAAM,oBAAoB,EACrC,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAChC,IAAI;IAIP,IAAI,CAAC,CAAC,SAAS,MAAM,oBAAoB,EACvC,KAAK,EAAE,CAAC,EACR,GAAG,IAAI,EAAE,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,GAC3C,OAAO;CAGX"}
@@ -3,10 +3,15 @@
3
3
  *
4
4
  * ProcmanDaemonで受信したIPCコマンドを処理する責務を持つ。
5
5
  * 各コマンドの実装を提供し、適切なレスポンスを生成する。
6
+ *
7
+ * Process-related handlers are in ./process-command-handlers.ts
8
+ * Log-related handlers are in ./log-command-handlers.ts
6
9
  */
7
10
  import { EventEmitter } from 'events';
8
11
  import { EventCleanupHelper } from '../utils/event-cleanup.js';
9
12
  import { LOG_STREAM_EVENTS } from '../shared/constants-streaming.js';
13
+ import { handleLoadCommand, handleStartCommand, handleStopCommand, handleRestartCommand, handleListCommand, handleExitCommand, } from './process-command-handlers.js';
14
+ import { handleLogCommand, handleClearLogCommand, } from './log-command-handlers.js';
10
15
  /**
11
16
  * Command type constants
12
17
  */
@@ -20,12 +25,6 @@ const COMMAND_TYPES = {
20
25
  CLEAR_LOG: 'clear-log',
21
26
  EXIT: 'exit',
22
27
  };
23
- /**
24
- * Timing constants
25
- */
26
- const TIMING_CONSTANTS = {
27
- EXIT_SHUTDOWN_DELAY_MS: 100,
28
- };
29
28
  /**
30
29
  * IPC command handler implementation
31
30
  */
@@ -47,36 +46,34 @@ export class IPCCommandHandler extends EventEmitter {
47
46
  /**
48
47
  * Handle incoming IPC message
49
48
  */
50
- async handleMessage(message,
51
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
52
- connection) {
49
+ async handleMessage(message, connection) {
53
50
  this.emit('command:received', message.type, message.id);
54
51
  try {
55
52
  let response;
56
53
  switch (message.type) {
57
54
  case COMMAND_TYPES.LOAD:
58
- response = await this.handleLoadCommand(message);
55
+ response = await handleLoadCommand(this.daemon, message);
59
56
  break;
60
57
  case COMMAND_TYPES.START:
61
- response = await this.handleStartCommand(message);
58
+ response = await handleStartCommand(this.daemon, message);
62
59
  break;
63
60
  case COMMAND_TYPES.STOP:
64
- response = await this.handleStopCommand(message);
61
+ response = await handleStopCommand(this.daemon, message);
65
62
  break;
66
63
  case COMMAND_TYPES.RESTART:
67
- response = await this.handleRestartCommand(message);
64
+ response = await handleRestartCommand(this.daemon, message);
68
65
  break;
69
66
  case COMMAND_TYPES.LIST:
70
- response = await this.handleListCommand(message);
67
+ response = await handleListCommand(this.daemon, message);
71
68
  break;
72
69
  case COMMAND_TYPES.LOG:
73
- response = await this.handleLogCommand(message, connection);
70
+ response = await handleLogCommand(this.daemon, this, message, connection);
74
71
  break;
75
72
  case COMMAND_TYPES.CLEAR_LOG:
76
- response = await this.handleClearLogCommand(message);
73
+ response = await handleClearLogCommand(this.daemon, message);
77
74
  break;
78
75
  case COMMAND_TYPES.EXIT:
79
- response = await this.handleExitCommand(message);
76
+ response = await handleExitCommand(this.daemon, message);
80
77
  break;
81
78
  default:
82
79
  throw new Error(`Unknown command type: ${message.type}`);
@@ -100,351 +97,6 @@ export class IPCCommandHandler extends EventEmitter {
100
97
  };
101
98
  }
102
99
  }
103
- /**
104
- * Handle LOAD command
105
- */
106
- async handleLoadCommand(message) {
107
- const { configPath } = message.payload;
108
- await this.daemon.loadConfig(configPath);
109
- const config = this.daemon.getConfig();
110
- const response = {
111
- config: { apps: config || [] },
112
- appsCount: config?.length || 0,
113
- };
114
- return {
115
- id: message.id,
116
- requestId: message.id,
117
- type: COMMAND_TYPES.LOAD,
118
- timestamp: Date.now(),
119
- success: true,
120
- data: response,
121
- };
122
- }
123
- /**
124
- * Handle START command
125
- */
126
- async handleStartCommand(message) {
127
- const { targets } = message.payload;
128
- const processManager = this.daemon.getProcessManager();
129
- if (!processManager) {
130
- throw new Error('Process manager not initialized');
131
- }
132
- // Determine which processes to start
133
- let targetProcesses = [];
134
- if (targets && targets.length > 0) {
135
- // Check if targets are namespace patterns (e.g., "namespace:*")
136
- targetProcesses = targets.flatMap((target) => {
137
- if (target.includes(':')) {
138
- const [namespace] = target.split(':');
139
- return processManager.getProcessNamesByNamespace(namespace);
140
- }
141
- return target;
142
- });
143
- }
144
- else {
145
- // Start all processes
146
- targetProcesses = processManager.getProcessNames();
147
- }
148
- if (targetProcesses.length === 0) {
149
- throw new Error('No processes found to start');
150
- }
151
- // Start processes
152
- const batchResults = await processManager.startProcesses(targetProcesses);
153
- // Count successes and failures
154
- const started = batchResults
155
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
156
- .filter((r) => r.success)
157
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
158
- .map((r) => r.name);
159
- const alreadyRunning = [];
160
- const failed = batchResults
161
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
162
- .filter((r) => !r.success)
163
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
164
- .map((r) => ({
165
- name: r.name,
166
- error: r.error || 'Unknown error',
167
- }));
168
- const response = {
169
- started,
170
- alreadyRunning,
171
- failed,
172
- };
173
- return {
174
- id: message.id,
175
- requestId: message.id,
176
- type: COMMAND_TYPES.START,
177
- timestamp: Date.now(),
178
- success: true,
179
- data: response,
180
- };
181
- }
182
- /**
183
- * Handle STOP command
184
- */
185
- async handleStopCommand(message) {
186
- const { targets } = message.payload;
187
- const processManager = this.daemon.getProcessManager();
188
- if (!processManager) {
189
- throw new Error('Process manager not initialized');
190
- }
191
- // Determine which processes to stop
192
- let targetProcesses = [];
193
- if (targets && targets.length > 0) {
194
- targetProcesses = targets.flatMap((target) => {
195
- if (target.includes(':')) {
196
- const [namespace] = target.split(':');
197
- return processManager.getProcessNamesByNamespace(namespace);
198
- }
199
- return target;
200
- });
201
- }
202
- else {
203
- // Stop all processes
204
- targetProcesses = processManager.getProcessNames();
205
- }
206
- if (targetProcesses.length === 0) {
207
- throw new Error('No processes found to stop');
208
- }
209
- // Stop processes
210
- const batchResults = await processManager.stopProcesses(targetProcesses);
211
- // Count successes and failures
212
- const stopped = batchResults
213
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
214
- .filter((r) => r.success)
215
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
216
- .map((r) => r.name);
217
- const alreadyStopped = [];
218
- const failed = batchResults
219
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
220
- .filter((r) => !r.success)
221
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
222
- .map((r) => ({
223
- name: r.name,
224
- error: r.error || 'Unknown error',
225
- }));
226
- const response = {
227
- stopped,
228
- alreadyStopped,
229
- failed,
230
- };
231
- return {
232
- id: message.id,
233
- requestId: message.id,
234
- type: COMMAND_TYPES.STOP,
235
- timestamp: Date.now(),
236
- success: true,
237
- data: response,
238
- };
239
- }
240
- /**
241
- * Handle RESTART command
242
- */
243
- async handleRestartCommand(message) {
244
- const { targets } = message.payload;
245
- const processManager = this.daemon.getProcessManager();
246
- if (!processManager) {
247
- throw new Error('Process manager not initialized');
248
- }
249
- // Determine which processes to restart
250
- let targetProcesses = [];
251
- if (targets && targets.length > 0) {
252
- targetProcesses = targets.flatMap((target) => {
253
- if (target.includes(':')) {
254
- const [namespace] = target.split(':');
255
- return processManager.getProcessNamesByNamespace(namespace);
256
- }
257
- return target;
258
- });
259
- }
260
- else {
261
- // Restart all processes
262
- targetProcesses = processManager.getProcessNames();
263
- }
264
- if (targetProcesses.length === 0) {
265
- throw new Error('No processes found to restart');
266
- }
267
- // Restart processes
268
- const batchResults = await processManager.restartProcesses(targetProcesses);
269
- // Count successes and failures
270
- const restarted = batchResults
271
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
272
- .filter((r) => r.success)
273
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
274
- .map((r) => r.name);
275
- const failed = batchResults
276
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
277
- .filter((r) => !r.success)
278
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
279
- .map((r) => ({
280
- name: r.name,
281
- error: r.error || 'Unknown error',
282
- }));
283
- const response = {
284
- restarted,
285
- failed,
286
- };
287
- return {
288
- id: message.id,
289
- requestId: message.id,
290
- type: COMMAND_TYPES.RESTART,
291
- timestamp: Date.now(),
292
- success: true,
293
- data: response,
294
- };
295
- }
296
- /**
297
- * Handle LIST command
298
- */
299
- async handleListCommand(message) {
300
- const processes = await this.daemon.getAllProcessStatuses();
301
- const response = {
302
- configFile: '<unknown>',
303
- daemonUptime: process.uptime(),
304
- processes,
305
- };
306
- return {
307
- id: message.id,
308
- requestId: message.id,
309
- type: COMMAND_TYPES.LIST,
310
- timestamp: Date.now(),
311
- success: true,
312
- data: response,
313
- };
314
- }
315
- /**
316
- * Handle LOG command
317
- */
318
- async handleLogCommand(message,
319
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
320
- connection) {
321
- const { target, options } = message.payload;
322
- const logManager = this.daemon.getLogManager();
323
- if (!logManager) {
324
- throw new Error('Log manager not initialized');
325
- }
326
- // Check if streaming is requested
327
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
328
- const follow = options?.follow;
329
- if (follow) {
330
- // ストリーミングモードの場合、接続情報を保存してストリーミングを開始
331
- // 注: 実際のストリーミングはIPCサーバー側で処理する必要がある
332
- // ここでは通常のレスポンスを返し、別途ストリーミングイベントを送信する
333
- // ストリーミング開始のマーカーを含むレスポンスを返す
334
- const response = {
335
- entries: [],
336
- total: 0,
337
- streaming: true, // ストリーミングモードであることを示すフラグ
338
- };
339
- // ストリーミングの設定をイベントとして発行
340
- // これにより、IPCサーバーがストリーミングを開始できる
341
- this.emit(LOG_STREAM_EVENTS.START_LOG_STREAM, {
342
- messageId: message.id,
343
- target,
344
- options,
345
- connectionId: connection?.id, // Pass connection ID for specific client streaming
346
- });
347
- return {
348
- id: message.id,
349
- requestId: message.id,
350
- type: COMMAND_TYPES.LOG,
351
- timestamp: Date.now(),
352
- success: true,
353
- data: response,
354
- };
355
- }
356
- // 通常モード(非ストリーミング)
357
- const logOptions = {
358
- lines: options?.lines || 100,
359
- };
360
- const logs = await logManager.readLogs(target, logOptions);
361
- const response = {
362
- entries: logs,
363
- total: logs.length,
364
- };
365
- return {
366
- id: message.id,
367
- requestId: message.id,
368
- type: COMMAND_TYPES.LOG,
369
- timestamp: Date.now(),
370
- success: true,
371
- data: response,
372
- };
373
- }
374
- /**
375
- * Handle CLEAR_LOG command
376
- */
377
- async handleClearLogCommand(message) {
378
- const { target } = message.payload;
379
- const logManager = this.daemon.getLogManager();
380
- const processManager = this.daemon.getProcessManager();
381
- if (!logManager) {
382
- throw new Error('Log manager not initialized');
383
- }
384
- // Determine which logs to clear
385
- let targetProcesses = [];
386
- if (target) {
387
- if (target.includes(':')) {
388
- const [namespace] = target.split(':');
389
- targetProcesses =
390
- processManager?.getProcessNamesByNamespace(namespace) || [];
391
- }
392
- else {
393
- targetProcesses = [target];
394
- }
395
- }
396
- else {
397
- targetProcesses = processManager?.getProcessNames() || [];
398
- }
399
- if (targetProcesses.length === 0) {
400
- throw new Error('No processes found to clear logs');
401
- }
402
- // Clear logs for each process
403
- for (const processName of targetProcesses) {
404
- await logManager.clearLogs(processName);
405
- }
406
- const response = {
407
- cleared: targetProcesses,
408
- };
409
- return {
410
- id: message.id,
411
- requestId: message.id,
412
- type: COMMAND_TYPES.CLEAR_LOG,
413
- timestamp: Date.now(),
414
- success: true,
415
- data: response,
416
- };
417
- }
418
- /**
419
- * Handle EXIT command
420
- */
421
- async handleExitCommand(message) {
422
- const processManager = this.daemon.getProcessManager();
423
- const processCount = processManager?.getProcessNames().length || 0;
424
- const response = {
425
- processCount,
426
- };
427
- // Schedule daemon shutdown after sending response
428
- setTimeout(() => {
429
- this.daemon
430
- .stop()
431
- .then(() => {
432
- process.exit(0);
433
- })
434
- .catch((error) => {
435
- console.error('Error during daemon shutdown:', error);
436
- process.exit(1);
437
- });
438
- }, TIMING_CONSTANTS.EXIT_SHUTDOWN_DELAY_MS);
439
- return {
440
- id: message.id,
441
- requestId: message.id,
442
- type: COMMAND_TYPES.EXIT,
443
- timestamp: Date.now(),
444
- success: true,
445
- data: response,
446
- };
447
- }
448
100
  /**
449
101
  * Clean up all managed listeners
450
102
  */