mcp-agent-foundry 1.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 (315) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +477 -0
  3. package/dist/cli/install-skills.d.ts +11 -0
  4. package/dist/cli/install-skills.d.ts.map +1 -0
  5. package/dist/cli/install-skills.js +143 -0
  6. package/dist/cli/install-skills.js.map +1 -0
  7. package/dist/cli/recovery-commands.d.ts +41 -0
  8. package/dist/cli/recovery-commands.d.ts.map +1 -0
  9. package/dist/cli/recovery-commands.js +241 -0
  10. package/dist/cli/recovery-commands.js.map +1 -0
  11. package/dist/cli/setup-wizard.d.ts +25 -0
  12. package/dist/cli/setup-wizard.d.ts.map +1 -0
  13. package/dist/cli/setup-wizard.js +1417 -0
  14. package/dist/cli/setup-wizard.js.map +1 -0
  15. package/dist/cli/test-connection.d.ts +45 -0
  16. package/dist/cli/test-connection.d.ts.map +1 -0
  17. package/dist/cli/test-connection.js +317 -0
  18. package/dist/cli/test-connection.js.map +1 -0
  19. package/dist/cli.d.ts +75 -0
  20. package/dist/cli.d.ts.map +1 -0
  21. package/dist/cli.js +704 -0
  22. package/dist/cli.js.map +1 -0
  23. package/dist/config/defaults.d.ts +57 -0
  24. package/dist/config/defaults.d.ts.map +1 -0
  25. package/dist/config/defaults.js +99 -0
  26. package/dist/config/defaults.js.map +1 -0
  27. package/dist/config/index.d.ts +14 -0
  28. package/dist/config/index.d.ts.map +1 -0
  29. package/dist/config/index.js +22 -0
  30. package/dist/config/index.js.map +1 -0
  31. package/dist/config/manager.d.ts +184 -0
  32. package/dist/config/manager.d.ts.map +1 -0
  33. package/dist/config/manager.js +347 -0
  34. package/dist/config/manager.js.map +1 -0
  35. package/dist/config/merger.d.ts +76 -0
  36. package/dist/config/merger.d.ts.map +1 -0
  37. package/dist/config/merger.js +189 -0
  38. package/dist/config/merger.js.map +1 -0
  39. package/dist/config/schema.d.ts +20 -0
  40. package/dist/config/schema.d.ts.map +1 -0
  41. package/dist/config/schema.js +20 -0
  42. package/dist/config/schema.js.map +1 -0
  43. package/dist/config/validator.d.ts +254 -0
  44. package/dist/config/validator.d.ts.map +1 -0
  45. package/dist/config/validator.js +363 -0
  46. package/dist/config/validator.js.map +1 -0
  47. package/dist/config/worktree-defaults.d.ts +23 -0
  48. package/dist/config/worktree-defaults.d.ts.map +1 -0
  49. package/dist/config/worktree-defaults.js +78 -0
  50. package/dist/config/worktree-defaults.js.map +1 -0
  51. package/dist/index.d.ts +8 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +44 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/mcp/tools/compare-agents.d.ts +25 -0
  56. package/dist/mcp/tools/compare-agents.d.ts.map +1 -0
  57. package/dist/mcp/tools/compare-agents.js +177 -0
  58. package/dist/mcp/tools/compare-agents.js.map +1 -0
  59. package/dist/mcp/tools/critique-plan.d.ts +26 -0
  60. package/dist/mcp/tools/critique-plan.d.ts.map +1 -0
  61. package/dist/mcp/tools/critique-plan.js +162 -0
  62. package/dist/mcp/tools/critique-plan.js.map +1 -0
  63. package/dist/mcp/tools/design-feedback.d.ts +26 -0
  64. package/dist/mcp/tools/design-feedback.d.ts.map +1 -0
  65. package/dist/mcp/tools/design-feedback.js +216 -0
  66. package/dist/mcp/tools/design-feedback.js.map +1 -0
  67. package/dist/mcp/tools/index.d.ts +50 -0
  68. package/dist/mcp/tools/index.d.ts.map +1 -0
  69. package/dist/mcp/tools/index.js +191 -0
  70. package/dist/mcp/tools/index.js.map +1 -0
  71. package/dist/mcp/tools/invoke-agent.d.ts +25 -0
  72. package/dist/mcp/tools/invoke-agent.d.ts.map +1 -0
  73. package/dist/mcp/tools/invoke-agent.js +141 -0
  74. package/dist/mcp/tools/invoke-agent.js.map +1 -0
  75. package/dist/mcp/tools/review-code.d.ts +25 -0
  76. package/dist/mcp/tools/review-code.d.ts.map +1 -0
  77. package/dist/mcp/tools/review-code.js +170 -0
  78. package/dist/mcp/tools/review-code.js.map +1 -0
  79. package/dist/mcp/tools/tasks/claim-next-task.d.ts +22 -0
  80. package/dist/mcp/tools/tasks/claim-next-task.d.ts.map +1 -0
  81. package/dist/mcp/tools/tasks/claim-next-task.js +203 -0
  82. package/dist/mcp/tools/tasks/claim-next-task.js.map +1 -0
  83. package/dist/mcp/tools/tasks/create-routed-task.d.ts +17 -0
  84. package/dist/mcp/tools/tasks/create-routed-task.d.ts.map +1 -0
  85. package/dist/mcp/tools/tasks/create-routed-task.js +178 -0
  86. package/dist/mcp/tools/tasks/create-routed-task.js.map +1 -0
  87. package/dist/mcp/tools/tasks/execute-pipeline.d.ts +22 -0
  88. package/dist/mcp/tools/tasks/execute-pipeline.d.ts.map +1 -0
  89. package/dist/mcp/tools/tasks/execute-pipeline.js +401 -0
  90. package/dist/mcp/tools/tasks/execute-pipeline.js.map +1 -0
  91. package/dist/mcp/tools/tasks/execute-task.d.ts +32 -0
  92. package/dist/mcp/tools/tasks/execute-task.d.ts.map +1 -0
  93. package/dist/mcp/tools/tasks/execute-task.js +284 -0
  94. package/dist/mcp/tools/tasks/execute-task.js.map +1 -0
  95. package/dist/mcp/tools/tasks/get-pipeline-status.d.ts +26 -0
  96. package/dist/mcp/tools/tasks/get-pipeline-status.d.ts.map +1 -0
  97. package/dist/mcp/tools/tasks/get-pipeline-status.js +460 -0
  98. package/dist/mcp/tools/tasks/get-pipeline-status.js.map +1 -0
  99. package/dist/mcp/tools/tasks/index.d.ts +36 -0
  100. package/dist/mcp/tools/tasks/index.d.ts.map +1 -0
  101. package/dist/mcp/tools/tasks/index.js +66 -0
  102. package/dist/mcp/tools/tasks/index.js.map +1 -0
  103. package/dist/mcp/tools/worktree/cleanup-worktrees.d.ts +17 -0
  104. package/dist/mcp/tools/worktree/cleanup-worktrees.d.ts.map +1 -0
  105. package/dist/mcp/tools/worktree/cleanup-worktrees.js +147 -0
  106. package/dist/mcp/tools/worktree/cleanup-worktrees.js.map +1 -0
  107. package/dist/mcp/tools/worktree/get-worktree-status.d.ts +17 -0
  108. package/dist/mcp/tools/worktree/get-worktree-status.d.ts.map +1 -0
  109. package/dist/mcp/tools/worktree/get-worktree-status.js +123 -0
  110. package/dist/mcp/tools/worktree/get-worktree-status.js.map +1 -0
  111. package/dist/mcp/tools/worktree/index.d.ts +41 -0
  112. package/dist/mcp/tools/worktree/index.d.ts.map +1 -0
  113. package/dist/mcp/tools/worktree/index.js +69 -0
  114. package/dist/mcp/tools/worktree/index.js.map +1 -0
  115. package/dist/mcp/tools/worktree/list-worktrees.d.ts +17 -0
  116. package/dist/mcp/tools/worktree/list-worktrees.d.ts.map +1 -0
  117. package/dist/mcp/tools/worktree/list-worktrees.js +136 -0
  118. package/dist/mcp/tools/worktree/list-worktrees.js.map +1 -0
  119. package/dist/mcp/tools/worktree/resolve-conflicts.d.ts +19 -0
  120. package/dist/mcp/tools/worktree/resolve-conflicts.d.ts.map +1 -0
  121. package/dist/mcp/tools/worktree/resolve-conflicts.js +228 -0
  122. package/dist/mcp/tools/worktree/resolve-conflicts.js.map +1 -0
  123. package/dist/mcp/transport/stdio.d.ts +13 -0
  124. package/dist/mcp/transport/stdio.d.ts.map +1 -0
  125. package/dist/mcp/transport/stdio.js +15 -0
  126. package/dist/mcp/transport/stdio.js.map +1 -0
  127. package/dist/observability/logger.d.ts +137 -0
  128. package/dist/observability/logger.d.ts.map +1 -0
  129. package/dist/observability/logger.js +235 -0
  130. package/dist/observability/logger.js.map +1 -0
  131. package/dist/observability/metrics.d.ts +250 -0
  132. package/dist/observability/metrics.d.ts.map +1 -0
  133. package/dist/observability/metrics.js +364 -0
  134. package/dist/observability/metrics.js.map +1 -0
  135. package/dist/persistence/index.d.ts +9 -0
  136. package/dist/persistence/index.d.ts.map +1 -0
  137. package/dist/persistence/index.js +9 -0
  138. package/dist/persistence/index.js.map +1 -0
  139. package/dist/persistence/state-schema.d.ts +116 -0
  140. package/dist/persistence/state-schema.d.ts.map +1 -0
  141. package/dist/persistence/state-schema.js +28 -0
  142. package/dist/persistence/state-schema.js.map +1 -0
  143. package/dist/persistence/state-store.d.ts +111 -0
  144. package/dist/persistence/state-store.d.ts.map +1 -0
  145. package/dist/persistence/state-store.js +291 -0
  146. package/dist/persistence/state-store.js.map +1 -0
  147. package/dist/providers/anthropic.d.ts +164 -0
  148. package/dist/providers/anthropic.d.ts.map +1 -0
  149. package/dist/providers/anthropic.js +500 -0
  150. package/dist/providers/anthropic.js.map +1 -0
  151. package/dist/providers/base.d.ts +151 -0
  152. package/dist/providers/base.d.ts.map +1 -0
  153. package/dist/providers/base.js +227 -0
  154. package/dist/providers/base.js.map +1 -0
  155. package/dist/providers/gemini.d.ts +85 -0
  156. package/dist/providers/gemini.d.ts.map +1 -0
  157. package/dist/providers/gemini.js +414 -0
  158. package/dist/providers/gemini.js.map +1 -0
  159. package/dist/providers/kimi.d.ts +19 -0
  160. package/dist/providers/kimi.d.ts.map +1 -0
  161. package/dist/providers/kimi.js +20 -0
  162. package/dist/providers/kimi.js.map +1 -0
  163. package/dist/providers/manager.d.ts +160 -0
  164. package/dist/providers/manager.d.ts.map +1 -0
  165. package/dist/providers/manager.js +264 -0
  166. package/dist/providers/manager.js.map +1 -0
  167. package/dist/providers/ollama.d.ts +83 -0
  168. package/dist/providers/ollama.d.ts.map +1 -0
  169. package/dist/providers/ollama.js +453 -0
  170. package/dist/providers/ollama.js.map +1 -0
  171. package/dist/providers/openai.d.ts +96 -0
  172. package/dist/providers/openai.d.ts.map +1 -0
  173. package/dist/providers/openai.js +457 -0
  174. package/dist/providers/openai.js.map +1 -0
  175. package/dist/providers/zai.d.ts +19 -0
  176. package/dist/providers/zai.d.ts.map +1 -0
  177. package/dist/providers/zai.js +20 -0
  178. package/dist/providers/zai.js.map +1 -0
  179. package/dist/router/context-manager.d.ts +2 -0
  180. package/dist/router/context-manager.d.ts.map +1 -0
  181. package/dist/router/context-manager.js +3 -0
  182. package/dist/router/context-manager.js.map +1 -0
  183. package/dist/router/engine.d.ts +169 -0
  184. package/dist/router/engine.d.ts.map +1 -0
  185. package/dist/router/engine.js +435 -0
  186. package/dist/router/engine.js.map +1 -0
  187. package/dist/router/pattern-executor.d.ts +317 -0
  188. package/dist/router/pattern-executor.d.ts.map +1 -0
  189. package/dist/router/pattern-executor.js +571 -0
  190. package/dist/router/pattern-executor.js.map +1 -0
  191. package/dist/router/role-resolver.d.ts +59 -0
  192. package/dist/router/role-resolver.d.ts.map +1 -0
  193. package/dist/router/role-resolver.js +95 -0
  194. package/dist/router/role-resolver.js.map +1 -0
  195. package/dist/server.d.ts +32 -0
  196. package/dist/server.d.ts.map +1 -0
  197. package/dist/server.js +223 -0
  198. package/dist/server.js.map +1 -0
  199. package/dist/startup.d.ts +78 -0
  200. package/dist/startup.d.ts.map +1 -0
  201. package/dist/startup.js +107 -0
  202. package/dist/startup.js.map +1 -0
  203. package/dist/tasks/coordinator.d.ts +141 -0
  204. package/dist/tasks/coordinator.d.ts.map +1 -0
  205. package/dist/tasks/coordinator.js +331 -0
  206. package/dist/tasks/coordinator.js.map +1 -0
  207. package/dist/tasks/index.d.ts +13 -0
  208. package/dist/tasks/index.d.ts.map +1 -0
  209. package/dist/tasks/index.js +13 -0
  210. package/dist/tasks/index.js.map +1 -0
  211. package/dist/tasks/persistent-state-coordinator.d.ts +89 -0
  212. package/dist/tasks/persistent-state-coordinator.d.ts.map +1 -0
  213. package/dist/tasks/persistent-state-coordinator.js +371 -0
  214. package/dist/tasks/persistent-state-coordinator.js.map +1 -0
  215. package/dist/tasks/pipeline-manager.d.ts +103 -0
  216. package/dist/tasks/pipeline-manager.d.ts.map +1 -0
  217. package/dist/tasks/pipeline-manager.js +358 -0
  218. package/dist/tasks/pipeline-manager.js.map +1 -0
  219. package/dist/tasks/state-coordinator.d.ts +79 -0
  220. package/dist/tasks/state-coordinator.d.ts.map +1 -0
  221. package/dist/tasks/state-coordinator.js +200 -0
  222. package/dist/tasks/state-coordinator.js.map +1 -0
  223. package/dist/tasks/worker-mode.d.ts +65 -0
  224. package/dist/tasks/worker-mode.d.ts.map +1 -0
  225. package/dist/tasks/worker-mode.js +208 -0
  226. package/dist/tasks/worker-mode.js.map +1 -0
  227. package/dist/translation/errors.d.ts +203 -0
  228. package/dist/translation/errors.d.ts.map +1 -0
  229. package/dist/translation/errors.js +477 -0
  230. package/dist/translation/errors.js.map +1 -0
  231. package/dist/translation/index.d.ts +12 -0
  232. package/dist/translation/index.d.ts.map +1 -0
  233. package/dist/translation/index.js +32 -0
  234. package/dist/translation/index.js.map +1 -0
  235. package/dist/translation/messages.d.ts +295 -0
  236. package/dist/translation/messages.d.ts.map +1 -0
  237. package/dist/translation/messages.js +557 -0
  238. package/dist/translation/messages.js.map +1 -0
  239. package/dist/translation/streaming.d.ts +226 -0
  240. package/dist/translation/streaming.d.ts.map +1 -0
  241. package/dist/translation/streaming.js +520 -0
  242. package/dist/translation/streaming.js.map +1 -0
  243. package/dist/translation/tools.d.ts +209 -0
  244. package/dist/translation/tools.d.ts.map +1 -0
  245. package/dist/translation/tools.js +331 -0
  246. package/dist/translation/tools.js.map +1 -0
  247. package/dist/types.d.ts +747 -0
  248. package/dist/types.d.ts.map +1 -0
  249. package/dist/types.js +86 -0
  250. package/dist/types.js.map +1 -0
  251. package/dist/utils/circuit-breaker.d.ts +175 -0
  252. package/dist/utils/circuit-breaker.d.ts.map +1 -0
  253. package/dist/utils/circuit-breaker.js +315 -0
  254. package/dist/utils/circuit-breaker.js.map +1 -0
  255. package/dist/utils/env.d.ts +2 -0
  256. package/dist/utils/env.d.ts.map +1 -0
  257. package/dist/utils/env.js +3 -0
  258. package/dist/utils/env.js.map +1 -0
  259. package/dist/utils/git.d.ts +58 -0
  260. package/dist/utils/git.d.ts.map +1 -0
  261. package/dist/utils/git.js +197 -0
  262. package/dist/utils/git.js.map +1 -0
  263. package/dist/utils/index.d.ts +9 -0
  264. package/dist/utils/index.d.ts.map +1 -0
  265. package/dist/utils/index.js +9 -0
  266. package/dist/utils/index.js.map +1 -0
  267. package/dist/utils/merge-ordering.d.ts +45 -0
  268. package/dist/utils/merge-ordering.d.ts.map +1 -0
  269. package/dist/utils/merge-ordering.js +128 -0
  270. package/dist/utils/merge-ordering.js.map +1 -0
  271. package/dist/utils/retry.d.ts +106 -0
  272. package/dist/utils/retry.d.ts.map +1 -0
  273. package/dist/utils/retry.js +188 -0
  274. package/dist/utils/retry.js.map +1 -0
  275. package/dist/worktrees/branch-manager.d.ts +55 -0
  276. package/dist/worktrees/branch-manager.d.ts.map +1 -0
  277. package/dist/worktrees/branch-manager.js +129 -0
  278. package/dist/worktrees/branch-manager.js.map +1 -0
  279. package/dist/worktrees/conflict-handler.d.ts +72 -0
  280. package/dist/worktrees/conflict-handler.d.ts.map +1 -0
  281. package/dist/worktrees/conflict-handler.js +287 -0
  282. package/dist/worktrees/conflict-handler.js.map +1 -0
  283. package/dist/worktrees/conflict-parser.d.ts +28 -0
  284. package/dist/worktrees/conflict-parser.d.ts.map +1 -0
  285. package/dist/worktrees/conflict-parser.js +140 -0
  286. package/dist/worktrees/conflict-parser.js.map +1 -0
  287. package/dist/worktrees/index.d.ts +20 -0
  288. package/dist/worktrees/index.d.ts.map +1 -0
  289. package/dist/worktrees/index.js +20 -0
  290. package/dist/worktrees/index.js.map +1 -0
  291. package/dist/worktrees/instructions.d.ts +20 -0
  292. package/dist/worktrees/instructions.d.ts.map +1 -0
  293. package/dist/worktrees/instructions.js +84 -0
  294. package/dist/worktrees/instructions.js.map +1 -0
  295. package/dist/worktrees/manager.d.ts +76 -0
  296. package/dist/worktrees/manager.d.ts.map +1 -0
  297. package/dist/worktrees/manager.js +277 -0
  298. package/dist/worktrees/manager.js.map +1 -0
  299. package/dist/worktrees/pipeline-merge-orchestrator.d.ts +55 -0
  300. package/dist/worktrees/pipeline-merge-orchestrator.d.ts.map +1 -0
  301. package/dist/worktrees/pipeline-merge-orchestrator.js +221 -0
  302. package/dist/worktrees/pipeline-merge-orchestrator.js.map +1 -0
  303. package/dist/worktrees/pool.d.ts +95 -0
  304. package/dist/worktrees/pool.d.ts.map +1 -0
  305. package/dist/worktrees/pool.js +271 -0
  306. package/dist/worktrees/pool.js.map +1 -0
  307. package/dist/worktrees/recovery.d.ts +94 -0
  308. package/dist/worktrees/recovery.d.ts.map +1 -0
  309. package/dist/worktrees/recovery.js +371 -0
  310. package/dist/worktrees/recovery.js.map +1 -0
  311. package/dist/worktrees/resource-manager.d.ts +74 -0
  312. package/dist/worktrees/resource-manager.d.ts.map +1 -0
  313. package/dist/worktrees/resource-manager.js +228 -0
  314. package/dist/worktrees/resource-manager.js.map +1 -0
  315. package/package.json +88 -0
