@intrect/openswarm 0.2.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 +544 -0
- package/config.example.yaml +107 -0
- package/dist/adapters/base.d.ts +8 -0
- package/dist/adapters/base.d.ts.map +1 -0
- package/dist/adapters/base.js +104 -0
- package/dist/adapters/base.js.map +1 -0
- package/dist/adapters/claude.d.ts +13 -0
- package/dist/adapters/claude.d.ts.map +1 -0
- package/dist/adapters/claude.js +318 -0
- package/dist/adapters/claude.js.map +1 -0
- package/dist/adapters/codex.d.ts +14 -0
- package/dist/adapters/codex.d.ts.map +1 -0
- package/dist/adapters/codex.js +366 -0
- package/dist/adapters/codex.js.map +1 -0
- package/dist/adapters/cryptoQuantAdapter.d.ts +85 -0
- package/dist/adapters/cryptoQuantAdapter.d.ts.map +1 -0
- package/dist/adapters/cryptoQuantAdapter.js +238 -0
- package/dist/adapters/cryptoQuantAdapter.js.map +1 -0
- package/dist/adapters/index.d.ts +17 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +47 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/processRegistry.d.ts +38 -0
- package/dist/adapters/processRegistry.d.ts.map +1 -0
- package/dist/adapters/processRegistry.js +147 -0
- package/dist/adapters/processRegistry.js.map +1 -0
- package/dist/adapters/streamBuffer.d.ts +59 -0
- package/dist/adapters/streamBuffer.d.ts.map +1 -0
- package/dist/adapters/streamBuffer.js +123 -0
- package/dist/adapters/streamBuffer.js.map +1 -0
- package/dist/adapters/types.d.ts +65 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +6 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/agents/agentBus.d.ts +160 -0
- package/dist/agents/agentBus.d.ts.map +1 -0
- package/dist/agents/agentBus.js +350 -0
- package/dist/agents/agentBus.js.map +1 -0
- package/dist/agents/agentPair.d.ts +210 -0
- package/dist/agents/agentPair.d.ts.map +1 -0
- package/dist/agents/agentPair.js +420 -0
- package/dist/agents/agentPair.js.map +1 -0
- package/dist/agents/auditor.d.ts +27 -0
- package/dist/agents/auditor.d.ts.map +1 -0
- package/dist/agents/auditor.js +237 -0
- package/dist/agents/auditor.js.map +1 -0
- package/dist/agents/cliStreamParser.d.ts +18 -0
- package/dist/agents/cliStreamParser.d.ts.map +1 -0
- package/dist/agents/cliStreamParser.js +156 -0
- package/dist/agents/cliStreamParser.js.map +1 -0
- package/dist/agents/documenter.d.ts +31 -0
- package/dist/agents/documenter.d.ts.map +1 -0
- package/dist/agents/documenter.js +285 -0
- package/dist/agents/documenter.js.map +1 -0
- package/dist/agents/index.d.ts +10 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +10 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/pairMetrics.d.ts +63 -0
- package/dist/agents/pairMetrics.d.ts.map +1 -0
- package/dist/agents/pairMetrics.js +231 -0
- package/dist/agents/pairMetrics.js.map +1 -0
- package/dist/agents/pairPipeline.d.ts +155 -0
- package/dist/agents/pairPipeline.d.ts.map +1 -0
- package/dist/agents/pairPipeline.js +793 -0
- package/dist/agents/pairPipeline.js.map +1 -0
- package/dist/agents/pairWebhook.d.ts +59 -0
- package/dist/agents/pairWebhook.d.ts.map +1 -0
- package/dist/agents/pairWebhook.js +242 -0
- package/dist/agents/pairWebhook.js.map +1 -0
- package/dist/agents/pipelineFormat.d.ts +11 -0
- package/dist/agents/pipelineFormat.d.ts.map +1 -0
- package/dist/agents/pipelineFormat.js +164 -0
- package/dist/agents/pipelineFormat.js.map +1 -0
- package/dist/agents/pipelineGuards.d.ts +23 -0
- package/dist/agents/pipelineGuards.d.ts.map +1 -0
- package/dist/agents/pipelineGuards.js +175 -0
- package/dist/agents/pipelineGuards.js.map +1 -0
- package/dist/agents/reviewer.d.ts +37 -0
- package/dist/agents/reviewer.d.ts.map +1 -0
- package/dist/agents/reviewer.js +213 -0
- package/dist/agents/reviewer.js.map +1 -0
- package/dist/agents/skillDocumenter.d.ts +23 -0
- package/dist/agents/skillDocumenter.d.ts.map +1 -0
- package/dist/agents/skillDocumenter.js +218 -0
- package/dist/agents/skillDocumenter.js.map +1 -0
- package/dist/agents/tester.d.ts +37 -0
- package/dist/agents/tester.d.ts.map +1 -0
- package/dist/agents/tester.js +308 -0
- package/dist/agents/tester.js.map +1 -0
- package/dist/agents/worker.d.ts +30 -0
- package/dist/agents/worker.d.ts.map +1 -0
- package/dist/agents/worker.js +128 -0
- package/dist/agents/worker.js.map +1 -0
- package/dist/automation/autonomousRunner.d.ts +123 -0
- package/dist/automation/autonomousRunner.d.ts.map +1 -0
- package/dist/automation/autonomousRunner.js +1082 -0
- package/dist/automation/autonomousRunner.js.map +1 -0
- package/dist/automation/ciWorker.d.ts +51 -0
- package/dist/automation/ciWorker.d.ts.map +1 -0
- package/dist/automation/ciWorker.js +282 -0
- package/dist/automation/ciWorker.js.map +1 -0
- package/dist/automation/conflictResolver.d.ts +29 -0
- package/dist/automation/conflictResolver.d.ts.map +1 -0
- package/dist/automation/conflictResolver.js +261 -0
- package/dist/automation/conflictResolver.js.map +1 -0
- package/dist/automation/dailyReporter.d.ts +26 -0
- package/dist/automation/dailyReporter.d.ts.map +1 -0
- package/dist/automation/dailyReporter.js +132 -0
- package/dist/automation/dailyReporter.js.map +1 -0
- package/dist/automation/index.d.ts +7 -0
- package/dist/automation/index.d.ts.map +1 -0
- package/dist/automation/index.js +7 -0
- package/dist/automation/index.js.map +1 -0
- package/dist/automation/longRunningMonitor.d.ts +26 -0
- package/dist/automation/longRunningMonitor.d.ts.map +1 -0
- package/dist/automation/longRunningMonitor.js +231 -0
- package/dist/automation/longRunningMonitor.js.map +1 -0
- package/dist/automation/prOwnership.d.ts +18 -0
- package/dist/automation/prOwnership.d.ts.map +1 -0
- package/dist/automation/prOwnership.js +61 -0
- package/dist/automation/prOwnership.js.map +1 -0
- package/dist/automation/prProcessor.d.ts +62 -0
- package/dist/automation/prProcessor.d.ts.map +1 -0
- package/dist/automation/prProcessor.js +700 -0
- package/dist/automation/prProcessor.js.map +1 -0
- package/dist/automation/runnerExecution.d.ts +49 -0
- package/dist/automation/runnerExecution.d.ts.map +1 -0
- package/dist/automation/runnerExecution.js +663 -0
- package/dist/automation/runnerExecution.js.map +1 -0
- package/dist/automation/runnerState.d.ts +170 -0
- package/dist/automation/runnerState.d.ts.map +1 -0
- package/dist/automation/runnerState.js +495 -0
- package/dist/automation/runnerState.js.map +1 -0
- package/dist/automation/runnerTypes.d.ts +46 -0
- package/dist/automation/runnerTypes.d.ts.map +1 -0
- package/dist/automation/runnerTypes.js +5 -0
- package/dist/automation/runnerTypes.js.map +1 -0
- package/dist/automation/scheduler.d.ts +75 -0
- package/dist/automation/scheduler.d.ts.map +1 -0
- package/dist/automation/scheduler.js +394 -0
- package/dist/automation/scheduler.js.map +1 -0
- package/dist/cli/promptHandler.d.ts +13 -0
- package/dist/cli/promptHandler.d.ts.map +1 -0
- package/dist/cli/promptHandler.js +189 -0
- package/dist/cli/promptHandler.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +138 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/config.d.ts +308 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +529 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/eventHub.d.ts +194 -0
- package/dist/core/eventHub.d.ts.map +1 -0
- package/dist/core/eventHub.js +136 -0
- package/dist/core/eventHub.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/service.d.ts +27 -0
- package/dist/core/service.d.ts.map +1 -0
- package/dist/core/service.js +438 -0
- package/dist/core/service.js.map +1 -0
- package/dist/core/traceCollector.d.ts +105 -0
- package/dist/core/traceCollector.d.ts.map +1 -0
- package/dist/core/traceCollector.js +141 -0
- package/dist/core/traceCollector.js.map +1 -0
- package/dist/core/types.d.ts +413 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +5 -0
- package/dist/core/types.js.map +1 -0
- package/dist/discord/discordCore.d.ts +104 -0
- package/dist/discord/discordCore.d.ts.map +1 -0
- package/dist/discord/discordCore.js +698 -0
- package/dist/discord/discordCore.js.map +1 -0
- package/dist/discord/discordHandlers.d.ts +86 -0
- package/dist/discord/discordHandlers.d.ts.map +1 -0
- package/dist/discord/discordHandlers.js +849 -0
- package/dist/discord/discordHandlers.js.map +1 -0
- package/dist/discord/discordPair.d.ts +6 -0
- package/dist/discord/discordPair.d.ts.map +1 -0
- package/dist/discord/discordPair.js +567 -0
- package/dist/discord/discordPair.js.map +1 -0
- package/dist/discord/index.d.ts +4 -0
- package/dist/discord/index.d.ts.map +1 -0
- package/dist/discord/index.js +11 -0
- package/dist/discord/index.js.map +1 -0
- package/dist/github/github.d.ts +236 -0
- package/dist/github/github.d.ts.map +1 -0
- package/dist/github/github.js +535 -0
- package/dist/github/github.js.map +1 -0
- package/dist/github/index.d.ts +2 -0
- package/dist/github/index.d.ts.map +1 -0
- package/dist/github/index.js +2 -0
- package/dist/github/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +60 -0
- package/dist/index.js.map +1 -0
- package/dist/knowledge/analyzer.d.ts +36 -0
- package/dist/knowledge/analyzer.d.ts.map +1 -0
- package/dist/knowledge/analyzer.js +170 -0
- package/dist/knowledge/analyzer.js.map +1 -0
- package/dist/knowledge/gitInfo.d.ts +10 -0
- package/dist/knowledge/gitInfo.d.ts.map +1 -0
- package/dist/knowledge/gitInfo.js +134 -0
- package/dist/knowledge/gitInfo.js.map +1 -0
- package/dist/knowledge/graph.d.ts +45 -0
- package/dist/knowledge/graph.d.ts.map +1 -0
- package/dist/knowledge/graph.js +262 -0
- package/dist/knowledge/graph.js.map +1 -0
- package/dist/knowledge/graphqlExporter.d.ts +64 -0
- package/dist/knowledge/graphqlExporter.d.ts.map +1 -0
- package/dist/knowledge/graphqlExporter.js +333 -0
- package/dist/knowledge/graphqlExporter.js.map +1 -0
- package/dist/knowledge/index.d.ts +58 -0
- package/dist/knowledge/index.d.ts.map +1 -0
- package/dist/knowledge/index.js +212 -0
- package/dist/knowledge/index.js.map +1 -0
- package/dist/knowledge/repository.d.ts +64 -0
- package/dist/knowledge/repository.d.ts.map +1 -0
- package/dist/knowledge/repository.js +250 -0
- package/dist/knowledge/repository.js.map +1 -0
- package/dist/knowledge/riskOnAnalyzer.d.ts +79 -0
- package/dist/knowledge/riskOnAnalyzer.d.ts.map +1 -0
- package/dist/knowledge/riskOnAnalyzer.js +243 -0
- package/dist/knowledge/riskOnAnalyzer.js.map +1 -0
- package/dist/knowledge/scanner.d.ts +14 -0
- package/dist/knowledge/scanner.d.ts.map +1 -0
- package/dist/knowledge/scanner.js +350 -0
- package/dist/knowledge/scanner.js.map +1 -0
- package/dist/knowledge/store.d.ts +23 -0
- package/dist/knowledge/store.d.ts.map +1 -0
- package/dist/knowledge/store.js +86 -0
- package/dist/knowledge/store.js.map +1 -0
- package/dist/knowledge/types.d.ts +288 -0
- package/dist/knowledge/types.d.ts.map +1 -0
- package/dist/knowledge/types.js +111 -0
- package/dist/knowledge/types.js.map +1 -0
- package/dist/linear/index.d.ts +3 -0
- package/dist/linear/index.d.ts.map +1 -0
- package/dist/linear/index.js +3 -0
- package/dist/linear/index.js.map +1 -0
- package/dist/linear/linear.d.ts +160 -0
- package/dist/linear/linear.d.ts.map +1 -0
- package/dist/linear/linear.js +983 -0
- package/dist/linear/linear.js.map +1 -0
- package/dist/linear/projectUpdater.d.ts +23 -0
- package/dist/linear/projectUpdater.d.ts.map +1 -0
- package/dist/linear/projectUpdater.js +347 -0
- package/dist/linear/projectUpdater.js.map +1 -0
- package/dist/locale/en.d.ts +3 -0
- package/dist/locale/en.d.ts.map +1 -0
- package/dist/locale/en.js +436 -0
- package/dist/locale/en.js.map +1 -0
- package/dist/locale/index.d.ts +28 -0
- package/dist/locale/index.d.ts.map +1 -0
- package/dist/locale/index.js +89 -0
- package/dist/locale/index.js.map +1 -0
- package/dist/locale/ko.d.ts +3 -0
- package/dist/locale/ko.d.ts.map +1 -0
- package/dist/locale/ko.js +436 -0
- package/dist/locale/ko.js.map +1 -0
- package/dist/locale/prompts/en.d.ts +3 -0
- package/dist/locale/prompts/en.d.ts.map +1 -0
- package/dist/locale/prompts/en.js +278 -0
- package/dist/locale/prompts/en.js.map +1 -0
- package/dist/locale/prompts/ko.d.ts +3 -0
- package/dist/locale/prompts/ko.d.ts.map +1 -0
- package/dist/locale/prompts/ko.js +279 -0
- package/dist/locale/prompts/ko.js.map +1 -0
- package/dist/locale/types.d.ts +407 -0
- package/dist/locale/types.d.ts.map +1 -0
- package/dist/locale/types.js +5 -0
- package/dist/locale/types.js.map +1 -0
- package/dist/memory/codex.d.ts +93 -0
- package/dist/memory/codex.d.ts.map +1 -0
- package/dist/memory/codex.js +366 -0
- package/dist/memory/codex.js.map +1 -0
- package/dist/memory/compaction.d.ts +21 -0
- package/dist/memory/compaction.d.ts.map +1 -0
- package/dist/memory/compaction.js +205 -0
- package/dist/memory/compaction.js.map +1 -0
- package/dist/memory/index.d.ts +13 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +13 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/memoryCore.d.ts +178 -0
- package/dist/memory/memoryCore.d.ts.map +1 -0
- package/dist/memory/memoryCore.js +623 -0
- package/dist/memory/memoryCore.js.map +1 -0
- package/dist/memory/memoryOps.d.ts +90 -0
- package/dist/memory/memoryOps.d.ts.map +1 -0
- package/dist/memory/memoryOps.js +606 -0
- package/dist/memory/memoryOps.js.map +1 -0
- package/dist/orchestration/conflictDetector.d.ts +15 -0
- package/dist/orchestration/conflictDetector.d.ts.map +1 -0
- package/dist/orchestration/conflictDetector.js +130 -0
- package/dist/orchestration/conflictDetector.js.map +1 -0
- package/dist/orchestration/decisionEngine.d.ts +177 -0
- package/dist/orchestration/decisionEngine.d.ts.map +1 -0
- package/dist/orchestration/decisionEngine.js +496 -0
- package/dist/orchestration/decisionEngine.js.map +1 -0
- package/dist/orchestration/index.d.ts +5 -0
- package/dist/orchestration/index.d.ts.map +1 -0
- package/dist/orchestration/index.js +5 -0
- package/dist/orchestration/index.js.map +1 -0
- package/dist/orchestration/taskParser.d.ts +67 -0
- package/dist/orchestration/taskParser.d.ts.map +1 -0
- package/dist/orchestration/taskParser.js +542 -0
- package/dist/orchestration/taskParser.js.map +1 -0
- package/dist/orchestration/taskScheduler.d.ts +141 -0
- package/dist/orchestration/taskScheduler.d.ts.map +1 -0
- package/dist/orchestration/taskScheduler.js +317 -0
- package/dist/orchestration/taskScheduler.js.map +1 -0
- package/dist/orchestration/workflow.d.ts +145 -0
- package/dist/orchestration/workflow.d.ts.map +1 -0
- package/dist/orchestration/workflow.js +301 -0
- package/dist/orchestration/workflow.js.map +1 -0
- package/dist/runners/cliRunner.d.ts +11 -0
- package/dist/runners/cliRunner.d.ts.map +1 -0
- package/dist/runners/cliRunner.js +194 -0
- package/dist/runners/cliRunner.js.map +1 -0
- package/dist/support/apiCache.d.ts +85 -0
- package/dist/support/apiCache.d.ts.map +1 -0
- package/dist/support/apiCache.js +163 -0
- package/dist/support/apiCache.js.map +1 -0
- package/dist/support/chat.d.ts +3 -0
- package/dist/support/chat.d.ts.map +1 -0
- package/dist/support/chat.js +304 -0
- package/dist/support/chat.js.map +1 -0
- package/dist/support/chatBackend.d.ts +25 -0
- package/dist/support/chatBackend.d.ts.map +1 -0
- package/dist/support/chatBackend.js +235 -0
- package/dist/support/chatBackend.js.map +1 -0
- package/dist/support/chatMemory.d.ts +71 -0
- package/dist/support/chatMemory.d.ts.map +1 -0
- package/dist/support/chatMemory.js +119 -0
- package/dist/support/chatMemory.js.map +1 -0
- package/dist/support/chatTui.d.ts +3 -0
- package/dist/support/chatTui.d.ts.map +1 -0
- package/dist/support/chatTui.js +998 -0
- package/dist/support/chatTui.js.map +1 -0
- package/dist/support/costTracker.d.ts +29 -0
- package/dist/support/costTracker.d.ts.map +1 -0
- package/dist/support/costTracker.js +113 -0
- package/dist/support/costTracker.js.map +1 -0
- package/dist/support/dashboardHtml.d.ts +3 -0
- package/dist/support/dashboardHtml.d.ts.map +1 -0
- package/dist/support/dashboardHtml.js +2070 -0
- package/dist/support/dashboardHtml.js.map +1 -0
- package/dist/support/delete-beliefs.d.ts +2 -0
- package/dist/support/delete-beliefs.d.ts.map +1 -0
- package/dist/support/delete-beliefs.js +34 -0
- package/dist/support/delete-beliefs.js.map +1 -0
- package/dist/support/dev.d.ts +55 -0
- package/dist/support/dev.d.ts.map +1 -0
- package/dist/support/dev.js +298 -0
- package/dist/support/dev.js.map +1 -0
- package/dist/support/editParser.d.ts +37 -0
- package/dist/support/editParser.d.ts.map +1 -0
- package/dist/support/editParser.js +365 -0
- package/dist/support/editParser.js.map +1 -0
- package/dist/support/gitStatus.d.ts +21 -0
- package/dist/support/gitStatus.d.ts.map +1 -0
- package/dist/support/gitStatus.js +108 -0
- package/dist/support/gitStatus.js.map +1 -0
- package/dist/support/gitTracker.d.ts +30 -0
- package/dist/support/gitTracker.d.ts.map +1 -0
- package/dist/support/gitTracker.js +143 -0
- package/dist/support/gitTracker.js.map +1 -0
- package/dist/support/index.d.ts +13 -0
- package/dist/support/index.d.ts.map +1 -0
- package/dist/support/index.js +13 -0
- package/dist/support/index.js.map +1 -0
- package/dist/support/planner.d.ts +58 -0
- package/dist/support/planner.d.ts.map +1 -0
- package/dist/support/planner.js +395 -0
- package/dist/support/planner.js.map +1 -0
- package/dist/support/projectMapper.d.ts +46 -0
- package/dist/support/projectMapper.d.ts.map +1 -0
- package/dist/support/projectMapper.js +259 -0
- package/dist/support/projectMapper.js.map +1 -0
- package/dist/support/quotaTracker.d.ts +29 -0
- package/dist/support/quotaTracker.d.ts.map +1 -0
- package/dist/support/quotaTracker.js +89 -0
- package/dist/support/quotaTracker.js.map +1 -0
- package/dist/support/rateLimiter.d.ts +101 -0
- package/dist/support/rateLimiter.d.ts.map +1 -0
- package/dist/support/rateLimiter.js +219 -0
- package/dist/support/rateLimiter.js.map +1 -0
- package/dist/support/rollback.d.ts +61 -0
- package/dist/support/rollback.d.ts.map +1 -0
- package/dist/support/rollback.js +328 -0
- package/dist/support/rollback.js.map +1 -0
- package/dist/support/stuckDetector.d.ts +68 -0
- package/dist/support/stuckDetector.d.ts.map +1 -0
- package/dist/support/stuckDetector.js +174 -0
- package/dist/support/stuckDetector.js.map +1 -0
- package/dist/support/timeWindow.d.ts +60 -0
- package/dist/support/timeWindow.d.ts.map +1 -0
- package/dist/support/timeWindow.js +236 -0
- package/dist/support/timeWindow.js.map +1 -0
- package/dist/support/web.d.ts +11 -0
- package/dist/support/web.d.ts.map +1 -0
- package/dist/support/web.js +938 -0
- package/dist/support/web.js.map +1 -0
- package/dist/support/workflowLinear.d.ts +99 -0
- package/dist/support/workflowLinear.d.ts.map +1 -0
- package/dist/support/workflowLinear.js +257 -0
- package/dist/support/workflowLinear.js.map +1 -0
- package/dist/support/worktreeManager.d.ts +20 -0
- package/dist/support/worktreeManager.d.ts.map +1 -0
- package/dist/support/worktreeManager.js +144 -0
- package/dist/support/worktreeManager.js.map +1 -0
- package/dist/taskState/store.d.ts +101 -0
- package/dist/taskState/store.d.ts.map +1 -0
- package/dist/taskState/store.js +346 -0
- package/dist/taskState/store.js.map +1 -0
- package/package.json +70 -0
- package/templates/AGENTS.md +432 -0
- package/templates/BOOT.md +25 -0
- package/templates/BOOTSTRAP.md +50 -0
- package/templates/CHANGELOG_AUDIT.md +74 -0
- package/templates/HEARTBEAT.md +86 -0
- package/templates/IDENTITY.md +27 -0
- package/templates/ISSUE_ANALYSIS.md +31 -0
- package/templates/PR_LAND.md +75 -0
- package/templates/PR_REVIEW.md +97 -0
- package/templates/SOUL.dev.md +52 -0
- package/templates/SOUL.md +81 -0
- package/templates/TOOLS.md +52 -0
- package/templates/USER.md +22 -0
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
// ============================================
|
|
2
|
+
// OpenSwarm - Rate Limiter
|
|
3
|
+
// Prevent excessive API calls to external services
|
|
4
|
+
// ============================================
|
|
5
|
+
class RateLimiter {
|
|
6
|
+
name;
|
|
7
|
+
config;
|
|
8
|
+
tokens;
|
|
9
|
+
lastRefill;
|
|
10
|
+
queue = [];
|
|
11
|
+
metrics;
|
|
12
|
+
refillInterval;
|
|
13
|
+
constructor(name, config) {
|
|
14
|
+
this.name = name;
|
|
15
|
+
this.config = config;
|
|
16
|
+
this.tokens = config.maxRequests;
|
|
17
|
+
this.lastRefill = Date.now();
|
|
18
|
+
this.metrics = {
|
|
19
|
+
totalRequests: 0,
|
|
20
|
+
totalRejected: 0,
|
|
21
|
+
totalQueued: 0,
|
|
22
|
+
currentTokens: this.tokens,
|
|
23
|
+
queueSize: 0,
|
|
24
|
+
};
|
|
25
|
+
// Auto-refill tokens periodically
|
|
26
|
+
this.refillInterval = setInterval(() => {
|
|
27
|
+
this.refill();
|
|
28
|
+
this.processQueue();
|
|
29
|
+
}, 100); // Check every 100ms
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Refill tokens based on elapsed time
|
|
33
|
+
*/
|
|
34
|
+
refill() {
|
|
35
|
+
const now = Date.now();
|
|
36
|
+
const elapsed = now - this.lastRefill;
|
|
37
|
+
const tokensToAdd = (elapsed / this.config.windowMs) * this.config.maxRequests;
|
|
38
|
+
this.tokens = Math.min(this.config.maxRequests, this.tokens + tokensToAdd);
|
|
39
|
+
this.lastRefill = now;
|
|
40
|
+
this.metrics.currentTokens = this.tokens;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Process queued requests
|
|
44
|
+
*/
|
|
45
|
+
processQueue() {
|
|
46
|
+
const now = Date.now();
|
|
47
|
+
const timeout = this.config.queueTimeoutMs ?? 30000;
|
|
48
|
+
while (this.queue.length > 0 && this.tokens >= 1) {
|
|
49
|
+
const request = this.queue[0];
|
|
50
|
+
// Check timeout
|
|
51
|
+
if (now - request.timestamp > timeout) {
|
|
52
|
+
this.queue.shift();
|
|
53
|
+
this.metrics.queueSize = this.queue.length;
|
|
54
|
+
request.reject(new Error(`[RateLimiter:${this.name}] Request timed out in queue after ${timeout}ms`));
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
// Try to acquire token
|
|
58
|
+
if (this.tryAcquire()) {
|
|
59
|
+
this.queue.shift();
|
|
60
|
+
this.metrics.queueSize = this.queue.length;
|
|
61
|
+
request.resolve();
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
break; // Not enough tokens yet
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Try to acquire a token (non-blocking)
|
|
70
|
+
*/
|
|
71
|
+
tryAcquire() {
|
|
72
|
+
this.refill();
|
|
73
|
+
if (this.tokens >= 1) {
|
|
74
|
+
this.tokens -= 1;
|
|
75
|
+
this.metrics.currentTokens = this.tokens;
|
|
76
|
+
this.metrics.totalRequests++;
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Acquire a token (async, with queuing)
|
|
83
|
+
* @returns Promise that resolves when token is acquired
|
|
84
|
+
* @throws Error if queue is full or request times out
|
|
85
|
+
*/
|
|
86
|
+
async acquire() {
|
|
87
|
+
// Try immediate acquisition
|
|
88
|
+
if (this.tryAcquire()) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
// Check queue size limit
|
|
92
|
+
const maxQueue = this.config.maxQueueSize ?? 100;
|
|
93
|
+
if (this.queue.length >= maxQueue) {
|
|
94
|
+
this.metrics.totalRejected++;
|
|
95
|
+
throw new Error(`[RateLimiter:${this.name}] Queue is full (${this.queue.length}/${maxQueue})`);
|
|
96
|
+
}
|
|
97
|
+
// Queue the request
|
|
98
|
+
this.metrics.totalQueued++;
|
|
99
|
+
return new Promise((resolve, reject) => {
|
|
100
|
+
this.queue.push({ resolve, reject, timestamp: Date.now() });
|
|
101
|
+
this.metrics.queueSize = this.queue.length;
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Get current metrics
|
|
106
|
+
*/
|
|
107
|
+
getMetrics() {
|
|
108
|
+
this.refill(); // Update current tokens
|
|
109
|
+
return { ...this.metrics };
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Reset metrics (keep tokens/queue)
|
|
113
|
+
*/
|
|
114
|
+
resetMetrics() {
|
|
115
|
+
this.metrics.totalRequests = 0;
|
|
116
|
+
this.metrics.totalRejected = 0;
|
|
117
|
+
this.metrics.totalQueued = 0;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Cleanup resources
|
|
121
|
+
*/
|
|
122
|
+
destroy() {
|
|
123
|
+
clearInterval(this.refillInterval);
|
|
124
|
+
// Reject all queued requests
|
|
125
|
+
for (const request of this.queue) {
|
|
126
|
+
request.reject(new Error(`[RateLimiter:${this.name}] Limiter destroyed`));
|
|
127
|
+
}
|
|
128
|
+
this.queue = [];
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// Global Rate Limiters
|
|
132
|
+
const limiters = new Map();
|
|
133
|
+
/**
|
|
134
|
+
* Initialize rate limiters for known services
|
|
135
|
+
*/
|
|
136
|
+
export function initRateLimiters() {
|
|
137
|
+
// Claude API: Conservative limit (adjust based on tier)
|
|
138
|
+
// Free tier: ~50 req/min, Paid: ~1000 req/min
|
|
139
|
+
limiters.set('claude', new RateLimiter('claude', {
|
|
140
|
+
maxRequests: 20, // 20 requests per minute
|
|
141
|
+
windowMs: 60000,
|
|
142
|
+
maxQueueSize: 50,
|
|
143
|
+
queueTimeoutMs: 120000, // 2 minutes timeout
|
|
144
|
+
}));
|
|
145
|
+
// Linear API: 5000 req/hour (from error message)
|
|
146
|
+
limiters.set('linear', new RateLimiter('linear', {
|
|
147
|
+
maxRequests: 80, // 80 requests per minute (4800/hour with safety margin)
|
|
148
|
+
windowMs: 60000,
|
|
149
|
+
maxQueueSize: 100,
|
|
150
|
+
queueTimeoutMs: 60000,
|
|
151
|
+
}));
|
|
152
|
+
// GitHub API: 5000 req/hour (authenticated)
|
|
153
|
+
limiters.set('github', new RateLimiter('github', {
|
|
154
|
+
maxRequests: 80, // 80 requests per minute (4800/hour with safety margin)
|
|
155
|
+
windowMs: 60000,
|
|
156
|
+
maxQueueSize: 50,
|
|
157
|
+
queueTimeoutMs: 60000,
|
|
158
|
+
}));
|
|
159
|
+
console.log('[RateLimiter] Initialized limiters: claude, linear, github');
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Get or create a rate limiter for a service
|
|
163
|
+
*/
|
|
164
|
+
export function getRateLimiter(service) {
|
|
165
|
+
const limiter = limiters.get(service);
|
|
166
|
+
if (!limiter) {
|
|
167
|
+
throw new Error(`[RateLimiter] No limiter configured for service: ${service}`);
|
|
168
|
+
}
|
|
169
|
+
return limiter;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Acquire a token from a rate limiter
|
|
173
|
+
* @param service Service name
|
|
174
|
+
* @throws Error if rate limit exceeded or queue full
|
|
175
|
+
*/
|
|
176
|
+
export async function acquireRateLimit(service) {
|
|
177
|
+
const limiter = getRateLimiter(service);
|
|
178
|
+
await limiter.acquire();
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Get metrics for all rate limiters
|
|
182
|
+
*/
|
|
183
|
+
export function getRateLimiterMetrics() {
|
|
184
|
+
const metrics = {};
|
|
185
|
+
for (const [name, limiter] of limiters) {
|
|
186
|
+
metrics[name] = limiter.getMetrics();
|
|
187
|
+
}
|
|
188
|
+
return metrics;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Reset all metrics
|
|
192
|
+
*/
|
|
193
|
+
export function resetRateLimiterMetrics() {
|
|
194
|
+
for (const limiter of limiters.values()) {
|
|
195
|
+
limiter.resetMetrics();
|
|
196
|
+
}
|
|
197
|
+
console.log('[RateLimiter] All metrics reset');
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Cleanup all rate limiters
|
|
201
|
+
*/
|
|
202
|
+
export function destroyRateLimiters() {
|
|
203
|
+
for (const limiter of limiters.values()) {
|
|
204
|
+
limiter.destroy();
|
|
205
|
+
}
|
|
206
|
+
limiters.clear();
|
|
207
|
+
console.log('[RateLimiter] All limiters destroyed');
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Wrapper function for rate-limited operations
|
|
211
|
+
* @param service Service name
|
|
212
|
+
* @param operation Async operation to execute
|
|
213
|
+
* @returns Result of the operation
|
|
214
|
+
*/
|
|
215
|
+
export async function withRateLimit(service, operation) {
|
|
216
|
+
await acquireRateLimit(service);
|
|
217
|
+
return operation();
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=rateLimiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rateLimiter.js","sourceRoot":"","sources":["../../src/support/rateLimiter.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,2BAA2B;AAC3B,mDAAmD;AACnD,+CAA+C;AAqC/C,MAAM,WAAW;IAQI;IACA;IARX,MAAM,CAAS;IACf,UAAU,CAAS;IACnB,KAAK,GAAoB,EAAE,CAAC;IAC5B,OAAO,CAAqB;IAC5B,cAAc,CAAiB;IAEvC,YACmB,IAAY,EACZ,MAAyB;QADzB,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAmB;QAE1C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG;YACb,aAAa,EAAE,CAAC;YAChB,aAAa,EAAE,CAAC;YAChB,WAAW,EAAE,CAAC;YACd,aAAa,EAAE,IAAI,CAAC,MAAM;YAC1B,SAAS,EAAE,CAAC;SACb,CAAC;QAEF,kCAAkC;QAClC,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;YACrC,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,oBAAoB;IAC/B,CAAC;IAED;;OAEG;IACK,MAAM;QACZ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;QACtC,MAAM,WAAW,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QAE/E,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC;QAC3E,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3C,CAAC;IAED;;OAEG;IACK,YAAY;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,KAAK,CAAC;QAEpD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACjD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAE9B,gBAAgB;YAChB,IAAI,GAAG,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,EAAE,CAAC;gBACtC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACnB,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;gBAC3C,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,IAAI,sCAAsC,OAAO,IAAI,CAAC,CAAC,CAAC;gBACtG,SAAS;YACX,CAAC;YAED,uBAAuB;YACvB,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;gBACtB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACnB,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;gBAC3C,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,wBAAwB;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,UAAU;QAChB,IAAI,CAAC,MAAM,EAAE,CAAC;QAEd,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;YACzC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO;QACX,4BAA4B;QAC5B,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,yBAAyB;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,GAAG,CAAC;QACjD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;YAClC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,IAAI,oBAAoB,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjG,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAC3B,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC5D,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,wBAAwB;QACvC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,YAAY;QACV,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,OAAO;QACL,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACnC,6BAA6B;QAC7B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACjC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,IAAI,qBAAqB,CAAC,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAClB,CAAC;CACF;AAED,uBAAuB;AAEvB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;AAEhD;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,wDAAwD;IACxD,8CAA8C;IAC9C,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,WAAW,CAAC,QAAQ,EAAE;QAC/C,WAAW,EAAE,EAAE,EAAE,yBAAyB;QAC1C,QAAQ,EAAE,KAAK;QACf,YAAY,EAAE,EAAE;QAChB,cAAc,EAAE,MAAM,EAAE,oBAAoB;KAC7C,CAAC,CAAC,CAAC;IAEJ,iDAAiD;IACjD,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,WAAW,CAAC,QAAQ,EAAE;QAC/C,WAAW,EAAE,EAAE,EAAE,wDAAwD;QACzE,QAAQ,EAAE,KAAK;QACf,YAAY,EAAE,GAAG;QACjB,cAAc,EAAE,KAAK;KACtB,CAAC,CAAC,CAAC;IAEJ,4CAA4C;IAC5C,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,WAAW,CAAC,QAAQ,EAAE;QAC/C,WAAW,EAAE,EAAE,EAAE,wDAAwD;QACzE,QAAQ,EAAE,KAAK;QACf,YAAY,EAAE,EAAE;QAChB,cAAc,EAAE,KAAK;KACtB,CAAC,CAAC,CAAC;IAEJ,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;AAC5E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAuC;IACpE,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,oDAAoD,OAAO,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAuC;IAC5E,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,OAAO,GAAuC,EAAE,CAAC;IACvD,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,QAAQ,EAAE,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IACvC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QACxC,OAAO,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QACxC,OAAO,CAAC,OAAO,EAAE,CAAC;IACpB,CAAC;IACD,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;AACtD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAuC,EACvC,SAA2B;IAE3B,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAChC,OAAO,SAAS,EAAE,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checkpoint information
|
|
3
|
+
*/
|
|
4
|
+
export interface Checkpoint {
|
|
5
|
+
id: string;
|
|
6
|
+
executionId: string;
|
|
7
|
+
projectPath: string;
|
|
8
|
+
createdAt: number;
|
|
9
|
+
commitHash: string;
|
|
10
|
+
stashId?: string;
|
|
11
|
+
branchName: string;
|
|
12
|
+
description: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Rollback result
|
|
16
|
+
*/
|
|
17
|
+
export interface RollbackResult {
|
|
18
|
+
success: boolean;
|
|
19
|
+
checkpoint: Checkpoint;
|
|
20
|
+
action: 'reset' | 'stash_pop' | 'checkout';
|
|
21
|
+
message: string;
|
|
22
|
+
error?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Rollback strategy
|
|
26
|
+
*/
|
|
27
|
+
export type RollbackStrategy = 'reset_hard' | 'reset_soft' | 'stash' | 'checkout_files';
|
|
28
|
+
/**
|
|
29
|
+
* Find checkpoint by execution ID
|
|
30
|
+
*/
|
|
31
|
+
export declare function findCheckpointByExecution(executionId: string): Promise<Checkpoint | null>;
|
|
32
|
+
/**
|
|
33
|
+
* Create checkpoint before workflow starts
|
|
34
|
+
*/
|
|
35
|
+
export declare function createCheckpoint(executionId: string, projectPath: string, description?: string): Promise<Checkpoint>;
|
|
36
|
+
/**
|
|
37
|
+
* Rollback to checkpoint
|
|
38
|
+
*/
|
|
39
|
+
export declare function rollbackToCheckpoint(checkpointId: string, strategy?: RollbackStrategy): Promise<RollbackResult>;
|
|
40
|
+
/**
|
|
41
|
+
* Rollback by execution ID
|
|
42
|
+
*/
|
|
43
|
+
export declare function rollbackExecution(executionId: string, strategy?: RollbackStrategy): Promise<RollbackResult>;
|
|
44
|
+
/**
|
|
45
|
+
* Clean up old checkpoints
|
|
46
|
+
*/
|
|
47
|
+
export declare function cleanupOldCheckpoints(maxAgeDays?: number): Promise<number>;
|
|
48
|
+
/**
|
|
49
|
+
* List checkpoints
|
|
50
|
+
*/
|
|
51
|
+
export declare function listCheckpoints(): Promise<Checkpoint[]>;
|
|
52
|
+
/**
|
|
53
|
+
* Get current git status summary
|
|
54
|
+
*/
|
|
55
|
+
export declare function getGitStatus(projectPath: string): Promise<{
|
|
56
|
+
branch: string;
|
|
57
|
+
commit: string;
|
|
58
|
+
hasChanges: boolean;
|
|
59
|
+
changedFiles: string[];
|
|
60
|
+
}>;
|
|
61
|
+
//# sourceMappingURL=rollback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rollback.d.ts","sourceRoot":"","sources":["../../src/support/rollback.ts"],"names":[],"mappings":"AAeA;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,MAAM,EAAE,OAAO,GAAG,WAAW,GAAG,UAAU,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,YAAY,GAAG,OAAO,GAAG,gBAAgB,CAAC;AA4BxF;;GAEG;AACH,wBAAsB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAgB/F;AA+DD;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,UAAU,CAAC,CAuCrB;AAID;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,MAAM,EACpB,QAAQ,GAAE,gBAA+B,GACxC,OAAO,CAAC,cAAc,CAAC,CAazB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,QAAQ,GAAE,gBAA+B,GACxC,OAAO,CAAC,cAAc,CAAC,CAazB;AAmGD;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,UAAU,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CA6BnF;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAiB7D;AAID;;GAEG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/D,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC,CASD"}
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
// ============================================
|
|
2
|
+
// OpenSwarm - Git-based Rollback System
|
|
3
|
+
// Automatic recovery on workflow failure
|
|
4
|
+
// ============================================
|
|
5
|
+
import { execFile } from 'node:child_process';
|
|
6
|
+
import { promisify } from 'node:util';
|
|
7
|
+
import { resolve } from 'node:path';
|
|
8
|
+
import { homedir } from 'node:os';
|
|
9
|
+
import * as fs from 'node:fs/promises';
|
|
10
|
+
const execFileAsync = promisify(execFile);
|
|
11
|
+
// Checkpoint Storage
|
|
12
|
+
const CHECKPOINT_DIR = resolve(homedir(), '.openswarm/checkpoints');
|
|
13
|
+
/**
|
|
14
|
+
* Save checkpoint
|
|
15
|
+
*/
|
|
16
|
+
async function saveCheckpoint(checkpoint) {
|
|
17
|
+
await fs.mkdir(CHECKPOINT_DIR, { recursive: true });
|
|
18
|
+
const filePath = resolve(CHECKPOINT_DIR, `${checkpoint.id}.json`);
|
|
19
|
+
await fs.writeFile(filePath, JSON.stringify(checkpoint, null, 2));
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Load checkpoint
|
|
23
|
+
*/
|
|
24
|
+
async function loadCheckpoint(checkpointId) {
|
|
25
|
+
try {
|
|
26
|
+
const filePath = resolve(CHECKPOINT_DIR, `${checkpointId}.json`);
|
|
27
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
28
|
+
return JSON.parse(content);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Find checkpoint by execution ID
|
|
36
|
+
*/
|
|
37
|
+
export async function findCheckpointByExecution(executionId) {
|
|
38
|
+
try {
|
|
39
|
+
const files = await fs.readdir(CHECKPOINT_DIR);
|
|
40
|
+
for (const file of files) {
|
|
41
|
+
if (file.endsWith('.json')) {
|
|
42
|
+
const content = await fs.readFile(resolve(CHECKPOINT_DIR, file), 'utf-8');
|
|
43
|
+
const checkpoint = JSON.parse(content);
|
|
44
|
+
if (checkpoint.executionId === executionId) {
|
|
45
|
+
return checkpoint;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Git Operations
|
|
56
|
+
/**
|
|
57
|
+
* Safe git command execution (no shell)
|
|
58
|
+
*/
|
|
59
|
+
async function gitExec(projectPath, ...args) {
|
|
60
|
+
const expandedPath = projectPath.replace('~', homedir());
|
|
61
|
+
try {
|
|
62
|
+
return await execFileAsync('git', args, { cwd: expandedPath });
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
66
|
+
const stderr = error?.stderr;
|
|
67
|
+
throw new Error(`Git command failed: git ${args.join(' ')}\n${stderr || detail}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get current commit hash
|
|
72
|
+
*/
|
|
73
|
+
async function getCurrentCommit(projectPath) {
|
|
74
|
+
const { stdout } = await gitExec(projectPath, 'rev-parse', 'HEAD');
|
|
75
|
+
return stdout.trim();
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get current branch name
|
|
79
|
+
*/
|
|
80
|
+
async function getCurrentBranch(projectPath) {
|
|
81
|
+
const { stdout } = await gitExec(projectPath, 'branch', '--show-current');
|
|
82
|
+
return stdout.trim() || 'HEAD';
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Check if there are uncommitted changes
|
|
86
|
+
*/
|
|
87
|
+
async function hasChanges(projectPath) {
|
|
88
|
+
try {
|
|
89
|
+
const { stdout } = await gitExec(projectPath, 'status', '--porcelain');
|
|
90
|
+
return stdout.trim().length > 0;
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Get list of changed files
|
|
98
|
+
*/
|
|
99
|
+
async function getChangedFiles(projectPath) {
|
|
100
|
+
try {
|
|
101
|
+
const { stdout } = await gitExec(projectPath, 'status', '--porcelain');
|
|
102
|
+
return stdout
|
|
103
|
+
.split('\n')
|
|
104
|
+
.filter(line => line.trim())
|
|
105
|
+
.map(line => line.slice(3).trim());
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
return [];
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Checkpoint Creation
|
|
112
|
+
/**
|
|
113
|
+
* Create checkpoint before workflow starts
|
|
114
|
+
*/
|
|
115
|
+
export async function createCheckpoint(executionId, projectPath, description) {
|
|
116
|
+
console.log(`[Rollback] Creating checkpoint for execution: ${executionId}`);
|
|
117
|
+
const expandedPath = projectPath.replace('~', homedir());
|
|
118
|
+
const commitHash = await getCurrentCommit(expandedPath);
|
|
119
|
+
const branchName = await getCurrentBranch(expandedPath);
|
|
120
|
+
let stashId;
|
|
121
|
+
// Stash if there are changes
|
|
122
|
+
if (await hasChanges(expandedPath)) {
|
|
123
|
+
const changedFiles = await getChangedFiles(expandedPath);
|
|
124
|
+
console.log(`[Rollback] Stashing ${changedFiles.length} changed files`);
|
|
125
|
+
const stashMessage = `openswarm-checkpoint-${executionId}`;
|
|
126
|
+
await gitExec(expandedPath, 'stash', 'push', '-m', stashMessage, '--include-untracked');
|
|
127
|
+
// Find Stash ID
|
|
128
|
+
const { stdout } = await gitExec(expandedPath, 'stash', 'list');
|
|
129
|
+
const stashLine = stdout.split('\n').find(line => line.includes(stashMessage));
|
|
130
|
+
if (stashLine) {
|
|
131
|
+
stashId = stashLine.match(/stash@\{(\d+)\}/)?.[0];
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
const checkpoint = {
|
|
135
|
+
id: `ckpt-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
|
|
136
|
+
executionId,
|
|
137
|
+
projectPath: expandedPath,
|
|
138
|
+
createdAt: Date.now(),
|
|
139
|
+
commitHash,
|
|
140
|
+
stashId,
|
|
141
|
+
branchName,
|
|
142
|
+
description: description || `Checkpoint for ${executionId}`,
|
|
143
|
+
};
|
|
144
|
+
await saveCheckpoint(checkpoint);
|
|
145
|
+
console.log(`[Rollback] Checkpoint created: ${checkpoint.id}`);
|
|
146
|
+
return checkpoint;
|
|
147
|
+
}
|
|
148
|
+
// Rollback Operations
|
|
149
|
+
/**
|
|
150
|
+
* Rollback to checkpoint
|
|
151
|
+
*/
|
|
152
|
+
export async function rollbackToCheckpoint(checkpointId, strategy = 'reset_hard') {
|
|
153
|
+
const checkpoint = await loadCheckpoint(checkpointId);
|
|
154
|
+
if (!checkpoint) {
|
|
155
|
+
return {
|
|
156
|
+
success: false,
|
|
157
|
+
checkpoint: null,
|
|
158
|
+
action: 'reset',
|
|
159
|
+
message: 'Checkpoint not found',
|
|
160
|
+
error: `Checkpoint ${checkpointId} does not exist`,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
return rollback(checkpoint, strategy);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Rollback by execution ID
|
|
167
|
+
*/
|
|
168
|
+
export async function rollbackExecution(executionId, strategy = 'reset_hard') {
|
|
169
|
+
const checkpoint = await findCheckpointByExecution(executionId);
|
|
170
|
+
if (!checkpoint) {
|
|
171
|
+
return {
|
|
172
|
+
success: false,
|
|
173
|
+
checkpoint: null,
|
|
174
|
+
action: 'reset',
|
|
175
|
+
message: 'Checkpoint not found for execution',
|
|
176
|
+
error: `No checkpoint found for execution ${executionId}`,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
return rollback(checkpoint, strategy);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Perform actual rollback
|
|
183
|
+
*/
|
|
184
|
+
async function rollback(checkpoint, strategy) {
|
|
185
|
+
console.log(`[Rollback] Rolling back to checkpoint: ${checkpoint.id}`);
|
|
186
|
+
console.log(`[Rollback] Strategy: ${strategy}`);
|
|
187
|
+
console.log(`[Rollback] Target commit: ${checkpoint.commitHash}`);
|
|
188
|
+
try {
|
|
189
|
+
switch (strategy) {
|
|
190
|
+
case 'reset_hard':
|
|
191
|
+
// Discard all changes and restore to checkpoint
|
|
192
|
+
await gitExec(checkpoint.projectPath, 'reset', '--hard', checkpoint.commitHash);
|
|
193
|
+
// Restore stash if it existed
|
|
194
|
+
if (checkpoint.stashId) {
|
|
195
|
+
try {
|
|
196
|
+
await gitExec(checkpoint.projectPath, 'stash', 'pop', checkpoint.stashId);
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
console.log('[Rollback] Stash pop failed, may have conflicts');
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return {
|
|
203
|
+
success: true,
|
|
204
|
+
checkpoint,
|
|
205
|
+
action: 'reset',
|
|
206
|
+
message: `Reset to ${checkpoint.commitHash.slice(0, 7)}`,
|
|
207
|
+
};
|
|
208
|
+
case 'reset_soft':
|
|
209
|
+
// Keep changes in staged state
|
|
210
|
+
await gitExec(checkpoint.projectPath, 'reset', '--soft', checkpoint.commitHash);
|
|
211
|
+
return {
|
|
212
|
+
success: true,
|
|
213
|
+
checkpoint,
|
|
214
|
+
action: 'reset',
|
|
215
|
+
message: `Soft reset to ${checkpoint.commitHash.slice(0, 7)}, changes staged`,
|
|
216
|
+
};
|
|
217
|
+
case 'stash':
|
|
218
|
+
// Stash current changes and go to checkpoint
|
|
219
|
+
if (await hasChanges(checkpoint.projectPath)) {
|
|
220
|
+
const stashMsg = `rollback-preserve-${Date.now()}`;
|
|
221
|
+
await gitExec(checkpoint.projectPath, 'stash', 'push', '-m', stashMsg, '--include-untracked');
|
|
222
|
+
}
|
|
223
|
+
await gitExec(checkpoint.projectPath, 'checkout', checkpoint.commitHash);
|
|
224
|
+
// Restore original stash
|
|
225
|
+
if (checkpoint.stashId) {
|
|
226
|
+
try {
|
|
227
|
+
await gitExec(checkpoint.projectPath, 'stash', 'pop', checkpoint.stashId);
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
console.log('[Rollback] Original stash pop failed');
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return {
|
|
234
|
+
success: true,
|
|
235
|
+
checkpoint,
|
|
236
|
+
action: 'stash_pop',
|
|
237
|
+
message: `Checked out ${checkpoint.commitHash.slice(0, 7)}, current changes stashed`,
|
|
238
|
+
};
|
|
239
|
+
case 'checkout_files':
|
|
240
|
+
// Restore files to checkpoint state (keep commits)
|
|
241
|
+
await gitExec(checkpoint.projectPath, 'checkout', checkpoint.commitHash, '--', '.');
|
|
242
|
+
return {
|
|
243
|
+
success: true,
|
|
244
|
+
checkpoint,
|
|
245
|
+
action: 'checkout',
|
|
246
|
+
message: `Files restored from ${checkpoint.commitHash.slice(0, 7)}`,
|
|
247
|
+
};
|
|
248
|
+
default:
|
|
249
|
+
throw new Error(`Unknown rollback strategy: ${strategy}`);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
catch (error) {
|
|
253
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
254
|
+
console.error('[Rollback] Failed:', msg);
|
|
255
|
+
return {
|
|
256
|
+
success: false,
|
|
257
|
+
checkpoint,
|
|
258
|
+
action: 'reset',
|
|
259
|
+
message: 'Rollback failed',
|
|
260
|
+
error: msg,
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
// Cleanup
|
|
265
|
+
/**
|
|
266
|
+
* Clean up old checkpoints
|
|
267
|
+
*/
|
|
268
|
+
export async function cleanupOldCheckpoints(maxAgeDays = 7) {
|
|
269
|
+
try {
|
|
270
|
+
await fs.mkdir(CHECKPOINT_DIR, { recursive: true });
|
|
271
|
+
const files = await fs.readdir(CHECKPOINT_DIR);
|
|
272
|
+
const maxAge = maxAgeDays * 24 * 60 * 60 * 1000;
|
|
273
|
+
const now = Date.now();
|
|
274
|
+
let deleted = 0;
|
|
275
|
+
for (const file of files) {
|
|
276
|
+
if (!file.endsWith('.json'))
|
|
277
|
+
continue;
|
|
278
|
+
const filePath = resolve(CHECKPOINT_DIR, file);
|
|
279
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
280
|
+
const checkpoint = JSON.parse(content);
|
|
281
|
+
if (now - checkpoint.createdAt > maxAge) {
|
|
282
|
+
await fs.unlink(filePath);
|
|
283
|
+
deleted++;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
if (deleted > 0) {
|
|
287
|
+
console.log(`[Rollback] Cleaned up ${deleted} old checkpoints`);
|
|
288
|
+
}
|
|
289
|
+
return deleted;
|
|
290
|
+
}
|
|
291
|
+
catch {
|
|
292
|
+
return 0;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* List checkpoints
|
|
297
|
+
*/
|
|
298
|
+
export async function listCheckpoints() {
|
|
299
|
+
try {
|
|
300
|
+
await fs.mkdir(CHECKPOINT_DIR, { recursive: true });
|
|
301
|
+
const files = await fs.readdir(CHECKPOINT_DIR);
|
|
302
|
+
const checkpoints = [];
|
|
303
|
+
for (const file of files) {
|
|
304
|
+
if (file.endsWith('.json')) {
|
|
305
|
+
const content = await fs.readFile(resolve(CHECKPOINT_DIR, file), 'utf-8');
|
|
306
|
+
checkpoints.push(JSON.parse(content));
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
return checkpoints.sort((a, b) => b.createdAt - a.createdAt);
|
|
310
|
+
}
|
|
311
|
+
catch {
|
|
312
|
+
return [];
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
// Utility Functions
|
|
316
|
+
/**
|
|
317
|
+
* Get current git status summary
|
|
318
|
+
*/
|
|
319
|
+
export async function getGitStatus(projectPath) {
|
|
320
|
+
const expandedPath = projectPath.replace('~', homedir());
|
|
321
|
+
return {
|
|
322
|
+
branch: await getCurrentBranch(expandedPath),
|
|
323
|
+
commit: await getCurrentCommit(expandedPath),
|
|
324
|
+
hasChanges: await hasChanges(expandedPath),
|
|
325
|
+
changedFiles: await getChangedFiles(expandedPath),
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
//# sourceMappingURL=rollback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rollback.js","sourceRoot":"","sources":["../../src/support/rollback.ts"],"names":[],"mappings":"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"}
|