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,188 @@
1
+ /**
2
+ * Retry Utility with Exponential Backoff
3
+ *
4
+ * Provides configurable retry logic with:
5
+ * - Exponential backoff with jitter
6
+ * - Configurable retry predicates
7
+ * - Rate limit awareness (respects retryAfterMs)
8
+ * - Callbacks for retry events
9
+ */
10
+ import { ProviderError, RateLimitError, TimeoutError } from '../types.js';
11
+ // ============================================================================
12
+ // Constants
13
+ // ============================================================================
14
+ const DEFAULT_OPTIONS = {
15
+ maxAttempts: 3,
16
+ initialDelayMs: 1000,
17
+ maxDelayMs: 30000,
18
+ backoffMultiplier: 2,
19
+ jitterFactor: 0.1,
20
+ shouldRetry: isRetryableError,
21
+ onRetry: undefined,
22
+ };
23
+ // ============================================================================
24
+ // Helper Functions
25
+ // ============================================================================
26
+ /**
27
+ * Determines if an error is retryable by default.
28
+ *
29
+ * Retryable errors:
30
+ * - RateLimitError (429 responses)
31
+ * - TimeoutError (request timeouts)
32
+ * - ProviderError with 5xx status codes (server errors)
33
+ *
34
+ * @param error The error to check
35
+ * @returns true if the error is retryable
36
+ */
37
+ export function isRetryableError(error) {
38
+ // RateLimitError is always retryable
39
+ if (error instanceof RateLimitError) {
40
+ return true;
41
+ }
42
+ // TimeoutError is always retryable
43
+ if (error instanceof TimeoutError) {
44
+ return true;
45
+ }
46
+ // ProviderError with 5xx status is retryable
47
+ if (error instanceof ProviderError && error.statusCode !== undefined) {
48
+ return error.statusCode >= 500 && error.statusCode < 600;
49
+ }
50
+ return false;
51
+ }
52
+ /**
53
+ * Calculates the delay before the next retry attempt using exponential backoff with jitter.
54
+ *
55
+ * Formula: delay = min(initialDelay * (multiplier ^ attempt), maxDelay) * (1 +/- jitter)
56
+ *
57
+ * @param attempt The attempt number (0-indexed, where 0 is the first retry)
58
+ * @param options Retry configuration options
59
+ * @returns The delay in milliseconds before the next attempt
60
+ */
61
+ export function calculateDelay(attempt, options) {
62
+ const { initialDelayMs = DEFAULT_OPTIONS.initialDelayMs, maxDelayMs = DEFAULT_OPTIONS.maxDelayMs, backoffMultiplier = DEFAULT_OPTIONS.backoffMultiplier, jitterFactor = DEFAULT_OPTIONS.jitterFactor, } = options;
63
+ // Calculate base delay with exponential backoff
64
+ const baseDelay = initialDelayMs * Math.pow(backoffMultiplier, attempt);
65
+ // Cap at maximum delay
66
+ const cappedDelay = Math.min(baseDelay, maxDelayMs);
67
+ // Apply jitter: randomize within +/- jitterFactor
68
+ const jitterRange = cappedDelay * jitterFactor;
69
+ const jitter = (Math.random() * 2 - 1) * jitterRange; // Random value between -jitterRange and +jitterRange
70
+ // Ensure delay is at least 0
71
+ return Math.max(0, Math.floor(cappedDelay + jitter));
72
+ }
73
+ /**
74
+ * Sleeps for a specified number of milliseconds.
75
+ *
76
+ * @param ms The number of milliseconds to sleep
77
+ * @returns A promise that resolves after the delay
78
+ */
79
+ function sleep(ms) {
80
+ return new Promise((resolve) => setTimeout(resolve, ms));
81
+ }
82
+ /**
83
+ * Resolves retry options by merging with defaults.
84
+ *
85
+ * @param options User-provided options
86
+ * @returns Fully resolved options with all defaults applied
87
+ */
88
+ function resolveOptions(options) {
89
+ return {
90
+ maxAttempts: options?.maxAttempts ?? DEFAULT_OPTIONS.maxAttempts,
91
+ initialDelayMs: options?.initialDelayMs ?? DEFAULT_OPTIONS.initialDelayMs,
92
+ maxDelayMs: options?.maxDelayMs ?? DEFAULT_OPTIONS.maxDelayMs,
93
+ backoffMultiplier: options?.backoffMultiplier ?? DEFAULT_OPTIONS.backoffMultiplier,
94
+ jitterFactor: options?.jitterFactor ?? DEFAULT_OPTIONS.jitterFactor,
95
+ shouldRetry: options?.shouldRetry ?? DEFAULT_OPTIONS.shouldRetry,
96
+ onRetry: options?.onRetry,
97
+ };
98
+ }
99
+ // ============================================================================
100
+ // Main Retry Function
101
+ // ============================================================================
102
+ /**
103
+ * Executes a function with automatic retry on failure using exponential backoff.
104
+ *
105
+ * @param fn The async function to execute and potentially retry
106
+ * @param options Configuration options for retry behavior
107
+ * @returns The result of the function if successful
108
+ * @throws The last error encountered if all retry attempts fail
109
+ *
110
+ * @example
111
+ * ```typescript
112
+ * const result = await retry(
113
+ * () => provider.complete(request),
114
+ * {
115
+ * maxAttempts: 5,
116
+ * initialDelayMs: 500,
117
+ * onRetry: (error, attempt, delay) => {
118
+ * console.log(`Attempt ${attempt} failed, retrying in ${delay}ms`);
119
+ * }
120
+ * }
121
+ * );
122
+ * ```
123
+ */
124
+ export async function retry(fn, options) {
125
+ const resolved = resolveOptions(options);
126
+ let lastError;
127
+ for (let attempt = 1; attempt <= resolved.maxAttempts; attempt++) {
128
+ try {
129
+ return await fn();
130
+ }
131
+ catch (error) {
132
+ const err = error instanceof Error ? error : new Error(String(error));
133
+ lastError = err;
134
+ // Check if we should retry
135
+ const isLastAttempt = attempt >= resolved.maxAttempts;
136
+ const shouldRetry = !isLastAttempt && resolved.shouldRetry(err, attempt);
137
+ if (!shouldRetry) {
138
+ throw err;
139
+ }
140
+ // Calculate delay
141
+ let delayMs;
142
+ // Respect RateLimitError.retryAfterMs if present
143
+ if (err instanceof RateLimitError && err.retryAfterMs !== undefined) {
144
+ delayMs = err.retryAfterMs;
145
+ }
146
+ else {
147
+ // Use exponential backoff (attempt - 1 because attempt is 1-indexed)
148
+ delayMs = calculateDelay(attempt - 1, resolved);
149
+ }
150
+ // Invoke retry callback if provided
151
+ if (resolved.onRetry) {
152
+ resolved.onRetry(err, attempt, delayMs);
153
+ }
154
+ // Wait before retrying
155
+ await sleep(delayMs);
156
+ }
157
+ }
158
+ // This should never be reached, but TypeScript needs it
159
+ throw lastError ?? new Error('Retry failed with no error');
160
+ }
161
+ // ============================================================================
162
+ // Higher-Order Function Wrapper
163
+ // ============================================================================
164
+ /**
165
+ * Creates a retryable version of an async function.
166
+ *
167
+ * This higher-order function wraps any async function with retry logic,
168
+ * allowing you to create pre-configured retryable operations.
169
+ *
170
+ * @param fn The async function to wrap
171
+ * @param options Configuration options for retry behavior
172
+ * @returns A new function that executes with retry logic
173
+ *
174
+ * @example
175
+ * ```typescript
176
+ * const retryableComplete = withRetry(
177
+ * () => provider.complete(request),
178
+ * { maxAttempts: 5 }
179
+ * );
180
+ *
181
+ * // Later, execute with retry
182
+ * const result = await retryableComplete();
183
+ * ```
184
+ */
185
+ export function withRetry(fn, options) {
186
+ return () => retry(fn, options);
187
+ }
188
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAiD1E,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,MAAM,eAAe,GAAyB;IAC5C,WAAW,EAAE,CAAC;IACd,cAAc,EAAE,IAAI;IACpB,UAAU,EAAE,KAAK;IACjB,iBAAiB,EAAE,CAAC;IACpB,YAAY,EAAE,GAAG;IACjB,WAAW,EAAE,gBAAgB;IAC7B,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAY;IAC3C,qCAAqC;IACrC,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mCAAmC;IACnC,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6CAA6C;IAC7C,IAAI,KAAK,YAAY,aAAa,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACrE,OAAO,KAAK,CAAC,UAAU,IAAI,GAAG,IAAI,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC;IAC3D,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAe,EACf,OAAmG;IAEnG,MAAM,EACJ,cAAc,GAAG,eAAe,CAAC,cAAc,EAC/C,UAAU,GAAG,eAAe,CAAC,UAAU,EACvC,iBAAiB,GAAG,eAAe,CAAC,iBAAiB,EACrD,YAAY,GAAG,eAAe,CAAC,YAAY,GAC5C,GAAG,OAAO,CAAC;IAEZ,gDAAgD;IAChD,MAAM,SAAS,GAAG,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAExE,uBAAuB;IACvB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAEpD,kDAAkD;IAClD,MAAM,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC;IAC/C,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,qDAAqD;IAE3G,6BAA6B;IAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC;AACvD,CAAC;AAED;;;;;GAKG;AACH,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CAAC,OAAsB;IAC5C,OAAO;QACL,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,eAAe,CAAC,WAAW;QAChE,cAAc,EAAE,OAAO,EAAE,cAAc,IAAI,eAAe,CAAC,cAAc;QACzE,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,eAAe,CAAC,UAAU;QAC7D,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,IAAI,eAAe,CAAC,iBAAiB;QAClF,YAAY,EAAE,OAAO,EAAE,YAAY,IAAI,eAAe,CAAC,YAAY;QACnE,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,eAAe,CAAC,WAAW;QAChE,OAAO,EAAE,OAAO,EAAE,OAAO;KAC1B,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,EAAoB,EACpB,OAAsB;IAEtB,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,SAA4B,CAAC;IAEjC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,QAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;QACjE,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACtE,SAAS,GAAG,GAAG,CAAC;YAEhB,2BAA2B;YAC3B,MAAM,aAAa,GAAG,OAAO,IAAI,QAAQ,CAAC,WAAW,CAAC;YACtD,MAAM,WAAW,GAAG,CAAC,aAAa,IAAI,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAEzE,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,GAAG,CAAC;YACZ,CAAC;YAED,kBAAkB;YAClB,IAAI,OAAe,CAAC;YAEpB,iDAAiD;YACjD,IAAI,GAAG,YAAY,cAAc,IAAI,GAAG,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBACpE,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,qEAAqE;gBACrE,OAAO,GAAG,cAAc,CAAC,OAAO,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;YAClD,CAAC;YAED,oCAAoC;YACpC,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACrB,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAC1C,CAAC;YAED,uBAAuB;YACvB,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,wDAAwD;IACxD,MAAM,SAAS,IAAI,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;AAC7D,CAAC;AAED,+EAA+E;AAC/E,gCAAgC;AAChC,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,SAAS,CACvB,EAAoB,EACpB,OAAsB;IAEtB,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Branch Manager for Agent Foundry
3
+ *
4
+ * Handles git branch operations for worktree management.
5
+ */
6
+ export interface BranchManagerConfig {
7
+ repoPath: string;
8
+ defaultBaseBranch: string;
9
+ branchPattern: string;
10
+ }
11
+ export declare class BranchManager {
12
+ private readonly config;
13
+ private readonly logger;
14
+ constructor(config: BranchManagerConfig);
15
+ /**
16
+ * Generate a branch name from the pattern and task ID
17
+ */
18
+ generateBranchName(taskId: string): string;
19
+ /**
20
+ * Create a new branch from base
21
+ */
22
+ createBranch(branchName: string, baseBranch?: string): Promise<void>;
23
+ /**
24
+ * Delete a branch
25
+ */
26
+ deleteBranch(branchName: string, force?: boolean): Promise<void>;
27
+ /**
28
+ * List branches matching a pattern
29
+ */
30
+ listBranches(pattern?: string): Promise<string[]>;
31
+ /**
32
+ * Merge a branch into target
33
+ */
34
+ mergeBranch(sourceBranch: string, targetBranch: string, options?: {
35
+ squash?: boolean;
36
+ noCommit?: boolean;
37
+ }): Promise<{
38
+ success: boolean;
39
+ conflicted: boolean;
40
+ conflicts?: string[];
41
+ }>;
42
+ /**
43
+ * Abort an in-progress merge
44
+ */
45
+ abortMerge(): Promise<void>;
46
+ /**
47
+ * Check if branch has unpushed commits
48
+ */
49
+ hasUnpushedCommits(branchName: string): Promise<boolean>;
50
+ /**
51
+ * Get commits between two branches
52
+ */
53
+ getCommitsBetween(baseBranch: string, headBranch: string): Promise<string[]>;
54
+ }
55
+ //# sourceMappingURL=branch-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-manager.d.ts","sourceRoot":"","sources":["../../src/worktrees/branch-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAEZ,MAAM,EAAE,mBAAmB;IAKvC;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAI1C;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB1E;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBpE;;OAEG;IACG,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAYvD;;OAEG;IACG,WAAW,CACf,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAO,GACrD,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IA6B3E;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC;;OAEG;IACG,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW9D;;OAEG;IACG,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAKnF"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Branch Manager for Agent Foundry
3
+ *
4
+ * Handles git branch operations for worktree management.
5
+ */
6
+ import { createGit, branchExists, getCurrentBranch } from '../utils/git.js';
7
+ import { createLogger } from '../observability/logger.js';
8
+ export class BranchManager {
9
+ config;
10
+ logger;
11
+ constructor(config) {
12
+ this.config = config;
13
+ this.logger = createLogger({ name: 'branch-manager' });
14
+ }
15
+ /**
16
+ * Generate a branch name from the pattern and task ID
17
+ */
18
+ generateBranchName(taskId) {
19
+ return this.config.branchPattern.replace('{taskId}', taskId);
20
+ }
21
+ /**
22
+ * Create a new branch from base
23
+ */
24
+ async createBranch(branchName, baseBranch) {
25
+ const git = createGit(this.config.repoPath);
26
+ const base = baseBranch || this.config.defaultBaseBranch;
27
+ // Check if branch already exists
28
+ if (await branchExists(this.config.repoPath, branchName)) {
29
+ this.logger.warn('Branch already exists', { branchName });
30
+ return;
31
+ }
32
+ this.logger.info('Creating branch', { branchName, baseBranch: base });
33
+ await git.checkoutBranch(branchName, base);
34
+ // Return to original branch
35
+ const current = await getCurrentBranch(this.config.repoPath);
36
+ if (current === branchName) {
37
+ await git.checkout(base);
38
+ }
39
+ }
40
+ /**
41
+ * Delete a branch
42
+ */
43
+ async deleteBranch(branchName, force = false) {
44
+ const git = createGit(this.config.repoPath);
45
+ if (!(await branchExists(this.config.repoPath, branchName))) {
46
+ this.logger.warn('Branch does not exist', { branchName });
47
+ return;
48
+ }
49
+ this.logger.info('Deleting branch', { branchName, force });
50
+ if (force) {
51
+ await git.branch(['-D', branchName]);
52
+ }
53
+ else {
54
+ await git.branch(['-d', branchName]);
55
+ }
56
+ }
57
+ /**
58
+ * List branches matching a pattern
59
+ */
60
+ async listBranches(pattern) {
61
+ const git = createGit(this.config.repoPath);
62
+ const branches = await git.branchLocal();
63
+ if (!pattern) {
64
+ return branches.all;
65
+ }
66
+ const regex = new RegExp(pattern.replace('*', '.*'));
67
+ return branches.all.filter(b => regex.test(b));
68
+ }
69
+ /**
70
+ * Merge a branch into target
71
+ */
72
+ async mergeBranch(sourceBranch, targetBranch, options = {}) {
73
+ const git = createGit(this.config.repoPath);
74
+ this.logger.info('Merging branch', { sourceBranch, targetBranch, options });
75
+ // Checkout target branch
76
+ await git.checkout(targetBranch);
77
+ try {
78
+ const mergeArgs = [sourceBranch];
79
+ if (options.squash)
80
+ mergeArgs.unshift('--squash');
81
+ if (options.noCommit)
82
+ mergeArgs.unshift('--no-commit');
83
+ await git.merge(mergeArgs);
84
+ return { success: true, conflicted: false };
85
+ }
86
+ catch (error) {
87
+ // Check for merge conflicts
88
+ const status = await git.status();
89
+ if (status.conflicted.length > 0) {
90
+ return {
91
+ success: false,
92
+ conflicted: true,
93
+ conflicts: status.conflicted
94
+ };
95
+ }
96
+ throw error;
97
+ }
98
+ }
99
+ /**
100
+ * Abort an in-progress merge
101
+ */
102
+ async abortMerge() {
103
+ const git = createGit(this.config.repoPath);
104
+ await git.merge(['--abort']);
105
+ }
106
+ /**
107
+ * Check if branch has unpushed commits
108
+ */
109
+ async hasUnpushedCommits(branchName) {
110
+ const git = createGit(this.config.repoPath);
111
+ try {
112
+ const log = await git.log([`origin/${branchName}..${branchName}`]);
113
+ return log.total > 0;
114
+ }
115
+ catch {
116
+ // If remote doesn't exist, all commits are unpushed
117
+ return true;
118
+ }
119
+ }
120
+ /**
121
+ * Get commits between two branches
122
+ */
123
+ async getCommitsBetween(baseBranch, headBranch) {
124
+ const git = createGit(this.config.repoPath);
125
+ const log = await git.log([`${baseBranch}..${headBranch}`]);
126
+ return log.all.map(c => c.hash);
127
+ }
128
+ }
129
+ //# sourceMappingURL=branch-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-manager.js","sourceRoot":"","sources":["../../src/worktrees/branch-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Conflict Handler
3
+ *
4
+ * Detects, parses, and resolves git merge conflicts with multiple strategies.
5
+ */
6
+ import type { FileConflict, ConflictState, ConflictResolutionStrategy, ConflictResolutionResult, ManualResolution } from "../types.js";
7
+ export declare class ConflictHandler {
8
+ private readonly worktreePath;
9
+ private readonly logger;
10
+ private cachedConflicts;
11
+ constructor(worktreePath: string);
12
+ /**
13
+ * Check if the worktree has merge conflicts.
14
+ */
15
+ hasConflicts(): Promise<boolean>;
16
+ /**
17
+ * Detect and parse all conflicts in the worktree.
18
+ */
19
+ detectConflicts(): Promise<FileConflict[]>;
20
+ /**
21
+ * Get conflict state for tracking.
22
+ */
23
+ getConflictState(taskId: string, worktreeId: string): Promise<ConflictState>;
24
+ /**
25
+ * Resolve conflicts using the specified strategy.
26
+ */
27
+ resolveConflicts(strategy: ConflictResolutionStrategy, manualResolutions?: ManualResolution[]): Promise<ConflictResolutionResult>;
28
+ /**
29
+ * Resolve all conflicts by accepting "ours" (current branch) version.
30
+ */
31
+ private resolveWithOurs;
32
+ /**
33
+ * Resolve all conflicts by accepting "theirs" (incoming branch) version.
34
+ */
35
+ private resolveWithTheirs;
36
+ /**
37
+ * Attempt automatic resolution by combining non-overlapping changes.
38
+ * Falls back to keeping both versions separated by a marker.
39
+ */
40
+ private resolveWithAuto;
41
+ /**
42
+ * Simple auto-merge: combine both versions with a separator comment.
43
+ * For code files, this often results in both changes being kept.
44
+ */
45
+ private autoMergeContent;
46
+ /**
47
+ * Apply manual resolutions provided by the user.
48
+ */
49
+ private resolveManually;
50
+ /**
51
+ * Complete the merge after all conflicts are resolved.
52
+ */
53
+ completeMerge(message?: string): Promise<{
54
+ success: boolean;
55
+ commitHash?: string;
56
+ error?: string;
57
+ }>;
58
+ /**
59
+ * Abort the merge and return to pre-merge state.
60
+ */
61
+ abortMerge(): Promise<void>;
62
+ /**
63
+ * Get merge head information.
64
+ */
65
+ getMergeInfo(): Promise<{
66
+ ours: string;
67
+ theirs: string;
68
+ oursRef: string;
69
+ theirsRef: string;
70
+ } | null>;
71
+ }
72
+ //# sourceMappingURL=conflict-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conflict-handler.d.ts","sourceRoot":"","sources":["../../src/worktrees/conflict-handler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAmBH,OAAO,KAAK,EAEV,YAAY,EACZ,aAAa,EACb,0BAA0B,EAC1B,wBAAwB,EACxB,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAErB,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IACxB,OAAO,CAAC,eAAe,CAA8C;gBAEzD,YAAY,EAAE,MAAM;IAKhC;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAItC;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAqChD;;OAEG;IACG,gBAAgB,CACpB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC;IAazB;;OAEG;IACG,gBAAgB,CACpB,QAAQ,EAAE,0BAA0B,EACpC,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,GACrC,OAAO,CAAC,wBAAwB,CAAC;IAgCpC;;OAEG;YACW,eAAe;IA0B7B;;OAEG;YACW,iBAAiB;IA0B/B;;;OAGG;YACW,eAAe;IAiD7B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;YACW,eAAe;IAqC7B;;OAEG;IACG,aAAa,CACjB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAyBrE;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC;QAC5B,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,IAAI,CAAC;CAGV"}