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,477 @@
1
+ /**
2
+ * Error Translation Layer
3
+ *
4
+ * Normalizes error formats from different LLM providers (Anthropic, OpenAI, Gemini)
5
+ * into AgentRouter's standardized error types. This allows consistent error handling
6
+ * regardless of which provider produced the error.
7
+ *
8
+ * Provider error format differences:
9
+ * - Anthropic: { type: "error", error: { type, message } }
10
+ * - OpenAI: { error: { message, type, code } }
11
+ * - Gemini: { error: { message, status, code } }
12
+ *
13
+ * All errors are mapped to the appropriate AgentRouterError subclass with the
14
+ * original error preserved in the `cause` property for debugging.
15
+ */
16
+ import { AgentRouterError, AuthenticationError, RateLimitError, ProviderError, TimeoutError, ConfigurationError, } from '../types.js';
17
+ // ============================================================================
18
+ // Error Type Detection Helpers
19
+ // ============================================================================
20
+ /**
21
+ * Extract HTTP status code from various error formats.
22
+ */
23
+ function extractStatusCode(error) {
24
+ if (typeof error !== 'object' || error === null) {
25
+ return undefined;
26
+ }
27
+ const err = error;
28
+ // Check common status code properties
29
+ if (typeof err['status'] === 'number') {
30
+ return err['status'];
31
+ }
32
+ if (typeof err['statusCode'] === 'number') {
33
+ return err['statusCode'];
34
+ }
35
+ if (typeof err['response'] === 'object' && err['response'] !== null) {
36
+ const response = err['response'];
37
+ if (typeof response['status'] === 'number') {
38
+ return response['status'];
39
+ }
40
+ }
41
+ return undefined;
42
+ }
43
+ /**
44
+ * Extract error message from various error formats.
45
+ */
46
+ function extractMessage(error, defaultMessage) {
47
+ if (error instanceof Error) {
48
+ return error.message || defaultMessage;
49
+ }
50
+ if (typeof error === 'object' && error !== null) {
51
+ const err = error;
52
+ if (typeof err['message'] === 'string') {
53
+ return err['message'];
54
+ }
55
+ }
56
+ if (typeof error === 'string') {
57
+ return error;
58
+ }
59
+ return defaultMessage;
60
+ }
61
+ /**
62
+ * Check if an error indicates a timeout.
63
+ */
64
+ function isTimeoutError(error) {
65
+ if (error instanceof Error) {
66
+ // AbortError is typically thrown for timeouts
67
+ if (error.name === 'AbortError') {
68
+ return true;
69
+ }
70
+ // Check for timeout-related messages
71
+ const message = error.message.toLowerCase();
72
+ if (message.includes('timeout') ||
73
+ message.includes('timed out') ||
74
+ message.includes('etimedout') ||
75
+ message.includes('econnaborted')) {
76
+ return true;
77
+ }
78
+ }
79
+ // Check for code property
80
+ if (typeof error === 'object' && error !== null) {
81
+ const err = error;
82
+ if (err['code'] === 'ETIMEDOUT' ||
83
+ err['code'] === 'ECONNABORTED' ||
84
+ err['code'] === 'ESOCKETTIMEDOUT') {
85
+ return true;
86
+ }
87
+ }
88
+ return false;
89
+ }
90
+ /**
91
+ * Extract retry-after value from error (for rate limit errors).
92
+ * Returns value in milliseconds.
93
+ */
94
+ function extractRetryAfter(error) {
95
+ if (typeof error !== 'object' || error === null) {
96
+ return undefined;
97
+ }
98
+ const err = error;
99
+ // Check for retryAfter property (may be in seconds or milliseconds)
100
+ const retryAfterValue = err['retryAfter'];
101
+ if (typeof retryAfterValue === 'number') {
102
+ // Assume seconds if small value, milliseconds if large
103
+ return retryAfterValue > 1000 ? retryAfterValue : retryAfterValue * 1000;
104
+ }
105
+ // Check response headers (if available)
106
+ const headersValue = err['headers'];
107
+ if (typeof headersValue === 'object' && headersValue !== null) {
108
+ const headers = headersValue;
109
+ const retryAfter = headers['retry-after'] || headers['Retry-After'];
110
+ if (retryAfter) {
111
+ const seconds = parseInt(retryAfter, 10);
112
+ if (!isNaN(seconds)) {
113
+ return seconds * 1000;
114
+ }
115
+ }
116
+ }
117
+ return undefined;
118
+ }
119
+ /**
120
+ * Create an appropriate AgentRouterError based on HTTP status code.
121
+ */
122
+ function createErrorFromStatusCode(statusCode, message, provider, cause) {
123
+ switch (statusCode) {
124
+ case 400:
125
+ return new ConfigurationError(`Invalid request: ${message}`, cause);
126
+ case 401:
127
+ case 403:
128
+ return new AuthenticationError(provider, cause);
129
+ case 429:
130
+ return new RateLimitError(provider, undefined, cause);
131
+ case 500:
132
+ case 502:
133
+ case 503:
134
+ case 504:
135
+ return new ProviderError(`Provider error (${statusCode}): ${message}`, provider, statusCode, cause);
136
+ default:
137
+ return new ProviderError(message, provider, statusCode, cause);
138
+ }
139
+ }
140
+ // ============================================================================
141
+ // Provider-Specific Translation Functions
142
+ // ============================================================================
143
+ /**
144
+ * Translate an Anthropic API error to an AgentRouterError.
145
+ *
146
+ * Anthropic error format:
147
+ * ```json
148
+ * {
149
+ * "type": "error",
150
+ * "error": {
151
+ * "type": "invalid_request_error" | "authentication_error" | "rate_limit_error" | ...,
152
+ * "message": "Human-readable error message"
153
+ * }
154
+ * }
155
+ * ```
156
+ *
157
+ * Error types from Anthropic:
158
+ * - invalid_request_error: Bad request parameters (400)
159
+ * - authentication_error: Invalid API key (401)
160
+ * - permission_error: Forbidden (403)
161
+ * - not_found_error: Resource not found (404)
162
+ * - rate_limit_error: Rate limited (429)
163
+ * - api_error: Internal server error (500)
164
+ * - overloaded_error: Overloaded (529)
165
+ *
166
+ * @param error - The raw Anthropic error
167
+ * @returns Normalized AgentRouterError
168
+ */
169
+ export function translateAnthropicError(error) {
170
+ const provider = 'anthropic';
171
+ const originalError = error instanceof Error ? error : new Error(JSON.stringify(error));
172
+ // Extract message from nested error structure
173
+ const message = error.error?.message ||
174
+ error.message ||
175
+ 'Unknown Anthropic error';
176
+ // Extract error type
177
+ const errorType = error.error?.type;
178
+ // Extract status code
179
+ const statusCode = extractStatusCode(error);
180
+ // Handle timeout errors
181
+ if (isTimeoutError(error)) {
182
+ return new TimeoutError(provider, 60000, originalError);
183
+ }
184
+ // Map Anthropic error types to AgentRouter errors
185
+ switch (errorType) {
186
+ case 'invalid_request_error':
187
+ return new ConfigurationError(`Invalid request: ${message}`, originalError);
188
+ case 'authentication_error':
189
+ return new AuthenticationError(provider, originalError);
190
+ case 'permission_error':
191
+ return new AuthenticationError(provider, originalError);
192
+ case 'rate_limit_error': {
193
+ const retryAfter = extractRetryAfter(error);
194
+ return new RateLimitError(provider, retryAfter, originalError);
195
+ }
196
+ case 'api_error':
197
+ return new ProviderError(`Anthropic API error: ${message}`, provider, statusCode ?? 500, originalError);
198
+ case 'overloaded_error':
199
+ return new ProviderError(`Anthropic API overloaded: ${message}`, provider, 529, originalError);
200
+ default:
201
+ // Fall back to status code based mapping
202
+ if (statusCode !== undefined) {
203
+ return createErrorFromStatusCode(statusCode, message, provider, originalError);
204
+ }
205
+ return new ProviderError(message, provider, undefined, originalError);
206
+ }
207
+ }
208
+ /**
209
+ * Translate an OpenAI API error to an AgentRouterError.
210
+ *
211
+ * OpenAI error format:
212
+ * ```json
213
+ * {
214
+ * "error": {
215
+ * "message": "Human-readable error message",
216
+ * "type": "invalid_request_error" | "authentication_error" | "rate_limit_error" | ...,
217
+ * "code": "specific_error_code" | null,
218
+ * "param": "parameter_name" | null
219
+ * }
220
+ * }
221
+ * ```
222
+ *
223
+ * Common error types from OpenAI:
224
+ * - invalid_request_error: Bad request (400)
225
+ * - invalid_api_key: Invalid API key (401)
226
+ * - insufficient_quota: Quota exceeded (429)
227
+ * - rate_limit_exceeded: Rate limited (429)
228
+ * - server_error: Internal error (500)
229
+ * - engine_overloaded: Overloaded (503)
230
+ *
231
+ * @param error - The raw OpenAI error
232
+ * @returns Normalized AgentRouterError
233
+ */
234
+ export function translateOpenAIError(error) {
235
+ const provider = 'openai';
236
+ const originalError = error instanceof Error ? error : new Error(JSON.stringify(error));
237
+ // Extract message from nested error structure
238
+ const message = error.error?.message ||
239
+ error.message ||
240
+ 'Unknown OpenAI error';
241
+ // Extract error type and code
242
+ const errorType = error.error?.type;
243
+ const errorCode = error.error?.code;
244
+ // Extract status code
245
+ const statusCode = extractStatusCode(error);
246
+ // Handle timeout errors
247
+ if (isTimeoutError(error)) {
248
+ return new TimeoutError(provider, 60000, originalError);
249
+ }
250
+ // Map OpenAI error types/codes to AgentRouter errors
251
+ // First check specific error codes
252
+ switch (errorCode) {
253
+ case 'invalid_api_key':
254
+ return new AuthenticationError(provider, originalError);
255
+ case 'insufficient_quota':
256
+ case 'rate_limit_exceeded': {
257
+ const retryAfter = extractRetryAfter(error);
258
+ return new RateLimitError(provider, retryAfter, originalError);
259
+ }
260
+ case 'model_not_found':
261
+ return new ConfigurationError(`Model not found: ${message}`, originalError);
262
+ case 'context_length_exceeded':
263
+ return new ConfigurationError(`Context length exceeded: ${message}`, originalError);
264
+ }
265
+ // Then check error type
266
+ switch (errorType) {
267
+ case 'invalid_request_error':
268
+ return new ConfigurationError(`Invalid request: ${message}`, originalError);
269
+ case 'authentication_error':
270
+ return new AuthenticationError(provider, originalError);
271
+ case 'rate_limit_error': {
272
+ const retryAfter = extractRetryAfter(error);
273
+ return new RateLimitError(provider, retryAfter, originalError);
274
+ }
275
+ case 'server_error':
276
+ return new ProviderError(`OpenAI server error: ${message}`, provider, statusCode ?? 500, originalError);
277
+ }
278
+ // Fall back to status code based mapping
279
+ if (statusCode !== undefined) {
280
+ return createErrorFromStatusCode(statusCode, message, provider, originalError);
281
+ }
282
+ return new ProviderError(message, provider, undefined, originalError);
283
+ }
284
+ /**
285
+ * Translate a Google Gemini API error to an AgentRouterError.
286
+ *
287
+ * Gemini error format:
288
+ * ```json
289
+ * {
290
+ * "error": {
291
+ * "code": 400,
292
+ * "message": "Human-readable error message",
293
+ * "status": "INVALID_ARGUMENT" | "UNAUTHENTICATED" | "RESOURCE_EXHAUSTED" | ...,
294
+ * "details": [...]
295
+ * }
296
+ * }
297
+ * ```
298
+ *
299
+ * Common status values from Gemini:
300
+ * - INVALID_ARGUMENT: Bad request (400)
301
+ * - UNAUTHENTICATED: Invalid API key (401)
302
+ * - PERMISSION_DENIED: Forbidden (403)
303
+ * - NOT_FOUND: Resource not found (404)
304
+ * - RESOURCE_EXHAUSTED: Rate limited or quota exceeded (429)
305
+ * - INTERNAL: Internal server error (500)
306
+ * - UNAVAILABLE: Service unavailable (503)
307
+ *
308
+ * @param error - The raw Gemini error
309
+ * @returns Normalized AgentRouterError
310
+ */
311
+ export function translateGeminiError(error) {
312
+ const provider = 'google';
313
+ const originalError = error instanceof Error ? error : new Error(JSON.stringify(error));
314
+ // Extract message from nested error structure
315
+ const message = error.error?.message ||
316
+ error.message ||
317
+ 'Unknown Gemini error';
318
+ // Extract status (string status like "INVALID_ARGUMENT")
319
+ const status = error.error?.status;
320
+ // Extract numeric code
321
+ const code = error.error?.code;
322
+ // Get status code from various sources
323
+ const statusCode = extractStatusCode(error) ?? code;
324
+ // Handle timeout errors
325
+ if (isTimeoutError(error)) {
326
+ return new TimeoutError(provider, 60000, originalError);
327
+ }
328
+ // Map Gemini status values to AgentRouter errors
329
+ switch (status) {
330
+ case 'INVALID_ARGUMENT':
331
+ return new ConfigurationError(`Invalid argument: ${message}`, originalError);
332
+ case 'UNAUTHENTICATED':
333
+ return new AuthenticationError(provider, originalError);
334
+ case 'PERMISSION_DENIED':
335
+ return new AuthenticationError(provider, originalError);
336
+ case 'NOT_FOUND':
337
+ return new ConfigurationError(`Resource not found: ${message}`, originalError);
338
+ case 'RESOURCE_EXHAUSTED': {
339
+ const retryAfter = extractRetryAfter(error);
340
+ return new RateLimitError(provider, retryAfter, originalError);
341
+ }
342
+ case 'INTERNAL':
343
+ return new ProviderError(`Gemini internal error: ${message}`, provider, statusCode ?? 500, originalError);
344
+ case 'UNAVAILABLE':
345
+ return new ProviderError(`Gemini service unavailable: ${message}`, provider, statusCode ?? 503, originalError);
346
+ case 'DEADLINE_EXCEEDED':
347
+ return new TimeoutError(provider, 60000, originalError);
348
+ }
349
+ // Fall back to status code based mapping
350
+ if (statusCode !== undefined) {
351
+ return createErrorFromStatusCode(statusCode, message, provider, originalError);
352
+ }
353
+ return new ProviderError(message, provider, undefined, originalError);
354
+ }
355
+ // ============================================================================
356
+ // Generic Error Translation
357
+ // ============================================================================
358
+ /**
359
+ * Translate any error into an AgentRouterError.
360
+ * Used when the provider is unknown or for generic error handling.
361
+ *
362
+ * @param error - Any error object
363
+ * @param provider - Provider name for error context
364
+ * @returns Normalized AgentRouterError
365
+ */
366
+ export function translateGenericError(error, provider) {
367
+ // Already an AgentRouterError - return as-is
368
+ if (error instanceof AgentRouterError) {
369
+ return error;
370
+ }
371
+ const originalError = error instanceof Error ? error : new Error(String(error));
372
+ const message = extractMessage(error, 'Unknown error');
373
+ const statusCode = extractStatusCode(error);
374
+ // Handle timeout errors
375
+ if (isTimeoutError(error)) {
376
+ return new TimeoutError(provider, 60000, originalError);
377
+ }
378
+ // Map by status code if available
379
+ if (statusCode !== undefined) {
380
+ return createErrorFromStatusCode(statusCode, message, provider, originalError);
381
+ }
382
+ // Default to generic provider error
383
+ return new ProviderError(message, provider, undefined, originalError);
384
+ }
385
+ /**
386
+ * Translate an error from a specific provider.
387
+ * Routes to the appropriate provider-specific translator.
388
+ *
389
+ * @param error - The raw error from the provider
390
+ * @param provider - Provider name ('anthropic', 'openai', 'google', etc.)
391
+ * @returns Normalized AgentRouterError
392
+ */
393
+ export function translateProviderError(error, provider) {
394
+ // Already an AgentRouterError - return as-is
395
+ if (error instanceof AgentRouterError) {
396
+ return error;
397
+ }
398
+ switch (provider.toLowerCase()) {
399
+ case 'anthropic':
400
+ return translateAnthropicError(error);
401
+ case 'openai':
402
+ return translateOpenAIError(error);
403
+ case 'google':
404
+ case 'gemini':
405
+ return translateGeminiError(error);
406
+ default:
407
+ return translateGenericError(error, provider);
408
+ }
409
+ }
410
+ /**
411
+ * Wrap an async function to translate provider errors.
412
+ * Useful for wrapping provider calls to ensure consistent error handling.
413
+ *
414
+ * @param fn - Async function to wrap
415
+ * @param provider - Provider name for error context
416
+ * @returns Wrapped function that translates errors
417
+ */
418
+ export function withErrorTranslation(fn, provider) {
419
+ return async (...args) => {
420
+ try {
421
+ return await fn(...args);
422
+ }
423
+ catch (error) {
424
+ throw translateProviderError(error, provider);
425
+ }
426
+ };
427
+ }
428
+ /**
429
+ * Check if an error is retryable (transient error that may succeed on retry).
430
+ *
431
+ * @param error - The error to check
432
+ * @returns True if the error is retryable
433
+ */
434
+ export function isRetryableError(error) {
435
+ if (error instanceof RateLimitError) {
436
+ return true;
437
+ }
438
+ if (error instanceof TimeoutError) {
439
+ return true;
440
+ }
441
+ if (error instanceof ProviderError) {
442
+ const status = error.statusCode;
443
+ // 5xx errors are generally retryable
444
+ if (status !== undefined && status >= 500 && status < 600) {
445
+ return true;
446
+ }
447
+ // 429 is also retryable (rate limit)
448
+ if (status === 429) {
449
+ return true;
450
+ }
451
+ }
452
+ return false;
453
+ }
454
+ /**
455
+ * Get recommended retry delay for an error.
456
+ *
457
+ * @param error - The error to get retry delay for
458
+ * @param attempt - Current attempt number (1-based)
459
+ * @param baseDelayMs - Base delay in milliseconds (default: 1000)
460
+ * @returns Recommended delay in milliseconds, or undefined if not retryable
461
+ */
462
+ export function getRetryDelay(error, attempt, baseDelayMs = 1000) {
463
+ if (!isRetryableError(error)) {
464
+ return undefined;
465
+ }
466
+ // Use retry-after if available
467
+ if (error instanceof RateLimitError && error.retryAfterMs !== undefined) {
468
+ return error.retryAfterMs;
469
+ }
470
+ // Exponential backoff with jitter
471
+ const exponentialDelay = baseDelayMs * Math.pow(2, attempt - 1);
472
+ const jitter = Math.random() * 0.1 * exponentialDelay; // 10% jitter
473
+ const delay = exponentialDelay + jitter;
474
+ // Cap at 60 seconds
475
+ return Math.min(delay, 60000);
476
+ }
477
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/translation/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Translation Layer
3
+ *
4
+ * This module provides utilities for translating between different LLM provider
5
+ * formats. It normalizes messages, tools, and streaming events to a common
6
+ * AgentRouter format.
7
+ *
8
+ * @module translation
9
+ */
10
+ export { parseAnthropicStream, parseOpenAIStream, parseGeminiStream, parseSSE, createStreamTransformer, collectStreamText, collectStreamChunks, type AnthropicStreamEvent, type OpenAIStreamChunk, type GeminiStreamChunk, } from './streaming.js';
11
+ export { translateAnthropicError, translateOpenAIError, translateGeminiError, translateGenericError, translateProviderError, withErrorTranslation, isRetryableError, getRetryDelay, type AnthropicError, type OpenAIError, type GeminiError, type HttpError, } from './errors.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/translation/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAEL,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EAEjB,QAAQ,EAER,uBAAuB,EAEvB,iBAAiB,EACjB,mBAAmB,EAEnB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,GACvB,MAAM,gBAAgB,CAAC;AASxB,OAAO,EAEL,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EAEpB,qBAAqB,EACrB,sBAAsB,EAEtB,oBAAoB,EACpB,gBAAgB,EAChB,aAAa,EAEb,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,SAAS,GACf,MAAM,aAAa,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Translation Layer
3
+ *
4
+ * This module provides utilities for translating between different LLM provider
5
+ * formats. It normalizes messages, tools, and streaming events to a common
6
+ * AgentRouter format.
7
+ *
8
+ * @module translation
9
+ */
10
+ // Streaming response translation
11
+ export {
12
+ // Stream parsers
13
+ parseAnthropicStream, parseOpenAIStream, parseGeminiStream,
14
+ // SSE utilities
15
+ parseSSE,
16
+ // Transform stream helpers
17
+ createStreamTransformer,
18
+ // Collection utilities
19
+ collectStreamText, collectStreamChunks, } from './streaming.js';
20
+ // Re-export from messages when implemented
21
+ // export * from './messages.js';
22
+ // Re-export from tools when implemented
23
+ // export * from './tools.js';
24
+ // Error translation
25
+ export {
26
+ // Provider-specific translators
27
+ translateAnthropicError, translateOpenAIError, translateGeminiError,
28
+ // Generic translators
29
+ translateGenericError, translateProviderError,
30
+ // Utilities
31
+ withErrorTranslation, isRetryableError, getRetryDelay, } from './errors.js';
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/translation/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,iCAAiC;AACjC,OAAO;AACL,iBAAiB;AACjB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB;AACjB,gBAAgB;AAChB,QAAQ;AACR,2BAA2B;AAC3B,uBAAuB;AACvB,uBAAuB;AACvB,iBAAiB,EACjB,mBAAmB,GAKpB,MAAM,gBAAgB,CAAC;AAExB,2CAA2C;AAC3C,iCAAiC;AAEjC,wCAAwC;AACxC,8BAA8B;AAE9B,oBAAoB;AACpB,OAAO;AACL,gCAAgC;AAChC,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB;AACpB,sBAAsB;AACtB,qBAAqB,EACrB,sBAAsB;AACtB,YAAY;AACZ,oBAAoB,EACpB,gBAAgB,EAChB,aAAa,GAMd,MAAM,aAAa,CAAC"}