@masuidrive/procman 0.1.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 (315) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +149 -0
  3. package/dist/src/cli/commands/clear-log.d.ts +10 -0
  4. package/dist/src/cli/commands/clear-log.d.ts.map +1 -0
  5. package/dist/src/cli/commands/clear-log.js +77 -0
  6. package/dist/src/cli/commands/clear-log.js.map +1 -0
  7. package/dist/src/cli/commands/exit.d.ts +10 -0
  8. package/dist/src/cli/commands/exit.d.ts.map +1 -0
  9. package/dist/src/cli/commands/exit.js +65 -0
  10. package/dist/src/cli/commands/exit.js.map +1 -0
  11. package/dist/src/cli/commands/help.d.ts +10 -0
  12. package/dist/src/cli/commands/help.d.ts.map +1 -0
  13. package/dist/src/cli/commands/help.js +340 -0
  14. package/dist/src/cli/commands/help.js.map +1 -0
  15. package/dist/src/cli/commands/list.d.ts +11 -0
  16. package/dist/src/cli/commands/list.d.ts.map +1 -0
  17. package/dist/src/cli/commands/list.js +130 -0
  18. package/dist/src/cli/commands/list.js.map +1 -0
  19. package/dist/src/cli/commands/load.d.ts +11 -0
  20. package/dist/src/cli/commands/load.d.ts.map +1 -0
  21. package/dist/src/cli/commands/load.js +250 -0
  22. package/dist/src/cli/commands/load.js.map +1 -0
  23. package/dist/src/cli/commands/log.d.ts +18 -0
  24. package/dist/src/cli/commands/log.d.ts.map +1 -0
  25. package/dist/src/cli/commands/log.js +282 -0
  26. package/dist/src/cli/commands/log.js.map +1 -0
  27. package/dist/src/cli/commands/restart.d.ts +11 -0
  28. package/dist/src/cli/commands/restart.d.ts.map +1 -0
  29. package/dist/src/cli/commands/restart.js +99 -0
  30. package/dist/src/cli/commands/restart.js.map +1 -0
  31. package/dist/src/cli/commands/start.d.ts +11 -0
  32. package/dist/src/cli/commands/start.d.ts.map +1 -0
  33. package/dist/src/cli/commands/start.js +105 -0
  34. package/dist/src/cli/commands/start.js.map +1 -0
  35. package/dist/src/cli/commands/stop.d.ts +12 -0
  36. package/dist/src/cli/commands/stop.d.ts.map +1 -0
  37. package/dist/src/cli/commands/stop.js +105 -0
  38. package/dist/src/cli/commands/stop.js.map +1 -0
  39. package/dist/src/cli/index.d.ts +3 -0
  40. package/dist/src/cli/index.d.ts.map +1 -0
  41. package/dist/src/cli/index.js +28 -0
  42. package/dist/src/cli/index.js.map +1 -0
  43. package/dist/src/cli/parser.d.ts +14 -0
  44. package/dist/src/cli/parser.d.ts.map +1 -0
  45. package/dist/src/cli/parser.js +131 -0
  46. package/dist/src/cli/parser.js.map +1 -0
  47. package/dist/src/cli/signal-handler.d.ts +51 -0
  48. package/dist/src/cli/signal-handler.d.ts.map +1 -0
  49. package/dist/src/cli/signal-handler.js +129 -0
  50. package/dist/src/cli/signal-handler.js.map +1 -0
  51. package/dist/src/cli/utils/error-handler.d.ts +39 -0
  52. package/dist/src/cli/utils/error-handler.d.ts.map +1 -0
  53. package/dist/src/cli/utils/error-handler.js +200 -0
  54. package/dist/src/cli/utils/error-handler.js.map +1 -0
  55. package/dist/src/cli/utils/error-utils.d.ts +16 -0
  56. package/dist/src/cli/utils/error-utils.d.ts.map +1 -0
  57. package/dist/src/cli/utils/error-utils.js +48 -0
  58. package/dist/src/cli/utils/error-utils.js.map +1 -0
  59. package/dist/src/cli/utils/ipc-client.d.ts +80 -0
  60. package/dist/src/cli/utils/ipc-client.d.ts.map +1 -0
  61. package/dist/src/cli/utils/ipc-client.js +275 -0
  62. package/dist/src/cli/utils/ipc-client.js.map +1 -0
  63. package/dist/src/config/config-loader.d.ts +74 -0
  64. package/dist/src/config/config-loader.d.ts.map +1 -0
  65. package/dist/src/config/config-loader.js +229 -0
  66. package/dist/src/config/config-loader.js.map +1 -0
  67. package/dist/src/config/config-normalizer.d.ts +135 -0
  68. package/dist/src/config/config-normalizer.d.ts.map +1 -0
  69. package/dist/src/config/config-normalizer.js +309 -0
  70. package/dist/src/config/config-normalizer.js.map +1 -0
  71. package/dist/src/config/config-reporter.d.ts +183 -0
  72. package/dist/src/config/config-reporter.d.ts.map +1 -0
  73. package/dist/src/config/config-reporter.js +311 -0
  74. package/dist/src/config/config-reporter.js.map +1 -0
  75. package/dist/src/config/config-validator.d.ts +163 -0
  76. package/dist/src/config/config-validator.d.ts.map +1 -0
  77. package/dist/src/config/config-validator.js +489 -0
  78. package/dist/src/config/config-validator.js.map +1 -0
  79. package/dist/src/config/config-watcher.d.ts +161 -0
  80. package/dist/src/config/config-watcher.d.ts.map +1 -0
  81. package/dist/src/config/config-watcher.js +245 -0
  82. package/dist/src/config/config-watcher.js.map +1 -0
  83. package/dist/src/config/index.d.ts +36 -0
  84. package/dist/src/config/index.d.ts.map +1 -0
  85. package/dist/src/config/index.js +41 -0
  86. package/dist/src/config/index.js.map +1 -0
  87. package/dist/src/config/secure-config-loader.d.ts +77 -0
  88. package/dist/src/config/secure-config-loader.d.ts.map +1 -0
  89. package/dist/src/config/secure-config-loader.js +326 -0
  90. package/dist/src/config/secure-config-loader.js.map +1 -0
  91. package/dist/src/daemon/base-socket-connection.d.ts +66 -0
  92. package/dist/src/daemon/base-socket-connection.d.ts.map +1 -0
  93. package/dist/src/daemon/base-socket-connection.js +192 -0
  94. package/dist/src/daemon/base-socket-connection.js.map +1 -0
  95. package/dist/src/daemon/component-manager.d.ts +180 -0
  96. package/dist/src/daemon/component-manager.d.ts.map +1 -0
  97. package/dist/src/daemon/component-manager.js +794 -0
  98. package/dist/src/daemon/component-manager.js.map +1 -0
  99. package/dist/src/daemon/crash-recovery.d.ts +71 -0
  100. package/dist/src/daemon/crash-recovery.d.ts.map +1 -0
  101. package/dist/src/daemon/crash-recovery.js +282 -0
  102. package/dist/src/daemon/crash-recovery.js.map +1 -0
  103. package/dist/src/daemon/daemon-main.d.ts +18 -0
  104. package/dist/src/daemon/daemon-main.d.ts.map +1 -0
  105. package/dist/src/daemon/daemon-main.js +160 -0
  106. package/dist/src/daemon/daemon-main.js.map +1 -0
  107. package/dist/src/daemon/daemon-state-manager.d.ts +111 -0
  108. package/dist/src/daemon/daemon-state-manager.d.ts.map +1 -0
  109. package/dist/src/daemon/daemon-state-manager.js +194 -0
  110. package/dist/src/daemon/daemon-state-manager.js.map +1 -0
  111. package/dist/src/daemon/data-directory.d.ts +51 -0
  112. package/dist/src/daemon/data-directory.d.ts.map +1 -0
  113. package/dist/src/daemon/data-directory.js +136 -0
  114. package/dist/src/daemon/data-directory.js.map +1 -0
  115. package/dist/src/daemon/index.d.ts +20 -0
  116. package/dist/src/daemon/index.d.ts.map +1 -0
  117. package/dist/src/daemon/index.js +24 -0
  118. package/dist/src/daemon/index.js.map +1 -0
  119. package/dist/src/daemon/ipc-client-base.d.ts +153 -0
  120. package/dist/src/daemon/ipc-client-base.d.ts.map +1 -0
  121. package/dist/src/daemon/ipc-client-base.js +476 -0
  122. package/dist/src/daemon/ipc-client-base.js.map +1 -0
  123. package/dist/src/daemon/ipc-command-handler.d.ts +107 -0
  124. package/dist/src/daemon/ipc-command-handler.d.ts.map +1 -0
  125. package/dist/src/daemon/ipc-command-handler.js +483 -0
  126. package/dist/src/daemon/ipc-command-handler.js.map +1 -0
  127. package/dist/src/daemon/ipc-factory.d.ts +92 -0
  128. package/dist/src/daemon/ipc-factory.d.ts.map +1 -0
  129. package/dist/src/daemon/ipc-factory.js +210 -0
  130. package/dist/src/daemon/ipc-factory.js.map +1 -0
  131. package/dist/src/daemon/ipc-server-base.d.ts +158 -0
  132. package/dist/src/daemon/ipc-server-base.d.ts.map +1 -0
  133. package/dist/src/daemon/ipc-server-base.js +491 -0
  134. package/dist/src/daemon/ipc-server-base.js.map +1 -0
  135. package/dist/src/daemon/message-protocol.d.ts +132 -0
  136. package/dist/src/daemon/message-protocol.d.ts.map +1 -0
  137. package/dist/src/daemon/message-protocol.js +252 -0
  138. package/dist/src/daemon/message-protocol.js.map +1 -0
  139. package/dist/src/daemon/named-pipe-client.d.ts +61 -0
  140. package/dist/src/daemon/named-pipe-client.d.ts.map +1 -0
  141. package/dist/src/daemon/named-pipe-client.js +221 -0
  142. package/dist/src/daemon/named-pipe-client.js.map +1 -0
  143. package/dist/src/daemon/named-pipe-server.d.ts +40 -0
  144. package/dist/src/daemon/named-pipe-server.d.ts.map +1 -0
  145. package/dist/src/daemon/named-pipe-server.js +102 -0
  146. package/dist/src/daemon/named-pipe-server.js.map +1 -0
  147. package/dist/src/daemon/orphan-detector.d.ts +66 -0
  148. package/dist/src/daemon/orphan-detector.d.ts.map +1 -0
  149. package/dist/src/daemon/orphan-detector.js +208 -0
  150. package/dist/src/daemon/orphan-detector.js.map +1 -0
  151. package/dist/src/daemon/pid-manager.d.ts +49 -0
  152. package/dist/src/daemon/pid-manager.d.ts.map +1 -0
  153. package/dist/src/daemon/pid-manager.js +110 -0
  154. package/dist/src/daemon/pid-manager.js.map +1 -0
  155. package/dist/src/daemon/procman-daemon.d.ts +188 -0
  156. package/dist/src/daemon/procman-daemon.d.ts.map +1 -0
  157. package/dist/src/daemon/procman-daemon.js +802 -0
  158. package/dist/src/daemon/procman-daemon.js.map +1 -0
  159. package/dist/src/daemon/reconnection-system.d.ts +113 -0
  160. package/dist/src/daemon/reconnection-system.d.ts.map +1 -0
  161. package/dist/src/daemon/reconnection-system.js +223 -0
  162. package/dist/src/daemon/reconnection-system.js.map +1 -0
  163. package/dist/src/daemon/resource-manager.d.ts +204 -0
  164. package/dist/src/daemon/resource-manager.d.ts.map +1 -0
  165. package/dist/src/daemon/resource-manager.js +423 -0
  166. package/dist/src/daemon/resource-manager.js.map +1 -0
  167. package/dist/src/daemon/signal-handler.d.ts +58 -0
  168. package/dist/src/daemon/signal-handler.d.ts.map +1 -0
  169. package/dist/src/daemon/signal-handler.js +142 -0
  170. package/dist/src/daemon/signal-handler.js.map +1 -0
  171. package/dist/src/daemon/simple-resource-manager.d.ts +95 -0
  172. package/dist/src/daemon/simple-resource-manager.d.ts.map +1 -0
  173. package/dist/src/daemon/simple-resource-manager.js +180 -0
  174. package/dist/src/daemon/simple-resource-manager.js.map +1 -0
  175. package/dist/src/daemon/unix-socket-client.d.ts +69 -0
  176. package/dist/src/daemon/unix-socket-client.d.ts.map +1 -0
  177. package/dist/src/daemon/unix-socket-client.js +313 -0
  178. package/dist/src/daemon/unix-socket-client.js.map +1 -0
  179. package/dist/src/daemon/unix-socket-server.d.ts +61 -0
  180. package/dist/src/daemon/unix-socket-server.d.ts.map +1 -0
  181. package/dist/src/daemon/unix-socket-server.js +262 -0
  182. package/dist/src/daemon/unix-socket-server.js.map +1 -0
  183. package/dist/src/daemon/zombie-reaper.d.ts +83 -0
  184. package/dist/src/daemon/zombie-reaper.d.ts.map +1 -0
  185. package/dist/src/daemon/zombie-reaper.js +278 -0
  186. package/dist/src/daemon/zombie-reaper.js.map +1 -0
  187. package/dist/src/process-manager/index.d.ts +13 -0
  188. package/dist/src/process-manager/index.d.ts.map +1 -0
  189. package/dist/src/process-manager/index.js +11 -0
  190. package/dist/src/process-manager/index.js.map +1 -0
  191. package/dist/src/process-manager/interfaces/index.d.ts +31 -0
  192. package/dist/src/process-manager/interfaces/index.d.ts.map +1 -0
  193. package/dist/src/process-manager/interfaces/index.js +14 -0
  194. package/dist/src/process-manager/interfaces/index.js.map +1 -0
  195. package/dist/src/process-manager/interfaces/process-group.d.ts +200 -0
  196. package/dist/src/process-manager/interfaces/process-group.d.ts.map +1 -0
  197. package/dist/src/process-manager/interfaces/process-group.js +10 -0
  198. package/dist/src/process-manager/interfaces/process-group.js.map +1 -0
  199. package/dist/src/process-manager/interfaces/process-lifecycle.d.ts +97 -0
  200. package/dist/src/process-manager/interfaces/process-lifecycle.d.ts.map +1 -0
  201. package/dist/src/process-manager/interfaces/process-lifecycle.js +10 -0
  202. package/dist/src/process-manager/interfaces/process-lifecycle.js.map +1 -0
  203. package/dist/src/process-manager/interfaces/process-monitor.d.ts +118 -0
  204. package/dist/src/process-manager/interfaces/process-monitor.d.ts.map +1 -0
  205. package/dist/src/process-manager/interfaces/process-monitor.js +10 -0
  206. package/dist/src/process-manager/interfaces/process-monitor.js.map +1 -0
  207. package/dist/src/process-manager/interfaces/process-persistence.d.ts +125 -0
  208. package/dist/src/process-manager/interfaces/process-persistence.d.ts.map +1 -0
  209. package/dist/src/process-manager/interfaces/process-persistence.js +10 -0
  210. package/dist/src/process-manager/interfaces/process-persistence.js.map +1 -0
  211. package/dist/src/process-manager/managed-process-info.d.ts +307 -0
  212. package/dist/src/process-manager/managed-process-info.d.ts.map +1 -0
  213. package/dist/src/process-manager/managed-process-info.js +650 -0
  214. package/dist/src/process-manager/managed-process-info.js.map +1 -0
  215. package/dist/src/process-manager/process-group-manager.d.ts +103 -0
  216. package/dist/src/process-manager/process-group-manager.d.ts.map +1 -0
  217. package/dist/src/process-manager/process-group-manager.js +400 -0
  218. package/dist/src/process-manager/process-group-manager.js.map +1 -0
  219. package/dist/src/process-manager/process-lifecycle-manager.d.ts +68 -0
  220. package/dist/src/process-manager/process-lifecycle-manager.d.ts.map +1 -0
  221. package/dist/src/process-manager/process-lifecycle-manager.js +372 -0
  222. package/dist/src/process-manager/process-lifecycle-manager.js.map +1 -0
  223. package/dist/src/process-manager/process-manager.d.ts +296 -0
  224. package/dist/src/process-manager/process-manager.d.ts.map +1 -0
  225. package/dist/src/process-manager/process-manager.js +659 -0
  226. package/dist/src/process-manager/process-manager.js.map +1 -0
  227. package/dist/src/process-manager/process-monitor.d.ts +95 -0
  228. package/dist/src/process-manager/process-monitor.d.ts.map +1 -0
  229. package/dist/src/process-manager/process-monitor.js +357 -0
  230. package/dist/src/process-manager/process-monitor.js.map +1 -0
  231. package/dist/src/process-manager/process-persistence.d.ts +68 -0
  232. package/dist/src/process-manager/process-persistence.d.ts.map +1 -0
  233. package/dist/src/process-manager/process-persistence.js +364 -0
  234. package/dist/src/process-manager/process-persistence.js.map +1 -0
  235. package/dist/src/process-manager/utils/mutex.d.ts +82 -0
  236. package/dist/src/process-manager/utils/mutex.d.ts.map +1 -0
  237. package/dist/src/process-manager/utils/mutex.js +172 -0
  238. package/dist/src/process-manager/utils/mutex.js.map +1 -0
  239. package/dist/src/services/index.d.ts +8 -0
  240. package/dist/src/services/index.d.ts.map +1 -0
  241. package/dist/src/services/index.js +8 -0
  242. package/dist/src/services/index.js.map +1 -0
  243. package/dist/src/services/log-manager-config.d.ts +65 -0
  244. package/dist/src/services/log-manager-config.d.ts.map +1 -0
  245. package/dist/src/services/log-manager-config.js +145 -0
  246. package/dist/src/services/log-manager-config.js.map +1 -0
  247. package/dist/src/services/log-manager-factory.d.ts +134 -0
  248. package/dist/src/services/log-manager-factory.d.ts.map +1 -0
  249. package/dist/src/services/log-manager-factory.js +203 -0
  250. package/dist/src/services/log-manager-factory.js.map +1 -0
  251. package/dist/src/services/log-manager.d.ts +170 -0
  252. package/dist/src/services/log-manager.d.ts.map +1 -0
  253. package/dist/src/services/log-manager.js +1199 -0
  254. package/dist/src/services/log-manager.js.map +1 -0
  255. package/dist/src/services/log-path-validator.d.ts +121 -0
  256. package/dist/src/services/log-path-validator.d.ts.map +1 -0
  257. package/dist/src/services/log-path-validator.js +302 -0
  258. package/dist/src/services/log-path-validator.js.map +1 -0
  259. package/dist/src/services/process-log-integration.d.ts +62 -0
  260. package/dist/src/services/process-log-integration.d.ts.map +1 -0
  261. package/dist/src/services/process-log-integration.js +157 -0
  262. package/dist/src/services/process-log-integration.js.map +1 -0
  263. package/dist/src/shared/config.d.ts +67 -0
  264. package/dist/src/shared/config.d.ts.map +1 -0
  265. package/dist/src/shared/config.js +92 -0
  266. package/dist/src/shared/config.js.map +1 -0
  267. package/dist/src/shared/constants-streaming.d.ts +39 -0
  268. package/dist/src/shared/constants-streaming.d.ts.map +1 -0
  269. package/dist/src/shared/constants-streaming.js +39 -0
  270. package/dist/src/shared/constants-streaming.js.map +1 -0
  271. package/dist/src/shared/constants.d.ts +60 -0
  272. package/dist/src/shared/constants.d.ts.map +1 -0
  273. package/dist/src/shared/constants.js +71 -0
  274. package/dist/src/shared/constants.js.map +1 -0
  275. package/dist/src/shared/errors.d.ts +70 -0
  276. package/dist/src/shared/errors.d.ts.map +1 -0
  277. package/dist/src/shared/errors.js +101 -0
  278. package/dist/src/shared/errors.js.map +1 -0
  279. package/dist/src/shared/index.d.ts +14 -0
  280. package/dist/src/shared/index.d.ts.map +1 -0
  281. package/dist/src/shared/index.js +22 -0
  282. package/dist/src/shared/index.js.map +1 -0
  283. package/dist/src/shared/ipc.d.ts +402 -0
  284. package/dist/src/shared/ipc.d.ts.map +1 -0
  285. package/dist/src/shared/ipc.js +85 -0
  286. package/dist/src/shared/ipc.js.map +1 -0
  287. package/dist/src/shared/logger.d.ts +38 -0
  288. package/dist/src/shared/logger.d.ts.map +1 -0
  289. package/dist/src/shared/logger.js +139 -0
  290. package/dist/src/shared/logger.js.map +1 -0
  291. package/dist/src/shared/logs.d.ts +53 -0
  292. package/dist/src/shared/logs.d.ts.map +1 -0
  293. package/dist/src/shared/logs.js +26 -0
  294. package/dist/src/shared/logs.js.map +1 -0
  295. package/dist/src/shared/process.d.ts +102 -0
  296. package/dist/src/shared/process.d.ts.map +1 -0
  297. package/dist/src/shared/process.js +55 -0
  298. package/dist/src/shared/process.js.map +1 -0
  299. package/dist/src/shared/types.d.ts +15 -0
  300. package/dist/src/shared/types.d.ts.map +1 -0
  301. package/dist/src/shared/types.js +8 -0
  302. package/dist/src/shared/types.js.map +1 -0
  303. package/dist/src/types/index.d.ts +19 -0
  304. package/dist/src/types/index.d.ts.map +1 -0
  305. package/dist/src/types/index.js +5 -0
  306. package/dist/src/types/index.js.map +1 -0
  307. package/dist/src/utils/event-cleanup.d.ts +30 -0
  308. package/dist/src/utils/event-cleanup.d.ts.map +1 -0
  309. package/dist/src/utils/event-cleanup.js +32 -0
  310. package/dist/src/utils/event-cleanup.js.map +1 -0
  311. package/dist/src/utils/memory/memory-monitor.d.ts +126 -0
  312. package/dist/src/utils/memory/memory-monitor.d.ts.map +1 -0
  313. package/dist/src/utils/memory/memory-monitor.js +246 -0
  314. package/dist/src/utils/memory/memory-monitor.js.map +1 -0
  315. package/package.json +74 -0
