@specforge/mcp 2.6.0 → 3.0.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 (237) hide show
  1. package/README.md +73 -0
  2. package/bin/{specforge-mcp → specforge} +0 -5
  3. package/dist/ai-provider/circuit-breaker.d.ts +63 -0
  4. package/dist/ai-provider/circuit-breaker.d.ts.map +1 -0
  5. package/dist/ai-provider/circuit-breaker.js +160 -0
  6. package/dist/ai-provider/circuit-breaker.js.map +1 -0
  7. package/dist/ai-provider/cli-version.d.ts +50 -0
  8. package/dist/ai-provider/cli-version.d.ts.map +1 -0
  9. package/dist/ai-provider/cli-version.js +141 -0
  10. package/dist/ai-provider/cli-version.js.map +1 -0
  11. package/dist/ai-provider/config-loader.d.ts +45 -0
  12. package/dist/ai-provider/config-loader.d.ts.map +1 -0
  13. package/dist/ai-provider/config-loader.js +106 -0
  14. package/dist/ai-provider/config-loader.js.map +1 -0
  15. package/dist/ai-provider/errors.d.ts +48 -0
  16. package/dist/ai-provider/errors.d.ts.map +1 -0
  17. package/dist/ai-provider/errors.js +102 -0
  18. package/dist/ai-provider/errors.js.map +1 -0
  19. package/dist/ai-provider/events.d.ts +73 -0
  20. package/dist/ai-provider/events.d.ts.map +1 -0
  21. package/dist/ai-provider/events.js +75 -0
  22. package/dist/ai-provider/events.js.map +1 -0
  23. package/dist/ai-provider/factory.d.ts +31 -0
  24. package/dist/ai-provider/factory.d.ts.map +1 -0
  25. package/dist/ai-provider/factory.js +100 -0
  26. package/dist/ai-provider/factory.js.map +1 -0
  27. package/dist/ai-provider/index.d.ts +24 -0
  28. package/dist/ai-provider/index.d.ts.map +1 -0
  29. package/dist/ai-provider/index.js +46 -0
  30. package/dist/ai-provider/index.js.map +1 -0
  31. package/dist/ai-provider/instance-coordinator.d.ts +54 -0
  32. package/dist/ai-provider/instance-coordinator.d.ts.map +1 -0
  33. package/dist/ai-provider/instance-coordinator.js +199 -0
  34. package/dist/ai-provider/instance-coordinator.js.map +1 -0
  35. package/dist/ai-provider/jsonl-parser.d.ts +43 -0
  36. package/dist/ai-provider/jsonl-parser.d.ts.map +1 -0
  37. package/dist/ai-provider/jsonl-parser.js +107 -0
  38. package/dist/ai-provider/jsonl-parser.js.map +1 -0
  39. package/dist/ai-provider/lifecycle.d.ts +50 -0
  40. package/dist/ai-provider/lifecycle.d.ts.map +1 -0
  41. package/dist/ai-provider/lifecycle.js +145 -0
  42. package/dist/ai-provider/lifecycle.js.map +1 -0
  43. package/dist/ai-provider/logger.d.ts +69 -0
  44. package/dist/ai-provider/logger.d.ts.map +1 -0
  45. package/dist/ai-provider/logger.js +161 -0
  46. package/dist/ai-provider/logger.js.map +1 -0
  47. package/dist/ai-provider/metrics.d.ts +91 -0
  48. package/dist/ai-provider/metrics.d.ts.map +1 -0
  49. package/dist/ai-provider/metrics.js +187 -0
  50. package/dist/ai-provider/metrics.js.map +1 -0
  51. package/dist/ai-provider/process-manager.d.ts +97 -0
  52. package/dist/ai-provider/process-manager.d.ts.map +1 -0
  53. package/dist/ai-provider/process-manager.js +477 -0
  54. package/dist/ai-provider/process-manager.js.map +1 -0
  55. package/dist/ai-provider/providers/claude-code.d.ts +64 -0
  56. package/dist/ai-provider/providers/claude-code.d.ts.map +1 -0
  57. package/dist/ai-provider/providers/claude-code.js +205 -0
  58. package/dist/ai-provider/providers/claude-code.js.map +1 -0
  59. package/dist/ai-provider/retry-executor.d.ts +52 -0
  60. package/dist/ai-provider/retry-executor.d.ts.map +1 -0
  61. package/dist/ai-provider/retry-executor.js +138 -0
  62. package/dist/ai-provider/retry-executor.js.map +1 -0
  63. package/dist/ai-provider/safe-args.d.ts +58 -0
  64. package/dist/ai-provider/safe-args.d.ts.map +1 -0
  65. package/dist/ai-provider/safe-args.js +176 -0
  66. package/dist/ai-provider/safe-args.js.map +1 -0
  67. package/dist/ai-provider/semaphore.d.ts +50 -0
  68. package/dist/ai-provider/semaphore.d.ts.map +1 -0
  69. package/dist/ai-provider/semaphore.js +97 -0
  70. package/dist/ai-provider/semaphore.js.map +1 -0
  71. package/dist/ai-provider/tracer.d.ts +67 -0
  72. package/dist/ai-provider/tracer.d.ts.map +1 -0
  73. package/dist/ai-provider/tracer.js +209 -0
  74. package/dist/ai-provider/tracer.js.map +1 -0
  75. package/dist/ai-provider/types.d.ts +181 -0
  76. package/dist/ai-provider/types.d.ts.map +1 -0
  77. package/dist/ai-provider/types.js +8 -0
  78. package/dist/ai-provider/types.js.map +1 -0
  79. package/dist/autopilot/agents/agent-runner.d.ts +109 -0
  80. package/dist/autopilot/agents/agent-runner.d.ts.map +1 -0
  81. package/dist/autopilot/agents/agent-runner.js +731 -0
  82. package/dist/autopilot/agents/agent-runner.js.map +1 -0
  83. package/dist/autopilot/agents/agent-selector.d.ts +59 -0
  84. package/dist/autopilot/agents/agent-selector.d.ts.map +1 -0
  85. package/dist/autopilot/agents/agent-selector.js +234 -0
  86. package/dist/autopilot/agents/agent-selector.js.map +1 -0
  87. package/dist/autopilot/agents/model-selector.d.ts +49 -0
  88. package/dist/autopilot/agents/model-selector.d.ts.map +1 -0
  89. package/dist/autopilot/agents/model-selector.js +62 -0
  90. package/dist/autopilot/agents/model-selector.js.map +1 -0
  91. package/dist/autopilot/agents/profiles/builtin.d.ts +55 -0
  92. package/dist/autopilot/agents/profiles/builtin.d.ts.map +1 -0
  93. package/dist/autopilot/agents/profiles/builtin.js +323 -0
  94. package/dist/autopilot/agents/profiles/builtin.js.map +1 -0
  95. package/dist/autopilot/agents/profiles/types.d.ts +98 -0
  96. package/dist/autopilot/agents/profiles/types.d.ts.map +1 -0
  97. package/dist/autopilot/agents/profiles/types.js +17 -0
  98. package/dist/autopilot/agents/profiles/types.js.map +1 -0
  99. package/dist/autopilot/api/autopilot-api-client.d.ts +217 -0
  100. package/dist/autopilot/api/autopilot-api-client.d.ts.map +1 -0
  101. package/dist/autopilot/api/autopilot-api-client.js +402 -0
  102. package/dist/autopilot/api/autopilot-api-client.js.map +1 -0
  103. package/dist/autopilot/cli/abort.d.ts +20 -0
  104. package/dist/autopilot/cli/abort.d.ts.map +1 -0
  105. package/dist/autopilot/cli/abort.js +201 -0
  106. package/dist/autopilot/cli/abort.js.map +1 -0
  107. package/dist/autopilot/cli/display.d.ts +63 -0
  108. package/dist/autopilot/cli/display.d.ts.map +1 -0
  109. package/dist/autopilot/cli/display.js +260 -0
  110. package/dist/autopilot/cli/display.js.map +1 -0
  111. package/dist/autopilot/cli/index.d.ts +24 -0
  112. package/dist/autopilot/cli/index.d.ts.map +1 -0
  113. package/dist/autopilot/cli/index.js +79 -0
  114. package/dist/autopilot/cli/index.js.map +1 -0
  115. package/dist/autopilot/cli/pause.d.ts +18 -0
  116. package/dist/autopilot/cli/pause.d.ts.map +1 -0
  117. package/dist/autopilot/cli/pause.js +110 -0
  118. package/dist/autopilot/cli/pause.js.map +1 -0
  119. package/dist/autopilot/cli/resume.d.ts +22 -0
  120. package/dist/autopilot/cli/resume.d.ts.map +1 -0
  121. package/dist/autopilot/cli/resume.js +172 -0
  122. package/dist/autopilot/cli/resume.js.map +1 -0
  123. package/dist/autopilot/cli/run.d.ts +25 -0
  124. package/dist/autopilot/cli/run.d.ts.map +1 -0
  125. package/dist/autopilot/cli/run.js +220 -0
  126. package/dist/autopilot/cli/run.js.map +1 -0
  127. package/dist/autopilot/cli/status.d.ts +20 -0
  128. package/dist/autopilot/cli/status.d.ts.map +1 -0
  129. package/dist/autopilot/cli/status.js +217 -0
  130. package/dist/autopilot/cli/status.js.map +1 -0
  131. package/dist/autopilot/config.d.ts +45 -0
  132. package/dist/autopilot/config.d.ts.map +1 -0
  133. package/dist/autopilot/config.js +269 -0
  134. package/dist/autopilot/config.js.map +1 -0
  135. package/dist/autopilot/core/dependency-resolver.d.ts +108 -0
  136. package/dist/autopilot/core/dependency-resolver.d.ts.map +1 -0
  137. package/dist/autopilot/core/dependency-resolver.js +394 -0
  138. package/dist/autopilot/core/dependency-resolver.js.map +1 -0
  139. package/dist/autopilot/core/dispatcher.d.ts +215 -0
  140. package/dist/autopilot/core/dispatcher.d.ts.map +1 -0
  141. package/dist/autopilot/core/dispatcher.js +594 -0
  142. package/dist/autopilot/core/dispatcher.js.map +1 -0
  143. package/dist/autopilot/core/failure-handler.d.ts +145 -0
  144. package/dist/autopilot/core/failure-handler.d.ts.map +1 -0
  145. package/dist/autopilot/core/failure-handler.js +308 -0
  146. package/dist/autopilot/core/failure-handler.js.map +1 -0
  147. package/dist/autopilot/core/rate-limit-handler.d.ts +108 -0
  148. package/dist/autopilot/core/rate-limit-handler.d.ts.map +1 -0
  149. package/dist/autopilot/core/rate-limit-handler.js +195 -0
  150. package/dist/autopilot/core/rate-limit-handler.js.map +1 -0
  151. package/dist/autopilot/core/state-manager.d.ts +160 -0
  152. package/dist/autopilot/core/state-manager.d.ts.map +1 -0
  153. package/dist/autopilot/core/state-manager.js +393 -0
  154. package/dist/autopilot/core/state-manager.js.map +1 -0
  155. package/dist/autopilot/core/timeout-manager.d.ts +95 -0
  156. package/dist/autopilot/core/timeout-manager.d.ts.map +1 -0
  157. package/dist/autopilot/core/timeout-manager.js +188 -0
  158. package/dist/autopilot/core/timeout-manager.js.map +1 -0
  159. package/dist/autopilot/git/branch-manager.d.ts +117 -0
  160. package/dist/autopilot/git/branch-manager.d.ts.map +1 -0
  161. package/dist/autopilot/git/branch-manager.js +238 -0
  162. package/dist/autopilot/git/branch-manager.js.map +1 -0
  163. package/dist/autopilot/git/index.d.ts +9 -0
  164. package/dist/autopilot/git/index.d.ts.map +1 -0
  165. package/dist/autopilot/git/index.js +9 -0
  166. package/dist/autopilot/git/index.js.map +1 -0
  167. package/dist/autopilot/git/merge-manager.d.ts +118 -0
  168. package/dist/autopilot/git/merge-manager.d.ts.map +1 -0
  169. package/dist/autopilot/git/merge-manager.js +304 -0
  170. package/dist/autopilot/git/merge-manager.js.map +1 -0
  171. package/dist/autopilot/git/worktree-manager.d.ts +128 -0
  172. package/dist/autopilot/git/worktree-manager.d.ts.map +1 -0
  173. package/dist/autopilot/git/worktree-manager.js +298 -0
  174. package/dist/autopilot/git/worktree-manager.js.map +1 -0
  175. package/dist/autopilot/index.d.ts +30 -0
  176. package/dist/autopilot/index.d.ts.map +1 -0
  177. package/dist/autopilot/index.js +55 -0
  178. package/dist/autopilot/index.js.map +1 -0
  179. package/dist/autopilot/sync/index.d.ts +7 -0
  180. package/dist/autopilot/sync/index.d.ts.map +1 -0
  181. package/dist/autopilot/sync/index.js +7 -0
  182. package/dist/autopilot/sync/index.js.map +1 -0
  183. package/dist/autopilot/sync/sync-manager.d.ts +168 -0
  184. package/dist/autopilot/sync/sync-manager.d.ts.map +1 -0
  185. package/dist/autopilot/sync/sync-manager.js +303 -0
  186. package/dist/autopilot/sync/sync-manager.js.map +1 -0
  187. package/dist/autopilot/types.d.ts +454 -0
  188. package/dist/autopilot/types.d.ts.map +1 -0
  189. package/dist/autopilot/types.js +26 -0
  190. package/dist/autopilot/types.js.map +1 -0
  191. package/dist/autopilot/utils/audit-logger.d.ts +176 -0
  192. package/dist/autopilot/utils/audit-logger.d.ts.map +1 -0
  193. package/dist/autopilot/utils/audit-logger.js +308 -0
  194. package/dist/autopilot/utils/audit-logger.js.map +1 -0
  195. package/dist/autopilot/utils/cost-tracker.d.ts +162 -0
  196. package/dist/autopilot/utils/cost-tracker.d.ts.map +1 -0
  197. package/dist/autopilot/utils/cost-tracker.js +269 -0
  198. package/dist/autopilot/utils/cost-tracker.js.map +1 -0
  199. package/dist/autopilot/utils/index.d.ts +9 -0
  200. package/dist/autopilot/utils/index.d.ts.map +1 -0
  201. package/dist/autopilot/utils/index.js +9 -0
  202. package/dist/autopilot/utils/index.js.map +1 -0
  203. package/dist/autopilot/utils/progress-reporter.d.ts +132 -0
  204. package/dist/autopilot/utils/progress-reporter.d.ts.map +1 -0
  205. package/dist/autopilot/utils/progress-reporter.js +290 -0
  206. package/dist/autopilot/utils/progress-reporter.js.map +1 -0
  207. package/dist/autopilot/worker/worker-pool.d.ts +179 -0
  208. package/dist/autopilot/worker/worker-pool.d.ts.map +1 -0
  209. package/dist/autopilot/worker/worker-pool.js +331 -0
  210. package/dist/autopilot/worker/worker-pool.js.map +1 -0
  211. package/dist/autopilot/worker/worker-session.d.ts +171 -0
  212. package/dist/autopilot/worker/worker-session.d.ts.map +1 -0
  213. package/dist/autopilot/worker/worker-session.js +295 -0
  214. package/dist/autopilot/worker/worker-session.js.map +1 -0
  215. package/dist/cli/index.d.ts +1 -1
  216. package/dist/cli/index.d.ts.map +1 -1
  217. package/dist/cli/index.js +4 -1
  218. package/dist/cli/index.js.map +1 -1
  219. package/dist/index.js +0 -1
  220. package/dist/index.js.map +1 -1
  221. package/dist/tools/core/epic.js +1 -1
  222. package/dist/tools/core/epic.js.map +1 -1
  223. package/dist/tools/core/lookup.d.ts.map +1 -1
  224. package/dist/tools/core/lookup.js +3 -2
  225. package/dist/tools/core/lookup.js.map +1 -1
  226. package/dist/tools/core/specification.js +1 -1
  227. package/dist/tools/core/specification.js.map +1 -1
  228. package/dist/tools/core/ticket.d.ts.map +1 -1
  229. package/dist/tools/core/ticket.js +4 -6
  230. package/dist/tools/core/ticket.js.map +1 -1
  231. package/dist/tools/index.d.ts.map +1 -1
  232. package/dist/tools/index.js +60 -0
  233. package/dist/tools/index.js.map +1 -1
  234. package/dist/validation/index.d.ts.map +1 -1
  235. package/dist/validation/index.js +4 -1
  236. package/dist/validation/index.js.map +1 -1
  237. package/package.json +8 -4
