@oalacea/daemon 0.5.0 → 0.6.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 (222) hide show
  1. package/LICENSE +23 -23
  2. package/README.md +147 -141
  3. package/bin/Dockerfile +75 -74
  4. package/dist/cli/cli.d.ts +42 -0
  5. package/dist/cli/cli.d.ts.map +1 -0
  6. package/dist/cli/cli.js +89 -0
  7. package/dist/cli/cli.js.map +1 -0
  8. package/dist/cli/commands/detect.command.d.ts +39 -0
  9. package/dist/cli/commands/detect.command.d.ts.map +1 -0
  10. package/dist/cli/commands/detect.command.js +111 -0
  11. package/dist/cli/commands/detect.command.js.map +1 -0
  12. package/dist/cli/commands/index.d.ts +14 -0
  13. package/dist/cli/commands/index.d.ts.map +1 -0
  14. package/dist/cli/commands/index.js +11 -0
  15. package/dist/cli/commands/index.js.map +1 -0
  16. package/dist/cli/commands/init.command.d.ts +41 -0
  17. package/dist/cli/commands/init.command.d.ts.map +1 -0
  18. package/dist/cli/commands/init.command.js +111 -0
  19. package/dist/cli/commands/init.command.js.map +1 -0
  20. package/dist/cli/commands/test.command.d.ts +58 -0
  21. package/dist/cli/commands/test.command.d.ts.map +1 -0
  22. package/dist/cli/commands/test.command.js +180 -0
  23. package/dist/cli/commands/test.command.js.map +1 -0
  24. package/dist/cli/index.d.ts +8 -0
  25. package/dist/cli/index.d.ts.map +1 -0
  26. package/dist/cli/index.js +10 -0
  27. package/dist/cli/index.js.map +1 -0
  28. package/dist/core/config/daemon.config.d.ts +32 -0
  29. package/dist/core/config/daemon.config.d.ts.map +1 -0
  30. package/dist/core/config/daemon.config.js +83 -0
  31. package/dist/core/config/daemon.config.js.map +1 -0
  32. package/dist/core/config/index.d.ts +5 -0
  33. package/dist/core/config/index.d.ts.map +1 -0
  34. package/dist/core/config/index.js +5 -0
  35. package/dist/core/config/index.js.map +1 -0
  36. package/dist/core/constants.d.ts +36 -0
  37. package/dist/core/constants.d.ts.map +1 -0
  38. package/dist/core/constants.js +56 -0
  39. package/dist/core/constants.js.map +1 -0
  40. package/dist/core/types/common.types.d.ts +250 -0
  41. package/dist/core/types/common.types.d.ts.map +1 -0
  42. package/dist/core/types/common.types.js +7 -0
  43. package/dist/core/types/common.types.js.map +1 -0
  44. package/dist/core/types/detection.types.d.ts +232 -0
  45. package/dist/core/types/detection.types.d.ts.map +1 -0
  46. package/dist/core/types/detection.types.js +22 -0
  47. package/dist/core/types/detection.types.js.map +1 -0
  48. package/dist/core/types/docker.types.d.ts +322 -0
  49. package/dist/core/types/docker.types.d.ts.map +1 -0
  50. package/dist/core/types/docker.types.js +7 -0
  51. package/dist/core/types/docker.types.js.map +1 -0
  52. package/dist/core/types/index.d.ts +11 -0
  53. package/dist/core/types/index.d.ts.map +1 -0
  54. package/dist/core/types/index.js +7 -0
  55. package/dist/core/types/index.js.map +1 -0
  56. package/dist/core/types/project.types.d.ts +74 -0
  57. package/dist/core/types/project.types.d.ts.map +1 -0
  58. package/dist/core/types/project.types.js +7 -0
  59. package/dist/core/types/project.types.js.map +1 -0
  60. package/dist/core/types/shared.types.d.ts +118 -0
  61. package/dist/core/types/shared.types.d.ts.map +1 -0
  62. package/dist/core/types/shared.types.js +7 -0
  63. package/dist/core/types/shared.types.js.map +1 -0
  64. package/dist/core/types/test.types.d.ts +230 -0
  65. package/dist/core/types/test.types.d.ts.map +1 -0
  66. package/dist/core/types/test.types.js +7 -0
  67. package/dist/core/types/test.types.js.map +1 -0
  68. package/dist/services/detection/__tests__/framework-detector.test.d.ts +5 -0
  69. package/dist/services/detection/__tests__/framework-detector.test.d.ts.map +1 -0
  70. package/dist/services/detection/__tests__/framework-detector.test.js +52 -0
  71. package/dist/services/detection/__tests__/framework-detector.test.js.map +1 -0
  72. package/dist/services/detection/framework-detector.d.ts +179 -0
  73. package/dist/services/detection/framework-detector.d.ts.map +1 -0
  74. package/dist/services/detection/framework-detector.js +636 -0
  75. package/dist/services/detection/framework-detector.js.map +1 -0
  76. package/dist/services/detection/index.d.ts +10 -0
  77. package/dist/services/detection/index.d.ts.map +1 -0
  78. package/dist/services/detection/index.js +7 -0
  79. package/dist/services/detection/index.js.map +1 -0
  80. package/dist/services/docker/__tests__/docker-manager.test.d.ts +5 -0
  81. package/dist/services/docker/__tests__/docker-manager.test.d.ts.map +1 -0
  82. package/dist/services/docker/__tests__/docker-manager.test.js +67 -0
  83. package/dist/services/docker/__tests__/docker-manager.test.js.map +1 -0
  84. package/dist/services/docker/docker-manager.d.ts +157 -0
  85. package/dist/services/docker/docker-manager.d.ts.map +1 -0
  86. package/dist/services/docker/docker-manager.js +516 -0
  87. package/dist/services/docker/docker-manager.js.map +1 -0
  88. package/dist/services/docker/index.d.ts +9 -0
  89. package/dist/services/docker/index.d.ts.map +1 -0
  90. package/dist/services/docker/index.js +9 -0
  91. package/dist/services/docker/index.js.map +1 -0
  92. package/dist/services/index.d.ts +10 -0
  93. package/dist/services/index.d.ts.map +1 -0
  94. package/dist/services/index.js +8 -0
  95. package/dist/services/index.js.map +1 -0
  96. package/dist/shared/errors/__tests__/base.error.test.d.ts +5 -0
  97. package/dist/shared/errors/__tests__/base.error.test.d.ts.map +1 -0
  98. package/dist/shared/errors/__tests__/base.error.test.js +61 -0
  99. package/dist/shared/errors/__tests__/base.error.test.js.map +1 -0
  100. package/dist/shared/errors/__tests__/command.error.test.d.ts +5 -0
  101. package/dist/shared/errors/__tests__/command.error.test.d.ts.map +1 -0
  102. package/dist/shared/errors/__tests__/command.error.test.js +62 -0
  103. package/dist/shared/errors/__tests__/command.error.test.js.map +1 -0
  104. package/dist/shared/errors/__tests__/file.error.test.d.ts +5 -0
  105. package/dist/shared/errors/__tests__/file.error.test.d.ts.map +1 -0
  106. package/dist/shared/errors/__tests__/file.error.test.js +75 -0
  107. package/dist/shared/errors/__tests__/file.error.test.js.map +1 -0
  108. package/dist/shared/errors/__tests__/index.test.d.ts +5 -0
  109. package/dist/shared/errors/__tests__/index.test.d.ts.map +1 -0
  110. package/dist/shared/errors/__tests__/index.test.js +62 -0
  111. package/dist/shared/errors/__tests__/index.test.js.map +1 -0
  112. package/dist/shared/errors/__tests__/validation.error.test.d.ts +5 -0
  113. package/dist/shared/errors/__tests__/validation.error.test.d.ts.map +1 -0
  114. package/dist/shared/errors/__tests__/validation.error.test.js +79 -0
  115. package/dist/shared/errors/__tests__/validation.error.test.js.map +1 -0
  116. package/dist/shared/errors/base.error.d.ts +54 -0
  117. package/dist/shared/errors/base.error.d.ts.map +1 -0
  118. package/dist/shared/errors/base.error.js +85 -0
  119. package/dist/shared/errors/base.error.js.map +1 -0
  120. package/dist/shared/errors/command.error.d.ts +58 -0
  121. package/dist/shared/errors/command.error.d.ts.map +1 -0
  122. package/dist/shared/errors/command.error.js +102 -0
  123. package/dist/shared/errors/command.error.js.map +1 -0
  124. package/dist/shared/errors/detection.error.d.ts +42 -0
  125. package/dist/shared/errors/detection.error.d.ts.map +1 -0
  126. package/dist/shared/errors/detection.error.js +82 -0
  127. package/dist/shared/errors/detection.error.js.map +1 -0
  128. package/dist/shared/errors/docker.error.d.ts +142 -0
  129. package/dist/shared/errors/docker.error.d.ts.map +1 -0
  130. package/dist/shared/errors/docker.error.js +172 -0
  131. package/dist/shared/errors/docker.error.js.map +1 -0
  132. package/dist/shared/errors/file.error.d.ts +66 -0
  133. package/dist/shared/errors/file.error.d.ts.map +1 -0
  134. package/dist/shared/errors/file.error.js +93 -0
  135. package/dist/shared/errors/file.error.js.map +1 -0
  136. package/dist/shared/errors/index.d.ts +56 -0
  137. package/dist/shared/errors/index.d.ts.map +1 -0
  138. package/dist/shared/errors/index.js +86 -0
  139. package/dist/shared/errors/index.js.map +1 -0
  140. package/dist/shared/errors/validation.error.d.ts +67 -0
  141. package/dist/shared/errors/validation.error.d.ts.map +1 -0
  142. package/dist/shared/errors/validation.error.js +97 -0
  143. package/dist/shared/errors/validation.error.js.map +1 -0
  144. package/dist/shared/templates/index.d.ts +2 -0
  145. package/dist/shared/templates/index.d.ts.map +1 -0
  146. package/dist/shared/templates/index.js +2 -0
  147. package/dist/shared/templates/index.js.map +1 -0
  148. package/dist/shared/templates/prompt-builder.d.ts +2 -0
  149. package/dist/shared/templates/prompt-builder.d.ts.map +1 -0
  150. package/dist/shared/templates/prompt-builder.js +2 -0
  151. package/dist/shared/templates/prompt-builder.js.map +1 -0
  152. package/dist/shared/templates/template-engine.d.ts +2 -0
  153. package/dist/shared/templates/template-engine.d.ts.map +1 -0
  154. package/dist/shared/templates/template-engine.js +2 -0
  155. package/dist/shared/templates/template-engine.js.map +1 -0
  156. package/dist/shared/utils/__tests__/command-executor.test.d.ts +5 -0
  157. package/dist/shared/utils/__tests__/command-executor.test.d.ts.map +1 -0
  158. package/dist/shared/utils/__tests__/command-executor.test.js +45 -0
  159. package/dist/shared/utils/__tests__/command-executor.test.js.map +1 -0
  160. package/dist/shared/utils/__tests__/file-helper.test.d.ts +5 -0
  161. package/dist/shared/utils/__tests__/file-helper.test.d.ts.map +1 -0
  162. package/dist/shared/utils/__tests__/file-helper.test.js +71 -0
  163. package/dist/shared/utils/__tests__/file-helper.test.js.map +1 -0
  164. package/dist/shared/utils/__tests__/logger.test.d.ts +5 -0
  165. package/dist/shared/utils/__tests__/logger.test.d.ts.map +1 -0
  166. package/dist/shared/utils/__tests__/logger.test.js +83 -0
  167. package/dist/shared/utils/__tests__/logger.test.js.map +1 -0
  168. package/dist/shared/utils/command-executer.d.ts +2 -0
  169. package/dist/shared/utils/command-executer.d.ts.map +1 -0
  170. package/dist/shared/utils/command-executer.js +2 -0
  171. package/dist/shared/utils/command-executer.js.map +1 -0
  172. package/dist/shared/utils/command-executor.d.ts +255 -0
  173. package/dist/shared/utils/command-executor.d.ts.map +1 -0
  174. package/dist/shared/utils/command-executor.js +287 -0
  175. package/dist/shared/utils/command-executor.js.map +1 -0
  176. package/dist/shared/utils/file-helper.d.ts +86 -0
  177. package/dist/shared/utils/file-helper.d.ts.map +1 -0
  178. package/dist/shared/utils/file-helper.js +323 -0
  179. package/dist/shared/utils/file-helper.js.map +1 -0
  180. package/dist/shared/utils/index.d.ts +9 -0
  181. package/dist/shared/utils/index.d.ts.map +1 -0
  182. package/dist/shared/utils/index.js +9 -0
  183. package/dist/shared/utils/index.js.map +1 -0
  184. package/dist/shared/utils/logger.d.ts +163 -0
  185. package/dist/shared/utils/logger.d.ts.map +1 -0
  186. package/dist/shared/utils/logger.js +389 -0
  187. package/dist/shared/utils/logger.js.map +1 -0
  188. package/package.json +53 -34
  189. package/prompts/DEPS_EFFICIENCY.md +558 -558
  190. package/prompts/E2E.md +491 -491
  191. package/prompts/EXECUTE.md +1060 -1060
  192. package/prompts/INTEGRATION_API.md +484 -484
  193. package/prompts/INTEGRATION_DB.md +425 -425
  194. package/prompts/PERF_API.md +433 -433
  195. package/prompts/PERF_DB.md +430 -430
  196. package/prompts/PERF_FRONT.md +357 -357
  197. package/prompts/REMEDIATION.md +482 -482
  198. package/prompts/UNIT.md +260 -260
  199. package/templates/README.md +38 -38
  200. package/templates/k6/load-test.js +54 -54
  201. package/templates/playwright/e2e.spec.ts +61 -61
  202. package/templates/vitest/angular-component.test.ts +38 -38
  203. package/templates/vitest/api.test.ts +51 -51
  204. package/templates/vitest/component.test.ts +27 -27
  205. package/templates/vitest/hook.test.ts +36 -36
  206. package/templates/vitest/solid-component.test.ts +34 -34
  207. package/templates/vitest/svelte-component.test.ts +33 -33
  208. package/templates/vitest/vue-component.test.ts +39 -39
  209. package/CHANGELOG.md +0 -38
  210. package/agents/deps-analyzer.js +0 -366
  211. package/agents/detector.js +0 -570
  212. package/agents/fix-engine.js +0 -305
  213. package/agents/lighthouse-scanner.js +0 -405
  214. package/agents/perf-analyzer.js +0 -294
  215. package/agents/perf-front-analyzer.js +0 -229
  216. package/agents/test-generator.js +0 -387
  217. package/agents/test-runner.js +0 -318
  218. package/bin/cli.js +0 -449
  219. package/lib/config.js +0 -250
  220. package/lib/docker.js +0 -207
  221. package/lib/reporter.js +0 -297
  222. package/scripts/dev.js +0 -106
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Tests for Logger utility
3
+ */
4
+ import { describe, it, expect } from 'vitest';
5
+ import { Logger, createLogger, LogLevel } from '../logger.js';
6
+ describe('Logger', () => {
7
+ describe('constructor', () => {
8
+ it('should create logger with context', () => {
9
+ const logger = createLogger('TestLogger');
10
+ expect(logger).toBeInstanceOf(Logger);
11
+ });
12
+ });
13
+ describe('debug', () => {
14
+ it('should have debug method', () => {
15
+ const logger = createLogger('TestLogger');
16
+ expect(typeof logger.debug).toBe('function');
17
+ // Should not throw
18
+ logger.debug('Debug message');
19
+ logger.debug('Debug with context', { key: 'value' });
20
+ });
21
+ });
22
+ describe('info', () => {
23
+ it('should have info method', () => {
24
+ const logger = createLogger('TestLogger');
25
+ expect(typeof logger.info).toBe('function');
26
+ logger.info('Info message');
27
+ });
28
+ });
29
+ describe('warn', () => {
30
+ it('should have warn method', () => {
31
+ const logger = createLogger('TestLogger');
32
+ expect(typeof logger.warn).toBe('function');
33
+ logger.warn('Warning message');
34
+ });
35
+ });
36
+ describe('error', () => {
37
+ it('should have error method', () => {
38
+ const logger = createLogger('TestLogger');
39
+ expect(typeof logger.error).toBe('function');
40
+ logger.error('Error message');
41
+ const error = new Error('Test error');
42
+ logger.error('Error occurred', error);
43
+ logger.error('Error with context', { userId: '123' });
44
+ });
45
+ });
46
+ describe('success', () => {
47
+ it('should have success method', () => {
48
+ const logger = createLogger('TestLogger');
49
+ expect(typeof logger.success).toBe('function');
50
+ logger.success('Success message');
51
+ });
52
+ });
53
+ describe('createLogger', () => {
54
+ it('should create logger with context', () => {
55
+ const customLogger = createLogger('CustomContext');
56
+ expect(customLogger).toBeInstanceOf(Logger);
57
+ customLogger.info('Test');
58
+ });
59
+ it('should create logger with silent option', () => {
60
+ const silentLogger = createLogger('SilentLogger');
61
+ expect(silentLogger).toBeInstanceOf(Logger);
62
+ silentLogger.setLevel(LogLevel.SILENT);
63
+ silentLogger.info('This should not appear');
64
+ });
65
+ });
66
+ describe('setLevel', () => {
67
+ it('should have setLevel method', () => {
68
+ const logger = createLogger('TestLogger');
69
+ expect(typeof logger.setLevel).toBe('function');
70
+ logger.setLevel(LogLevel.SILENT);
71
+ logger.info('Silent info');
72
+ logger.setLevel(LogLevel.INFO);
73
+ logger.info('Visible info');
74
+ });
75
+ it('should have getLevel method', () => {
76
+ const logger = createLogger('TestLogger');
77
+ expect(typeof logger.getLevel).toBe('function');
78
+ const level = logger.getLevel();
79
+ expect(typeof level).toBe('number');
80
+ });
81
+ });
82
+ });
83
+ //# sourceMappingURL=logger.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.test.js","sourceRoot":"","sources":["../../../../src/shared/utils/__tests__/logger.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=command-executer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-executer.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/command-executer.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=command-executer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-executer.js","sourceRoot":"","sources":["../../../src/shared/utils/command-executer.ts"],"names":[],"mappings":""}
@@ -0,0 +1,255 @@
1
+ /**
2
+ * Command Executor
3
+ *
4
+ * Utility for executing shell commands with:
5
+ * - Async execution using promisified exec
6
+ * - Timeout handling
7
+ * - Retry logic with exponential backoff
8
+ * - Environment and working directory control
9
+ * - Structured error handling
10
+ * - Execution metrics
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * import { CommandExecutor } from '@pamacea/daemon/utils';
15
+ *
16
+ * const executor = new CommandExecutor();
17
+ * const result = await executor.execute('npm test', {
18
+ * timeout: 30000,
19
+ * retries: 2
20
+ * });
21
+ *
22
+ * if (result.success) {
23
+ * console.log(result.data.stdout);
24
+ * }
25
+ * ```
26
+ */
27
+ import { CommandExecutionError } from '../errors/command.error.js';
28
+ import type { Result } from '../../core/types/common.types.js';
29
+ /**
30
+ * Options for command execution
31
+ */
32
+ export interface CommandOptions {
33
+ /**
34
+ * Maximum time to wait for command completion (milliseconds)
35
+ * @default 30000 (30 seconds)
36
+ */
37
+ timeout?: number;
38
+ /**
39
+ * Suppress output logging
40
+ * @default false
41
+ */
42
+ silent?: boolean;
43
+ /**
44
+ * Number of retry attempts on failure
45
+ * @default 0
46
+ */
47
+ retries?: number;
48
+ /**
49
+ * Working directory for command execution
50
+ * @default current working directory
51
+ */
52
+ cwd?: string;
53
+ /**
54
+ * Environment variables for command execution
55
+ * Merges with process.env
56
+ */
57
+ env?: Record<string, string> | NodeJS.ProcessEnv;
58
+ /**
59
+ * Input to pass to stdin
60
+ */
61
+ input?: string | Buffer | undefined;
62
+ /**
63
+ * Maximum buffer size for stdout/stderr
64
+ * @default 1024 * 1024 (1MB)
65
+ */
66
+ maxBuffer?: number;
67
+ /**
68
+ * Initial delay before first retry (milliseconds)
69
+ * @default 1000
70
+ */
71
+ retryDelay?: number;
72
+ /**
73
+ * Multiplier for exponential backoff
74
+ * @default 2
75
+ */
76
+ retryBackoffMultiplier?: number;
77
+ /**
78
+ * Whether to reject on non-zero exit code
79
+ * @default true
80
+ */
81
+ rejectOnError?: boolean;
82
+ }
83
+ /**
84
+ * Result of command execution
85
+ */
86
+ export interface CommandResult {
87
+ /**
88
+ * Whether the command succeeded (exit code 0)
89
+ */
90
+ success: boolean;
91
+ /**
92
+ * Standard output from the command
93
+ */
94
+ stdout: string;
95
+ /**
96
+ * Standard error output from the command
97
+ */
98
+ stderr: string;
99
+ /**
100
+ * Process exit code
101
+ */
102
+ exitCode: number | null;
103
+ /**
104
+ * Execution duration in milliseconds
105
+ */
106
+ duration: number;
107
+ /**
108
+ * The command that was executed
109
+ */
110
+ command: string;
111
+ /**
112
+ * Number of retry attempts used
113
+ */
114
+ attempts: number;
115
+ /**
116
+ * Error if command failed (only present when success is false)
117
+ */
118
+ error?: Error;
119
+ }
120
+ /**
121
+ * Options for parallel command execution
122
+ */
123
+ export interface ParallelCommandOptions {
124
+ /**
125
+ * Maximum number of concurrent commands
126
+ * @default Infinity (no limit)
127
+ */
128
+ concurrency?: number;
129
+ /**
130
+ * Whether to stop all commands on first failure
131
+ * @default false
132
+ */
133
+ stopOnError?: boolean;
134
+ /**
135
+ * Global timeout for all commands (milliseconds)
136
+ */
137
+ timeout?: number;
138
+ }
139
+ /**
140
+ * Single command definition for parallel execution
141
+ */
142
+ export interface CommandDefinition {
143
+ /**
144
+ * Unique identifier for this command
145
+ */
146
+ id: string;
147
+ /**
148
+ * Command string to execute
149
+ */
150
+ command: string;
151
+ /**
152
+ * Options specific to this command
153
+ */
154
+ options?: CommandOptions;
155
+ }
156
+ /**
157
+ * Result of parallel command execution
158
+ */
159
+ export interface ParallelExecutionResult {
160
+ /**
161
+ * Map of command results by ID
162
+ */
163
+ results: Map<string, CommandResult>;
164
+ /**
165
+ * Overall success status (true if all commands succeeded)
166
+ */
167
+ success: boolean;
168
+ /**
169
+ * Total execution duration in milliseconds
170
+ */
171
+ duration: number;
172
+ /**
173
+ * Number of successful commands
174
+ */
175
+ successful: number;
176
+ /**
177
+ * Number of failed commands
178
+ */
179
+ failed: number;
180
+ /**
181
+ * Total number of commands
182
+ */
183
+ total: number;
184
+ }
185
+ /**
186
+ * Command executor with async execution, retries, and parallel support
187
+ */
188
+ export declare class CommandExecutor {
189
+ private readonly defaultOptions;
190
+ constructor(defaultOptions?: Partial<CommandOptions>);
191
+ /**
192
+ * Execute a single command
193
+ *
194
+ * @param command - Command string to execute
195
+ * @param options - Execution options
196
+ * @returns Result with stdout, stderr, exit code, and duration
197
+ */
198
+ execute(command: string, options?: CommandOptions): Promise<Result<CommandResult, CommandExecutionError>>;
199
+ /**
200
+ * Execute multiple commands in parallel
201
+ *
202
+ * @param commands - Array of command definitions
203
+ * @param parallelOptions - Parallel execution options
204
+ * @returns Aggregate result of all commands
205
+ */
206
+ executeParallel(commands: CommandDefinition[], parallelOptions?: ParallelCommandOptions): Promise<ParallelExecutionResult>;
207
+ /**
208
+ * Execute command and return Result type
209
+ */
210
+ private executeSingle;
211
+ /**
212
+ * Create a promise that rejects after timeout
213
+ */
214
+ private createTimeoutReject;
215
+ /**
216
+ * Sleep utility for retry delays
217
+ */
218
+ private sleep;
219
+ /**
220
+ * Execute command synchronously (for compatibility only - not recommended)
221
+ *
222
+ * @deprecated Use execute() instead for async execution
223
+ */
224
+ executeSync(_command: string, _options?: CommandOptions): Result<CommandResult, CommandExecutionError>;
225
+ }
226
+ /**
227
+ * Default singleton instance
228
+ */
229
+ export declare const commandExecutor: CommandExecutor;
230
+ /**
231
+ * Convenience function to execute a command
232
+ *
233
+ * @example
234
+ * ```ts
235
+ * import { executeCommand } from '@pamacea/daemon/utils';
236
+ *
237
+ * const result = await executeCommand('npm test', { timeout: 60000 });
238
+ * ```
239
+ */
240
+ export declare function executeCommand(command: string, options?: CommandOptions): Promise<Result<CommandResult, CommandExecutionError>>;
241
+ /**
242
+ * Convenience function to execute commands in parallel
243
+ *
244
+ * @example
245
+ * ```ts
246
+ * import { executeCommandsParallel } from '@pamacea/daemon/utils';
247
+ *
248
+ * const result = await executeCommandsParallel([
249
+ * { id: 'test', command: 'npm test' },
250
+ * { id: 'lint', command: 'npm run lint' },
251
+ * ], { concurrency: 2 });
252
+ * ```
253
+ */
254
+ export declare function executeCommandsParallel(commands: CommandDefinition[], options?: ParallelCommandOptions): Promise<ParallelExecutionResult>;
255
+ //# sourceMappingURL=command-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-executor.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/command-executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,287 @@
1
+ /**
2
+ * Command Executor
3
+ *
4
+ * Utility for executing shell commands with:
5
+ * - Async execution using promisified exec
6
+ * - Timeout handling
7
+ * - Retry logic with exponential backoff
8
+ * - Environment and working directory control
9
+ * - Structured error handling
10
+ * - Execution metrics
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * import { CommandExecutor } from '@pamacea/daemon/utils';
15
+ *
16
+ * const executor = new CommandExecutor();
17
+ * const result = await executor.execute('npm test', {
18
+ * timeout: 30000,
19
+ * retries: 2
20
+ * });
21
+ *
22
+ * if (result.success) {
23
+ * console.log(result.data.stdout);
24
+ * }
25
+ * ```
26
+ */
27
+ import { exec } from 'node:child_process';
28
+ import { promisify } from 'node:util';
29
+ import { CommandExecutionError, CommandFailedError, CommandTimeoutError, CommandNotFoundError, } from '../errors/command.error.js';
30
+ const execAsync = promisify(exec);
31
+ /**
32
+ * Default configuration values
33
+ */
34
+ const DEFAULTS = {
35
+ timeout: 30000, // 30 seconds
36
+ retries: 0,
37
+ silent: false,
38
+ };
39
+ /**
40
+ * Resolve error code to specific error type
41
+ */
42
+ function resolveCommandError(command, exitCode, stdout, stderr, duration, options) {
43
+ // Check for ENOENT (command not found)
44
+ if (stderr.includes('not found') || stderr.includes('command not found') || stderr.includes('no such file')) {
45
+ return new CommandNotFoundError(command);
46
+ }
47
+ // Check timeout
48
+ if (options.timeout && duration >= options.timeout) {
49
+ return new CommandTimeoutError(command, options.timeout);
50
+ }
51
+ // Default to failed error
52
+ return new CommandFailedError(command, exitCode ?? -1, stdout, stderr);
53
+ }
54
+ /**
55
+ * Calculate delay with exponential backoff
56
+ */
57
+ function calculateRetryDelay(attempt, baseDelay, multiplier) {
58
+ return Math.min(baseDelay * Math.pow(multiplier, attempt), 30000);
59
+ }
60
+ /**
61
+ * Command executor with async execution, retries, and parallel support
62
+ */
63
+ export class CommandExecutor {
64
+ defaultOptions;
65
+ constructor(defaultOptions = {}) {
66
+ this.defaultOptions = {
67
+ timeout: defaultOptions.timeout ?? DEFAULTS.timeout,
68
+ silent: defaultOptions.silent ?? DEFAULTS.silent,
69
+ retries: defaultOptions.retries ?? DEFAULTS.retries,
70
+ cwd: defaultOptions.cwd,
71
+ env: defaultOptions.env,
72
+ };
73
+ }
74
+ /**
75
+ * Execute a single command
76
+ *
77
+ * @param command - Command string to execute
78
+ * @param options - Execution options
79
+ * @returns Result with stdout, stderr, exit code, and duration
80
+ */
81
+ async execute(command, options = {}) {
82
+ const mergedOptions = {
83
+ timeout: options.timeout ?? this.defaultOptions.timeout ?? DEFAULTS.timeout,
84
+ silent: options.silent ?? this.defaultOptions.silent ?? DEFAULTS.silent,
85
+ retries: options.retries ?? this.defaultOptions.retries ?? DEFAULTS.retries,
86
+ cwd: options.cwd ?? this.defaultOptions.cwd ?? process.cwd(),
87
+ env: options.env ?? this.defaultOptions.env ?? process.env,
88
+ input: options.input ?? undefined,
89
+ maxBuffer: options.maxBuffer ?? 1024 * 1024,
90
+ retryDelay: options.retryDelay ?? 1000,
91
+ retryBackoffMultiplier: options.retryBackoffMultiplier ?? 2,
92
+ rejectOnError: options.rejectOnError ?? true,
93
+ };
94
+ let lastError = null;
95
+ let attempts = 0;
96
+ const maxAttempts = mergedOptions.retries + 1;
97
+ for (let attempt = 0; attempt < maxAttempts; attempt++) {
98
+ attempts = attempt + 1;
99
+ if (attempt > 0 && mergedOptions.retries > 0) {
100
+ const delay = calculateRetryDelay(attempt, mergedOptions.retryDelay, mergedOptions.retryBackoffMultiplier);
101
+ await this.sleep(delay);
102
+ }
103
+ const result = await this.executeSingle(command, mergedOptions);
104
+ if (result.success) {
105
+ return result;
106
+ }
107
+ lastError = result.error ?? null;
108
+ }
109
+ // All retries exhausted
110
+ return {
111
+ success: false,
112
+ error: lastError ?? new CommandExecutionError(command, command, null, '', ''),
113
+ };
114
+ }
115
+ /**
116
+ * Execute multiple commands in parallel
117
+ *
118
+ * @param commands - Array of command definitions
119
+ * @param parallelOptions - Parallel execution options
120
+ * @returns Aggregate result of all commands
121
+ */
122
+ async executeParallel(commands, parallelOptions = {}) {
123
+ const startTime = performance.now();
124
+ const results = new Map();
125
+ const { concurrency = Infinity, stopOnError = false } = parallelOptions;
126
+ let successful = 0;
127
+ let failed = 0;
128
+ let shouldStop = false;
129
+ // Process commands in batches based on concurrency
130
+ for (let i = 0; i < commands.length; i += concurrency) {
131
+ if (shouldStop)
132
+ break;
133
+ const batch = commands.slice(i, i + concurrency);
134
+ const batchPromises = batch.map(async (cmd) => {
135
+ if (shouldStop)
136
+ return null;
137
+ const result = await this.execute(cmd.command, cmd.options);
138
+ const cmdResult = result.success
139
+ ? result.data
140
+ : {
141
+ success: false,
142
+ stdout: '',
143
+ stderr: result.error?.stderr ?? '',
144
+ exitCode: result.error?.exitCode ?? null,
145
+ duration: 0,
146
+ command: cmd.command,
147
+ attempts: 1,
148
+ error: result.error,
149
+ };
150
+ results.set(cmd.id, cmdResult);
151
+ if (cmdResult.success) {
152
+ successful++;
153
+ }
154
+ else {
155
+ failed++;
156
+ if (stopOnError) {
157
+ shouldStop = true;
158
+ }
159
+ }
160
+ return cmdResult;
161
+ });
162
+ await Promise.all(batchPromises);
163
+ }
164
+ const duration = Math.round(performance.now() - startTime);
165
+ return {
166
+ results,
167
+ success: failed === 0,
168
+ duration,
169
+ successful,
170
+ failed,
171
+ total: commands.length,
172
+ };
173
+ }
174
+ /**
175
+ * Execute command and return Result type
176
+ */
177
+ async executeSingle(command, options) {
178
+ const startTime = performance.now();
179
+ try {
180
+ // Build exec options
181
+ const execOptions = {
182
+ cwd: options.cwd,
183
+ env: { ...process.env, ...options.env },
184
+ timeout: options.timeout,
185
+ maxBuffer: options.maxBuffer,
186
+ encoding: 'utf8',
187
+ };
188
+ // Execute command with timeout wrapper
189
+ const result = await Promise.race([
190
+ execAsync(command, execOptions),
191
+ this.createTimeoutReject(options.timeout, command),
192
+ ]);
193
+ const duration = Math.round(performance.now() - startTime);
194
+ return {
195
+ success: true,
196
+ data: {
197
+ success: true,
198
+ stdout: result.stdout,
199
+ stderr: result.stderr,
200
+ exitCode: 0,
201
+ duration,
202
+ command,
203
+ attempts: 1,
204
+ },
205
+ };
206
+ }
207
+ catch (error) {
208
+ const duration = Math.round(performance.now() - startTime);
209
+ const err = error;
210
+ // Extract stdout/stderr from error
211
+ const stdout = err.stdout ?? '';
212
+ const stderr = err.stderr ?? '';
213
+ // Determine exit code
214
+ let exitCode = null;
215
+ if (err.killed) {
216
+ exitCode = null; // Killed by timeout
217
+ }
218
+ else if (err.code === 'ENOENT') {
219
+ exitCode = null; // Command not found
220
+ }
221
+ // Create appropriate error
222
+ const commandError = resolveCommandError(command, exitCode, stdout, stderr, duration, options);
223
+ return {
224
+ success: false,
225
+ error: commandError,
226
+ };
227
+ }
228
+ }
229
+ /**
230
+ * Create a promise that rejects after timeout
231
+ */
232
+ createTimeoutReject(timeout, command) {
233
+ return new Promise((_, reject) => {
234
+ setTimeout(() => {
235
+ reject(new CommandTimeoutError(command, timeout));
236
+ }, timeout + 100); // Add small buffer
237
+ });
238
+ }
239
+ /**
240
+ * Sleep utility for retry delays
241
+ */
242
+ sleep(ms) {
243
+ return new Promise((resolve) => setTimeout(resolve, ms));
244
+ }
245
+ /**
246
+ * Execute command synchronously (for compatibility only - not recommended)
247
+ *
248
+ * @deprecated Use execute() instead for async execution
249
+ */
250
+ executeSync(_command, _options) {
251
+ throw new Error('Synchronous execution is not supported. Use the async execute() method instead.');
252
+ }
253
+ }
254
+ /**
255
+ * Default singleton instance
256
+ */
257
+ export const commandExecutor = new CommandExecutor();
258
+ /**
259
+ * Convenience function to execute a command
260
+ *
261
+ * @example
262
+ * ```ts
263
+ * import { executeCommand } from '@pamacea/daemon/utils';
264
+ *
265
+ * const result = await executeCommand('npm test', { timeout: 60000 });
266
+ * ```
267
+ */
268
+ export async function executeCommand(command, options) {
269
+ return commandExecutor.execute(command, options);
270
+ }
271
+ /**
272
+ * Convenience function to execute commands in parallel
273
+ *
274
+ * @example
275
+ * ```ts
276
+ * import { executeCommandsParallel } from '@pamacea/daemon/utils';
277
+ *
278
+ * const result = await executeCommandsParallel([
279
+ * { id: 'test', command: 'npm test' },
280
+ * { id: 'lint', command: 'npm run lint' },
281
+ * ], { concurrency: 2 });
282
+ * ```
283
+ */
284
+ export async function executeCommandsParallel(commands, options) {
285
+ return commandExecutor.executeParallel(commands, options);
286
+ }
287
+ //# sourceMappingURL=command-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-executor.js","sourceRoot":"","sources":["../../../src/shared/utils/command-executor.ts"],"names":[],"mappings":"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"}