@@ -0,0 +1,364 @@
1
+ /**
2
+ * ProcessPersistence - Handles process state persistence
3
+ *
4
+ * This class is responsible for:
5
+ * - Saving and loading process state to/from persistent storage
6
+ * - Atomic file operations with backup management
7
+ * - File I/O operations with proper permissions
8
+ * - State serialization and deserialization
9
+ */
10
+ import { EventEmitter } from 'events';
11
+ import { promises as fs } from 'fs';
12
+ import * as path from 'path';
13
+ import { DEBOUNCE_SAVE_STATE_DELAY } from '../shared/constants.js';
14
+ /**
15
+ * Type guard to check if an error has a code property
16
+ */
17
+ function hasErrorCode(error) {
18
+ return ('code' in error &&
19
+ typeof error.code === 'string');
20
+ }
21
+ /**
22
+ * Debounce function for state saving
23
+ */
24
+ function createDebounce(func, delay) {
25
+ let timeoutId = null;
26
+ const trigger = () => {
27
+ if (timeoutId) {
28
+ clearTimeout(timeoutId);
29
+ }
30
+ timeoutId = setTimeout(() => {
31
+ func().catch((error) => {
32
+ console.error('[ProcessPersistence] Debounced save error:', error);
33
+ });
34
+ }, delay);
35
+ };
36
+ const cleanup = () => {
37
+ if (timeoutId) {
38
+ clearTimeout(timeoutId);
39
+ timeoutId = null;
40
+ }
41
+ };
42
+ return { trigger, cleanup };
43
+ }
44
+ /**
45
+ * ProcessPersistence implementation
46
+ */
47
+ export class ProcessPersistenceImpl extends EventEmitter {
48
+ processes;
49
+ config;
50
+ debouncedSave = null;
51
+ isInitialized = false;
52
+ constructor(processes) {
53
+ super();
54
+ this.processes = processes;
55
+ this.config = {
56
+ filePath: '',
57
+ saveDelay: DEBOUNCE_SAVE_STATE_DELAY,
58
+ enableBackup: true,
59
+ };
60
+ }
61
+ /**
62
+ * Initialize persistence with configuration
63
+ */
64
+ initialize(config) {
65
+ this.config = { ...this.config, ...config };
66
+ this.isInitialized = true;
67
+ // Setup debounced save
68
+ this.debouncedSave = createDebounce(async () => {
69
+ await this.forceSaveState(this.collectProcessStates());
70
+ }, this.config.saveDelay);
71
+ }
72
+ /**
73
+ * Save current process state to persistent storage
74
+ */
75
+ async saveState(processes) {
76
+ if (!this.isInitialized) {
77
+ return {
78
+ success: false,
79
+ error: 'Persistence not initialized',
80
+ };
81
+ }
82
+ if (this.debouncedSave) {
83
+ this.debouncedSave.trigger();
84
+ return {
85
+ success: true,
86
+ metadata: {
87
+ processCount: processes.length,
88
+ },
89
+ };
90
+ }
91
+ return this.forceSaveState(processes);
92
+ }
93
+ /**
94
+ * Force save state immediately (bypassing debounce)
95
+ */
96
+ async forceSaveState(processes) {
97
+ if (!this.isInitialized) {
98
+ return {
99
+ success: false,
100
+ error: 'Persistence not initialized',
101
+ };
102
+ }
103
+ try {
104
+ // Create the proper structure for persistence
105
+ const persistenceData = {
106
+ version: '1.0',
107
+ timestamp: Date.now(),
108
+ processes: processes,
109
+ };
110
+ const jsonState = JSON.stringify(persistenceData, null, 2);
111
+ // Use atomic write pattern
112
+ const tempFilePath = `${this.config.filePath}.tmp`;
113
+ const backupFilePath = `${this.config.filePath}.bak`;
114
+ // Ensure directory exists with secure permissions
115
+ await fs.mkdir(path.dirname(this.config.filePath), {
116
+ recursive: true,
117
+ mode: 0o700,
118
+ });
119
+ // Create backup of existing file if it exists and backup is enabled
120
+ if (this.config.enableBackup) {
121
+ try {
122
+ await fs.access(this.config.filePath);
123
+ await fs.copyFile(this.config.filePath, backupFilePath);
124
+ // Set secure permissions for backup file
125
+ try {
126
+ await fs.chmod(backupFilePath, 0o600);
127
+ }
128
+ catch (chmodError) {
129
+ console.warn(`[ProcessPersistence] Could not set permissions for backup file ${backupFilePath}:`, chmodError);
130
+ }
131
+ }
132
+ catch (err) {
133
+ const error = err instanceof Error ? err : new Error(String(err));
134
+ if (hasErrorCode(error) && error.code !== 'ENOENT') {
135
+ console.warn(`[ProcessPersistence] Could not create backup of ${this.config.filePath}:`, error.message);
136
+ }
137
+ // Continue with save even if backup fails
138
+ }
139
+ }
140
+ // Write to temporary file first
141
+ await fs.writeFile(tempFilePath, jsonState, 'utf-8');
142
+ // Set secure file permissions (read/write for owner only)
143
+ try {
144
+ await fs.chmod(tempFilePath, 0o600);
145
+ }
146
+ catch (chmodError) {
147
+ console.warn(`[ProcessPersistence] Could not set file permissions for ${tempFilePath}:`, chmodError);
148
+ }
149
+ // Atomically move temp file to final location
150
+ await fs.rename(tempFilePath, this.config.filePath);
151
+ this.emit('persistence:saved', {
152
+ filePath: this.config.filePath,
153
+ processCount: processes.length,
154
+ });
155
+ return {
156
+ success: true,
157
+ metadata: {
158
+ filePath: this.config.filePath,
159
+ processCount: processes.length,
160
+ },
161
+ };
162
+ }
163
+ catch (error) {
164
+ const errorMessage = error instanceof Error ? error.message : String(error);
165
+ this.emit('persistence:save-error', {
166
+ filePath: this.config.filePath,
167
+ error: error instanceof Error ? error : new Error(errorMessage),
168
+ });
169
+ return {
170
+ success: false,
171
+ error: `Error saving process state: ${errorMessage}`,
172
+ metadata: {
173
+ filePath: this.config.filePath,
174
+ processCount: processes.length,
175
+ },
176
+ };
177
+ }
178
+ }
179
+ /**
180
+ * Load process state from persistent storage
181
+ */
182
+ async loadState() {
183
+ if (!this.isInitialized) {
184
+ console.warn('[ProcessPersistence] Cannot load state: not initialized');
185
+ return [];
186
+ }
187
+ try {
188
+ const data = await fs.readFile(this.config.filePath, 'utf-8');
189
+ const parsedData = JSON.parse(data);
190
+ // Handle both old format (array) and new format (object with version)
191
+ let persistedProcs;
192
+ if (Array.isArray(parsedData)) {
193
+ // Old format - direct array
194
+ persistedProcs = parsedData;
195
+ }
196
+ else if (parsedData &&
197
+ typeof parsedData === 'object' &&
198
+ parsedData.processes) {
199
+ // New format with version
200
+ persistedProcs = parsedData.processes;
201
+ }
202
+ else {
203
+ throw new Error('Invalid persistence file format');
204
+ }
205
+ this.emit('persistence:loaded', {
206
+ filePath: this.config.filePath,
207
+ processCount: persistedProcs.length,
208
+ usedBackup: false,
209
+ });
210
+ return persistedProcs;
211
+ }
212
+ catch (error) {
213
+ const err = error instanceof Error ? error : new Error(String(error));
214
+ if (hasErrorCode(err) && err.code === 'ENOENT') {
215
+ // File not found - this is normal on first run
216
+ console.log('[ProcessPersistence] No persistence file found, starting fresh');
217
+ return [];
218
+ }
219
+ if (error instanceof SyntaxError) {
220
+ // JSON parse error - try loading from backup
221
+ console.warn(`[ProcessPersistence] Corrupted persistence file, attempting backup recovery:`, err.message);
222
+ return this.loadFromBackup();
223
+ }
224
+ this.emit('persistence:load-error', {
225
+ filePath: this.config.filePath,
226
+ error: err,
227
+ });
228
+ console.error(`[ProcessPersistence] Error loading process state:`, err);
229
+ return [];
230
+ }
231
+ }
232
+ /**
233
+ * Load process state from backup file
234
+ */
235
+ async loadFromBackup() {
236
+ if (!this.isInitialized) {
237
+ console.warn('[ProcessPersistence] Cannot load from backup: not initialized');
238
+ return [];
239
+ }
240
+ const backupFilePath = `${this.config.filePath}.bak`;
241
+ try {
242
+ const data = await fs.readFile(backupFilePath, 'utf-8');
243
+ const parsedData = JSON.parse(data);
244
+ // Handle both old format (array) and new format (object with version)
245
+ let persistedProcs;
246
+ if (Array.isArray(parsedData)) {
247
+ // Old format - direct array
248
+ persistedProcs = parsedData;
249
+ }
250
+ else if (parsedData &&
251
+ typeof parsedData === 'object' &&
252
+ parsedData.processes) {
253
+ // New format with version
254
+ persistedProcs = parsedData.processes;
255
+ }
256
+ else {
257
+ throw new Error('Invalid backup file format');
258
+ }
259
+ console.log(`[ProcessPersistence] Successfully loaded state from backup: ${backupFilePath}`);
260
+ this.emit('persistence:loaded', {
261
+ filePath: backupFilePath,
262
+ processCount: persistedProcs.length,
263
+ usedBackup: true,
264
+ });
265
+ return persistedProcs;
266
+ }
267
+ catch (error) {
268
+ const err = error instanceof Error ? error : new Error(String(error));
269
+ console.error(`[ProcessPersistence] Error loading from backup file:`, err);
270
+ this.emit('persistence:load-error', {
271
+ filePath: backupFilePath,
272
+ error: err,
273
+ });
274
+ return [];
275
+ }
276
+ }
277
+ /**
278
+ * Get the persistence file path
279
+ */
280
+ getFilePath() {
281
+ return this.config.filePath;
282
+ }
283
+ /**
284
+ * Check if persistence file exists
285
+ */
286
+ async exists() {
287
+ try {
288
+ await fs.access(this.config.filePath);
289
+ return true;
290
+ }
291
+ catch {
292
+ return false;
293
+ }
294
+ }
295
+ /**
296
+ * Check if backup file exists
297
+ */
298
+ async backupExists() {
299
+ try {
300
+ const backupFilePath = `${this.config.filePath}.bak`;
301
+ await fs.access(backupFilePath);
302
+ return true;
303
+ }
304
+ catch {
305
+ return false;
306
+ }
307
+ }
308
+ /**
309
+ * Create a backup of the current persistence file
310
+ */
311
+ async createBackup() {
312
+ if (!this.isInitialized) {
313
+ return {
314
+ success: false,
315
+ error: 'Persistence not initialized',
316
+ };
317
+ }
318
+ const backupFilePath = `${this.config.filePath}.bak`;
319
+ try {
320
+ await fs.copyFile(this.config.filePath, backupFilePath);
321
+ // Set secure permissions for backup file
322
+ try {
323
+ await fs.chmod(backupFilePath, 0o600);
324
+ }
325
+ catch (chmodError) {
326
+ console.warn(`[ProcessPersistence] Could not set permissions for backup file ${backupFilePath}:`, chmodError);
327
+ }
328
+ this.emit('persistence:backup-created', { filePath: backupFilePath });
329
+ return {
330
+ success: true,
331
+ metadata: {
332
+ filePath: backupFilePath,
333
+ },
334
+ };
335
+ }
336
+ catch (error) {
337
+ const errorMessage = error instanceof Error ? error.message : String(error);
338
+ return {
339
+ success: false,
340
+ error: `Error creating backup: ${errorMessage}`,
341
+ metadata: {
342
+ filePath: backupFilePath,
343
+ },
344
+ };
345
+ }
346
+ }
347
+ /**
348
+ * Cleanup persistence resources
349
+ */
350
+ cleanup() {
351
+ if (this.debouncedSave) {
352
+ this.debouncedSave.cleanup();
353
+ this.debouncedSave = null;
354
+ }
355
+ this.isInitialized = false;
356
+ }
357
+ /**
358
+ * Collect current process states
359
+ */
360
+ collectProcessStates() {
361
+ return Array.from(this.processes.values()).map((process) => process.toJSON());
362
+ }
363
+ }
364
+ //# sourceMappingURL=process-persistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-persistence.js","sourceRoot":"","sources":["../../../src/process-manager/process-persistence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Mutex implementation for process operations
3
+ *
4
+ * This utility provides mutual exclusion for asynchronous operations
5
+ * to prevent race conditions when multiple operations are performed
6
+ * on the same process concurrently.
7
+ */
8
+ /**
9
+ * Mutex for managing exclusive access to resources
10
+ */
11
+ export declare class Mutex {
12
+ private locked;
13
+ private queue;
14
+ /**
15
+ * Acquire the mutex lock
16
+ * @returns Promise that resolves when lock is acquired
17
+ */
18
+ acquire(): Promise<void>;
19
+ /**
20
+ * Release the mutex lock
21
+ */
22
+ release(): void;
23
+ /**
24
+ * Check if mutex is currently locked
25
+ */
26
+ isLocked(): boolean;
27
+ /**
28
+ * Get the number of waiters in queue
29
+ */
30
+ getQueueLength(): number;
31
+ }
32
+ /**
33
+ * KeyedMutex for managing exclusive access to multiple resources by key
34
+ */
35
+ export declare class KeyedMutex<K = string> {
36
+ private mutexes;
37
+ /**
38
+ * Acquire mutex for a specific key
39
+ * @param key The key to lock
40
+ * @returns Promise that resolves when lock is acquired
41
+ */
42
+ acquire(key: K): Promise<void>;
43
+ /**
44
+ * Release mutex for a specific key
45
+ * @param key The key to unlock
46
+ */
47
+ release(key: K): void;
48
+ /**
49
+ * Check if a specific key is locked
50
+ * @param key The key to check
51
+ */
52
+ isLocked(key: K): boolean;
53
+ /**
54
+ * Get all currently locked keys
55
+ */
56
+ getLockedKeys(): K[];
57
+ /**
58
+ * Clear all mutexes (use with caution)
59
+ */
60
+ clear(): void;
61
+ }
62
+ /**
63
+ * Decorator for wrapping async methods with mutex
64
+ * @param keyExtractor Function to extract mutex key from method arguments
65
+ */
66
+ export declare function withMutex(mutexKey: string | ((args: any[]) => string)): MethodDecorator;
67
+ /**
68
+ * Helper to run an async operation with mutex protection
69
+ * @param mutex The mutex to use
70
+ * @param operation The async operation to run
71
+ * @returns Result of the operation
72
+ */
73
+ export declare function withLock<T>(mutex: Mutex, operation: () => Promise<T>): Promise<T>;
74
+ /**
75
+ * Helper to run an async operation with keyed mutex protection
76
+ * @param keyedMutex The keyed mutex to use
77
+ * @param key The key to lock
78
+ * @param operation The async operation to run
79
+ * @returns Result of the operation
80
+ */
81
+ export declare function withKeyedLock<K, T>(keyedMutex: KeyedMutex<K>, key: K, operation: () => Promise<T>): Promise<T>;
82
+ //# sourceMappingURL=mutex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutex.d.ts","sourceRoot":"","sources":["../../../../src/process-manager/utils/mutex.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,qBAAa,KAAK;IAChB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAyB;IAEtC;;;OAGG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAWrC;;OAEG;IACI,OAAO,IAAI,IAAI;IAYtB;;OAEG;IACI,QAAQ,IAAI,OAAO;IAI1B;;OAEG;IACI,cAAc,IAAI,MAAM;CAGhC;AAED;;GAEG;AACH,qBAAa,UAAU,CAAC,CAAC,GAAG,MAAM;IAChC,OAAO,CAAC,OAAO,CAAuB;IAEtC;;;;OAIG;IACU,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAS3C;;;OAGG;IACI,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI;IAW5B;;;OAGG;IACI,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAKhC;;OAEG;IACI,aAAa,IAAI,CAAC,EAAE;IAU3B;;OAEG;IACI,KAAK,IAAI,IAAI;CAGrB;AAED;;;GAGG;AAEH,wBAAgB,SAAS,CAEvB,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,CAAC,GAC3C,eAAe,CA6BjB;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,CAAC,CAAC,CAOZ;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,CAAC,EAAE,CAAC,EACtC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EACzB,GAAG,EAAE,CAAC,EACN,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,CAAC,CAAC,CAOZ"}
@@ -0,0 +1,172 @@
1
+ /**
2
+ * Mutex implementation for process operations
3
+ *
4
+ * This utility provides mutual exclusion for asynchronous operations
5
+ * to prevent race conditions when multiple operations are performed
6
+ * on the same process concurrently.
7
+ */
8
+ /**
9
+ * Mutex for managing exclusive access to resources
10
+ */
11
+ export class Mutex {
12
+ locked = false;
13
+ queue = [];
14
+ /**
15
+ * Acquire the mutex lock
16
+ * @returns Promise that resolves when lock is acquired
17
+ */
18
+ async acquire() {
19
+ if (!this.locked) {
20
+ this.locked = true;
21
+ return;
22
+ }
23
+ return new Promise((resolve) => {
24
+ this.queue.push(resolve);
25
+ });
26
+ }
27
+ /**
28
+ * Release the mutex lock
29
+ */
30
+ release() {
31
+ if (this.queue.length > 0) {
32
+ const next = this.queue.shift();
33
+ if (next) {
34
+ // Keep locked and pass to next waiter
35
+ next();
36
+ }
37
+ }
38
+ else {
39
+ this.locked = false;
40
+ }
41
+ }
42
+ /**
43
+ * Check if mutex is currently locked
44
+ */
45
+ isLocked() {
46
+ return this.locked;
47
+ }
48
+ /**
49
+ * Get the number of waiters in queue
50
+ */
51
+ getQueueLength() {
52
+ return this.queue.length;
53
+ }
54
+ }
55
+ /**
56
+ * KeyedMutex for managing exclusive access to multiple resources by key
57
+ */
58
+ export class KeyedMutex {
59
+ mutexes = new Map();
60
+ /**
61
+ * Acquire mutex for a specific key
62
+ * @param key The key to lock
63
+ * @returns Promise that resolves when lock is acquired
64
+ */
65
+ async acquire(key) {
66
+ let mutex = this.mutexes.get(key);
67
+ if (!mutex) {
68
+ mutex = new Mutex();
69
+ this.mutexes.set(key, mutex);
70
+ }
71
+ await mutex.acquire();
72
+ }
73
+ /**
74
+ * Release mutex for a specific key
75
+ * @param key The key to unlock
76
+ */
77
+ release(key) {
78
+ const mutex = this.mutexes.get(key);
79
+ if (mutex) {
80
+ mutex.release();
81
+ // Clean up if no one is waiting
82
+ if (!mutex.isLocked() && mutex.getQueueLength() === 0) {
83
+ this.mutexes.delete(key);
84
+ }
85
+ }
86
+ }
87
+ /**
88
+ * Check if a specific key is locked
89
+ * @param key The key to check
90
+ */
91
+ isLocked(key) {
92
+ const mutex = this.mutexes.get(key);
93
+ return mutex ? mutex.isLocked() : false;
94
+ }
95
+ /**
96
+ * Get all currently locked keys
97
+ */
98
+ getLockedKeys() {
99
+ const locked = [];
100
+ for (const [key, mutex] of this.mutexes) {
101
+ if (mutex.isLocked()) {
102
+ locked.push(key);
103
+ }
104
+ }
105
+ return locked;
106
+ }
107
+ /**
108
+ * Clear all mutexes (use with caution)
109
+ */
110
+ clear() {
111
+ this.mutexes.clear();
112
+ }
113
+ }
114
+ /**
115
+ * Decorator for wrapping async methods with mutex
116
+ * @param keyExtractor Function to extract mutex key from method arguments
117
+ */
118
+ export function withMutex(
119
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
120
+ mutexKey) {
121
+ const keyedMutex = new KeyedMutex();
122
+ return function (
123
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
124
+ target, propertyKey, descriptor) {
125
+ const originalMethod = descriptor.value;
126
+ descriptor.value = async function (...args
127
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
128
+ ) {
129
+ const key = typeof mutexKey === 'function' ? mutexKey(args) : mutexKey;
130
+ await keyedMutex.acquire(key);
131
+ try {
132
+ return await originalMethod.apply(this, args);
133
+ }
134
+ finally {
135
+ keyedMutex.release(key);
136
+ }
137
+ };
138
+ return descriptor;
139
+ };
140
+ }
141
+ /**
142
+ * Helper to run an async operation with mutex protection
143
+ * @param mutex The mutex to use
144
+ * @param operation The async operation to run
145
+ * @returns Result of the operation
146
+ */
147
+ export async function withLock(mutex, operation) {
148
+ await mutex.acquire();
149
+ try {
150
+ return await operation();
151
+ }
152
+ finally {
153
+ mutex.release();
154
+ }
155
+ }
156
+ /**
157
+ * Helper to run an async operation with keyed mutex protection
158
+ * @param keyedMutex The keyed mutex to use
159
+ * @param key The key to lock
160
+ * @param operation The async operation to run
161
+ * @returns Result of the operation
162
+ */
163
+ export async function withKeyedLock(keyedMutex, key, operation) {
164
+ await keyedMutex.acquire(key);
165
+ try {
166
+ return await operation();
167
+ }
168
+ finally {
169
+ keyedMutex.release(key);
170
+ }
171
+ }
172
+ //# sourceMappingURL=mutex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutex.js","sourceRoot":"","sources":["../../../../src/process-manager/utils/mutex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Services Module
3
+ *
4
+ * プロセス管理システムのサービス層を提供する
5
+ */
6
+ export { LogManager } from './log-manager.js';
7
+ export { ProcessLogIntegrator } from './process-log-integration.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Services Module
3
+ *
4
+ * プロセス管理システムのサービス層を提供する
5
+ */
6
+ export { LogManager } from './log-manager.js';
7
+ export { ProcessLogIntegrator } from './process-log-integration.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC"}