@@ -0,0 +1,250 @@
1
+ /**
2
+ * Metrics Collection Module
3
+ *
4
+ * Simple in-memory metrics collection for AgentRouter observability.
5
+ * Tracks:
6
+ * - Request counts (by role, provider, status)
7
+ * - Latency histograms with percentile calculations (by role, provider)
8
+ * - Token usage (input, output by provider)
9
+ * - Error counts (by type, provider)
10
+ * - Circuit breaker state changes
11
+ *
12
+ * No external dependencies - pure TypeScript implementation.
13
+ */
14
+ /**
15
+ * Token usage statistics for a provider.
16
+ */
17
+ export interface TokenStats {
18
+ input: number;
19
+ output: number;
20
+ total: number;
21
+ }
22
+ /**
23
+ * Latency statistics with percentiles.
24
+ */
25
+ export interface LatencyStats {
26
+ count: number;
27
+ min: number;
28
+ max: number;
29
+ mean: number;
30
+ p50: number;
31
+ p95: number;
32
+ p99: number;
33
+ }
34
+ /**
35
+ * Circuit breaker state.
36
+ */
37
+ export type CircuitBreakerState = 'closed' | 'open' | 'half-open';
38
+ /**
39
+ * Circuit breaker state change event.
40
+ */
41
+ export interface CircuitBreakerEvent {
42
+ provider: string;
43
+ previousState: CircuitBreakerState;
44
+ newState: CircuitBreakerState;
45
+ timestamp: number;
46
+ }
47
+ /**
48
+ * Request status for metrics tracking.
49
+ */
50
+ export type RequestStatus = 'success' | 'error' | 'timeout' | 'rate_limited';
51
+ /**
52
+ * Input for recording a request.
53
+ */
54
+ export interface RequestRecord {
55
+ role: string;
56
+ provider: string;
57
+ status: RequestStatus;
58
+ durationMs: number;
59
+ tokens?: {
60
+ input: number;
61
+ output: number;
62
+ };
63
+ }
64
+ /**
65
+ * Aggregated metrics snapshot.
66
+ */
67
+ export interface Metrics {
68
+ requests: {
69
+ total: number;
70
+ byRole: Map<string, number>;
71
+ byProvider: Map<string, number>;
72
+ byStatus: Map<string, number>;
73
+ };
74
+ latency: {
75
+ p50: number;
76
+ p95: number;
77
+ p99: number;
78
+ byProvider: Map<string, LatencyStats>;
79
+ byRole: Map<string, LatencyStats>;
80
+ };
81
+ tokens: {
82
+ input: number;
83
+ output: number;
84
+ byProvider: Map<string, TokenStats>;
85
+ };
86
+ errors: {
87
+ total: number;
88
+ byType: Map<string, number>;
89
+ byProvider: Map<string, number>;
90
+ };
91
+ circuitBreaker: {
92
+ stateChanges: CircuitBreakerEvent[];
93
+ currentStates: Map<string, CircuitBreakerState>;
94
+ };
95
+ startTime: number;
96
+ lastUpdated: number;
97
+ }
98
+ /**
99
+ * JSON-serializable metrics format.
100
+ */
101
+ export interface MetricsJSON {
102
+ requests: {
103
+ total: number;
104
+ byRole: Record<string, number>;
105
+ byProvider: Record<string, number>;
106
+ byStatus: Record<string, number>;
107
+ };
108
+ latency: {
109
+ p50: number;
110
+ p95: number;
111
+ p99: number;
112
+ byProvider: Record<string, LatencyStats>;
113
+ byRole: Record<string, LatencyStats>;
114
+ };
115
+ tokens: {
116
+ input: number;
117
+ output: number;
118
+ byProvider: Record<string, TokenStats>;
119
+ };
120
+ errors: {
121
+ total: number;
122
+ byType: Record<string, number>;
123
+ byProvider: Record<string, number>;
124
+ };
125
+ circuitBreaker: {
126
+ stateChanges: CircuitBreakerEvent[];
127
+ currentStates: Record<string, CircuitBreakerState>;
128
+ };
129
+ startTime: number;
130
+ lastUpdated: number;
131
+ uptimeMs: number;
132
+ }
133
+ /**
134
+ * Metrics collector for tracking AgentRouter performance and usage.
135
+ *
136
+ * Thread-safe for single-threaded Node.js runtime.
137
+ * Maintains rolling latency data for percentile calculations.
138
+ *
139
+ * @example
140
+ * ```typescript
141
+ * const metrics = new MetricsCollector();
142
+ *
143
+ * // Record a successful request
144
+ * metrics.recordRequest({
145
+ * role: 'coder',
146
+ * provider: 'anthropic',
147
+ * status: 'success',
148
+ * durationMs: 1234,
149
+ * tokens: { input: 100, output: 500 }
150
+ * });
151
+ *
152
+ * // Record an error
153
+ * metrics.recordError('RateLimitError', 'openai');
154
+ *
155
+ * // Get metrics snapshot
156
+ * const snapshot = metrics.getMetrics();
157
+ * console.log(`Total requests: ${snapshot.requests.total}`);
158
+ * console.log(`P95 latency: ${snapshot.latency.p95}ms`);
159
+ * ```
160
+ */
161
+ export declare class MetricsCollector {
162
+ private requestCount;
163
+ private requestsByRole;
164
+ private requestsByProvider;
165
+ private requestsByStatus;
166
+ private latencyValues;
167
+ private latencyByProvider;
168
+ private latencyByRole;
169
+ private totalInputTokens;
170
+ private totalOutputTokens;
171
+ private tokensByProvider;
172
+ private errorCount;
173
+ private errorsByType;
174
+ private errorsByProvider;
175
+ private circuitBreakerEvents;
176
+ private circuitBreakerStates;
177
+ private readonly startTime;
178
+ private lastUpdated;
179
+ private readonly maxLatencySamples;
180
+ private readonly maxCircuitBreakerEvents;
181
+ /**
182
+ * Create a new MetricsCollector.
183
+ *
184
+ * @param options Configuration options
185
+ * @param options.maxLatencySamples Maximum number of latency samples to keep (default: 10000)
186
+ * @param options.maxCircuitBreakerEvents Maximum circuit breaker events to keep (default: 1000)
187
+ */
188
+ constructor(options?: {
189
+ maxLatencySamples?: number;
190
+ maxCircuitBreakerEvents?: number;
191
+ });
192
+ /**
193
+ * Record a completed request.
194
+ *
195
+ * @param record Request details to record
196
+ */
197
+ recordRequest(record: RequestRecord): void;
198
+ /**
199
+ * Record an error occurrence.
200
+ *
201
+ * @param errorType The type/class of the error
202
+ * @param provider The provider that produced the error (optional)
203
+ */
204
+ recordError(errorType: string, provider?: string): void;
205
+ /**
206
+ * Record a circuit breaker state change.
207
+ *
208
+ * @param provider The provider whose circuit breaker changed
209
+ * @param previousState The previous state
210
+ * @param newState The new state
211
+ */
212
+ recordCircuitBreakerChange(provider: string, previousState: CircuitBreakerState, newState: CircuitBreakerState): void;
213
+ /**
214
+ * Get the current metrics snapshot.
215
+ *
216
+ * @returns Aggregated metrics with calculated percentiles
217
+ */
218
+ getMetrics(): Metrics;
219
+ /**
220
+ * Reset all metrics to initial state.
221
+ * Useful for testing or periodic resets.
222
+ */
223
+ reset(): void;
224
+ /**
225
+ * Export metrics as a JSON string.
226
+ *
227
+ * @returns JSON string representation of all metrics
228
+ */
229
+ toJSON(): string;
230
+ /**
231
+ * Get a summary string suitable for logging.
232
+ *
233
+ * @returns Human-readable summary of key metrics
234
+ */
235
+ getSummary(): string;
236
+ private incrementMap;
237
+ private addLatencySample;
238
+ private addLatencySampleToMap;
239
+ private calculateLatencyStatsByKey;
240
+ }
241
+ /**
242
+ * Default metrics collector instance for the agent-router package.
243
+ * Pre-configured and ready to use.
244
+ */
245
+ export declare const metrics: MetricsCollector;
246
+ /**
247
+ * Re-export for convenience.
248
+ */
249
+ export default metrics;
250
+ //# sourceMappingURL=metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/observability/metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,364 @@
1
+ /**
2
+ * Metrics Collection Module
3
+ *
4
+ * Simple in-memory metrics collection for AgentRouter observability.
5
+ * Tracks:
6
+ * - Request counts (by role, provider, status)
7
+ * - Latency histograms with percentile calculations (by role, provider)
8
+ * - Token usage (input, output by provider)
9
+ * - Error counts (by type, provider)
10
+ * - Circuit breaker state changes
11
+ *
12
+ * No external dependencies - pure TypeScript implementation.
13
+ */
14
+ // ============================================================================
15
+ // Utilities
16
+ // ============================================================================
17
+ /**
18
+ * Calculate percentile from a sorted array of numbers.
19
+ */
20
+ function calculatePercentile(sortedValues, percentile) {
21
+ if (sortedValues.length === 0)
22
+ return 0;
23
+ if (sortedValues.length === 1)
24
+ return sortedValues[0];
25
+ const index = (percentile / 100) * (sortedValues.length - 1);
26
+ const lower = Math.floor(index);
27
+ const upper = Math.ceil(index);
28
+ if (lower === upper)
29
+ return sortedValues[lower];
30
+ const fraction = index - lower;
31
+ return sortedValues[lower] + fraction * (sortedValues[upper] - sortedValues[lower]);
32
+ }
33
+ /**
34
+ * Calculate latency statistics from an array of latency values.
35
+ */
36
+ function calculateLatencyStats(values) {
37
+ if (values.length === 0) {
38
+ return { count: 0, min: 0, max: 0, mean: 0, p50: 0, p95: 0, p99: 0 };
39
+ }
40
+ const sorted = [...values].sort((a, b) => a - b);
41
+ const sum = values.reduce((acc, val) => acc + val, 0);
42
+ return {
43
+ count: values.length,
44
+ min: sorted[0],
45
+ max: sorted[sorted.length - 1],
46
+ mean: sum / values.length,
47
+ p50: calculatePercentile(sorted, 50),
48
+ p95: calculatePercentile(sorted, 95),
49
+ p99: calculatePercentile(sorted, 99),
50
+ };
51
+ }
52
+ /**
53
+ * Convert a Map to a plain object for JSON serialization.
54
+ */
55
+ function mapToObject(map) {
56
+ const obj = {};
57
+ for (const [key, value] of map) {
58
+ obj[key] = value;
59
+ }
60
+ return obj;
61
+ }
62
+ // ============================================================================
63
+ // MetricsCollector Class
64
+ // ============================================================================
65
+ /**
66
+ * Metrics collector for tracking AgentRouter performance and usage.
67
+ *
68
+ * Thread-safe for single-threaded Node.js runtime.
69
+ * Maintains rolling latency data for percentile calculations.
70
+ *
71
+ * @example
72
+ * ```typescript
73
+ * const metrics = new MetricsCollector();
74
+ *
75
+ * // Record a successful request
76
+ * metrics.recordRequest({
77
+ * role: 'coder',
78
+ * provider: 'anthropic',
79
+ * status: 'success',
80
+ * durationMs: 1234,
81
+ * tokens: { input: 100, output: 500 }
82
+ * });
83
+ *
84
+ * // Record an error
85
+ * metrics.recordError('RateLimitError', 'openai');
86
+ *
87
+ * // Get metrics snapshot
88
+ * const snapshot = metrics.getMetrics();
89
+ * console.log(`Total requests: ${snapshot.requests.total}`);
90
+ * console.log(`P95 latency: ${snapshot.latency.p95}ms`);
91
+ * ```
92
+ */
93
+ export class MetricsCollector {
94
+ // Request counts
95
+ requestCount = 0;
96
+ requestsByRole = new Map();
97
+ requestsByProvider = new Map();
98
+ requestsByStatus = new Map();
99
+ // Latency tracking (store raw values for percentile calculation)
100
+ latencyValues = [];
101
+ latencyByProvider = new Map();
102
+ latencyByRole = new Map();
103
+ // Token tracking
104
+ totalInputTokens = 0;
105
+ totalOutputTokens = 0;
106
+ tokensByProvider = new Map();
107
+ // Error tracking
108
+ errorCount = 0;
109
+ errorsByType = new Map();
110
+ errorsByProvider = new Map();
111
+ // Circuit breaker tracking
112
+ circuitBreakerEvents = [];
113
+ circuitBreakerStates = new Map();
114
+ // Timing
115
+ startTime;
116
+ lastUpdated;
117
+ // Configuration
118
+ maxLatencySamples;
119
+ maxCircuitBreakerEvents;
120
+ /**
121
+ * Create a new MetricsCollector.
122
+ *
123
+ * @param options Configuration options
124
+ * @param options.maxLatencySamples Maximum number of latency samples to keep (default: 10000)
125
+ * @param options.maxCircuitBreakerEvents Maximum circuit breaker events to keep (default: 1000)
126
+ */
127
+ constructor(options) {
128
+ this.startTime = Date.now();
129
+ this.lastUpdated = this.startTime;
130
+ this.maxLatencySamples = options?.maxLatencySamples ?? 10000;
131
+ this.maxCircuitBreakerEvents = options?.maxCircuitBreakerEvents ?? 1000;
132
+ }
133
+ /**
134
+ * Record a completed request.
135
+ *
136
+ * @param record Request details to record
137
+ */
138
+ recordRequest(record) {
139
+ this.lastUpdated = Date.now();
140
+ // Increment request counts
141
+ this.requestCount++;
142
+ this.incrementMap(this.requestsByRole, record.role);
143
+ this.incrementMap(this.requestsByProvider, record.provider);
144
+ this.incrementMap(this.requestsByStatus, record.status);
145
+ // Record latency
146
+ this.addLatencySample(this.latencyValues, record.durationMs);
147
+ this.addLatencySampleToMap(this.latencyByProvider, record.provider, record.durationMs);
148
+ this.addLatencySampleToMap(this.latencyByRole, record.role, record.durationMs);
149
+ // Record tokens if provided
150
+ if (record.tokens) {
151
+ this.totalInputTokens += record.tokens.input;
152
+ this.totalOutputTokens += record.tokens.output;
153
+ const providerTokens = this.tokensByProvider.get(record.provider) ?? {
154
+ input: 0,
155
+ output: 0,
156
+ total: 0,
157
+ };
158
+ providerTokens.input += record.tokens.input;
159
+ providerTokens.output += record.tokens.output;
160
+ providerTokens.total += record.tokens.input + record.tokens.output;
161
+ this.tokensByProvider.set(record.provider, providerTokens);
162
+ }
163
+ }
164
+ /**
165
+ * Record an error occurrence.
166
+ *
167
+ * @param errorType The type/class of the error
168
+ * @param provider The provider that produced the error (optional)
169
+ */
170
+ recordError(errorType, provider) {
171
+ this.lastUpdated = Date.now();
172
+ this.errorCount++;
173
+ this.incrementMap(this.errorsByType, errorType);
174
+ if (provider) {
175
+ this.incrementMap(this.errorsByProvider, provider);
176
+ }
177
+ }
178
+ /**
179
+ * Record a circuit breaker state change.
180
+ *
181
+ * @param provider The provider whose circuit breaker changed
182
+ * @param previousState The previous state
183
+ * @param newState The new state
184
+ */
185
+ recordCircuitBreakerChange(provider, previousState, newState) {
186
+ this.lastUpdated = Date.now();
187
+ const event = {
188
+ provider,
189
+ previousState,
190
+ newState,
191
+ timestamp: Date.now(),
192
+ };
193
+ this.circuitBreakerEvents.push(event);
194
+ this.circuitBreakerStates.set(provider, newState);
195
+ // Trim old events if needed
196
+ if (this.circuitBreakerEvents.length > this.maxCircuitBreakerEvents) {
197
+ this.circuitBreakerEvents = this.circuitBreakerEvents.slice(-this.maxCircuitBreakerEvents);
198
+ }
199
+ }
200
+ /**
201
+ * Get the current metrics snapshot.
202
+ *
203
+ * @returns Aggregated metrics with calculated percentiles
204
+ */
205
+ getMetrics() {
206
+ const globalLatencyStats = calculateLatencyStats(this.latencyValues);
207
+ return {
208
+ requests: {
209
+ total: this.requestCount,
210
+ byRole: new Map(this.requestsByRole),
211
+ byProvider: new Map(this.requestsByProvider),
212
+ byStatus: new Map(this.requestsByStatus),
213
+ },
214
+ latency: {
215
+ p50: globalLatencyStats.p50,
216
+ p95: globalLatencyStats.p95,
217
+ p99: globalLatencyStats.p99,
218
+ byProvider: this.calculateLatencyStatsByKey(this.latencyByProvider),
219
+ byRole: this.calculateLatencyStatsByKey(this.latencyByRole),
220
+ },
221
+ tokens: {
222
+ input: this.totalInputTokens,
223
+ output: this.totalOutputTokens,
224
+ byProvider: new Map(this.tokensByProvider),
225
+ },
226
+ errors: {
227
+ total: this.errorCount,
228
+ byType: new Map(this.errorsByType),
229
+ byProvider: new Map(this.errorsByProvider),
230
+ },
231
+ circuitBreaker: {
232
+ stateChanges: [...this.circuitBreakerEvents],
233
+ currentStates: new Map(this.circuitBreakerStates),
234
+ },
235
+ startTime: this.startTime,
236
+ lastUpdated: this.lastUpdated,
237
+ };
238
+ }
239
+ /**
240
+ * Reset all metrics to initial state.
241
+ * Useful for testing or periodic resets.
242
+ */
243
+ reset() {
244
+ this.requestCount = 0;
245
+ this.requestsByRole.clear();
246
+ this.requestsByProvider.clear();
247
+ this.requestsByStatus.clear();
248
+ this.latencyValues = [];
249
+ this.latencyByProvider.clear();
250
+ this.latencyByRole.clear();
251
+ this.totalInputTokens = 0;
252
+ this.totalOutputTokens = 0;
253
+ this.tokensByProvider.clear();
254
+ this.errorCount = 0;
255
+ this.errorsByType.clear();
256
+ this.errorsByProvider.clear();
257
+ this.circuitBreakerEvents = [];
258
+ this.circuitBreakerStates.clear();
259
+ this.lastUpdated = Date.now();
260
+ }
261
+ /**
262
+ * Export metrics as a JSON string.
263
+ *
264
+ * @returns JSON string representation of all metrics
265
+ */
266
+ toJSON() {
267
+ const metrics = this.getMetrics();
268
+ const globalLatencyStats = calculateLatencyStats(this.latencyValues);
269
+ const jsonMetrics = {
270
+ requests: {
271
+ total: metrics.requests.total,
272
+ byRole: mapToObject(metrics.requests.byRole),
273
+ byProvider: mapToObject(metrics.requests.byProvider),
274
+ byStatus: mapToObject(metrics.requests.byStatus),
275
+ },
276
+ latency: {
277
+ p50: globalLatencyStats.p50,
278
+ p95: globalLatencyStats.p95,
279
+ p99: globalLatencyStats.p99,
280
+ byProvider: mapToObject(metrics.latency.byProvider),
281
+ byRole: mapToObject(metrics.latency.byRole),
282
+ },
283
+ tokens: {
284
+ input: metrics.tokens.input,
285
+ output: metrics.tokens.output,
286
+ byProvider: mapToObject(metrics.tokens.byProvider),
287
+ },
288
+ errors: {
289
+ total: metrics.errors.total,
290
+ byType: mapToObject(metrics.errors.byType),
291
+ byProvider: mapToObject(metrics.errors.byProvider),
292
+ },
293
+ circuitBreaker: {
294
+ stateChanges: metrics.circuitBreaker.stateChanges,
295
+ currentStates: mapToObject(metrics.circuitBreaker.currentStates),
296
+ },
297
+ startTime: metrics.startTime,
298
+ lastUpdated: metrics.lastUpdated,
299
+ uptimeMs: Date.now() - metrics.startTime,
300
+ };
301
+ return JSON.stringify(jsonMetrics, null, 2);
302
+ }
303
+ /**
304
+ * Get a summary string suitable for logging.
305
+ *
306
+ * @returns Human-readable summary of key metrics
307
+ */
308
+ getSummary() {
309
+ const m = this.getMetrics();
310
+ const uptimeSeconds = Math.floor((Date.now() - m.startTime) / 1000);
311
+ return [
312
+ `Metrics Summary (uptime: ${uptimeSeconds}s)`,
313
+ ` Requests: ${m.requests.total} total`,
314
+ ` Latency: p50=${m.latency.p50.toFixed(0)}ms, p95=${m.latency.p95.toFixed(0)}ms, p99=${m.latency.p99.toFixed(0)}ms`,
315
+ ` Tokens: ${m.tokens.input} input, ${m.tokens.output} output`,
316
+ ` Errors: ${m.errors.total} total`,
317
+ ].join('\n');
318
+ }
319
+ // ============================================================================
320
+ // Private Helpers
321
+ // ============================================================================
322
+ incrementMap(map, key) {
323
+ map.set(key, (map.get(key) ?? 0) + 1);
324
+ }
325
+ addLatencySample(values, sample) {
326
+ values.push(sample);
327
+ // Trim to max samples (remove oldest)
328
+ if (values.length > this.maxLatencySamples) {
329
+ values.shift();
330
+ }
331
+ }
332
+ addLatencySampleToMap(map, key, sample) {
333
+ let values = map.get(key);
334
+ if (!values) {
335
+ values = [];
336
+ map.set(key, values);
337
+ }
338
+ values.push(sample);
339
+ // Trim to max samples per key
340
+ if (values.length > this.maxLatencySamples) {
341
+ values.shift();
342
+ }
343
+ }
344
+ calculateLatencyStatsByKey(map) {
345
+ const result = new Map();
346
+ for (const [key, values] of map) {
347
+ result.set(key, calculateLatencyStats(values));
348
+ }
349
+ return result;
350
+ }
351
+ }
352
+ // ============================================================================
353
+ // Singleton Instance
354
+ // ============================================================================
355
+ /**
356
+ * Default metrics collector instance for the agent-router package.
357
+ * Pre-configured and ready to use.
358
+ */
359
+ export const metrics = new MetricsCollector();
360
+ /**
361
+ * Re-export for convenience.
362
+ */
363
+ export default metrics;
364
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/observability/metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Persistence Module
3
+ *
4
+ * Provides state persistence for Agent Foundry, enabling state to survive
5
+ * server restarts and crashes. State is stored in .agent-foundry/state.json.
6
+ */
7
+ export * from './state-schema.js';
8
+ export * from './state-store.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/persistence/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Persistence Module
3
+ *
4
+ * Provides state persistence for Agent Foundry, enabling state to survive
5
+ * server restarts and crashes. State is stored in .agent-foundry/state.json.
6
+ */
7
+ export * from './state-schema.js';
8
+ export * from './state-store.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/persistence/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}