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.
- package/LICENSE +21 -0
- package/README.md +477 -0
- package/dist/cli/install-skills.d.ts +11 -0
- package/dist/cli/install-skills.d.ts.map +1 -0
- package/dist/cli/install-skills.js +143 -0
- package/dist/cli/install-skills.js.map +1 -0
- package/dist/cli/recovery-commands.d.ts +41 -0
- package/dist/cli/recovery-commands.d.ts.map +1 -0
- package/dist/cli/recovery-commands.js +241 -0
- package/dist/cli/recovery-commands.js.map +1 -0
- package/dist/cli/setup-wizard.d.ts +25 -0
- package/dist/cli/setup-wizard.d.ts.map +1 -0
- package/dist/cli/setup-wizard.js +1417 -0
- package/dist/cli/setup-wizard.js.map +1 -0
- package/dist/cli/test-connection.d.ts +45 -0
- package/dist/cli/test-connection.d.ts.map +1 -0
- package/dist/cli/test-connection.js +317 -0
- package/dist/cli/test-connection.js.map +1 -0
- package/dist/cli.d.ts +75 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +704 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/defaults.d.ts +57 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +99 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +14 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +22 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/manager.d.ts +184 -0
- package/dist/config/manager.d.ts.map +1 -0
- package/dist/config/manager.js +347 -0
- package/dist/config/manager.js.map +1 -0
- package/dist/config/merger.d.ts +76 -0
- package/dist/config/merger.d.ts.map +1 -0
- package/dist/config/merger.js +189 -0
- package/dist/config/merger.js.map +1 -0
- package/dist/config/schema.d.ts +20 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +20 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/validator.d.ts +254 -0
- package/dist/config/validator.d.ts.map +1 -0
- package/dist/config/validator.js +363 -0
- package/dist/config/validator.js.map +1 -0
- package/dist/config/worktree-defaults.d.ts +23 -0
- package/dist/config/worktree-defaults.d.ts.map +1 -0
- package/dist/config/worktree-defaults.js +78 -0
- package/dist/config/worktree-defaults.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/tools/compare-agents.d.ts +25 -0
- package/dist/mcp/tools/compare-agents.d.ts.map +1 -0
- package/dist/mcp/tools/compare-agents.js +177 -0
- package/dist/mcp/tools/compare-agents.js.map +1 -0
- package/dist/mcp/tools/critique-plan.d.ts +26 -0
- package/dist/mcp/tools/critique-plan.d.ts.map +1 -0
- package/dist/mcp/tools/critique-plan.js +162 -0
- package/dist/mcp/tools/critique-plan.js.map +1 -0
- package/dist/mcp/tools/design-feedback.d.ts +26 -0
- package/dist/mcp/tools/design-feedback.d.ts.map +1 -0
- package/dist/mcp/tools/design-feedback.js +216 -0
- package/dist/mcp/tools/design-feedback.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +50 -0
- package/dist/mcp/tools/index.d.ts.map +1 -0
- package/dist/mcp/tools/index.js +191 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/mcp/tools/invoke-agent.d.ts +25 -0
- package/dist/mcp/tools/invoke-agent.d.ts.map +1 -0
- package/dist/mcp/tools/invoke-agent.js +141 -0
- package/dist/mcp/tools/invoke-agent.js.map +1 -0
- package/dist/mcp/tools/review-code.d.ts +25 -0
- package/dist/mcp/tools/review-code.d.ts.map +1 -0
- package/dist/mcp/tools/review-code.js +170 -0
- package/dist/mcp/tools/review-code.js.map +1 -0
- package/dist/mcp/tools/tasks/claim-next-task.d.ts +22 -0
- package/dist/mcp/tools/tasks/claim-next-task.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/claim-next-task.js +203 -0
- package/dist/mcp/tools/tasks/claim-next-task.js.map +1 -0
- package/dist/mcp/tools/tasks/create-routed-task.d.ts +17 -0
- package/dist/mcp/tools/tasks/create-routed-task.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/create-routed-task.js +178 -0
- package/dist/mcp/tools/tasks/create-routed-task.js.map +1 -0
- package/dist/mcp/tools/tasks/execute-pipeline.d.ts +22 -0
- package/dist/mcp/tools/tasks/execute-pipeline.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/execute-pipeline.js +401 -0
- package/dist/mcp/tools/tasks/execute-pipeline.js.map +1 -0
- package/dist/mcp/tools/tasks/execute-task.d.ts +32 -0
- package/dist/mcp/tools/tasks/execute-task.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/execute-task.js +284 -0
- package/dist/mcp/tools/tasks/execute-task.js.map +1 -0
- package/dist/mcp/tools/tasks/get-pipeline-status.d.ts +26 -0
- package/dist/mcp/tools/tasks/get-pipeline-status.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/get-pipeline-status.js +460 -0
- package/dist/mcp/tools/tasks/get-pipeline-status.js.map +1 -0
- package/dist/mcp/tools/tasks/index.d.ts +36 -0
- package/dist/mcp/tools/tasks/index.d.ts.map +1 -0
- package/dist/mcp/tools/tasks/index.js +66 -0
- package/dist/mcp/tools/tasks/index.js.map +1 -0
- package/dist/mcp/tools/worktree/cleanup-worktrees.d.ts +17 -0
- package/dist/mcp/tools/worktree/cleanup-worktrees.d.ts.map +1 -0
- package/dist/mcp/tools/worktree/cleanup-worktrees.js +147 -0
- package/dist/mcp/tools/worktree/cleanup-worktrees.js.map +1 -0
- package/dist/mcp/tools/worktree/get-worktree-status.d.ts +17 -0
- package/dist/mcp/tools/worktree/get-worktree-status.d.ts.map +1 -0
- package/dist/mcp/tools/worktree/get-worktree-status.js +123 -0
- package/dist/mcp/tools/worktree/get-worktree-status.js.map +1 -0
- package/dist/mcp/tools/worktree/index.d.ts +41 -0
- package/dist/mcp/tools/worktree/index.d.ts.map +1 -0
- package/dist/mcp/tools/worktree/index.js +69 -0
- package/dist/mcp/tools/worktree/index.js.map +1 -0
- package/dist/mcp/tools/worktree/list-worktrees.d.ts +17 -0
- package/dist/mcp/tools/worktree/list-worktrees.d.ts.map +1 -0
- package/dist/mcp/tools/worktree/list-worktrees.js +136 -0
- package/dist/mcp/tools/worktree/list-worktrees.js.map +1 -0
- package/dist/mcp/tools/worktree/resolve-conflicts.d.ts +19 -0
- package/dist/mcp/tools/worktree/resolve-conflicts.d.ts.map +1 -0
- package/dist/mcp/tools/worktree/resolve-conflicts.js +228 -0
- package/dist/mcp/tools/worktree/resolve-conflicts.js.map +1 -0
- package/dist/mcp/transport/stdio.d.ts +13 -0
- package/dist/mcp/transport/stdio.d.ts.map +1 -0
- package/dist/mcp/transport/stdio.js +15 -0
- package/dist/mcp/transport/stdio.js.map +1 -0
- package/dist/observability/logger.d.ts +137 -0
- package/dist/observability/logger.d.ts.map +1 -0
- package/dist/observability/logger.js +235 -0
- package/dist/observability/logger.js.map +1 -0
- package/dist/observability/metrics.d.ts +250 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +364 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/persistence/index.d.ts +9 -0
- package/dist/persistence/index.d.ts.map +1 -0
- package/dist/persistence/index.js +9 -0
- package/dist/persistence/index.js.map +1 -0
- package/dist/persistence/state-schema.d.ts +116 -0
- package/dist/persistence/state-schema.d.ts.map +1 -0
- package/dist/persistence/state-schema.js +28 -0
- package/dist/persistence/state-schema.js.map +1 -0
- package/dist/persistence/state-store.d.ts +111 -0
- package/dist/persistence/state-store.d.ts.map +1 -0
- package/dist/persistence/state-store.js +291 -0
- package/dist/persistence/state-store.js.map +1 -0
- package/dist/providers/anthropic.d.ts +164 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +500 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/base.d.ts +151 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +227 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/gemini.d.ts +85 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +414 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/kimi.d.ts +19 -0
- package/dist/providers/kimi.d.ts.map +1 -0
- package/dist/providers/kimi.js +20 -0
- package/dist/providers/kimi.js.map +1 -0
- package/dist/providers/manager.d.ts +160 -0
- package/dist/providers/manager.d.ts.map +1 -0
- package/dist/providers/manager.js +264 -0
- package/dist/providers/manager.js.map +1 -0
- package/dist/providers/ollama.d.ts +83 -0
- package/dist/providers/ollama.d.ts.map +1 -0
- package/dist/providers/ollama.js +453 -0
- package/dist/providers/ollama.js.map +1 -0
- package/dist/providers/openai.d.ts +96 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +457 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/zai.d.ts +19 -0
- package/dist/providers/zai.d.ts.map +1 -0
- package/dist/providers/zai.js +20 -0
- package/dist/providers/zai.js.map +1 -0
- package/dist/router/context-manager.d.ts +2 -0
- package/dist/router/context-manager.d.ts.map +1 -0
- package/dist/router/context-manager.js +3 -0
- package/dist/router/context-manager.js.map +1 -0
- package/dist/router/engine.d.ts +169 -0
- package/dist/router/engine.d.ts.map +1 -0
- package/dist/router/engine.js +435 -0
- package/dist/router/engine.js.map +1 -0
- package/dist/router/pattern-executor.d.ts +317 -0
- package/dist/router/pattern-executor.d.ts.map +1 -0
- package/dist/router/pattern-executor.js +571 -0
- package/dist/router/pattern-executor.js.map +1 -0
- package/dist/router/role-resolver.d.ts +59 -0
- package/dist/router/role-resolver.d.ts.map +1 -0
- package/dist/router/role-resolver.js +95 -0
- package/dist/router/role-resolver.js.map +1 -0
- package/dist/server.d.ts +32 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +223 -0
- package/dist/server.js.map +1 -0
- package/dist/startup.d.ts +78 -0
- package/dist/startup.d.ts.map +1 -0
- package/dist/startup.js +107 -0
- package/dist/startup.js.map +1 -0
- package/dist/tasks/coordinator.d.ts +141 -0
- package/dist/tasks/coordinator.d.ts.map +1 -0
- package/dist/tasks/coordinator.js +331 -0
- package/dist/tasks/coordinator.js.map +1 -0
- package/dist/tasks/index.d.ts +13 -0
- package/dist/tasks/index.d.ts.map +1 -0
- package/dist/tasks/index.js +13 -0
- package/dist/tasks/index.js.map +1 -0
- package/dist/tasks/persistent-state-coordinator.d.ts +89 -0
- package/dist/tasks/persistent-state-coordinator.d.ts.map +1 -0
- package/dist/tasks/persistent-state-coordinator.js +371 -0
- package/dist/tasks/persistent-state-coordinator.js.map +1 -0
- package/dist/tasks/pipeline-manager.d.ts +103 -0
- package/dist/tasks/pipeline-manager.d.ts.map +1 -0
- package/dist/tasks/pipeline-manager.js +358 -0
- package/dist/tasks/pipeline-manager.js.map +1 -0
- package/dist/tasks/state-coordinator.d.ts +79 -0
- package/dist/tasks/state-coordinator.d.ts.map +1 -0
- package/dist/tasks/state-coordinator.js +200 -0
- package/dist/tasks/state-coordinator.js.map +1 -0
- package/dist/tasks/worker-mode.d.ts +65 -0
- package/dist/tasks/worker-mode.d.ts.map +1 -0
- package/dist/tasks/worker-mode.js +208 -0
- package/dist/tasks/worker-mode.js.map +1 -0
- package/dist/translation/errors.d.ts +203 -0
- package/dist/translation/errors.d.ts.map +1 -0
- package/dist/translation/errors.js +477 -0
- package/dist/translation/errors.js.map +1 -0
- package/dist/translation/index.d.ts +12 -0
- package/dist/translation/index.d.ts.map +1 -0
- package/dist/translation/index.js +32 -0
- package/dist/translation/index.js.map +1 -0
- package/dist/translation/messages.d.ts +295 -0
- package/dist/translation/messages.d.ts.map +1 -0
- package/dist/translation/messages.js +557 -0
- package/dist/translation/messages.js.map +1 -0
- package/dist/translation/streaming.d.ts +226 -0
- package/dist/translation/streaming.d.ts.map +1 -0
- package/dist/translation/streaming.js +520 -0
- package/dist/translation/streaming.js.map +1 -0
- package/dist/translation/tools.d.ts +209 -0
- package/dist/translation/tools.d.ts.map +1 -0
- package/dist/translation/tools.js +331 -0
- package/dist/translation/tools.js.map +1 -0
- package/dist/types.d.ts +747 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +86 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/circuit-breaker.d.ts +175 -0
- package/dist/utils/circuit-breaker.d.ts.map +1 -0
- package/dist/utils/circuit-breaker.js +315 -0
- package/dist/utils/circuit-breaker.js.map +1 -0
- package/dist/utils/env.d.ts +2 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +3 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/git.d.ts +58 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +197 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/index.d.ts +9 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +9 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/merge-ordering.d.ts +45 -0
- package/dist/utils/merge-ordering.d.ts.map +1 -0
- package/dist/utils/merge-ordering.js +128 -0
- package/dist/utils/merge-ordering.js.map +1 -0
- package/dist/utils/retry.d.ts +106 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +188 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/worktrees/branch-manager.d.ts +55 -0
- package/dist/worktrees/branch-manager.d.ts.map +1 -0
- package/dist/worktrees/branch-manager.js +129 -0
- package/dist/worktrees/branch-manager.js.map +1 -0
- package/dist/worktrees/conflict-handler.d.ts +72 -0
- package/dist/worktrees/conflict-handler.d.ts.map +1 -0
- package/dist/worktrees/conflict-handler.js +287 -0
- package/dist/worktrees/conflict-handler.js.map +1 -0
- package/dist/worktrees/conflict-parser.d.ts +28 -0
- package/dist/worktrees/conflict-parser.d.ts.map +1 -0
- package/dist/worktrees/conflict-parser.js +140 -0
- package/dist/worktrees/conflict-parser.js.map +1 -0
- package/dist/worktrees/index.d.ts +20 -0
- package/dist/worktrees/index.d.ts.map +1 -0
- package/dist/worktrees/index.js +20 -0
- package/dist/worktrees/index.js.map +1 -0
- package/dist/worktrees/instructions.d.ts +20 -0
- package/dist/worktrees/instructions.d.ts.map +1 -0
- package/dist/worktrees/instructions.js +84 -0
- package/dist/worktrees/instructions.js.map +1 -0
- package/dist/worktrees/manager.d.ts +76 -0
- package/dist/worktrees/manager.d.ts.map +1 -0
- package/dist/worktrees/manager.js +277 -0
- package/dist/worktrees/manager.js.map +1 -0
- package/dist/worktrees/pipeline-merge-orchestrator.d.ts +55 -0
- package/dist/worktrees/pipeline-merge-orchestrator.d.ts.map +1 -0
- package/dist/worktrees/pipeline-merge-orchestrator.js +221 -0
- package/dist/worktrees/pipeline-merge-orchestrator.js.map +1 -0
- package/dist/worktrees/pool.d.ts +95 -0
- package/dist/worktrees/pool.d.ts.map +1 -0
- package/dist/worktrees/pool.js +271 -0
- package/dist/worktrees/pool.js.map +1 -0
- package/dist/worktrees/recovery.d.ts +94 -0
- package/dist/worktrees/recovery.d.ts.map +1 -0
- package/dist/worktrees/recovery.js +371 -0
- package/dist/worktrees/recovery.js.map +1 -0
- package/dist/worktrees/resource-manager.d.ts +74 -0
- package/dist/worktrees/resource-manager.d.ts.map +1 -0
- package/dist/worktrees/resource-manager.js +228 -0
- package/dist/worktrees/resource-manager.js.map +1 -0
- 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"}
|