@@ -0,0 +1,477 @@
1
+ /**
2
+ * Claude Code Process Manager
3
+ *
4
+ * Core module for spawning and managing Claude CLI processes.
5
+ */
6
+ import { spawn } from 'child_process';
7
+ import { Semaphore } from './semaphore.js';
8
+ import { CircuitBreaker } from './circuit-breaker.js';
9
+ import { RetryExecutor } from './retry-executor.js';
10
+ import { SafeArgumentBuilder } from './safe-args.js';
11
+ import { createLogger } from './logger.js';
12
+ import { createMetrics, METRIC_NAMES } from './metrics.js';
13
+ import { createTracer } from './tracer.js';
14
+ import { aiProviderEvents } from './events.js';
15
+ import { CLINotFoundError, TimeoutError, AuthenticationError, RateLimitError } from './errors.js';
16
+ const logger = createLogger('ProcessManager');
17
+ /**
18
+ * Rate limit detection patterns.
19
+ */
20
+ const RATE_LIMIT_PATTERNS = [
21
+ 'rate limit',
22
+ 'usage limit',
23
+ 'too many requests',
24
+ 'quota exceeded',
25
+ 'limit reached',
26
+ 'try again later',
27
+ ];
28
+ /**
29
+ * Authentication error detection patterns.
30
+ */
31
+ const AUTH_ERROR_PATTERNS = [
32
+ 'not logged in',
33
+ 'authentication required',
34
+ 'please login',
35
+ 'unauthorized',
36
+ 'invalid credentials',
37
+ ];
38
+ /**
39
+ * Claude CLI Process Manager.
40
+ */
41
+ export class ClaudeCodeProcessManager {
42
+ config;
43
+ semaphore;
44
+ circuitBreaker;
45
+ retryExecutor;
46
+ activeProcesses = new Map();
47
+ isRateLimited = false;
48
+ rateLimitMessage;
49
+ metrics = createMetrics();
50
+ tracer = createTracer();
51
+ isShuttingDown = false;
52
+ constructor(config) {
53
+ this.config = config;
54
+ this.semaphore = new Semaphore(config.maxParallel);
55
+ this.circuitBreaker = new CircuitBreaker({
56
+ failureThreshold: config.circuitBreakerThreshold || 5,
57
+ recoveryTimeMs: 30000,
58
+ halfOpenRequests: 2,
59
+ });
60
+ this.retryExecutor = new RetryExecutor({
61
+ maxRetries: config.maxRetries,
62
+ baseDelayMs: 1000,
63
+ maxDelayMs: 30000,
64
+ });
65
+ }
66
+ /**
67
+ * Check if user is authenticated with Claude Code.
68
+ */
69
+ async checkAuth() {
70
+ const span = this.tracer.startSpan('checkAuth');
71
+ try {
72
+ const result = await this.spawn(['--version']);
73
+ // Check for auth errors
74
+ if (this.isAuthError(result)) {
75
+ span.setStatus('unauthenticated');
76
+ return {
77
+ authenticated: false,
78
+ error: 'Not logged in. Please run: claude login',
79
+ };
80
+ }
81
+ // Extract version from output (format: "2.1.22 (Claude Code)")
82
+ const versionMatch = result.stdout?.match(/(\d+\.\d+\.\d+)/);
83
+ const cliVersion = versionMatch?.[1];
84
+ span.setStatus('authenticated');
85
+ aiProviderEvents.emit('auth:success');
86
+ return { authenticated: true, cliVersion };
87
+ }
88
+ catch (error) {
89
+ span.setStatus('error', error);
90
+ if (error.code === 'ENOENT') {
91
+ return {
92
+ authenticated: false,
93
+ error: 'Claude Code CLI not found. Please install: npm install -g @anthropic-ai/claude-code',
94
+ };
95
+ }
96
+ return {
97
+ authenticated: false,
98
+ error: `Claude Code CLI error: ${error.message}`,
99
+ };
100
+ }
101
+ finally {
102
+ span.end();
103
+ }
104
+ }
105
+ /**
106
+ * Run a prompt using Claude Code CLI.
107
+ */
108
+ async run(prompt, options) {
109
+ if (this.isShuttingDown) {
110
+ return {
111
+ success: false,
112
+ error: 'Process manager is shutting down',
113
+ errorType: 'unknown',
114
+ };
115
+ }
116
+ const requestId = this.tracer.generateRequestId();
117
+ const span = this.tracer.startSpan('run', { requestId });
118
+ const startTime = Date.now();
119
+ // Check circuit breaker
120
+ if (!this.circuitBreaker.canRequest()) {
121
+ span.setStatus('circuit_open');
122
+ this.metrics.increment(METRIC_NAMES.REQUESTS_CIRCUIT_BLOCKED);
123
+ return {
124
+ success: false,
125
+ error: 'Service temporarily unavailable',
126
+ errorType: 'network',
127
+ suggestion: 'Too many recent failures. Please wait before retrying.',
128
+ };
129
+ }
130
+ // Acquire semaphore slot
131
+ const release = await this.semaphore.acquire();
132
+ this.metrics.increment(METRIC_NAMES.REQUESTS_STARTED);
133
+ logger.debug('Starting prompt execution', {
134
+ requestId,
135
+ promptLength: prompt.length,
136
+ });
137
+ try {
138
+ // Execute with retry
139
+ const result = await this.retryExecutor.execute(() => this.executePrompt(prompt, options, requestId), (error) => this.isRetryable(error));
140
+ this.circuitBreaker.recordSuccess();
141
+ this.metrics.increment(METRIC_NAMES.REQUESTS_SUCCESS);
142
+ this.metrics.histogram(METRIC_NAMES.REQUEST_DURATION_MS, Date.now() - startTime);
143
+ logger.debug('Prompt execution succeeded', {
144
+ requestId,
145
+ outputLength: result.output?.length ?? 0,
146
+ durationMs: result.durationMs,
147
+ });
148
+ span.setStatus('success');
149
+ return result;
150
+ }
151
+ catch (error) {
152
+ this.circuitBreaker.recordFailure();
153
+ this.metrics.increment(METRIC_NAMES.REQUESTS_FAILURE);
154
+ span.setStatus('error', error);
155
+ const errorType = this.categorizeError(error);
156
+ this.metrics.increment(`errors.${errorType}`);
157
+ logger.debug('Prompt execution failed', {
158
+ requestId,
159
+ error: error.message,
160
+ errorType,
161
+ durationMs: Date.now() - startTime,
162
+ });
163
+ return {
164
+ success: false,
165
+ error: error.message,
166
+ errorType,
167
+ durationMs: Date.now() - startTime,
168
+ };
169
+ }
170
+ finally {
171
+ release();
172
+ span.end();
173
+ }
174
+ }
175
+ /**
176
+ * Execute prompt with CLI.
177
+ */
178
+ async executePrompt(prompt, options, requestId) {
179
+ logger.debug('Executing prompt', {
180
+ promptLength: prompt.length,
181
+ requestId,
182
+ cwd: options?.workingDirectory || this.config.workingDirectory,
183
+ });
184
+ const args = SafeArgumentBuilder.build({
185
+ print: true,
186
+ outputFormat: 'text',
187
+ prompt,
188
+ model: options?.model,
189
+ sessionId: options?.sessionId,
190
+ dangerouslySkipPermissions: this.config.dangerouslySkipPermissions,
191
+ });
192
+ const result = await this.spawn(args, {
193
+ cwd: options?.workingDirectory || this.config.workingDirectory,
194
+ timeout: options?.timeout || this.config.timeoutMs,
195
+ requestId,
196
+ });
197
+ logger.debug('Spawn completed', {
198
+ requestId,
199
+ exitCode: result.code,
200
+ stdoutLength: result.stdout?.length ?? 0,
201
+ stderrLength: result.stderr?.length ?? 0,
202
+ durationMs: result.durationMs,
203
+ });
204
+ // Check for rate limit
205
+ if (this.isRateLimitError(result)) {
206
+ this.isRateLimited = true;
207
+ this.rateLimitMessage = 'Account usage limit reached';
208
+ aiProviderEvents.emit('rate_limit:hit', {
209
+ message: this.rateLimitMessage,
210
+ timestamp: Date.now(),
211
+ });
212
+ this.metrics.increment(METRIC_NAMES.ERRORS_RATE_LIMIT);
213
+ throw new RateLimitError(this.rateLimitMessage);
214
+ }
215
+ // Check for auth error
216
+ if (this.isAuthError(result)) {
217
+ aiProviderEvents.emit('auth:failed', {
218
+ error: 'Not authenticated',
219
+ suggestion: 'Please run: claude login',
220
+ });
221
+ this.metrics.increment(METRIC_NAMES.ERRORS_AUTH);
222
+ throw new AuthenticationError();
223
+ }
224
+ // Check for non-zero exit code
225
+ if (result.code !== 0) {
226
+ throw new Error(result.stderr || `Process exited with code ${result.code}`);
227
+ }
228
+ return {
229
+ success: true,
230
+ output: result.stdout,
231
+ durationMs: result.durationMs,
232
+ };
233
+ }
234
+ /**
235
+ * Spawn a Claude CLI process.
236
+ */
237
+ async spawn(args, options) {
238
+ return new Promise((resolve, reject) => {
239
+ const startTime = Date.now();
240
+ const requestId = options?.requestId || this.tracer.generateRequestId();
241
+ logger.debug('Spawning Claude CLI', {
242
+ args: args.slice(0, 2),
243
+ requestId,
244
+ cwd: options?.cwd,
245
+ });
246
+ let proc;
247
+ try {
248
+ proc = spawn('claude', args, {
249
+ cwd: options?.cwd || this.config.workingDirectory,
250
+ stdio: ['pipe', 'pipe', 'pipe'],
251
+ env: {
252
+ ...process.env,
253
+ CLAUDE_REQUEST_ID: requestId,
254
+ // Ensure non-interactive mode
255
+ TERM: 'dumb',
256
+ NO_COLOR: '1',
257
+ CLAUDE_CODE_HEADLESS: '1',
258
+ },
259
+ });
260
+ // Close stdin immediately to signal non-interactive mode
261
+ proc.stdin?.end();
262
+ }
263
+ catch (error) {
264
+ if (error.code === 'ENOENT') {
265
+ reject(new CLINotFoundError());
266
+ return;
267
+ }
268
+ reject(error);
269
+ return;
270
+ }
271
+ this.activeProcesses.set(requestId, proc);
272
+ this.metrics.increment(METRIC_NAMES.PROCESSES_SPAWNED);
273
+ this.metrics.gauge(METRIC_NAMES.PROCESSES_ACTIVE, this.activeProcesses.size);
274
+ aiProviderEvents.emit('process:spawned', {
275
+ requestId,
276
+ workingDirectory: options?.cwd,
277
+ });
278
+ let stdout = '';
279
+ let stderr = '';
280
+ let killed = false;
281
+ // Setup timeout
282
+ const timeoutMs = options?.timeout || this.config.timeoutMs;
283
+ const timeout = setTimeout(() => {
284
+ killed = true;
285
+ proc.kill('SIGTERM');
286
+ this.metrics.increment(METRIC_NAMES.REQUESTS_TIMEOUT);
287
+ // Grace period before SIGKILL
288
+ setTimeout(() => {
289
+ if (!proc.killed) {
290
+ proc.kill('SIGKILL');
291
+ this.metrics.increment(METRIC_NAMES.PROCESSES_KILLED);
292
+ }
293
+ }, 5000);
294
+ }, timeoutMs);
295
+ proc.stdout?.on('data', (data) => {
296
+ stdout += data;
297
+ });
298
+ proc.stderr?.on('data', (data) => {
299
+ stderr += data;
300
+ });
301
+ proc.on('close', (code) => {
302
+ clearTimeout(timeout);
303
+ this.activeProcesses.delete(requestId);
304
+ this.metrics.gauge(METRIC_NAMES.PROCESSES_ACTIVE, this.activeProcesses.size);
305
+ const durationMs = Date.now() - startTime;
306
+ this.metrics.histogram(METRIC_NAMES.SPAWN_DURATION_MS, durationMs);
307
+ if (killed) {
308
+ aiProviderEvents.emit('process:failed', {
309
+ requestId,
310
+ error: `Process timed out after ${timeoutMs}ms`,
311
+ errorType: 'timeout',
312
+ });
313
+ reject(new TimeoutError(timeoutMs));
314
+ }
315
+ else {
316
+ aiProviderEvents.emit('process:completed', {
317
+ requestId,
318
+ durationMs,
319
+ success: code === 0,
320
+ });
321
+ resolve({
322
+ code,
323
+ stdout,
324
+ stderr,
325
+ durationMs,
326
+ });
327
+ }
328
+ });
329
+ proc.on('error', (error) => {
330
+ clearTimeout(timeout);
331
+ this.activeProcesses.delete(requestId);
332
+ this.metrics.gauge(METRIC_NAMES.PROCESSES_ACTIVE, this.activeProcesses.size);
333
+ aiProviderEvents.emit('process:failed', {
334
+ requestId,
335
+ error: error.message,
336
+ });
337
+ reject(error);
338
+ });
339
+ });
340
+ }
341
+ /**
342
+ * Detect rate limit errors from CLI output.
343
+ */
344
+ isRateLimitError(result) {
345
+ const output = (result.stdout + result.stderr).toLowerCase();
346
+ return RATE_LIMIT_PATTERNS.some((p) => output.includes(p));
347
+ }
348
+ /**
349
+ * Detect auth errors from CLI output.
350
+ */
351
+ isAuthError(result) {
352
+ const output = (result.stdout + result.stderr).toLowerCase();
353
+ return AUTH_ERROR_PATTERNS.some((p) => output.includes(p));
354
+ }
355
+ /**
356
+ * Check if error is retryable.
357
+ */
358
+ isRetryable(error) {
359
+ const message = error.message.toLowerCase();
360
+ const nonRetryable = ['not logged in', 'authentication', 'rate limit', 'not found'];
361
+ return !nonRetryable.some((p) => message.includes(p));
362
+ }
363
+ /**
364
+ * Categorize error type.
365
+ */
366
+ categorizeError(error) {
367
+ const message = error.message.toLowerCase();
368
+ if (message.includes('not logged in') || message.includes('auth')) {
369
+ return 'auth';
370
+ }
371
+ if (message.includes('rate limit') || message.includes('quota')) {
372
+ return 'rate_limit';
373
+ }
374
+ if (message.includes('timeout') || message.includes('timed out')) {
375
+ return 'timeout';
376
+ }
377
+ if (message.includes('network') || message.includes('econnrefused')) {
378
+ return 'network';
379
+ }
380
+ if (message.includes('not found') || message.includes('enoent')) {
381
+ return 'cli_not_found';
382
+ }
383
+ return 'unknown';
384
+ }
385
+ /**
386
+ * Get current status.
387
+ */
388
+ getStatus() {
389
+ return {
390
+ isAuthenticated: true,
391
+ activeProcesses: this.activeProcesses.size,
392
+ isRateLimited: this.isRateLimited,
393
+ rateLimitMessage: this.rateLimitMessage,
394
+ };
395
+ }
396
+ /**
397
+ * Reset rate limit flag (after user switches accounts).
398
+ */
399
+ resetRateLimitFlag() {
400
+ this.isRateLimited = false;
401
+ this.rateLimitMessage = undefined;
402
+ aiProviderEvents.emit('rate_limit:cleared');
403
+ }
404
+ /**
405
+ * Get metrics.
406
+ */
407
+ getMetrics() {
408
+ return this.metrics.getAll();
409
+ }
410
+ /**
411
+ * Graceful shutdown.
412
+ */
413
+ async shutdown() {
414
+ logger.info('Shutting down process manager');
415
+ this.isShuttingDown = true;
416
+ aiProviderEvents.emit('shutdown:started');
417
+ // Kill all active processes
418
+ const killPromises = [];
419
+ for (const [requestId, proc] of this.activeProcesses) {
420
+ logger.debug('Killing process', { requestId });
421
+ const killPromise = new Promise((resolve) => {
422
+ proc.kill('SIGTERM');
423
+ const forceKillTimeout = setTimeout(() => {
424
+ if (!proc.killed) {
425
+ proc.kill('SIGKILL');
426
+ }
427
+ resolve();
428
+ }, 5000);
429
+ proc.on('close', () => {
430
+ clearTimeout(forceKillTimeout);
431
+ resolve();
432
+ });
433
+ });
434
+ killPromises.push(killPromise);
435
+ }
436
+ await Promise.all(killPromises);
437
+ // Clear waiting queue
438
+ this.semaphore.clearWaiting();
439
+ this.activeProcesses.clear();
440
+ aiProviderEvents.emit('shutdown:completed');
441
+ logger.info('Process manager shutdown complete');
442
+ }
443
+ /**
444
+ * Health check.
445
+ */
446
+ async healthCheck() {
447
+ const authCheck = await this.checkAuth();
448
+ const circuitState = this.circuitBreaker.getState();
449
+ return {
450
+ healthy: authCheck.authenticated && circuitState !== 'open',
451
+ details: {
452
+ authenticated: authCheck.authenticated,
453
+ cliVersion: authCheck.cliVersion,
454
+ circuitBreakerState: circuitState,
455
+ activeProcesses: this.activeProcesses.size,
456
+ availableSlots: this.semaphore.getAvailablePermits(),
457
+ queuedRequests: this.semaphore.getQueueLength(),
458
+ rateLimited: this.isRateLimited,
459
+ metrics: this.metrics.getAll(),
460
+ },
461
+ };
462
+ }
463
+ }
464
+ /**
465
+ * Create a process manager with configuration.
466
+ */
467
+ export function createProcessManager(config) {
468
+ return new ClaudeCodeProcessManager({
469
+ maxParallel: config.maxParallel ?? 5,
470
+ timeoutMs: config.timeoutMs ?? 300000,
471
+ workingDirectory: config.workingDirectory,
472
+ maxRetries: config.maxRetries ?? 3,
473
+ circuitBreakerThreshold: config.circuitBreakerThreshold ?? 5,
474
+ dangerouslySkipPermissions: config.dangerouslySkipPermissions ?? true,
475
+ });
476
+ }
477
+ //# sourceMappingURL=process-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-manager.js","sourceRoot":"","sources":["../../src/ai-provider/process-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Claude Code Provider
3
+ *
4
+ * Main provider implementation for Claude Code CLI mode.
5
+ */
6
+ import type { AIProvider, AIResponse, ProviderStatus, RunOptions, TestResult, TestOptions, AIProviderConfig } from '../types.js';
7
+ /**
8
+ * Claude Code Provider Implementation.
9
+ */
10
+ export declare class ClaudeCodeProvider implements AIProvider {
11
+ private config;
12
+ private processManager;
13
+ private lifecycleManager;
14
+ private initialized;
15
+ constructor(config: AIProviderConfig);
16
+ /**
17
+ * Initialize the provider.
18
+ */
19
+ initialize(): Promise<void>;
20
+ /**
21
+ * Get provider mode.
22
+ */
23
+ getMode(): "claude_code";
24
+ /**
25
+ * Get provider status.
26
+ */
27
+ getStatus(): Promise<ProviderStatus>;
28
+ /**
29
+ * Test the provider connection.
30
+ */
31
+ test(options?: TestOptions): Promise<TestResult>;
32
+ /**
33
+ * Run a prompt.
34
+ */
35
+ run(prompt: string, options?: RunOptions): Promise<AIResponse>;
36
+ /**
37
+ * Reset rate limit flag.
38
+ */
39
+ resetRateLimitFlag(): void;
40
+ /**
41
+ * Get health check information.
42
+ */
43
+ healthCheck(): Promise<{
44
+ healthy: boolean;
45
+ details: Record<string, unknown>;
46
+ }>;
47
+ /**
48
+ * Get metrics.
49
+ */
50
+ getMetrics(): {
51
+ counters: Record<string, number>;
52
+ gauges: Record<string, number>;
53
+ histograms: Record<string, import("../types.js").MetricStats | null>;
54
+ };
55
+ /**
56
+ * Shutdown the provider.
57
+ */
58
+ shutdown(): Promise<void>;
59
+ }
60
+ /**
61
+ * Create a Claude Code provider.
62
+ */
63
+ export declare function createClaudeCodeProvider(config: AIProviderConfig): ClaudeCodeProvider;
64
+ //# sourceMappingURL=claude-code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/ai-provider/providers/claude-code.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,cAAc,EACd,UAAU,EACV,UAAU,EACV,WAAW,EACX,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAQrB;;GAEG;AACH,qBAAa,kBAAmB,YAAW,UAAU;IAKvC,OAAO,CAAC,MAAM;IAJ1B,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,WAAW,CAAkB;gBAEjB,MAAM,EAAE,gBAAgB;IAa5C;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA0BjC;;OAEG;IACH,OAAO,IACE,aAAa;IAGtB;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC;IAuB1C;;OAEG;IACG,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IA+CtD;;OAEG;IACG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAiDpE;;OAEG;IACH,kBAAkB,IAAI,IAAI;IAI1B;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC;QAC3B,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAClC,CAAC;IAIF;;OAEG;IACH,UAAU;;;;;IAIV;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAIhC;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,gBAAgB,GACvB,kBAAkB,CAEpB"}