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,557 @@
1
+ /**
2
+ * Message Format Translation
3
+ *
4
+ * Translates messages between AgentRouter's internal format and provider-specific formats.
5
+ * Handles the differences in how each provider represents:
6
+ * - System prompts
7
+ * - Message content (text, tool use, tool results)
8
+ * - Role naming conventions
9
+ *
10
+ * Format Reference:
11
+ * | Feature | Anthropic | OpenAI | Gemini |
12
+ * |--------------|------------------------|------------------------|---------------------|
13
+ * | System | separate param | role: "system" message | systemInstruction |
14
+ * | Content | content blocks | string or array | parts array |
15
+ * | Tool use | tool_use block | tool_calls array | functionCall |
16
+ * | Tool result | tool_result block | role: "tool" message | functionResponse |
17
+ */
18
+ // ============================================================================
19
+ // Translation Functions: To Provider Formats
20
+ // ============================================================================
21
+ /**
22
+ * Convert internal messages to Anthropic format
23
+ *
24
+ * Anthropic:
25
+ * - System prompt is a separate top-level parameter
26
+ * - Messages use 'user' | 'assistant' roles
27
+ * - Content can be string or ContentBlock[]
28
+ * - Tool results go in user messages with tool_result blocks
29
+ *
30
+ * @param messages - Internal Message array
31
+ * @param systemPrompt - Optional system prompt (becomes separate param in Anthropic)
32
+ * @returns Anthropic-formatted messages (system prompt handled separately by caller)
33
+ */
34
+ export function toAnthropicMessages(messages, systemPrompt) {
35
+ const anthropicMessages = [];
36
+ for (const message of messages) {
37
+ const anthropicMessage = messageToAnthropic(message);
38
+ anthropicMessages.push(anthropicMessage);
39
+ }
40
+ // Ensure valid message sequence (must start with user, alternate)
41
+ const validatedMessages = validateAnthropicMessageSequence(anthropicMessages);
42
+ const result = {
43
+ messages: validatedMessages,
44
+ };
45
+ if (systemPrompt !== undefined) {
46
+ result.system = systemPrompt;
47
+ }
48
+ return result;
49
+ }
50
+ /**
51
+ * Convert internal messages to OpenAI format
52
+ *
53
+ * OpenAI:
54
+ * - System prompt is a message with role: "system"
55
+ * - Tool use is in assistant message's tool_calls array
56
+ * - Tool results are separate messages with role: "tool"
57
+ *
58
+ * @param messages - Internal Message array
59
+ * @param systemPrompt - Optional system prompt (becomes first message)
60
+ * @returns OpenAI-formatted messages
61
+ */
62
+ export function toOpenAIMessages(messages, systemPrompt) {
63
+ const openAIMessages = [];
64
+ // Add system prompt as first message if provided
65
+ if (systemPrompt) {
66
+ openAIMessages.push({
67
+ role: 'system',
68
+ content: systemPrompt,
69
+ });
70
+ }
71
+ for (const message of messages) {
72
+ const translated = messageToOpenAI(message);
73
+ // messageToOpenAI can return multiple messages (for tool results)
74
+ openAIMessages.push(...translated);
75
+ }
76
+ return openAIMessages;
77
+ }
78
+ /**
79
+ * Convert internal messages to Gemini format
80
+ *
81
+ * Gemini:
82
+ * - System prompt goes in systemInstruction
83
+ * - Roles are 'user' | 'model' (not 'assistant')
84
+ * - Content is always an array of parts
85
+ * - Function calls and responses are specific part types
86
+ *
87
+ * @param messages - Internal Message array
88
+ * @param systemPrompt - Optional system prompt (becomes systemInstruction)
89
+ * @returns Gemini-formatted contents and system instruction
90
+ */
91
+ export function toGeminiContents(messages, systemPrompt) {
92
+ const contents = [];
93
+ for (const message of messages) {
94
+ const geminiContent = messageToGemini(message);
95
+ contents.push(geminiContent);
96
+ }
97
+ // Validate and merge consecutive same-role messages if needed
98
+ const validatedContents = validateGeminiContentSequence(contents);
99
+ const result = {
100
+ contents: validatedContents,
101
+ };
102
+ if (systemPrompt !== undefined) {
103
+ result.systemInstruction = { parts: [{ text: systemPrompt }] };
104
+ }
105
+ return result;
106
+ }
107
+ // ============================================================================
108
+ // Translation Functions: From Provider Responses
109
+ // ============================================================================
110
+ /**
111
+ * Convert Anthropic response to internal Message format
112
+ *
113
+ * @param response - Anthropic API response
114
+ * @returns Internal Message
115
+ */
116
+ export function fromAnthropicResponse(response) {
117
+ const content = response.content.map((block) => {
118
+ if (block.type === 'text') {
119
+ const textBlock = {
120
+ type: 'text',
121
+ };
122
+ if (block.text !== undefined) {
123
+ textBlock.text = block.text;
124
+ }
125
+ return textBlock;
126
+ }
127
+ else if (block.type === 'tool_use') {
128
+ const toolUseBlock = {
129
+ type: 'tool_use',
130
+ };
131
+ if (block.id !== undefined) {
132
+ toolUseBlock.id = block.id;
133
+ }
134
+ if (block.name !== undefined) {
135
+ toolUseBlock.name = block.name;
136
+ }
137
+ if (block.input !== undefined) {
138
+ toolUseBlock.input = block.input;
139
+ }
140
+ return toolUseBlock;
141
+ }
142
+ else if (block.type === 'tool_result') {
143
+ const toolResultBlock = {
144
+ type: 'tool_result',
145
+ };
146
+ if (block.tool_use_id !== undefined) {
147
+ toolResultBlock.tool_use_id = block.tool_use_id;
148
+ }
149
+ if (block.content !== undefined) {
150
+ toolResultBlock.content = block.content;
151
+ }
152
+ return toolResultBlock;
153
+ }
154
+ // Unknown block type, treat as text
155
+ return {
156
+ type: 'text',
157
+ text: JSON.stringify(block),
158
+ };
159
+ });
160
+ return {
161
+ role: 'assistant',
162
+ content,
163
+ };
164
+ }
165
+ /**
166
+ * Convert OpenAI response to internal Message format
167
+ *
168
+ * @param response - OpenAI API response
169
+ * @returns Internal Message
170
+ */
171
+ export function fromOpenAIResponse(response) {
172
+ const choice = response.choices[0];
173
+ if (!choice) {
174
+ return {
175
+ role: 'assistant',
176
+ content: [],
177
+ };
178
+ }
179
+ const message = choice.message;
180
+ const content = [];
181
+ // Handle text content
182
+ if (message.content) {
183
+ if (typeof message.content === 'string') {
184
+ content.push({
185
+ type: 'text',
186
+ text: message.content,
187
+ });
188
+ }
189
+ else if (Array.isArray(message.content)) {
190
+ // Multi-part content
191
+ for (const part of message.content) {
192
+ if (part.type === 'text' && part.text) {
193
+ content.push({
194
+ type: 'text',
195
+ text: part.text,
196
+ });
197
+ }
198
+ // Note: Image parts are not supported in our internal format
199
+ }
200
+ }
201
+ }
202
+ // Handle tool calls
203
+ if (message.tool_calls && message.tool_calls.length > 0) {
204
+ for (const toolCall of message.tool_calls) {
205
+ content.push({
206
+ type: 'tool_use',
207
+ id: toolCall.id,
208
+ name: toolCall.function.name,
209
+ input: safeJsonParse(toolCall.function.arguments),
210
+ });
211
+ }
212
+ }
213
+ return {
214
+ role: 'assistant',
215
+ content: content.length > 0 ? content : [],
216
+ };
217
+ }
218
+ /**
219
+ * Convert Gemini response to internal Message format
220
+ *
221
+ * @param response - Gemini API response
222
+ * @returns Internal Message
223
+ */
224
+ export function fromGeminiResponse(response) {
225
+ const candidate = response.candidates?.[0];
226
+ if (!candidate) {
227
+ return {
228
+ role: 'assistant',
229
+ content: [],
230
+ };
231
+ }
232
+ const geminiContent = candidate.content;
233
+ const content = [];
234
+ for (const part of geminiContent.parts) {
235
+ if (part.text !== undefined) {
236
+ content.push({
237
+ type: 'text',
238
+ text: part.text,
239
+ });
240
+ }
241
+ else if (part.functionCall) {
242
+ content.push({
243
+ type: 'tool_use',
244
+ id: generateToolCallId(),
245
+ name: part.functionCall.name,
246
+ input: part.functionCall.args,
247
+ });
248
+ }
249
+ // functionResponse parts are typically in user messages, not assistant responses
250
+ }
251
+ return {
252
+ role: 'assistant',
253
+ content: content.length > 0 ? content : [],
254
+ };
255
+ }
256
+ // ============================================================================
257
+ // Internal Helper Functions
258
+ // ============================================================================
259
+ /**
260
+ * Convert a single internal message to Anthropic format
261
+ */
262
+ function messageToAnthropic(message) {
263
+ if (typeof message.content === 'string') {
264
+ return {
265
+ role: message.role,
266
+ content: message.content,
267
+ };
268
+ }
269
+ const anthropicBlocks = message.content.map((block) => {
270
+ if (block.type === 'text') {
271
+ return {
272
+ type: 'text',
273
+ text: block.text || '',
274
+ };
275
+ }
276
+ else if (block.type === 'tool_use') {
277
+ return {
278
+ type: 'tool_use',
279
+ id: block.id || generateToolCallId(),
280
+ name: block.name || '',
281
+ input: block.input || {},
282
+ };
283
+ }
284
+ else if (block.type === 'tool_result') {
285
+ return {
286
+ type: 'tool_result',
287
+ tool_use_id: block.tool_use_id || '',
288
+ content: block.content || '',
289
+ };
290
+ }
291
+ // Fallback for unknown types
292
+ return {
293
+ type: 'text',
294
+ text: JSON.stringify(block),
295
+ };
296
+ });
297
+ return {
298
+ role: message.role,
299
+ content: anthropicBlocks,
300
+ };
301
+ }
302
+ /**
303
+ * Convert a single internal message to OpenAI format
304
+ * Returns an array because tool results become separate messages
305
+ */
306
+ function messageToOpenAI(message) {
307
+ const messages = [];
308
+ if (typeof message.content === 'string') {
309
+ messages.push({
310
+ role: message.role,
311
+ content: message.content,
312
+ });
313
+ return messages;
314
+ }
315
+ // Separate tool results from other content
316
+ const toolResults = [];
317
+ const otherBlocks = [];
318
+ for (const block of message.content) {
319
+ if (block.type === 'tool_result') {
320
+ toolResults.push(block);
321
+ }
322
+ else {
323
+ otherBlocks.push(block);
324
+ }
325
+ }
326
+ // Handle non-tool-result content
327
+ if (otherBlocks.length > 0) {
328
+ const hasToolUse = otherBlocks.some((b) => b.type === 'tool_use');
329
+ if (hasToolUse && message.role === 'assistant') {
330
+ // Assistant message with tool calls
331
+ const textParts = otherBlocks
332
+ .filter((b) => b.type === 'text')
333
+ .map((b) => b.text || '')
334
+ .join('');
335
+ const toolCalls = otherBlocks
336
+ .filter((b) => b.type === 'tool_use')
337
+ .map((b) => ({
338
+ id: b.id || generateToolCallId(),
339
+ type: 'function',
340
+ function: {
341
+ name: b.name || '',
342
+ arguments: JSON.stringify(b.input || {}),
343
+ },
344
+ }));
345
+ messages.push({
346
+ role: 'assistant',
347
+ content: textParts || null,
348
+ tool_calls: toolCalls,
349
+ });
350
+ }
351
+ else {
352
+ // Regular message
353
+ const textContent = otherBlocks
354
+ .filter((b) => b.type === 'text')
355
+ .map((b) => b.text || '')
356
+ .join('');
357
+ messages.push({
358
+ role: message.role,
359
+ content: textContent,
360
+ });
361
+ }
362
+ }
363
+ // Handle tool results as separate tool messages
364
+ for (const toolResult of toolResults) {
365
+ messages.push({
366
+ role: 'tool',
367
+ tool_call_id: toolResult.tool_use_id || '',
368
+ content: toolResult.content || '',
369
+ });
370
+ }
371
+ return messages;
372
+ }
373
+ /**
374
+ * Convert a single internal message to Gemini format
375
+ */
376
+ function messageToGemini(message) {
377
+ const role = message.role === 'assistant' ? 'model' : 'user';
378
+ if (typeof message.content === 'string') {
379
+ return {
380
+ role,
381
+ parts: [{ text: message.content }],
382
+ };
383
+ }
384
+ const parts = message.content.map((block) => {
385
+ if (block.type === 'text') {
386
+ return { text: block.text || '' };
387
+ }
388
+ else if (block.type === 'tool_use') {
389
+ return {
390
+ functionCall: {
391
+ name: block.name || '',
392
+ args: (block.input) || {},
393
+ },
394
+ };
395
+ }
396
+ else if (block.type === 'tool_result') {
397
+ // Gemini needs the function name for responses, but we only have tool_use_id
398
+ // The caller should track tool names or include them in the content
399
+ return {
400
+ functionResponse: {
401
+ name: block.tool_use_id || 'unknown',
402
+ response: { result: block.content || '' },
403
+ },
404
+ };
405
+ }
406
+ // Fallback
407
+ return { text: JSON.stringify(block) };
408
+ });
409
+ return {
410
+ role,
411
+ parts,
412
+ };
413
+ }
414
+ /**
415
+ * Ensure Anthropic messages follow required sequence rules:
416
+ * - Must start with a user message
417
+ * - Messages must alternate between user and assistant
418
+ */
419
+ function validateAnthropicMessageSequence(messages) {
420
+ if (messages.length === 0) {
421
+ return messages;
422
+ }
423
+ const result = [];
424
+ let lastRole = null;
425
+ for (const message of messages) {
426
+ // First message must be user
427
+ if (result.length === 0 && message.role !== 'user') {
428
+ // Prepend an empty user message
429
+ result.push({
430
+ role: 'user',
431
+ content: '',
432
+ });
433
+ }
434
+ // Merge consecutive same-role messages
435
+ if (lastRole === message.role && result.length > 0) {
436
+ const lastIndex = result.length - 1;
437
+ const lastMessage = result[lastIndex];
438
+ if (lastMessage) {
439
+ result[lastIndex] = {
440
+ ...lastMessage,
441
+ content: mergeAnthropicContent(lastMessage.content, message.content),
442
+ };
443
+ }
444
+ }
445
+ else {
446
+ result.push({ ...message });
447
+ }
448
+ lastRole = message.role;
449
+ }
450
+ return result;
451
+ }
452
+ /**
453
+ * Merge two Anthropic content values
454
+ */
455
+ function mergeAnthropicContent(a, b) {
456
+ const blocksA = typeof a === 'string' ? [{ type: 'text', text: a }] : a;
457
+ const blocksB = typeof b === 'string' ? [{ type: 'text', text: b }] : b;
458
+ return [...blocksA, ...blocksB];
459
+ }
460
+ /**
461
+ * Ensure Gemini contents follow required sequence rules:
462
+ * - Contents should alternate between user and model
463
+ */
464
+ function validateGeminiContentSequence(contents) {
465
+ if (contents.length === 0) {
466
+ return contents;
467
+ }
468
+ const result = [];
469
+ let lastRole = null;
470
+ for (const content of contents) {
471
+ // Merge consecutive same-role contents
472
+ if (lastRole === content.role && result.length > 0) {
473
+ const lastIndex = result.length - 1;
474
+ const lastContent = result[lastIndex];
475
+ if (lastContent) {
476
+ result[lastIndex] = {
477
+ ...lastContent,
478
+ parts: [...lastContent.parts, ...content.parts],
479
+ };
480
+ }
481
+ }
482
+ else {
483
+ result.push({ ...content, parts: [...content.parts] });
484
+ }
485
+ lastRole = content.role;
486
+ }
487
+ return result;
488
+ }
489
+ /**
490
+ * Safely parse JSON, returning empty object on failure
491
+ */
492
+ function safeJsonParse(json) {
493
+ try {
494
+ return JSON.parse(json);
495
+ }
496
+ catch {
497
+ return {};
498
+ }
499
+ }
500
+ /**
501
+ * Generate a unique tool call ID
502
+ */
503
+ function generateToolCallId() {
504
+ return `toolu_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
505
+ }
506
+ // ============================================================================
507
+ // Utility Exports
508
+ // ============================================================================
509
+ /**
510
+ * Extract text content from a Message
511
+ */
512
+ export function extractTextContent(message) {
513
+ if (typeof message.content === 'string') {
514
+ return message.content;
515
+ }
516
+ return message.content
517
+ .filter((block) => block.type === 'text')
518
+ .map((block) => block.text || '')
519
+ .join('\n');
520
+ }
521
+ /**
522
+ * Check if a message contains tool use
523
+ */
524
+ export function hasToolUse(message) {
525
+ if (typeof message.content === 'string') {
526
+ return false;
527
+ }
528
+ return message.content.some((block) => block.type === 'tool_use');
529
+ }
530
+ /**
531
+ * Check if a message contains tool results
532
+ */
533
+ export function hasToolResult(message) {
534
+ if (typeof message.content === 'string') {
535
+ return false;
536
+ }
537
+ return message.content.some((block) => block.type === 'tool_result');
538
+ }
539
+ /**
540
+ * Get all tool use blocks from a message
541
+ */
542
+ export function getToolUseBlocks(message) {
543
+ if (typeof message.content === 'string') {
544
+ return [];
545
+ }
546
+ return message.content.filter((block) => block.type === 'tool_use');
547
+ }
548
+ /**
549
+ * Get all tool result blocks from a message
550
+ */
551
+ export function getToolResultBlocks(message) {
552
+ if (typeof message.content === 'string') {
553
+ return [];
554
+ }
555
+ return message.content.filter((block) => block.type === 'tool_result');
556
+ }
557
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/translation/messages.ts"],"names":[],"mappings":"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"}