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,457 @@
1
+ /**
2
+ * OpenAI Provider Implementation
3
+ *
4
+ * Implements the Provider interface for OpenAI's Chat Completions API.
5
+ * Handles message format translation between AgentRouter's internal format
6
+ * (which uses Anthropic-style messages) and OpenAI's format.
7
+ *
8
+ * Key differences from Anthropic format:
9
+ * - System prompt goes in messages array as role: "system"
10
+ * - Tool schemas use "parameters" instead of "input_schema"
11
+ * - Tool calls are in a separate "tool_calls" array, not content blocks
12
+ * - Tool results use role: "tool" messages, not tool_result content blocks
13
+ */
14
+ import { BaseProvider } from './base.js';
15
+ // ============================================================================
16
+ // OpenAI Provider Implementation
17
+ // ============================================================================
18
+ /**
19
+ * OpenAI provider adapter.
20
+ *
21
+ * Translates between AgentRouter's internal message format and OpenAI's
22
+ * Chat Completions API format. Supports both streaming and non-streaming
23
+ * completion requests.
24
+ */
25
+ export class OpenAIProvider extends BaseProvider {
26
+ name = 'openai';
27
+ static DEFAULT_BASE_URL = 'https://api.openai.com/v1';
28
+ constructor(config) {
29
+ super(config);
30
+ }
31
+ /**
32
+ * Build headers for OpenAI API requests.
33
+ * Adds organization header if configured.
34
+ */
35
+ buildHeaders() {
36
+ const headers = super.buildHeaders();
37
+ // Add organization header if configured
38
+ if (this.config.organization) {
39
+ headers['OpenAI-Organization'] = this.config.organization;
40
+ }
41
+ return headers;
42
+ }
43
+ /**
44
+ * Execute a completion request and return the full response.
45
+ */
46
+ async complete(request) {
47
+ const url = `${this.getBaseUrl(OpenAIProvider.DEFAULT_BASE_URL)}/chat/completions`;
48
+ const openAIRequest = this.translateRequest(request);
49
+ const response = await this.makeRequest({
50
+ method: 'POST',
51
+ url,
52
+ headers: this.buildHeaders(),
53
+ body: openAIRequest,
54
+ timeoutMs: request.timeout_ms ?? this.defaultTimeoutMs,
55
+ });
56
+ return this.translateResponse(response);
57
+ }
58
+ /**
59
+ * Execute a streaming completion request.
60
+ */
61
+ async *completeStream(request) {
62
+ const url = `${this.getBaseUrl(OpenAIProvider.DEFAULT_BASE_URL)}/chat/completions`;
63
+ const openAIRequest = this.translateRequest({ ...request, stream: true });
64
+ const response = await this.makeStreamingRequest({
65
+ method: 'POST',
66
+ url,
67
+ headers: this.buildHeaders(),
68
+ body: openAIRequest,
69
+ timeoutMs: request.timeout_ms ?? this.defaultTimeoutMs,
70
+ stream: true,
71
+ });
72
+ if (!response.body) {
73
+ throw new Error('No response body for streaming request');
74
+ }
75
+ // Track tool calls being built across chunks
76
+ const toolCallsInProgress = new Map();
77
+ let hasStartedContent = false;
78
+ const reader = response.body.getReader();
79
+ const decoder = new TextDecoder();
80
+ let buffer = '';
81
+ try {
82
+ while (true) {
83
+ const { done, value } = await reader.read();
84
+ if (done) {
85
+ break;
86
+ }
87
+ buffer += decoder.decode(value, { stream: true });
88
+ // Process complete SSE events
89
+ const lines = buffer.split('\n');
90
+ buffer = lines.pop() || '';
91
+ for (const line of lines) {
92
+ const trimmed = line.trim();
93
+ if (!trimmed || trimmed === 'data: [DONE]') {
94
+ continue;
95
+ }
96
+ if (trimmed.startsWith('data: ')) {
97
+ const jsonStr = trimmed.slice(6);
98
+ try {
99
+ const chunk = JSON.parse(jsonStr);
100
+ const chunks = this.translateStreamChunk(chunk, toolCallsInProgress, hasStartedContent);
101
+ for (const streamChunk of chunks) {
102
+ // Track state for content block management
103
+ if (streamChunk.type === 'content_block_start' &&
104
+ streamChunk.content_block?.type === 'text') {
105
+ hasStartedContent = true;
106
+ }
107
+ yield streamChunk;
108
+ }
109
+ }
110
+ catch {
111
+ // Skip malformed JSON chunks
112
+ }
113
+ }
114
+ }
115
+ }
116
+ }
117
+ finally {
118
+ reader.releaseLock();
119
+ }
120
+ // Emit message_stop at the end
121
+ yield { type: 'message_stop' };
122
+ }
123
+ /**
124
+ * Check if the provider is available and configured correctly.
125
+ */
126
+ async healthCheck() {
127
+ const url = `${this.getBaseUrl(OpenAIProvider.DEFAULT_BASE_URL)}/models`;
128
+ await this.makeRequest({
129
+ method: 'GET',
130
+ url,
131
+ headers: this.buildHeaders(),
132
+ timeoutMs: 10000,
133
+ });
134
+ }
135
+ // ==========================================================================
136
+ // Translation Methods
137
+ // ==========================================================================
138
+ /**
139
+ * Translate AgentRouter request to OpenAI format.
140
+ *
141
+ * Note: Newer OpenAI models (gpt-4o, gpt-4-turbo, o1, etc.) require
142
+ * max_completion_tokens instead of max_tokens. We detect model type
143
+ * and use the appropriate parameter.
144
+ */
145
+ translateRequest(request) {
146
+ const messages = this.translateMessages(request.messages);
147
+ const tools = request.tools ? this.translateTools(request.tools) : undefined;
148
+ // Newer models require max_completion_tokens instead of max_tokens
149
+ const usesNewTokenParam = this.modelRequiresMaxCompletionTokens(request.model);
150
+ // Debug logging
151
+ console.log(`[OpenAI] Model: ${request.model}, usesNewTokenParam: ${usesNewTokenParam}, max_tokens: ${request.max_tokens}`);
152
+ const result = {
153
+ model: request.model,
154
+ messages,
155
+ temperature: request.temperature,
156
+ tools: tools && tools.length > 0 ? tools : undefined,
157
+ stream: request.stream,
158
+ };
159
+ // Add the appropriate token limit parameter
160
+ if (request.max_tokens !== undefined) {
161
+ if (usesNewTokenParam) {
162
+ result.max_completion_tokens = request.max_tokens;
163
+ console.log(`[OpenAI] Using max_completion_tokens: ${request.max_tokens}`);
164
+ }
165
+ else {
166
+ result.max_tokens = request.max_tokens;
167
+ console.log(`[OpenAI] Using max_tokens: ${request.max_tokens}`);
168
+ }
169
+ }
170
+ return result;
171
+ }
172
+ /**
173
+ * Check if we're using the actual OpenAI API (not a compatible third-party API).
174
+ * Third-party OpenAI-compatible APIs (Z.AI, DeepSeek, local LLMs, etc.) typically
175
+ * use the standard max_tokens parameter, not max_completion_tokens.
176
+ */
177
+ isActualOpenAIAPI() {
178
+ const baseUrl = this.getBaseUrl(OpenAIProvider.DEFAULT_BASE_URL);
179
+ // Check if the base URL is OpenAI's official API
180
+ return baseUrl.startsWith('https://api.openai.com');
181
+ }
182
+ /**
183
+ * Check if a model requires max_completion_tokens instead of max_tokens.
184
+ * Newer OpenAI models (gpt-4o, gpt-4-turbo, gpt-5.x, o1, o3, etc.) use the new parameter.
185
+ *
186
+ * IMPORTANT: This only applies to the actual OpenAI API. Third-party OpenAI-compatible
187
+ * APIs (Z.AI, DeepSeek, Ollama, etc.) use the standard max_tokens parameter.
188
+ *
189
+ * As of late 2024, most new OpenAI models require max_completion_tokens.
190
+ * We default to using max_completion_tokens for any model that:
191
+ * - Contains 'gpt-4o', 'gpt-4-turbo', 'gpt-5', 'o1', 'o3', or 'chatgpt'
192
+ * - OR is NOT a legacy model (gpt-3.5, gpt-4-0314, gpt-4-0613)
193
+ */
194
+ modelRequiresMaxCompletionTokens(model) {
195
+ // If we're not talking to the actual OpenAI API, always use max_tokens
196
+ // Third-party OpenAI-compatible APIs (Z.AI, DeepSeek, local LLMs, etc.)
197
+ // typically use the standard max_tokens parameter
198
+ if (!this.isActualOpenAIAPI()) {
199
+ return false;
200
+ }
201
+ const lowerModel = model.toLowerCase();
202
+ // Legacy models that use max_tokens (the old parameter)
203
+ const legacyModels = [
204
+ 'gpt-3.5',
205
+ 'gpt-4-0314',
206
+ 'gpt-4-0613',
207
+ 'gpt-4-32k',
208
+ ];
209
+ // If it's a known legacy model, use old parameter
210
+ if (legacyModels.some(m => lowerModel.includes(m))) {
211
+ return false;
212
+ }
213
+ // For all other models (gpt-4o, gpt-4-turbo, gpt-5.x, o1, o3, etc.), use new parameter
214
+ // This is safer as OpenAI is moving toward max_completion_tokens
215
+ return true;
216
+ }
217
+ /**
218
+ * Translate messages from AgentRouter format to OpenAI format.
219
+ *
220
+ * Key translations:
221
+ * - Content blocks are flattened to strings
222
+ * - tool_use blocks become tool_calls array on assistant messages
223
+ * - tool_result blocks become separate role: "tool" messages
224
+ */
225
+ translateMessages(messages) {
226
+ const openAIMessages = [];
227
+ for (const message of messages) {
228
+ if (typeof message.content === 'string') {
229
+ // Simple string content
230
+ openAIMessages.push({
231
+ role: message.role,
232
+ content: message.content,
233
+ });
234
+ }
235
+ else {
236
+ // Content blocks - need to process differently based on type
237
+ const textParts = [];
238
+ const toolCalls = [];
239
+ const toolResults = [];
240
+ for (const block of message.content) {
241
+ switch (block.type) {
242
+ case 'text':
243
+ if (block.text) {
244
+ textParts.push(block.text);
245
+ }
246
+ break;
247
+ case 'tool_use':
248
+ if (block.id && block.name) {
249
+ toolCalls.push({
250
+ id: block.id,
251
+ type: 'function',
252
+ function: {
253
+ name: block.name,
254
+ arguments: JSON.stringify(block.input || {}),
255
+ },
256
+ });
257
+ }
258
+ break;
259
+ case 'tool_result':
260
+ if (block.tool_use_id && block.content) {
261
+ toolResults.push({
262
+ tool_call_id: block.tool_use_id,
263
+ content: block.content,
264
+ });
265
+ }
266
+ break;
267
+ }
268
+ }
269
+ // Handle assistant messages with tool calls
270
+ if (message.role === 'assistant') {
271
+ const assistantMessage = {
272
+ role: 'assistant',
273
+ content: textParts.length > 0 ? textParts.join('\n') : null,
274
+ };
275
+ if (toolCalls.length > 0) {
276
+ assistantMessage.tool_calls = toolCalls;
277
+ }
278
+ openAIMessages.push(assistantMessage);
279
+ }
280
+ else {
281
+ // User messages
282
+ if (textParts.length > 0) {
283
+ openAIMessages.push({
284
+ role: 'user',
285
+ content: textParts.join('\n'),
286
+ });
287
+ }
288
+ // Add tool results as separate messages
289
+ for (const result of toolResults) {
290
+ openAIMessages.push({
291
+ role: 'tool',
292
+ content: result.content,
293
+ tool_call_id: result.tool_call_id,
294
+ });
295
+ }
296
+ }
297
+ }
298
+ }
299
+ return openAIMessages;
300
+ }
301
+ /**
302
+ * Translate tools from AgentRouter format to OpenAI format.
303
+ */
304
+ translateTools(tools) {
305
+ return tools.map((tool) => ({
306
+ type: 'function',
307
+ function: {
308
+ name: tool.name,
309
+ description: tool.description,
310
+ parameters: tool.input_schema,
311
+ },
312
+ }));
313
+ }
314
+ /**
315
+ * Translate OpenAI response to AgentRouter format.
316
+ */
317
+ translateResponse(response) {
318
+ const choice = response.choices[0];
319
+ if (!choice) {
320
+ throw new Error('No choices in OpenAI response');
321
+ }
322
+ const content = [];
323
+ // Add text content if present
324
+ if (choice.message.content) {
325
+ content.push({
326
+ type: 'text',
327
+ text: choice.message.content,
328
+ });
329
+ }
330
+ // Add tool calls if present
331
+ if (choice.message.tool_calls) {
332
+ for (const toolCall of choice.message.tool_calls) {
333
+ content.push({
334
+ type: 'tool_use',
335
+ id: toolCall.id,
336
+ name: toolCall.function.name,
337
+ input: JSON.parse(toolCall.function.arguments),
338
+ });
339
+ }
340
+ }
341
+ // Map finish_reason to stop_reason
342
+ let stopReason = 'end_turn';
343
+ switch (choice.finish_reason) {
344
+ case 'stop':
345
+ stopReason = 'end_turn';
346
+ break;
347
+ case 'length':
348
+ stopReason = 'max_tokens';
349
+ break;
350
+ case 'tool_calls':
351
+ stopReason = 'tool_use';
352
+ break;
353
+ case 'content_filter':
354
+ stopReason = 'content_filter';
355
+ break;
356
+ }
357
+ const result = {
358
+ id: response.id,
359
+ content,
360
+ model: response.model,
361
+ stop_reason: stopReason,
362
+ };
363
+ if (response.usage) {
364
+ result.usage = {
365
+ input_tokens: response.usage.prompt_tokens,
366
+ output_tokens: response.usage.completion_tokens,
367
+ };
368
+ }
369
+ return result;
370
+ }
371
+ /**
372
+ * Translate OpenAI streaming chunk to AgentRouter StreamChunk format.
373
+ *
374
+ * OpenAI streams deltas that need to be accumulated for tool calls.
375
+ * Text content can be yielded immediately.
376
+ */
377
+ translateStreamChunk(chunk, toolCallsInProgress, hasStartedContent) {
378
+ const chunks = [];
379
+ const choice = chunk.choices[0];
380
+ if (!choice) {
381
+ return chunks;
382
+ }
383
+ const delta = choice.delta;
384
+ // Handle text content
385
+ if (delta.content !== undefined && delta.content !== null) {
386
+ // Emit content_block_start if this is the first content
387
+ if (!hasStartedContent) {
388
+ chunks.push({
389
+ type: 'content_block_start',
390
+ index: 0,
391
+ content_block: {
392
+ type: 'text',
393
+ text: '',
394
+ },
395
+ });
396
+ }
397
+ // Emit content delta
398
+ chunks.push({
399
+ type: 'content_block_delta',
400
+ index: 0,
401
+ delta: {
402
+ type: 'text_delta',
403
+ text: delta.content,
404
+ },
405
+ });
406
+ }
407
+ // Handle tool calls
408
+ if (delta.tool_calls) {
409
+ for (const toolCallDelta of delta.tool_calls) {
410
+ const index = toolCallDelta.index;
411
+ // Initialize tool call tracking if new
412
+ if (!toolCallsInProgress.has(index)) {
413
+ toolCallsInProgress.set(index, {
414
+ id: toolCallDelta.id || '',
415
+ name: toolCallDelta.function?.name || '',
416
+ arguments: '',
417
+ });
418
+ // Emit content_block_start for tool use
419
+ if (toolCallDelta.id && toolCallDelta.function?.name) {
420
+ chunks.push({
421
+ type: 'content_block_start',
422
+ index: index + 1, // Offset by 1 since text is at index 0
423
+ content_block: {
424
+ type: 'tool_use',
425
+ id: toolCallDelta.id,
426
+ name: toolCallDelta.function.name,
427
+ input: {},
428
+ },
429
+ });
430
+ }
431
+ }
432
+ // Update tool call data
433
+ const toolCall = toolCallsInProgress.get(index);
434
+ if (toolCallDelta.id) {
435
+ toolCall.id = toolCallDelta.id;
436
+ }
437
+ if (toolCallDelta.function?.name) {
438
+ toolCall.name = toolCallDelta.function.name;
439
+ }
440
+ if (toolCallDelta.function?.arguments) {
441
+ toolCall.arguments += toolCallDelta.function.arguments;
442
+ // Emit delta for argument chunks
443
+ chunks.push({
444
+ type: 'content_block_delta',
445
+ index: index + 1,
446
+ delta: {
447
+ type: 'input_json_delta',
448
+ text: toolCallDelta.function.arguments,
449
+ },
450
+ });
451
+ }
452
+ }
453
+ }
454
+ return chunks;
455
+ }
456
+ }
457
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Z.AI Provider Implementation
3
+ *
4
+ * Z.AI (GLM models) uses an OpenAI-compatible API format.
5
+ * This provider extends OpenAIProvider with the correct name identifier.
6
+ */
7
+ import { OpenAIProvider } from './openai.js';
8
+ import type { ProviderConfig } from '../types.js';
9
+ /**
10
+ * Z.AI (GLM) API provider adapter.
11
+ *
12
+ * Uses OpenAI-compatible API format but with Z.AI endpoints.
13
+ * Default base URL: https://api.z.ai/api/paas/v4
14
+ */
15
+ export declare class ZAIProvider extends OpenAIProvider {
16
+ readonly name = "zai";
17
+ constructor(config: ProviderConfig);
18
+ }
19
+ //# sourceMappingURL=zai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zai.d.ts","sourceRoot":"","sources":["../../src/providers/zai.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;GAKG;AACH,qBAAa,WAAY,SAAQ,cAAc;IAC7C,SAAyB,IAAI,SAAS;gBAE1B,MAAM,EAAE,cAAc;CAGnC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Z.AI Provider Implementation
3
+ *
4
+ * Z.AI (GLM models) uses an OpenAI-compatible API format.
5
+ * This provider extends OpenAIProvider with the correct name identifier.
6
+ */
7
+ import { OpenAIProvider } from './openai.js';
8
+ /**
9
+ * Z.AI (GLM) API provider adapter.
10
+ *
11
+ * Uses OpenAI-compatible API format but with Z.AI endpoints.
12
+ * Default base URL: https://api.z.ai/api/paas/v4
13
+ */
14
+ export class ZAIProvider extends OpenAIProvider {
15
+ name = 'zai';
16
+ constructor(config) {
17
+ super(config);
18
+ }
19
+ }
20
+ //# sourceMappingURL=zai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zai.js","sourceRoot":"","sources":["../../src/providers/zai.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C;;;;;GAKG;AACH,MAAM,OAAO,WAAY,SAAQ,cAAc;IACpB,IAAI,GAAG,KAAK,CAAC;IAEtC,YAAY,MAAsB;QAChC,KAAK,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=context-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-manager.d.ts","sourceRoot":"","sources":["../../src/router/context-manager.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export {};
2
+ // TODO: Implement
3
+ //# sourceMappingURL=context-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-manager.js","sourceRoot":"","sources":["../../src/router/context-manager.ts"],"names":[],"mappings":";AAAA,kBAAkB"}