@specforge/mcp 2.5.1 → 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 (307) hide show
  1. package/README.md +118 -45
  2. package/dist/ai-provider/circuit-breaker.d.ts +63 -0
  3. package/dist/ai-provider/circuit-breaker.d.ts.map +1 -0
  4. package/dist/ai-provider/circuit-breaker.js +160 -0
  5. package/dist/ai-provider/circuit-breaker.js.map +1 -0
  6. package/dist/ai-provider/cli-version.d.ts +50 -0
  7. package/dist/ai-provider/cli-version.d.ts.map +1 -0
  8. package/dist/ai-provider/cli-version.js +141 -0
  9. package/dist/ai-provider/cli-version.js.map +1 -0
  10. package/dist/ai-provider/config-loader.d.ts +45 -0
  11. package/dist/ai-provider/config-loader.d.ts.map +1 -0
  12. package/dist/ai-provider/config-loader.js +106 -0
  13. package/dist/ai-provider/config-loader.js.map +1 -0
  14. package/dist/ai-provider/errors.d.ts +48 -0
  15. package/dist/ai-provider/errors.d.ts.map +1 -0
  16. package/dist/ai-provider/errors.js +102 -0
  17. package/dist/ai-provider/errors.js.map +1 -0
  18. package/dist/ai-provider/events.d.ts +73 -0
  19. package/dist/ai-provider/events.d.ts.map +1 -0
  20. package/dist/ai-provider/events.js +75 -0
  21. package/dist/ai-provider/events.js.map +1 -0
  22. package/dist/ai-provider/factory.d.ts +31 -0
  23. package/dist/ai-provider/factory.d.ts.map +1 -0
  24. package/dist/ai-provider/factory.js +100 -0
  25. package/dist/ai-provider/factory.js.map +1 -0
  26. package/dist/ai-provider/index.d.ts +24 -0
  27. package/dist/ai-provider/index.d.ts.map +1 -0
  28. package/dist/ai-provider/index.js +46 -0
  29. package/dist/ai-provider/index.js.map +1 -0
  30. package/dist/ai-provider/instance-coordinator.d.ts +54 -0
  31. package/dist/ai-provider/instance-coordinator.d.ts.map +1 -0
  32. package/dist/ai-provider/instance-coordinator.js +199 -0
  33. package/dist/ai-provider/instance-coordinator.js.map +1 -0
  34. package/dist/ai-provider/jsonl-parser.d.ts +43 -0
  35. package/dist/ai-provider/jsonl-parser.d.ts.map +1 -0
  36. package/dist/ai-provider/jsonl-parser.js +107 -0
  37. package/dist/ai-provider/jsonl-parser.js.map +1 -0
  38. package/dist/ai-provider/lifecycle.d.ts +50 -0
  39. package/dist/ai-provider/lifecycle.d.ts.map +1 -0
  40. package/dist/ai-provider/lifecycle.js +145 -0
  41. package/dist/ai-provider/lifecycle.js.map +1 -0
  42. package/dist/ai-provider/logger.d.ts +69 -0
  43. package/dist/ai-provider/logger.d.ts.map +1 -0
  44. package/dist/ai-provider/logger.js +161 -0
  45. package/dist/ai-provider/logger.js.map +1 -0
  46. package/dist/ai-provider/metrics.d.ts +91 -0
  47. package/dist/ai-provider/metrics.d.ts.map +1 -0
  48. package/dist/ai-provider/metrics.js +187 -0
  49. package/dist/ai-provider/metrics.js.map +1 -0
  50. package/dist/ai-provider/process-manager.d.ts +97 -0
  51. package/dist/ai-provider/process-manager.d.ts.map +1 -0
  52. package/dist/ai-provider/process-manager.js +477 -0
  53. package/dist/ai-provider/process-manager.js.map +1 -0
  54. package/dist/ai-provider/providers/claude-code.d.ts +64 -0
  55. package/dist/ai-provider/providers/claude-code.d.ts.map +1 -0
  56. package/dist/ai-provider/providers/claude-code.js +205 -0
  57. package/dist/ai-provider/providers/claude-code.js.map +1 -0
  58. package/dist/ai-provider/retry-executor.d.ts +52 -0
  59. package/dist/ai-provider/retry-executor.d.ts.map +1 -0
  60. package/dist/ai-provider/retry-executor.js +138 -0
  61. package/dist/ai-provider/retry-executor.js.map +1 -0
  62. package/dist/ai-provider/safe-args.d.ts +58 -0
  63. package/dist/ai-provider/safe-args.d.ts.map +1 -0
  64. package/dist/ai-provider/safe-args.js +176 -0
  65. package/dist/ai-provider/safe-args.js.map +1 -0
  66. package/dist/ai-provider/semaphore.d.ts +50 -0
  67. package/dist/ai-provider/semaphore.d.ts.map +1 -0
  68. package/dist/ai-provider/semaphore.js +97 -0
  69. package/dist/ai-provider/semaphore.js.map +1 -0
  70. package/dist/ai-provider/tracer.d.ts +67 -0
  71. package/dist/ai-provider/tracer.d.ts.map +1 -0
  72. package/dist/ai-provider/tracer.js +209 -0
  73. package/dist/ai-provider/tracer.js.map +1 -0
  74. package/dist/ai-provider/types.d.ts +181 -0
  75. package/dist/ai-provider/types.d.ts.map +1 -0
  76. package/dist/ai-provider/types.js +8 -0
  77. package/dist/ai-provider/types.js.map +1 -0
  78. package/dist/autopilot/agents/agent-runner.d.ts +109 -0
  79. package/dist/autopilot/agents/agent-runner.d.ts.map +1 -0
  80. package/dist/autopilot/agents/agent-runner.js +731 -0
  81. package/dist/autopilot/agents/agent-runner.js.map +1 -0
  82. package/dist/autopilot/agents/agent-selector.d.ts +59 -0
  83. package/dist/autopilot/agents/agent-selector.d.ts.map +1 -0
  84. package/dist/autopilot/agents/agent-selector.js +234 -0
  85. package/dist/autopilot/agents/agent-selector.js.map +1 -0
  86. package/dist/autopilot/agents/model-selector.d.ts +49 -0
  87. package/dist/autopilot/agents/model-selector.d.ts.map +1 -0
  88. package/dist/autopilot/agents/model-selector.js +62 -0
  89. package/dist/autopilot/agents/model-selector.js.map +1 -0
  90. package/dist/autopilot/agents/profiles/builtin.d.ts +55 -0
  91. package/dist/autopilot/agents/profiles/builtin.d.ts.map +1 -0
  92. package/dist/autopilot/agents/profiles/builtin.js +323 -0
  93. package/dist/autopilot/agents/profiles/builtin.js.map +1 -0
  94. package/dist/autopilot/agents/profiles/types.d.ts +98 -0
  95. package/dist/autopilot/agents/profiles/types.d.ts.map +1 -0
  96. package/dist/autopilot/agents/profiles/types.js +17 -0
  97. package/dist/autopilot/agents/profiles/types.js.map +1 -0
  98. package/dist/autopilot/api/autopilot-api-client.d.ts +217 -0
  99. package/dist/autopilot/api/autopilot-api-client.d.ts.map +1 -0
  100. package/dist/autopilot/api/autopilot-api-client.js +402 -0
  101. package/dist/autopilot/api/autopilot-api-client.js.map +1 -0
  102. package/dist/autopilot/cli/abort.d.ts +20 -0
  103. package/dist/autopilot/cli/abort.d.ts.map +1 -0
  104. package/dist/autopilot/cli/abort.js +201 -0
  105. package/dist/autopilot/cli/abort.js.map +1 -0
  106. package/dist/autopilot/cli/display.d.ts +63 -0
  107. package/dist/autopilot/cli/display.d.ts.map +1 -0
  108. package/dist/autopilot/cli/display.js +260 -0
  109. package/dist/autopilot/cli/display.js.map +1 -0
  110. package/dist/autopilot/cli/index.d.ts +24 -0
  111. package/dist/autopilot/cli/index.d.ts.map +1 -0
  112. package/dist/autopilot/cli/index.js +79 -0
  113. package/dist/autopilot/cli/index.js.map +1 -0
  114. package/dist/autopilot/cli/pause.d.ts +18 -0
  115. package/dist/autopilot/cli/pause.d.ts.map +1 -0
  116. package/dist/autopilot/cli/pause.js +110 -0
  117. package/dist/autopilot/cli/pause.js.map +1 -0
  118. package/dist/autopilot/cli/resume.d.ts +22 -0
  119. package/dist/autopilot/cli/resume.d.ts.map +1 -0
  120. package/dist/autopilot/cli/resume.js +172 -0
  121. package/dist/autopilot/cli/resume.js.map +1 -0
  122. package/dist/autopilot/cli/run.d.ts +25 -0
  123. package/dist/autopilot/cli/run.d.ts.map +1 -0
  124. package/dist/autopilot/cli/run.js +220 -0
  125. package/dist/autopilot/cli/run.js.map +1 -0
  126. package/dist/autopilot/cli/status.d.ts +20 -0
  127. package/dist/autopilot/cli/status.d.ts.map +1 -0
  128. package/dist/autopilot/cli/status.js +217 -0
  129. package/dist/autopilot/cli/status.js.map +1 -0
  130. package/dist/autopilot/config.d.ts +45 -0
  131. package/dist/autopilot/config.d.ts.map +1 -0
  132. package/dist/autopilot/config.js +269 -0
  133. package/dist/autopilot/config.js.map +1 -0
  134. package/dist/autopilot/core/dependency-resolver.d.ts +108 -0
  135. package/dist/autopilot/core/dependency-resolver.d.ts.map +1 -0
  136. package/dist/autopilot/core/dependency-resolver.js +394 -0
  137. package/dist/autopilot/core/dependency-resolver.js.map +1 -0
  138. package/dist/autopilot/core/dispatcher.d.ts +215 -0
  139. package/dist/autopilot/core/dispatcher.d.ts.map +1 -0
  140. package/dist/autopilot/core/dispatcher.js +594 -0
  141. package/dist/autopilot/core/dispatcher.js.map +1 -0
  142. package/dist/autopilot/core/failure-handler.d.ts +145 -0
  143. package/dist/autopilot/core/failure-handler.d.ts.map +1 -0
  144. package/dist/autopilot/core/failure-handler.js +308 -0
  145. package/dist/autopilot/core/failure-handler.js.map +1 -0
  146. package/dist/autopilot/core/rate-limit-handler.d.ts +108 -0
  147. package/dist/autopilot/core/rate-limit-handler.d.ts.map +1 -0
  148. package/dist/autopilot/core/rate-limit-handler.js +195 -0
  149. package/dist/autopilot/core/rate-limit-handler.js.map +1 -0
  150. package/dist/autopilot/core/state-manager.d.ts +160 -0
  151. package/dist/autopilot/core/state-manager.d.ts.map +1 -0
  152. package/dist/autopilot/core/state-manager.js +393 -0
  153. package/dist/autopilot/core/state-manager.js.map +1 -0
  154. package/dist/autopilot/core/timeout-manager.d.ts +95 -0
  155. package/dist/autopilot/core/timeout-manager.d.ts.map +1 -0
  156. package/dist/autopilot/core/timeout-manager.js +188 -0
  157. package/dist/autopilot/core/timeout-manager.js.map +1 -0
  158. package/dist/autopilot/git/branch-manager.d.ts +117 -0
  159. package/dist/autopilot/git/branch-manager.d.ts.map +1 -0
  160. package/dist/autopilot/git/branch-manager.js +238 -0
  161. package/dist/autopilot/git/branch-manager.js.map +1 -0
  162. package/dist/autopilot/git/index.d.ts +9 -0
  163. package/dist/autopilot/git/index.d.ts.map +1 -0
  164. package/dist/autopilot/git/index.js +9 -0
  165. package/dist/autopilot/git/index.js.map +1 -0
  166. package/dist/autopilot/git/merge-manager.d.ts +118 -0
  167. package/dist/autopilot/git/merge-manager.d.ts.map +1 -0
  168. package/dist/autopilot/git/merge-manager.js +304 -0
  169. package/dist/autopilot/git/merge-manager.js.map +1 -0
  170. package/dist/autopilot/git/worktree-manager.d.ts +128 -0
  171. package/dist/autopilot/git/worktree-manager.d.ts.map +1 -0
  172. package/dist/autopilot/git/worktree-manager.js +298 -0
  173. package/dist/autopilot/git/worktree-manager.js.map +1 -0
  174. package/dist/autopilot/index.d.ts +30 -0
  175. package/dist/autopilot/index.d.ts.map +1 -0
  176. package/dist/autopilot/index.js +55 -0
  177. package/dist/autopilot/index.js.map +1 -0
  178. package/dist/autopilot/sync/index.d.ts +7 -0
  179. package/dist/autopilot/sync/index.d.ts.map +1 -0
  180. package/dist/autopilot/sync/index.js +7 -0
  181. package/dist/autopilot/sync/index.js.map +1 -0
  182. package/dist/autopilot/sync/sync-manager.d.ts +168 -0
  183. package/dist/autopilot/sync/sync-manager.d.ts.map +1 -0
  184. package/dist/autopilot/sync/sync-manager.js +303 -0
  185. package/dist/autopilot/sync/sync-manager.js.map +1 -0
  186. package/dist/autopilot/types.d.ts +454 -0
  187. package/dist/autopilot/types.d.ts.map +1 -0
  188. package/dist/autopilot/types.js +26 -0
  189. package/dist/autopilot/types.js.map +1 -0
  190. package/dist/autopilot/utils/audit-logger.d.ts +176 -0
  191. package/dist/autopilot/utils/audit-logger.d.ts.map +1 -0
  192. package/dist/autopilot/utils/audit-logger.js +308 -0
  193. package/dist/autopilot/utils/audit-logger.js.map +1 -0
  194. package/dist/autopilot/utils/cost-tracker.d.ts +162 -0
  195. package/dist/autopilot/utils/cost-tracker.d.ts.map +1 -0
  196. package/dist/autopilot/utils/cost-tracker.js +269 -0
  197. package/dist/autopilot/utils/cost-tracker.js.map +1 -0
  198. package/dist/autopilot/utils/index.d.ts +9 -0
  199. package/dist/autopilot/utils/index.d.ts.map +1 -0
  200. package/dist/autopilot/utils/index.js +9 -0
  201. package/dist/autopilot/utils/index.js.map +1 -0
  202. package/dist/autopilot/utils/progress-reporter.d.ts +132 -0
  203. package/dist/autopilot/utils/progress-reporter.d.ts.map +1 -0
  204. package/dist/autopilot/utils/progress-reporter.js +290 -0
  205. package/dist/autopilot/utils/progress-reporter.js.map +1 -0
  206. package/dist/autopilot/worker/worker-pool.d.ts +179 -0
  207. package/dist/autopilot/worker/worker-pool.d.ts.map +1 -0
  208. package/dist/autopilot/worker/worker-pool.js +331 -0
  209. package/dist/autopilot/worker/worker-pool.js.map +1 -0
  210. package/dist/autopilot/worker/worker-session.d.ts +171 -0
  211. package/dist/autopilot/worker/worker-session.d.ts.map +1 -0
  212. package/dist/autopilot/worker/worker-session.js +295 -0
  213. package/dist/autopilot/worker/worker-session.js.map +1 -0
  214. package/dist/cli/commands/blocked.js +6 -6
  215. package/dist/cli/commands/blocked.js.map +1 -1
  216. package/dist/cli/commands/blueprints.js +1 -1
  217. package/dist/cli/commands/blueprints.js.map +1 -1
  218. package/dist/cli/commands/configure.js +6 -6
  219. package/dist/cli/commands/configure.js.map +1 -1
  220. package/dist/cli/commands/debug/call.js +3 -3
  221. package/dist/cli/commands/debug/call.js.map +1 -1
  222. package/dist/cli/commands/debug/register.js +11 -11
  223. package/dist/cli/commands/debug/test.js +1 -1
  224. package/dist/cli/commands/debug/test.js.map +1 -1
  225. package/dist/cli/commands/debug/tools.js +1 -1
  226. package/dist/cli/commands/debug/tools.js.map +1 -1
  227. package/dist/cli/commands/docs/content/api.js +3 -3
  228. package/dist/cli/commands/docs/content/examples.js +12 -12
  229. package/dist/cli/commands/docs/content/workflow.js +2 -2
  230. package/dist/cli/commands/docs/display.js +4 -4
  231. package/dist/cli/commands/docs/display.js.map +1 -1
  232. package/dist/cli/commands/docs/docs.js +3 -3
  233. package/dist/cli/commands/docs/docs.js.map +1 -1
  234. package/dist/cli/commands/docs/tool-docs.js +2 -2
  235. package/dist/cli/commands/docs/tool-docs.js.map +1 -1
  236. package/dist/cli/commands/doctor.js +2 -2
  237. package/dist/cli/commands/doctor.types.d.ts +7 -7
  238. package/dist/cli/commands/doctor.types.js +7 -7
  239. package/dist/cli/commands/doctor.types.js.map +1 -1
  240. package/dist/cli/commands/feedback.js +5 -5
  241. package/dist/cli/commands/init.js +8 -8
  242. package/dist/cli/commands/init.js.map +1 -1
  243. package/dist/cli/commands/invitations.js +5 -5
  244. package/dist/cli/commands/invitations.js.map +1 -1
  245. package/dist/cli/commands/login.js +6 -6
  246. package/dist/cli/commands/login.js.map +1 -1
  247. package/dist/cli/commands/members.js +9 -9
  248. package/dist/cli/commands/members.js.map +1 -1
  249. package/dist/cli/commands/next.js +10 -10
  250. package/dist/cli/commands/next.js.map +1 -1
  251. package/dist/cli/commands/projects.js +6 -6
  252. package/dist/cli/commands/projects.js.map +1 -1
  253. package/dist/cli/commands/review/review.js +8 -8
  254. package/dist/cli/commands/review/review.js.map +1 -1
  255. package/dist/cli/commands/scaffold/scaffold.js +2 -2
  256. package/dist/cli/commands/scaffold/scaffold.js.map +1 -1
  257. package/dist/cli/commands/session/display.js +1 -1
  258. package/dist/cli/commands/session/display.js.map +1 -1
  259. package/dist/cli/commands/session/end.js +6 -6
  260. package/dist/cli/commands/session/end.js.map +1 -1
  261. package/dist/cli/commands/session/register.js +12 -12
  262. package/dist/cli/commands/session/start.js +6 -6
  263. package/dist/cli/commands/session/start.js.map +1 -1
  264. package/dist/cli/commands/session/status.js +1 -1
  265. package/dist/cli/commands/session/status.js.map +1 -1
  266. package/dist/cli/commands/specs.js +9 -9
  267. package/dist/cli/commands/specs.js.map +1 -1
  268. package/dist/cli/commands/status.js +11 -11
  269. package/dist/cli/commands/status.js.map +1 -1
  270. package/dist/cli/commands/switch.js +10 -10
  271. package/dist/cli/commands/switch.js.map +1 -1
  272. package/dist/cli/commands/ticket/command.js +5 -5
  273. package/dist/cli/commands/ticket/command.js.map +1 -1
  274. package/dist/cli/commands/ticket/register.js +4 -4
  275. package/dist/cli/commands/ticket/resolver.js +1 -1
  276. package/dist/cli/commands/ticket/resolver.js.map +1 -1
  277. package/dist/cli/commands/tickets.js +11 -11
  278. package/dist/cli/commands/tickets.js.map +1 -1
  279. package/dist/cli/config/loader.d.ts +1 -1
  280. package/dist/cli/config/loader.js +1 -1
  281. package/dist/cli/config/types.d.ts +2 -2
  282. package/dist/cli/index.d.ts +1 -1
  283. package/dist/cli/index.d.ts.map +1 -1
  284. package/dist/cli/index.js +10 -7
  285. package/dist/cli/index.js.map +1 -1
  286. package/dist/cli/middleware/auth-guard.js +1 -1
  287. package/dist/cli/middleware/auth-guard.js.map +1 -1
  288. package/dist/cli/middleware/error-handler.js +1 -1
  289. package/dist/cli/middleware/error-handler.js.map +1 -1
  290. package/dist/cli/ui/dashboard.js +1 -1
  291. package/dist/cli/ui/dashboard.js.map +1 -1
  292. package/dist/cli/ui/output.d.ts +2 -2
  293. package/dist/cli/ui/output.js +2 -2
  294. package/dist/index.js +1 -1
  295. package/dist/index.js.map +1 -1
  296. package/dist/server.js +1 -1
  297. package/dist/server.js.map +1 -1
  298. package/dist/tools/core/workflow-guide.js +1 -1
  299. package/dist/tools/core/workflow-guide.js.map +1 -1
  300. package/dist/tools/index.d.ts.map +1 -1
  301. package/dist/tools/index.js +60 -0
  302. package/dist/tools/index.js.map +1 -1
  303. package/dist/validation/index.d.ts.map +1 -1
  304. package/dist/validation/index.js +4 -1
  305. package/dist/validation/index.js.map +1 -1
  306. package/package.json +18 -13
  307. /package/bin/{specforge-mcp → specforge} +0 -0
