@masuidrive/procman 0.1.1 → 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,362 @@
1
+ /**
2
+ * Daemon lifecycle management - startup, shutdown, restart, and recovery
3
+ *
4
+ * Contains the implementation of lifecycle methods for ProcmanDaemon.
5
+ * These functions accept a daemon context object to access internal state.
6
+ */
7
+ import { DaemonState } from './daemon-state-manager.js';
8
+ const debugLog = process.env.DEBUG_PROCMAN
9
+ ? (...args) => console.error(...args)
10
+ : () => { };
11
+ /**
12
+ * Recovery constants
13
+ */
14
+ const RECOVERY_CONSTANTS = {
15
+ MAX_RECOVERY_ATTEMPTS: 3,
16
+ RECOVERY_DELAY_MS: 5000,
17
+ };
18
+ export { RECOVERY_CONSTANTS };
19
+ /**
20
+ * Start the daemon - performs environment checks, initializes components,
21
+ * and transitions to RUNNING state.
22
+ */
23
+ export async function performStart(ctx) {
24
+ const startTime = Date.now();
25
+ debugLog('[DEBUG-PROCMAN-DAEMON] Starting daemon initialization...');
26
+ debugLog('[DEBUG-PROCMAN-DAEMON] Current state check:', JSON.stringify({
27
+ currentState: ctx.stateManager.getCurrentState(),
28
+ canStart: ctx.stateManager.canStart(),
29
+ processId: process.pid,
30
+ timestamp: new Date().toISOString(),
31
+ }, null, 2));
32
+ if (!ctx.stateManager.canStart()) {
33
+ throw new Error(`Cannot start daemon: current state is ${ctx.stateManager.getCurrentState()}`);
34
+ }
35
+ debugLog('[DEBUG-PROCMAN-DAEMON] Transitioning to STARTING state...');
36
+ ctx.stateManager.transitionTo(DaemonState.STARTING);
37
+ try {
38
+ debugLog('[DEBUG-PROCMAN-DAEMON] Step 1: Performing environment checks...');
39
+ await performEnvironmentChecks(ctx);
40
+ debugLog('[DEBUG-PROCMAN-DAEMON] ✓ Environment checks completed');
41
+ debugLog('[DEBUG-PROCMAN-DAEMON] Step 2: Ensuring no daemon running...');
42
+ await ctx.pidManager.ensureNoDaemonRunning();
43
+ debugLog('[DEBUG-PROCMAN-DAEMON] ✓ Daemon uniqueness verified');
44
+ debugLog('[DEBUG-PROCMAN-DAEMON] Step 3: Initializing data directory...');
45
+ await ctx.dataDirectory.ensureDataDirectory();
46
+ debugLog('[DEBUG-PROCMAN-DAEMON] ✓ Data directory ready');
47
+ debugLog('[DEBUG-PROCMAN-DAEMON] Step 4: Writing PID file...');
48
+ await ctx.pidManager.writePIDFile();
49
+ debugLog('[DEBUG-PROCMAN-DAEMON] ✓ PID file written');
50
+ debugLog('[DEBUG-PROCMAN-DAEMON] Step 5: Setting up signal handlers...');
51
+ ctx.signalHandler.setupHandlers();
52
+ debugLog('[DEBUG-PROCMAN-DAEMON] ✓ Signal handlers configured');
53
+ debugLog('[DEBUG-PROCMAN-DAEMON] Step 6: Initializing all components...');
54
+ await ctx.componentManager.initializeAll();
55
+ debugLog('[DEBUG-PROCMAN-DAEMON] ✓ All components initialized');
56
+ // Perform final readiness check with retries
57
+ debugLog('[DEBUG-PROCMAN-DAEMON] Step 7: Performing final readiness verification...');
58
+ let readinessAttempts = 0;
59
+ const maxReadinessAttempts = 10;
60
+ const readinessCheckInterval = 500;
61
+ debugLog('[DEBUG-PROCMAN-DAEMON] Readiness check parameters:', JSON.stringify({
62
+ maxAttempts: maxReadinessAttempts,
63
+ intervalMs: readinessCheckInterval,
64
+ totalMaxTimeMs: maxReadinessAttempts * readinessCheckInterval,
65
+ }, null, 2));
66
+ while (readinessAttempts < maxReadinessAttempts) {
67
+ const checkStartTime = Date.now();
68
+ debugLog(`[DEBUG-PROCMAN-DAEMON] Readiness attempt ${readinessAttempts + 1}/${maxReadinessAttempts}...`);
69
+ try {
70
+ const healthCheck = await ctx.componentManager.performHealthChecks();
71
+ const checkDuration = Date.now() - checkStartTime;
72
+ if (healthCheck.healthy) {
73
+ debugLog('[DEBUG-PROCMAN-DAEMON] ✓ Readiness verification successful!');
74
+ debugLog('[DEBUG-PROCMAN-DAEMON] Readiness success stats:', JSON.stringify({
75
+ attempts: readinessAttempts + 1,
76
+ checkDurationMs: checkDuration,
77
+ healthCheckDetails: healthCheck.details,
78
+ }, null, 2));
79
+ console.log(`Daemon readiness verified after ${readinessAttempts + 1} attempts`);
80
+ break;
81
+ }
82
+ else {
83
+ debugLog('[DEBUG-PROCMAN-DAEMON] ✗ Readiness check failed');
84
+ debugLog('[DEBUG-PROCMAN-DAEMON] Health check failure details:', JSON.stringify({
85
+ attempt: readinessAttempts + 1,
86
+ maxAttempts: maxReadinessAttempts,
87
+ checkDurationMs: checkDuration,
88
+ healthCheckDetails: healthCheck.details,
89
+ }, null, 2));
90
+ console.log(`Readiness check ${readinessAttempts + 1}/${maxReadinessAttempts} failed:`, healthCheck.details);
91
+ readinessAttempts++;
92
+ if (readinessAttempts < maxReadinessAttempts) {
93
+ debugLog(`[DEBUG-PROCMAN-DAEMON] Waiting ${readinessCheckInterval}ms before retry...`);
94
+ await new Promise((resolve) => setTimeout(resolve, readinessCheckInterval));
95
+ }
96
+ }
97
+ }
98
+ catch (error) {
99
+ const checkDuration = Date.now() - checkStartTime;
100
+ debugLog('[DEBUG-PROCMAN-DAEMON] ✗ Readiness check exception');
101
+ debugLog('[DEBUG-PROCMAN-DAEMON] Exception details:', JSON.stringify({
102
+ attempt: readinessAttempts + 1,
103
+ checkDurationMs: checkDuration,
104
+ errorMessage: error instanceof Error ? error.message : String(error),
105
+ errorStack: error instanceof Error ? error.stack : undefined,
106
+ }, null, 2));
107
+ console.log(`Readiness check ${readinessAttempts + 1}/${maxReadinessAttempts} failed with error:`, error);
108
+ readinessAttempts++;
109
+ if (readinessAttempts < maxReadinessAttempts) {
110
+ await new Promise((resolve) => setTimeout(resolve, readinessCheckInterval));
111
+ }
112
+ }
113
+ }
114
+ if (readinessAttempts >= maxReadinessAttempts) {
115
+ debugLog('[DEBUG-PROCMAN-DAEMON] ✗ Final readiness verification failed after all attempts');
116
+ debugLog('[DEBUG-PROCMAN-DAEMON] Readiness failure summary:', JSON.stringify({
117
+ totalAttempts: readinessAttempts,
118
+ maxAttempts: maxReadinessAttempts,
119
+ totalTimeSpentMs: readinessAttempts * readinessCheckInterval,
120
+ currentState: ctx.stateManager.getCurrentState(),
121
+ }, null, 2));
122
+ throw new Error('Daemon components initialized but failed final readiness verification');
123
+ }
124
+ // All checks passed - transition to running state
125
+ debugLog('[DEBUG-PROCMAN-DAEMON] Step 8: Transitioning to RUNNING state...');
126
+ ctx.stateManager.transitionTo(DaemonState.RUNNING);
127
+ ctx.recoveryAttempts = 0; // Reset recovery counter on successful start
128
+ // Start memory monitoring
129
+ debugLog('[DEBUG-PROCMAN-DAEMON] Step 9: Starting memory monitoring...');
130
+ ctx.memoryMonitor.start();
131
+ debugLog('[DEBUG-PROCMAN-DAEMON] ✓ Memory monitoring started');
132
+ const totalStartupTime = Date.now() - startTime;
133
+ debugLog('[DEBUG-PROCMAN-DAEMON] ✓ DAEMON STARTUP COMPLETED SUCCESSFULLY!');
134
+ debugLog('[DEBUG-PROCMAN-DAEMON] Final startup stats:', JSON.stringify({
135
+ totalStartupTimeMs: totalStartupTime,
136
+ currentState: ctx.stateManager.getCurrentState(),
137
+ processId: process.pid,
138
+ readinessAttempts: readinessAttempts,
139
+ timestamp: new Date().toISOString(),
140
+ }, null, 2));
141
+ console.log('Daemon started successfully and is ready to handle requests');
142
+ }
143
+ catch (error) {
144
+ const totalStartupTime = Date.now() - startTime;
145
+ debugLog('[DEBUG-PROCMAN-DAEMON] ✗ DAEMON STARTUP FAILED');
146
+ debugLog('[DEBUG-PROCMAN-DAEMON] Startup failure stats:', JSON.stringify({
147
+ totalStartupTimeMs: totalStartupTime,
148
+ currentState: ctx.stateManager.getCurrentState(),
149
+ processId: process.pid,
150
+ errorMessage: error instanceof Error ? error.message : String(error),
151
+ errorStack: error instanceof Error ? error.stack : undefined,
152
+ }, null, 2));
153
+ ctx.stateManager.forceError();
154
+ debugLog('[DEBUG-PROCMAN-DAEMON] Performing startup cleanup...');
155
+ await performStartupCleanup(ctx);
156
+ debugLog('[DEBUG-PROCMAN-DAEMON] Startup cleanup completed');
157
+ throw error;
158
+ }
159
+ }
160
+ /**
161
+ * Stop the daemon - cleans up components, signal handlers, and PID file.
162
+ */
163
+ export async function performStop(ctx) {
164
+ if (!ctx.stateManager.canStop()) {
165
+ throw new Error(`Cannot stop daemon: current state is ${ctx.stateManager.getCurrentState()}`);
166
+ }
167
+ ctx.stateManager.transitionTo(DaemonState.STOPPING);
168
+ try {
169
+ // Stop memory monitoring first
170
+ debugLog('[DEBUG-PROCMAN-DAEMON] Stopping memory monitoring...');
171
+ ctx.memoryMonitor.stop();
172
+ debugLog('[DEBUG-PROCMAN-DAEMON] ✓ Memory monitoring stopped');
173
+ // Stop components with proper error handling
174
+ await ctx.componentManager.cleanupAll();
175
+ // Remove signal handlers
176
+ ctx.signalHandler.cleanupHandlers();
177
+ // Clean up PID file
178
+ await ctx.pidManager.cleanup();
179
+ ctx.stateManager.transitionTo(DaemonState.STOPPED);
180
+ }
181
+ catch (error) {
182
+ ctx.stateManager.forceError();
183
+ // Still try to cleanup critical resources
184
+ await performEmergencyCleanup(ctx);
185
+ throw error;
186
+ }
187
+ }
188
+ /**
189
+ * Attempt error recovery
190
+ */
191
+ export async function performAttemptRecovery(ctx, emitFn, loadConfigFn) {
192
+ if (!ctx.stateManager.isInError()) {
193
+ return true; // Already recovered
194
+ }
195
+ if (ctx.recoveryAttempts >= RECOVERY_CONSTANTS.MAX_RECOVERY_ATTEMPTS) {
196
+ emitFn('recoveryFailed', new Error('Maximum recovery attempts exceeded'));
197
+ return false;
198
+ }
199
+ ctx.recoveryAttempts++;
200
+ emitFn('recoveryStarted');
201
+ try {
202
+ ctx.stateManager.beginRecovery();
203
+ // Perform recovery steps
204
+ await performRecoverySteps(ctx, loadConfigFn);
205
+ ctx.stateManager.completeRecovery();
206
+ emitFn('recoveryCompleted');
207
+ return true;
208
+ }
209
+ catch (error) {
210
+ ctx.stateManager.failRecovery();
211
+ emitFn('recoveryFailed', error);
212
+ // Wait before next attempt
213
+ await new Promise((resolve) => setTimeout(resolve, RECOVERY_CONSTANTS.RECOVERY_DELAY_MS));
214
+ return false;
215
+ }
216
+ }
217
+ /**
218
+ * Perform environment checks before daemon startup
219
+ */
220
+ async function performEnvironmentChecks(ctx) {
221
+ // Check 1: Verify HOME environment variable is set
222
+ const homeDir = process.env.HOME || process.env.USERPROFILE;
223
+ if (!homeDir) {
224
+ // Try to detect home directory using os.homedir()
225
+ try {
226
+ const os = await import('os');
227
+ const detectedHome = os.homedir();
228
+ if (!detectedHome) {
229
+ throw new Error('HOME environment variable is not set and could not detect home directory');
230
+ }
231
+ // Set HOME for this process and child processes
232
+ process.env.HOME = detectedHome;
233
+ console.log(`HOME environment variable was missing, set to: ${detectedHome}`);
234
+ }
235
+ catch (error) {
236
+ throw new Error(`Failed to determine home directory: ${error instanceof Error ? error.message : 'Unknown error'}`);
237
+ }
238
+ }
239
+ // Check 2: Verify data directory path can be resolved
240
+ try {
241
+ const resolvedPath = ctx.dataDirectory.resolveDataDir();
242
+ if (!resolvedPath || resolvedPath.includes('~')) {
243
+ throw new Error(`Failed to expand socket path: ${resolvedPath}. HOME environment variable may not be set.`);
244
+ }
245
+ }
246
+ catch (error) {
247
+ throw new Error(`Failed to resolve data directory path: ${error instanceof Error ? error.message : 'Unknown error'}`);
248
+ }
249
+ // Check 3: Verify socket path can be resolved
250
+ try {
251
+ const socketPath = await ctx.dataDirectory.getSocketPath();
252
+ if (!socketPath) {
253
+ throw new Error('Failed to resolve socket path');
254
+ }
255
+ // On Unix systems, verify the path doesn't contain unresolved ~ characters
256
+ if (process.platform !== 'win32' && socketPath.includes('~')) {
257
+ throw new Error(`Socket path contains unresolved tilde: ${socketPath}`);
258
+ }
259
+ }
260
+ catch (error) {
261
+ throw new Error(`Failed to resolve socket path: ${error instanceof Error ? error.message : 'Unknown error'}`);
262
+ }
263
+ // Check 4: Verify we can create the data directory (dry run check)
264
+ try {
265
+ await ctx.dataDirectory.validateDataDirectory();
266
+ // If validation passes, directory already exists with correct permissions
267
+ }
268
+ catch {
269
+ // Directory doesn't exist or has wrong permissions - that's OK, we'll create it later
270
+ // But we should verify we have permission to create it
271
+ const path = await import('path');
272
+ const fs = await import('fs');
273
+ const parentDir = path.dirname(ctx.dataDirectory.getDataDir());
274
+ try {
275
+ await fs.promises.access(parentDir, fs.constants.W_OK);
276
+ }
277
+ catch (accessError) {
278
+ throw new Error(`Cannot write to parent directory ${parentDir}: ${accessError instanceof Error ? accessError.message : 'Permission denied'}`);
279
+ }
280
+ }
281
+ // Check 5: Verify basic Node.js runtime environment
282
+ if (!process.pid) {
283
+ throw new Error('Invalid process environment: PID not available');
284
+ }
285
+ // Check 6: Verify required modules can be loaded
286
+ try {
287
+ await import('fs');
288
+ await import('path');
289
+ await import('os');
290
+ }
291
+ catch (error) {
292
+ throw new Error(`Failed to load required Node.js modules: ${error instanceof Error ? error.message : 'Unknown error'}`);
293
+ }
294
+ console.log('Environment checks passed successfully');
295
+ }
296
+ /**
297
+ * Perform startup cleanup on failure
298
+ */
299
+ export async function performStartupCleanup(ctx) {
300
+ const cleanupTasks = [];
301
+ // Cleanup PID file
302
+ cleanupTasks.push(ctx.pidManager.cleanup().catch((error) => {
303
+ debugLog('Failed to cleanup PID file during startup failure:', error);
304
+ }));
305
+ // Cleanup signal handlers
306
+ try {
307
+ ctx.signalHandler.cleanupHandlers();
308
+ }
309
+ catch (error) {
310
+ debugLog('Failed to cleanup signal handlers during startup failure:', error);
311
+ }
312
+ // Cleanup any partially initialized components
313
+ cleanupTasks.push(ctx.componentManager.cleanupAll().catch((error) => {
314
+ debugLog('Failed to cleanup components during startup failure:', error);
315
+ }));
316
+ // Wait for all cleanup tasks to complete
317
+ await Promise.all(cleanupTasks);
318
+ }
319
+ /**
320
+ * Perform emergency cleanup when normal stop fails
321
+ */
322
+ export async function performEmergencyCleanup(ctx) {
323
+ console.log('Performing emergency cleanup...');
324
+ // Try to cleanup critical resources without throwing errors
325
+ try {
326
+ await ctx.pidManager.cleanup();
327
+ }
328
+ catch (error) {
329
+ console.error('Emergency PID cleanup failed:', error);
330
+ }
331
+ try {
332
+ ctx.signalHandler.cleanupHandlers();
333
+ }
334
+ catch (error) {
335
+ console.error('Emergency signal handler cleanup failed:', error);
336
+ }
337
+ }
338
+ /**
339
+ * Perform recovery steps when in RECOVERING state
340
+ */
341
+ async function performRecoverySteps(ctx, loadConfigFn) {
342
+ // Step 1: Try to reinitialize components
343
+ try {
344
+ await ctx.componentManager.cleanupAll();
345
+ }
346
+ catch (error) {
347
+ console.log('Component cleanup during recovery failed (expected):', error);
348
+ }
349
+ // Step 2: Reinitialize components
350
+ await ctx.componentManager.initializeAll();
351
+ // Step 3: Reapply current configuration if available
352
+ if (ctx.configFilePath) {
353
+ try {
354
+ await loadConfigFn(ctx.configFilePath);
355
+ }
356
+ catch (error) {
357
+ console.error('Failed to reload configuration during recovery:', error);
358
+ throw error;
359
+ }
360
+ }
361
+ }
362
+ //# sourceMappingURL=daemon-lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon-lifecycle.js","sourceRoot":"","sources":["../../../src/daemon/daemon-lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Daemon query and status methods
3
+ *
4
+ * Provides functions for querying daemon state, health status,
5
+ * component access, configuration management, and process statuses.
6
+ */
7
+ import { ConfigLoader } from '../config/config-loader.js';
8
+ import { ProcessManager } from '../process-manager/process-manager.js';
9
+ import { LogManager } from '../services/log-manager.js';
10
+ import { IPCServerBase } from './ipc-server-base.js';
11
+ import { AppConfig } from '../shared/config.js';
12
+ import type { DaemonContext } from './daemon-types.js';
13
+ /**
14
+ * Check if daemon is ready to handle requests.
15
+ * Performs comprehensive health checks on all components.
16
+ */
17
+ export declare function queryIsReady(ctx: DaemonContext): Promise<boolean>;
18
+ /**
19
+ * Get detailed health status of all components
20
+ */
21
+ export declare function queryHealthStatus(ctx: DaemonContext): Promise<{
22
+ ready: boolean;
23
+ components: Record<string, {
24
+ status: 'healthy' | 'unhealthy' | 'unknown';
25
+ message: string;
26
+ }>;
27
+ memory?: ReturnType<import('../utils/memory/memory-monitor.js').MemoryMonitor['getHealthInfo']>;
28
+ }>;
29
+ /**
30
+ * Load configuration and apply it
31
+ */
32
+ export declare function queryLoadConfig(ctx: DaemonContext, configFilePath: string): Promise<AppConfig[]>;
33
+ /**
34
+ * Get component instances by type
35
+ */
36
+ export declare function getConfigLoader(ctx: DaemonContext): ConfigLoader | undefined;
37
+ export declare function getProcessManager(ctx: DaemonContext): ProcessManager | undefined;
38
+ export declare function getLogManager(ctx: DaemonContext): LogManager | undefined;
39
+ export declare function getIPCServer(ctx: DaemonContext): IPCServerBase | undefined;
40
+ /**
41
+ * Get all process statuses
42
+ */
43
+ export declare function queryAllProcessStatuses(ctx: DaemonContext): Promise<{
44
+ name: string;
45
+ namespace: string;
46
+ pid: number | null;
47
+ status: import("../shared/process.js").ProcessStatus;
48
+ uptime: number;
49
+ memory: number;
50
+ cpu: number;
51
+ restarts: number;
52
+ }[]>;
53
+ //# sourceMappingURL=daemon-queries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon-queries.d.ts","sourceRoot":"","sources":["../../../src/daemon/daemon-queries.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,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,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;GAGG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAYvE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC;IACnE,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAChB,MAAM,EACN;QAAE,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CACjE,CAAC;IACF,MAAM,CAAC,EAAE,UAAU,CACjB,OAAO,mCAAmC,EAAE,aAAa,CAAC,eAAe,CAAC,CAC3E,CAAC;CACH,CAAC,CASD;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,aAAa,EAClB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,SAAS,EAAE,CAAC,CA0CtB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,GAAG,YAAY,GAAG,SAAS,CAE5E;AAED,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,aAAa,GACjB,cAAc,GAAG,SAAS,CAE5B;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,aAAa,GAAG,UAAU,GAAG,SAAS,CAExE;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,GAAG,aAAa,GAAG,SAAS,CAE1E;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,aAAa;;;;;;;;;KAyB/D"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Daemon query and status methods
3
+ *
4
+ * Provides functions for querying daemon state, health status,
5
+ * component access, configuration management, and process statuses.
6
+ */
7
+ /**
8
+ * Check if daemon is ready to handle requests.
9
+ * Performs comprehensive health checks on all components.
10
+ */
11
+ export async function queryIsReady(ctx) {
12
+ if (!ctx.stateManager.isRunning()) {
13
+ return false;
14
+ }
15
+ try {
16
+ const healthCheck = await ctx.componentManager.performHealthChecks();
17
+ return healthCheck.healthy;
18
+ }
19
+ catch (error) {
20
+ console.error('Health check failed:', error);
21
+ return false;
22
+ }
23
+ }
24
+ /**
25
+ * Get detailed health status of all components
26
+ */
27
+ export async function queryHealthStatus(ctx) {
28
+ const healthCheck = await ctx.componentManager.performHealthChecks();
29
+ const memoryHealthInfo = ctx.memoryMonitor.getHealthInfo();
30
+ return {
31
+ ready: healthCheck.healthy && ctx.stateManager.isRunning(),
32
+ components: healthCheck.details,
33
+ memory: memoryHealthInfo,
34
+ };
35
+ }
36
+ /**
37
+ * Load configuration and apply it
38
+ */
39
+ export async function queryLoadConfig(ctx, configFilePath) {
40
+ const configLoader = ctx.componentManager.getComponent('configLoader');
41
+ const processManager = ctx.componentManager.getComponent('processManager');
42
+ const logManager = ctx.componentManager.getComponent('logManager');
43
+ if (!configLoader) {
44
+ throw new Error('ConfigLoader not initialized');
45
+ }
46
+ if (!processManager) {
47
+ throw new Error('ProcessManager not initialized');
48
+ }
49
+ ctx.configFilePath = configFilePath;
50
+ const config = await configLoader.load(configFilePath);
51
+ ctx.currentConfig = config.apps;
52
+ // Stop all existing processes
53
+ const allProcesses = processManager.getAllProcessInfo();
54
+ if (allProcesses.length > 0) {
55
+ const processNames = allProcesses.map((p) => p.name);
56
+ await processManager.stopProcesses(processNames);
57
+ }
58
+ // Configure new processes
59
+ for (const app of config.apps) {
60
+ processManager.configureProcess(app);
61
+ // Setup log manager for this app if log files are configured
62
+ if (logManager && (app.log_file || app.out_file || app.error_file)) {
63
+ logManager.setupAppLogs(app.name, {
64
+ logFile: app.log_file,
65
+ outFile: app.out_file,
66
+ errorFile: app.error_file,
67
+ namespace: app.namespace,
68
+ });
69
+ }
70
+ }
71
+ return config.apps;
72
+ }
73
+ /**
74
+ * Get component instances by type
75
+ */
76
+ export function getConfigLoader(ctx) {
77
+ return ctx.componentManager.getComponent('configLoader');
78
+ }
79
+ export function getProcessManager(ctx) {
80
+ return ctx.componentManager.getComponent('processManager');
81
+ }
82
+ export function getLogManager(ctx) {
83
+ return ctx.componentManager.getComponent('logManager');
84
+ }
85
+ export function getIPCServer(ctx) {
86
+ return ctx.componentManager.getComponent('ipcServer');
87
+ }
88
+ /**
89
+ * Get all process statuses
90
+ */
91
+ export async function queryAllProcessStatuses(ctx) {
92
+ const processManager = getProcessManager(ctx);
93
+ if (!processManager) {
94
+ return [];
95
+ }
96
+ const processInfos = processManager.getAllProcessInfo();
97
+ const statusPromises = processInfos.map(async (info) => {
98
+ // Get process stats from monitor
99
+ const stats = await processManager.monitor.getProcessStats(info.name);
100
+ return {
101
+ name: info.name,
102
+ namespace: info.namespace || 'default',
103
+ pid: info.pid,
104
+ status: info.status,
105
+ uptime: info.uptime,
106
+ memory: stats?.memory || 0,
107
+ cpu: stats?.cpu || 0,
108
+ restarts: info.restarts,
109
+ };
110
+ });
111
+ return Promise.all(statusPromises);
112
+ }
113
+ //# sourceMappingURL=daemon-queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon-queries.js","sourceRoot":"","sources":["../../../src/daemon/daemon-queries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Shared types for daemon module decomposition
3
+ *
4
+ * Provides the DaemonContext interface that allows extracted modules
5
+ * to access internal daemon state without circular dependencies.
6
+ */
7
+ import type { DataDirectory } from './data-directory.js';
8
+ import type { PIDManager } from './pid-manager.js';
9
+ import type { DaemonStateManager } from './daemon-state-manager.js';
10
+ import type { ComponentManager } from './component-manager.js';
11
+ import type { SignalHandler } from './signal-handler.js';
12
+ import type { MemoryMonitor } from '../utils/memory/memory-monitor.js';
13
+ /**
14
+ * Internal context shared across daemon sub-modules.
15
+ * Exposes the internal managers and mutable state that lifecycle,
16
+ * shutdown, and query functions need to operate on.
17
+ */
18
+ export interface DaemonContext {
19
+ readonly dataDirectory: DataDirectory;
20
+ readonly pidManager: PIDManager;
21
+ readonly stateManager: DaemonStateManager;
22
+ readonly componentManager: ComponentManager;
23
+ readonly signalHandler: SignalHandler;
24
+ readonly memoryMonitor: MemoryMonitor;
25
+ currentConfig?: import('../shared/config.js').AppConfig[];
26
+ configFilePath?: string;
27
+ recoveryAttempts: number;
28
+ isShuttingDown: boolean;
29
+ }
30
+ //# sourceMappingURL=daemon-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon-types.d.ts","sourceRoot":"","sources":["../../../src/daemon/daemon-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAEvE;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAC;IAC1C,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,aAAa,CAAC,EAAE,OAAO,qBAAqB,EAAE,SAAS,EAAE,CAAC;IAC1D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;CACzB"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Shared types for daemon module decomposition
3
+ *
4
+ * Provides the DaemonContext interface that allows extracted modules
5
+ * to access internal daemon state without circular dependencies.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=daemon-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon-types.js","sourceRoot":"","sources":["../../../src/daemon/daemon-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Disposable Base Class
3
+ *
4
+ * Abstract base class implementing the Disposable pattern with
5
+ * integrated resource management.
6
+ */
7
+ import { EventEmitter } from 'events';
8
+ import type { IDisposable } from './resource-types.js';
9
+ import { ResourceManager } from './resource-manager.js';
10
+ import type { TrackedTimeout } from './tracked-resources.js';
11
+ import type { TrackedInterval } from './tracked-resources.js';
12
+ import type { TrackedEventListener } from './tracked-resources.js';
13
+ /**
14
+ * Abstract base class implementing the Disposable pattern
15
+ */
16
+ export declare abstract class DisposableBase implements IDisposable {
17
+ private disposed;
18
+ protected readonly resourceManager: ResourceManager;
19
+ constructor();
20
+ /**
21
+ * Dispose the object and all its resources
22
+ */
23
+ dispose(): Promise<void>;
24
+ /**
25
+ * Check if the object is disposed
26
+ */
27
+ isDisposed(): boolean;
28
+ /**
29
+ * Ensure the object is not disposed
30
+ */
31
+ protected ensureNotDisposed(): void;
32
+ /**
33
+ * Override this method to implement custom disposal logic
34
+ */
35
+ protected abstract disposeCore(): Promise<void>;
36
+ /**
37
+ * Helper method to safely track timeouts
38
+ */
39
+ protected safeSetTimeout(callback: () => void, delay: number, metadata?: Record<string, unknown>): TrackedTimeout;
40
+ /**
41
+ * Helper method to safely track intervals
42
+ */
43
+ protected safeSetInterval(callback: () => void, interval: number, metadata?: Record<string, unknown>): TrackedInterval;
44
+ /**
45
+ * Helper method to safely track event listeners
46
+ */
47
+ protected safeAddEventListener(emitter: EventEmitter, event: string, listener: (...args: any[]) => void, metadata?: Record<string, unknown>): TrackedEventListener;
48
+ }
49
+ //# sourceMappingURL=disposable-base.d.ts.map