@@ -0,0 +1,187 @@
1
+ /**
2
+ * Metrics Collection
3
+ *
4
+ * Counters and histograms for observability.
5
+ */
6
+ export class Metrics {
7
+ counters = new Map();
8
+ histograms = new Map();
9
+ gauges = new Map();
10
+ /**
11
+ * Increment a counter.
12
+ */
13
+ increment(name, value = 1) {
14
+ const current = this.counters.get(name) || 0;
15
+ this.counters.set(name, current + value);
16
+ }
17
+ /**
18
+ * Decrement a counter.
19
+ */
20
+ decrement(name, value = 1) {
21
+ const current = this.counters.get(name) || 0;
22
+ this.counters.set(name, Math.max(0, current - value));
23
+ }
24
+ /**
25
+ * Record a value in a histogram.
26
+ */
27
+ histogram(name, value) {
28
+ const values = this.histograms.get(name) || [];
29
+ values.push(value);
30
+ this.histograms.set(name, values);
31
+ }
32
+ /**
33
+ * Set a gauge value.
34
+ */
35
+ gauge(name, value) {
36
+ this.gauges.set(name, value);
37
+ }
38
+ /**
39
+ * Get a counter value.
40
+ */
41
+ getCounter(name) {
42
+ return this.counters.get(name) || 0;
43
+ }
44
+ /**
45
+ * Get a gauge value.
46
+ */
47
+ getGauge(name) {
48
+ return this.gauges.get(name) || 0;
49
+ }
50
+ /**
51
+ * Get histogram statistics.
52
+ */
53
+ getHistogramStats(name) {
54
+ const values = this.histograms.get(name);
55
+ if (!values || values.length === 0)
56
+ return null;
57
+ const sorted = [...values].sort((a, b) => a - b);
58
+ const count = sorted.length;
59
+ return {
60
+ count,
61
+ min: sorted[0],
62
+ max: sorted[count - 1],
63
+ avg: sorted.reduce((a, b) => a + b, 0) / count,
64
+ p50: this.percentile(sorted, 0.5),
65
+ p95: this.percentile(sorted, 0.95),
66
+ p99: this.percentile(sorted, 0.99),
67
+ };
68
+ }
69
+ /**
70
+ * Get all metrics.
71
+ */
72
+ getAll() {
73
+ const histograms = {};
74
+ for (const name of this.histograms.keys()) {
75
+ histograms[name] = this.getHistogramStats(name);
76
+ }
77
+ return {
78
+ counters: Object.fromEntries(this.counters),
79
+ gauges: Object.fromEntries(this.gauges),
80
+ histograms,
81
+ };
82
+ }
83
+ /**
84
+ * Reset all metrics.
85
+ */
86
+ reset() {
87
+ this.counters.clear();
88
+ this.histograms.clear();
89
+ this.gauges.clear();
90
+ }
91
+ /**
92
+ * Reset a specific metric.
93
+ */
94
+ resetMetric(name) {
95
+ this.counters.delete(name);
96
+ this.histograms.delete(name);
97
+ this.gauges.delete(name);
98
+ }
99
+ /**
100
+ * Export metrics as Prometheus-style text.
101
+ */
102
+ toPrometheus() {
103
+ const lines = [];
104
+ // Counters
105
+ for (const [name, value] of this.counters) {
106
+ const safeName = name.replace(/\./g, '_');
107
+ lines.push(`# TYPE ${safeName} counter`);
108
+ lines.push(`${safeName} ${value}`);
109
+ }
110
+ // Gauges
111
+ for (const [name, value] of this.gauges) {
112
+ const safeName = name.replace(/\./g, '_');
113
+ lines.push(`# TYPE ${safeName} gauge`);
114
+ lines.push(`${safeName} ${value}`);
115
+ }
116
+ // Histograms
117
+ for (const [name, values] of this.histograms) {
118
+ if (values.length === 0)
119
+ continue;
120
+ const safeName = name.replace(/\./g, '_');
121
+ const stats = this.getHistogramStats(name);
122
+ if (!stats)
123
+ continue;
124
+ lines.push(`# TYPE ${safeName} histogram`);
125
+ lines.push(`${safeName}_count ${stats.count}`);
126
+ lines.push(`${safeName}_sum ${values.reduce((a, b) => a + b, 0)}`);
127
+ lines.push(`${safeName}_min ${stats.min}`);
128
+ lines.push(`${safeName}_max ${stats.max}`);
129
+ lines.push(`${safeName}{quantile="0.5"} ${stats.p50}`);
130
+ lines.push(`${safeName}{quantile="0.95"} ${stats.p95}`);
131
+ lines.push(`${safeName}{quantile="0.99"} ${stats.p99}`);
132
+ }
133
+ return lines.join('\n');
134
+ }
135
+ /**
136
+ * Calculate percentile from sorted array.
137
+ */
138
+ percentile(sorted, p) {
139
+ const index = Math.ceil(sorted.length * p) - 1;
140
+ return sorted[Math.max(0, Math.min(index, sorted.length - 1))];
141
+ }
142
+ }
143
+ /**
144
+ * Global metrics instance.
145
+ */
146
+ let globalMetrics = null;
147
+ /**
148
+ * Get or create global metrics instance.
149
+ */
150
+ export function getMetrics() {
151
+ if (!globalMetrics) {
152
+ globalMetrics = new Metrics();
153
+ }
154
+ return globalMetrics;
155
+ }
156
+ /**
157
+ * Create a new metrics instance.
158
+ */
159
+ export function createMetrics() {
160
+ return new Metrics();
161
+ }
162
+ // Metric name constants for consistency
163
+ export const METRIC_NAMES = {
164
+ // Request metrics
165
+ REQUESTS_STARTED: 'requests.started',
166
+ REQUESTS_SUCCESS: 'requests.success',
167
+ REQUESTS_FAILURE: 'requests.failure',
168
+ REQUESTS_TIMEOUT: 'requests.timeout',
169
+ REQUESTS_CIRCUIT_BLOCKED: 'requests.circuit_breaker_blocked',
170
+ // Duration metrics
171
+ REQUEST_DURATION_MS: 'requests.duration_ms',
172
+ SPAWN_DURATION_MS: 'spawn.duration_ms',
173
+ // Process metrics
174
+ PROCESSES_ACTIVE: 'processes.active',
175
+ PROCESSES_SPAWNED: 'processes.spawned',
176
+ PROCESSES_KILLED: 'processes.killed',
177
+ // Error metrics
178
+ ERRORS_AUTH: 'errors.auth',
179
+ ERRORS_RATE_LIMIT: 'errors.rate_limit',
180
+ ERRORS_TIMEOUT: 'errors.timeout',
181
+ ERRORS_NETWORK: 'errors.network',
182
+ ERRORS_UNKNOWN: 'errors.unknown',
183
+ // Retry metrics
184
+ RETRIES_ATTEMPTED: 'retries.attempted',
185
+ RETRIES_SUCCESS: 'retries.success',
186
+ };
187
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/ai-provider/metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Claude Code Process Manager
3
+ *
4
+ * Core module for spawning and managing Claude CLI processes.
5
+ */
6
+ import type { ProcessManagerConfig, ProcessResult, ProcessStatus } from './types.js';
7
+ /**
8
+ * Claude CLI Process Manager.
9
+ */
10
+ export declare class ClaudeCodeProcessManager {
11
+ private config;
12
+ private semaphore;
13
+ private circuitBreaker;
14
+ private retryExecutor;
15
+ private activeProcesses;
16
+ private isRateLimited;
17
+ private rateLimitMessage?;
18
+ private metrics;
19
+ private tracer;
20
+ private isShuttingDown;
21
+ constructor(config: ProcessManagerConfig);
22
+ /**
23
+ * Check if user is authenticated with Claude Code.
24
+ */
25
+ checkAuth(): Promise<{
26
+ authenticated: boolean;
27
+ error?: string;
28
+ cliVersion?: string;
29
+ }>;
30
+ /**
31
+ * Run a prompt using Claude Code CLI.
32
+ */
33
+ run(prompt: string, options?: {
34
+ workingDirectory?: string;
35
+ timeout?: number;
36
+ model?: 'sonnet' | 'opus';
37
+ sessionId?: string;
38
+ }): Promise<ProcessResult>;
39
+ /**
40
+ * Execute prompt with CLI.
41
+ */
42
+ private executePrompt;
43
+ /**
44
+ * Spawn a Claude CLI process.
45
+ */
46
+ private spawn;
47
+ /**
48
+ * Detect rate limit errors from CLI output.
49
+ */
50
+ private isRateLimitError;
51
+ /**
52
+ * Detect auth errors from CLI output.
53
+ */
54
+ private isAuthError;
55
+ /**
56
+ * Check if error is retryable.
57
+ */
58
+ private isRetryable;
59
+ /**
60
+ * Categorize error type.
61
+ */
62
+ private categorizeError;
63
+ /**
64
+ * Get current status.
65
+ */
66
+ getStatus(): ProcessStatus;
67
+ /**
68
+ * Reset rate limit flag (after user switches accounts).
69
+ */
70
+ resetRateLimitFlag(): void;
71
+ /**
72
+ * Get metrics.
73
+ */
74
+ getMetrics(): {
75
+ counters: Record<string, number>;
76
+ gauges: Record<string, number>;
77
+ histograms: Record<string, import("./types.js").MetricStats | null>;
78
+ };
79
+ /**
80
+ * Graceful shutdown.
81
+ */
82
+ shutdown(): Promise<void>;
83
+ /**
84
+ * Health check.
85
+ */
86
+ healthCheck(): Promise<{
87
+ healthy: boolean;
88
+ details: Record<string, unknown>;
89
+ }>;
90
+ }
91
+ /**
92
+ * Create a process manager with configuration.
93
+ */
94
+ export declare function createProcessManager(config: Partial<ProcessManagerConfig> & {
95
+ workingDirectory: string;
96
+ }): ClaudeCodeProcessManager;
97
+ //# sourceMappingURL=process-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-manager.d.ts","sourceRoot":"","sources":["../../src/ai-provider/process-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,oBAAoB,EACpB,aAAa,EACb,aAAa,EAEd,MAAM,YAAY,CAAC;AAoCpB;;GAEG;AACH,qBAAa,wBAAwB;IAWvB,OAAO,CAAC,MAAM;IAV1B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,eAAe,CAAwC;IAC/D,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,gBAAgB,CAAC,CAAS;IAClC,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,cAAc,CAAkB;gBAEpB,MAAM,EAAE,oBAAoB;IAchD;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC;QACzB,aAAa,EAAE,OAAO,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IA0CF;;OAEG;IACG,GAAG,CACP,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GACvG,OAAO,CAAC,aAAa,CAAC;IAgFzB;;OAEG;YACW,aAAa;IAyE3B;;OAEG;YACW,KAAK;IA2HnB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;OAEG;IACH,OAAO,CAAC,WAAW;IAKnB;;OAEG;IACH,OAAO,CAAC,WAAW;IAMnB;;OAEG;IACH,OAAO,CAAC,eAAe;IAqBvB;;OAEG;IACH,SAAS,IAAI,aAAa;IAS1B;;OAEG;IACH,kBAAkB,IAAI,IAAI;IAM1B;;OAEG;IACH,UAAU;;;;;IAIV;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAyC/B;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC;QAC3B,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAClC,CAAC;CAkBH;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG;IAAE,gBAAgB,EAAE,MAAM,CAAA;CAAE,GACnE,wBAAwB,CAS1B"}