@stackmemoryai/stackmemory 0.5.58 → 0.5.59
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/dist/cli/commands/search.js +20 -3
- package/dist/cli/commands/search.js.map +2 -2
- package/dist/core/database/sqlite-adapter.js +13 -3
- package/dist/core/database/sqlite-adapter.js.map +2 -2
- package/dist/core/errors/error-utils.js +208 -0
- package/dist/core/errors/error-utils.js.map +7 -0
- package/dist/core/errors/index.js +13 -4
- package/dist/core/errors/index.js.map +2 -2
- package/dist/core/merge/unified-merge-resolver.js +303 -0
- package/dist/core/merge/unified-merge-resolver.js.map +7 -0
- package/dist/core/monitoring/logger.js +61 -9
- package/dist/core/monitoring/logger.js.map +2 -2
- package/dist/core/security/index.js +35 -0
- package/dist/core/security/index.js.map +7 -0
- package/dist/core/security/input-sanitizer.js +321 -0
- package/dist/core/security/input-sanitizer.js.map +7 -0
- package/dist/integrations/linear/client.js +5 -1
- package/dist/integrations/linear/client.js.map +2 -2
- package/dist/integrations/mcp/remote-server.js +27 -36
- package/dist/integrations/mcp/remote-server.js.map +2 -2
- package/dist/integrations/mcp/server.js +44 -29
- package/dist/integrations/mcp/server.js.map +3 -3
- package/dist/scripts/benchmark-performance.js +48 -0
- package/dist/scripts/benchmark-performance.js.map +7 -0
- package/dist/scripts/check-redis.js +42 -0
- package/dist/scripts/check-redis.js.map +7 -0
- package/dist/scripts/initialize.js +116 -0
- package/dist/scripts/initialize.js.map +7 -0
- package/dist/scripts/list-linear-tasks.js +124 -0
- package/dist/scripts/list-linear-tasks.js.map +7 -0
- package/dist/scripts/measure-handoff-impact.js +340 -0
- package/dist/scripts/measure-handoff-impact.js.map +7 -0
- package/dist/scripts/query-chromadb.js +160 -0
- package/dist/scripts/query-chromadb.js.map +7 -0
- package/dist/scripts/show-linear-summary.js +119 -0
- package/dist/scripts/show-linear-summary.js.map +7 -0
- package/dist/scripts/simple-swarm-demo.js +90 -0
- package/dist/scripts/simple-swarm-demo.js.map +7 -0
- package/dist/scripts/status.js +155 -0
- package/dist/scripts/status.js.map +7 -0
- package/dist/scripts/test-chromadb-sync.js +192 -0
- package/dist/scripts/test-chromadb-sync.js.map +7 -0
- package/dist/scripts/test-ralph-iteration-fix.js +86 -0
- package/dist/scripts/test-ralph-iteration-fix.js.map +7 -0
- package/dist/scripts/test-ralph-iterations.js +121 -0
- package/dist/scripts/test-ralph-iterations.js.map +7 -0
- package/dist/scripts/test-redis-storage.js +389 -0
- package/dist/scripts/test-redis-storage.js.map +7 -0
- package/dist/scripts/test-simple-ralph-state-sync.js +115 -0
- package/dist/scripts/test-simple-ralph-state-sync.js.map +7 -0
- package/dist/scripts/test-swarm-fixes.js +125 -0
- package/dist/scripts/test-swarm-fixes.js.map +7 -0
- package/dist/scripts/test-swarm-tui.js +23 -0
- package/dist/scripts/test-swarm-tui.js.map +7 -0
- package/dist/scripts/test-tui-shortcuts.js +52 -0
- package/dist/scripts/test-tui-shortcuts.js.map +7 -0
- package/dist/scripts/validate-tui-shortcuts.js +60 -0
- package/dist/scripts/validate-tui-shortcuts.js.map +7 -0
- package/dist/src/agents/core/agent-task-manager.js +527 -0
- package/dist/src/agents/core/agent-task-manager.js.map +7 -0
- package/dist/src/agents/verifiers/base-verifier.js +133 -0
- package/dist/src/agents/verifiers/base-verifier.js.map +7 -0
- package/dist/src/agents/verifiers/formatter-verifier.js +130 -0
- package/dist/src/agents/verifiers/formatter-verifier.js.map +7 -0
- package/dist/src/agents/verifiers/llm-judge.js +252 -0
- package/dist/src/agents/verifiers/llm-judge.js.map +7 -0
- package/dist/src/cli/auto-detect.js +321 -0
- package/dist/src/cli/auto-detect.js.map +7 -0
- package/dist/src/cli/claude-sm-danger.js +21 -0
- package/dist/src/cli/claude-sm-danger.js.map +7 -0
- package/dist/src/cli/claude-sm.js +1156 -0
- package/dist/src/cli/claude-sm.js.map +7 -0
- package/dist/src/cli/codex-sm-danger.js +21 -0
- package/dist/src/cli/codex-sm-danger.js.map +7 -0
- package/dist/src/cli/codex-sm.js +349 -0
- package/dist/src/cli/codex-sm.js.map +7 -0
- package/dist/src/cli/commands/api.js +232 -0
- package/dist/src/cli/commands/api.js.map +7 -0
- package/dist/src/cli/commands/auto-background.js +180 -0
- package/dist/src/cli/commands/auto-background.js.map +7 -0
- package/dist/src/cli/commands/cleanup-processes.js +68 -0
- package/dist/src/cli/commands/cleanup-processes.js.map +7 -0
- package/dist/src/cli/commands/clear.js +202 -0
- package/dist/src/cli/commands/clear.js.map +7 -0
- package/dist/src/cli/commands/config.js +445 -0
- package/dist/src/cli/commands/config.js.map +7 -0
- package/dist/src/cli/commands/context-rehydrate.js +751 -0
- package/dist/src/cli/commands/context-rehydrate.js.map +7 -0
- package/dist/src/cli/commands/context.js +343 -0
- package/dist/src/cli/commands/context.js.map +7 -0
- package/dist/src/cli/commands/daemon.js +392 -0
- package/dist/src/cli/commands/daemon.js.map +7 -0
- package/dist/src/cli/commands/dashboard.js +210 -0
- package/dist/src/cli/commands/dashboard.js.map +7 -0
- package/dist/src/cli/commands/db.js +147 -0
- package/dist/src/cli/commands/db.js.map +7 -0
- package/dist/src/cli/commands/decision.js +266 -0
- package/dist/src/cli/commands/decision.js.map +7 -0
- package/dist/src/cli/commands/discovery.js +279 -0
- package/dist/src/cli/commands/discovery.js.map +7 -0
- package/dist/src/cli/commands/handoff.js +624 -0
- package/dist/src/cli/commands/handoff.js.map +7 -0
- package/dist/src/cli/commands/hooks.js +298 -0
- package/dist/src/cli/commands/hooks.js.map +7 -0
- package/dist/src/cli/commands/linear.js +529 -0
- package/dist/src/cli/commands/linear.js.map +7 -0
- package/dist/src/cli/commands/log.js +169 -0
- package/dist/src/cli/commands/log.js.map +7 -0
- package/dist/src/cli/commands/login.js +172 -0
- package/dist/src/cli/commands/login.js.map +7 -0
- package/dist/src/cli/commands/migrate.js +240 -0
- package/dist/src/cli/commands/migrate.js.map +7 -0
- package/dist/src/cli/commands/model.js +533 -0
- package/dist/src/cli/commands/model.js.map +7 -0
- package/dist/src/cli/commands/onboard.js +536 -0
- package/dist/src/cli/commands/onboard.js.map +7 -0
- package/dist/src/cli/commands/projects.js +199 -0
- package/dist/src/cli/commands/projects.js.map +7 -0
- package/dist/src/cli/commands/ralph.js +909 -0
- package/dist/src/cli/commands/ralph.js.map +7 -0
- package/dist/src/cli/commands/retrieval.js +248 -0
- package/dist/src/cli/commands/retrieval.js.map +7 -0
- package/dist/src/cli/commands/search.js +173 -0
- package/dist/src/cli/commands/search.js.map +7 -0
- package/dist/src/cli/commands/service.js +749 -0
- package/dist/src/cli/commands/service.js.map +7 -0
- package/dist/src/cli/commands/session.js +200 -0
- package/dist/src/cli/commands/session.js.map +7 -0
- package/dist/src/cli/commands/settings.js +306 -0
- package/dist/src/cli/commands/settings.js.map +7 -0
- package/dist/src/cli/commands/setup.js +701 -0
- package/dist/src/cli/commands/setup.js.map +7 -0
- package/dist/src/cli/commands/shell.js +249 -0
- package/dist/src/cli/commands/shell.js.map +7 -0
- package/dist/src/cli/commands/signup.js +50 -0
- package/dist/src/cli/commands/signup.js.map +7 -0
- package/dist/src/cli/commands/skills.js +470 -0
- package/dist/src/cli/commands/skills.js.map +7 -0
- package/dist/src/cli/commands/sms-notify.js +795 -0
- package/dist/src/cli/commands/sms-notify.js.map +7 -0
- package/dist/src/cli/commands/storage-tier.js +183 -0
- package/dist/src/cli/commands/storage-tier.js.map +7 -0
- package/dist/src/cli/commands/sweep.js +249 -0
- package/dist/src/cli/commands/sweep.js.map +7 -0
- package/dist/src/cli/commands/tasks.js +213 -0
- package/dist/src/cli/commands/tasks.js.map +7 -0
- package/dist/src/cli/commands/worktree.js +319 -0
- package/dist/src/cli/commands/worktree.js.map +7 -0
- package/dist/src/cli/index.js +594 -0
- package/dist/src/cli/index.js.map +7 -0
- package/dist/src/cli/opencode-sm.js +448 -0
- package/dist/src/cli/opencode-sm.js.map +7 -0
- package/dist/src/cli/utils/viewer.js +96 -0
- package/dist/src/cli/utils/viewer.js.map +7 -0
- package/dist/src/core/config/config-manager.js +398 -0
- package/dist/src/core/config/config-manager.js.map +7 -0
- package/dist/src/core/config/feature-flags.js +76 -0
- package/dist/src/core/config/feature-flags.js.map +7 -0
- package/dist/src/core/config/storage-config.js +115 -0
- package/dist/src/core/config/storage-config.js.map +7 -0
- package/dist/src/core/config/types.js +144 -0
- package/dist/src/core/config/types.js.map +7 -0
- package/dist/src/core/context/auto-context.js +80 -0
- package/dist/src/core/context/auto-context.js.map +7 -0
- package/dist/src/core/context/dual-stack-manager.js +870 -0
- package/dist/src/core/context/dual-stack-manager.js.map +7 -0
- package/dist/src/core/context/enhanced-rehydration.js +994 -0
- package/dist/src/core/context/enhanced-rehydration.js.map +7 -0
- package/dist/src/core/context/frame-database.js +479 -0
- package/dist/src/core/context/frame-database.js.map +7 -0
- package/dist/src/core/context/frame-digest.js +250 -0
- package/dist/src/core/context/frame-digest.js.map +7 -0
- package/dist/src/core/context/frame-handoff-manager.js +778 -0
- package/dist/src/core/context/frame-handoff-manager.js.map +7 -0
- package/dist/src/core/context/frame-lifecycle-hooks.js +119 -0
- package/dist/src/core/context/frame-lifecycle-hooks.js.map +7 -0
- package/dist/src/core/context/frame-recovery.js +302 -0
- package/dist/src/core/context/frame-recovery.js.map +7 -0
- package/dist/src/core/context/frame-stack.js +314 -0
- package/dist/src/core/context/frame-stack.js.map +7 -0
- package/dist/src/core/context/frame-types.js +5 -0
- package/dist/src/core/context/frame-types.js.map +7 -0
- package/dist/src/core/context/index.js +25 -0
- package/dist/src/core/context/index.js.map +7 -0
- package/dist/src/core/context/permission-manager.js +185 -0
- package/dist/src/core/context/permission-manager.js.map +7 -0
- package/dist/src/core/context/recursive-context-manager.js +592 -0
- package/dist/src/core/context/recursive-context-manager.js.map +7 -0
- package/dist/src/core/context/refactored-frame-manager.js +754 -0
- package/dist/src/core/context/refactored-frame-manager.js.map +7 -0
- package/dist/src/core/context/shared-context-layer.js +621 -0
- package/dist/src/core/context/shared-context-layer.js.map +7 -0
- package/dist/src/core/context/stack-merge-resolver.js +749 -0
- package/dist/src/core/context/stack-merge-resolver.js.map +7 -0
- package/dist/src/core/context/validation.js +130 -0
- package/dist/src/core/context/validation.js.map +7 -0
- package/dist/src/core/database/batch-operations.js +384 -0
- package/dist/src/core/database/batch-operations.js.map +7 -0
- package/dist/src/core/database/connection-pool.js +330 -0
- package/dist/src/core/database/connection-pool.js.map +7 -0
- package/dist/src/core/database/database-adapter.js +60 -0
- package/dist/src/core/database/database-adapter.js.map +7 -0
- package/dist/src/core/database/migration-manager.js +614 -0
- package/dist/src/core/database/migration-manager.js.map +7 -0
- package/dist/src/core/database/query-cache.js +298 -0
- package/dist/src/core/database/query-cache.js.map +7 -0
- package/dist/src/core/database/query-router.js +430 -0
- package/dist/src/core/database/query-router.js.map +7 -0
- package/dist/src/core/database/sqlite-adapter.js +738 -0
- package/dist/src/core/database/sqlite-adapter.js.map +7 -0
- package/dist/src/core/digest/enhanced-hybrid-digest.js +277 -0
- package/dist/src/core/digest/enhanced-hybrid-digest.js.map +7 -0
- package/dist/src/core/digest/frame-digest-integration.js +176 -0
- package/dist/src/core/digest/frame-digest-integration.js.map +7 -0
- package/dist/src/core/digest/hybrid-digest-generator.js +553 -0
- package/dist/src/core/digest/hybrid-digest-generator.js.map +7 -0
- package/dist/src/core/digest/index.js +9 -0
- package/dist/src/core/digest/index.js.map +7 -0
- package/dist/src/core/digest/types.js +25 -0
- package/dist/src/core/digest/types.js.map +7 -0
- package/dist/src/core/errors/error-utils.js +208 -0
- package/dist/src/core/errors/error-utils.js.map +7 -0
- package/dist/src/core/errors/index.js +521 -0
- package/dist/src/core/errors/index.js.map +7 -0
- package/dist/src/core/errors/recovery.js +269 -0
- package/dist/src/core/errors/recovery.js.map +7 -0
- package/dist/src/core/execution/parallel-executor.js +258 -0
- package/dist/src/core/execution/parallel-executor.js.map +7 -0
- package/dist/src/core/frame/workflow-templates.js +319 -0
- package/dist/src/core/frame/workflow-templates.js.map +7 -0
- package/dist/src/core/merge/conflict-detector.js +431 -0
- package/dist/src/core/merge/conflict-detector.js.map +7 -0
- package/dist/src/core/merge/index.js +9 -0
- package/dist/src/core/merge/index.js.map +7 -0
- package/dist/src/core/merge/resolution-engine.js +558 -0
- package/dist/src/core/merge/resolution-engine.js.map +7 -0
- package/dist/src/core/merge/stack-diff.js +532 -0
- package/dist/src/core/merge/stack-diff.js.map +7 -0
- package/dist/src/core/merge/types.js +5 -0
- package/dist/src/core/merge/types.js.map +7 -0
- package/dist/src/core/merge/unified-merge-resolver.js +303 -0
- package/dist/src/core/merge/unified-merge-resolver.js.map +7 -0
- package/dist/src/core/models/fallback-monitor.js +232 -0
- package/dist/src/core/models/fallback-monitor.js.map +7 -0
- package/dist/src/core/models/model-router.js +340 -0
- package/dist/src/core/models/model-router.js.map +7 -0
- package/dist/src/core/monitoring/error-handler.js +49 -0
- package/dist/src/core/monitoring/error-handler.js.map +7 -0
- package/dist/src/core/monitoring/logger.js +202 -0
- package/dist/src/core/monitoring/logger.js.map +7 -0
- package/dist/src/core/monitoring/metrics.js +172 -0
- package/dist/src/core/monitoring/metrics.js.map +7 -0
- package/dist/src/core/monitoring/progress-tracker.js +189 -0
- package/dist/src/core/monitoring/progress-tracker.js.map +7 -0
- package/dist/src/core/monitoring/session-monitor.js +300 -0
- package/dist/src/core/monitoring/session-monitor.js.map +7 -0
- package/dist/src/core/performance/context-cache.js +273 -0
- package/dist/src/core/performance/context-cache.js.map +7 -0
- package/dist/src/core/performance/index.js +11 -0
- package/dist/src/core/performance/index.js.map +7 -0
- package/dist/src/core/performance/lazy-context-loader.js +327 -0
- package/dist/src/core/performance/lazy-context-loader.js.map +7 -0
- package/dist/src/core/performance/monitor.js +221 -0
- package/dist/src/core/performance/monitor.js.map +7 -0
- package/dist/src/core/performance/optimized-frame-context.js +345 -0
- package/dist/src/core/performance/optimized-frame-context.js.map +7 -0
- package/dist/src/core/performance/performance-benchmark.js +277 -0
- package/dist/src/core/performance/performance-benchmark.js.map +7 -0
- package/dist/src/core/performance/performance-profiler.js +370 -0
- package/dist/src/core/performance/performance-profiler.js.map +7 -0
- package/dist/src/core/performance/streaming-jsonl-parser.js +195 -0
- package/dist/src/core/performance/streaming-jsonl-parser.js.map +7 -0
- package/dist/src/core/persistence/postgres-adapter.js +349 -0
- package/dist/src/core/persistence/postgres-adapter.js.map +7 -0
- package/dist/src/core/projects/project-isolation.js +201 -0
- package/dist/src/core/projects/project-isolation.js.map +7 -0
- package/dist/src/core/projects/project-manager.js +697 -0
- package/dist/src/core/projects/project-manager.js.map +7 -0
- package/dist/src/core/query/query-parser.js +370 -0
- package/dist/src/core/query/query-parser.js.map +7 -0
- package/dist/src/core/query/query-templates.js +321 -0
- package/dist/src/core/query/query-templates.js.map +7 -0
- package/dist/src/core/retrieval/context-retriever.js +479 -0
- package/dist/src/core/retrieval/context-retriever.js.map +7 -0
- package/dist/src/core/retrieval/index.js +8 -0
- package/dist/src/core/retrieval/index.js.map +7 -0
- package/dist/src/core/retrieval/llm-context-retrieval.js +613 -0
- package/dist/src/core/retrieval/llm-context-retrieval.js.map +7 -0
- package/dist/src/core/retrieval/llm-provider.js +151 -0
- package/dist/src/core/retrieval/llm-provider.js.map +7 -0
- package/dist/src/core/retrieval/retrieval-audit.js +236 -0
- package/dist/src/core/retrieval/retrieval-audit.js.map +7 -0
- package/dist/src/core/retrieval/summary-generator.js +589 -0
- package/dist/src/core/retrieval/summary-generator.js.map +7 -0
- package/dist/src/core/retrieval/types.js +21 -0
- package/dist/src/core/retrieval/types.js.map +7 -0
- package/dist/src/core/security/index.js +35 -0
- package/dist/src/core/security/index.js.map +7 -0
- package/dist/src/core/security/input-sanitizer.js +321 -0
- package/dist/src/core/security/input-sanitizer.js.map +7 -0
- package/dist/src/core/session/clear-survival.js +465 -0
- package/dist/src/core/session/clear-survival.js.map +7 -0
- package/dist/src/core/session/enhanced-handoff.js +792 -0
- package/dist/src/core/session/enhanced-handoff.js.map +7 -0
- package/dist/src/core/session/handoff-generator.js +343 -0
- package/dist/src/core/session/handoff-generator.js.map +7 -0
- package/dist/src/core/session/index.js +15 -0
- package/dist/src/core/session/index.js.map +7 -0
- package/dist/src/core/session/session-manager.js +347 -0
- package/dist/src/core/session/session-manager.js.map +7 -0
- package/dist/src/core/skills/index.js +7 -0
- package/dist/src/core/skills/index.js.map +7 -0
- package/dist/src/core/skills/skill-storage.js +764 -0
- package/dist/src/core/skills/skill-storage.js.map +7 -0
- package/dist/src/core/skills/types.js +193 -0
- package/dist/src/core/skills/types.js.map +7 -0
- package/dist/src/core/storage/chromadb-adapter.js +354 -0
- package/dist/src/core/storage/chromadb-adapter.js.map +7 -0
- package/dist/src/core/storage/infinite-storage.js +510 -0
- package/dist/src/core/storage/infinite-storage.js.map +7 -0
- package/dist/src/core/storage/remote-storage.js +489 -0
- package/dist/src/core/storage/remote-storage.js.map +7 -0
- package/dist/src/core/storage/two-tier-storage.js +766 -0
- package/dist/src/core/storage/two-tier-storage.js.map +7 -0
- package/dist/src/core/trace/cli-trace-wrapper.js +132 -0
- package/dist/src/core/trace/cli-trace-wrapper.js.map +7 -0
- package/dist/src/core/trace/db-trace-wrapper.js +247 -0
- package/dist/src/core/trace/db-trace-wrapper.js.map +7 -0
- package/dist/src/core/trace/debug-trace.js +417 -0
- package/dist/src/core/trace/debug-trace.js.map +7 -0
- package/dist/src/core/trace/index.js +109 -0
- package/dist/src/core/trace/index.js.map +7 -0
- package/dist/src/core/trace/linear-api-wrapper.js +178 -0
- package/dist/src/core/trace/linear-api-wrapper.js.map +7 -0
- package/dist/src/core/trace/trace-detector.js +528 -0
- package/dist/src/core/trace/trace-detector.js.map +7 -0
- package/dist/src/core/trace/trace-store.js +345 -0
- package/dist/src/core/trace/trace-store.js.map +7 -0
- package/dist/src/core/trace/types.js +77 -0
- package/dist/src/core/trace/types.js.map +7 -0
- package/dist/src/core/types.js +5 -0
- package/dist/src/core/types.js.map +7 -0
- package/dist/src/core/utils/async-mutex.js +114 -0
- package/dist/src/core/utils/async-mutex.js.map +7 -0
- package/dist/src/core/utils/compression.js +83 -0
- package/dist/src/core/utils/compression.js.map +7 -0
- package/dist/src/core/utils/update-checker.js +218 -0
- package/dist/src/core/utils/update-checker.js.map +7 -0
- package/dist/src/core/worktree/worktree-manager.js +465 -0
- package/dist/src/core/worktree/worktree-manager.js.map +7 -0
- package/dist/src/daemon/daemon-config.js +149 -0
- package/dist/src/daemon/daemon-config.js.map +7 -0
- package/dist/src/daemon/services/context-service.js +122 -0
- package/dist/src/daemon/services/context-service.js.map +7 -0
- package/dist/src/daemon/services/linear-service.js +136 -0
- package/dist/src/daemon/services/linear-service.js.map +7 -0
- package/dist/src/daemon/session-daemon.js +312 -0
- package/dist/src/daemon/session-daemon.js.map +7 -0
- package/dist/src/daemon/unified-daemon.js +276 -0
- package/dist/src/daemon/unified-daemon.js.map +7 -0
- package/dist/src/features/analytics/api/analytics-api.js +287 -0
- package/dist/src/features/analytics/api/analytics-api.js.map +7 -0
- package/dist/src/features/analytics/core/analytics-service.js +282 -0
- package/dist/src/features/analytics/core/analytics-service.js.map +7 -0
- package/dist/src/features/analytics/index.js +18 -0
- package/dist/src/features/analytics/index.js.map +7 -0
- package/dist/src/features/analytics/queries/metrics-queries.js +277 -0
- package/dist/src/features/analytics/queries/metrics-queries.js.map +7 -0
- package/dist/src/features/analytics/types/metrics.js +5 -0
- package/dist/src/features/analytics/types/metrics.js.map +7 -0
- package/dist/src/features/browser/browser-mcp.js +492 -0
- package/dist/src/features/browser/browser-mcp.js.map +7 -0
- package/dist/src/features/sweep/index.js +20 -0
- package/dist/src/features/sweep/index.js.map +7 -0
- package/dist/src/features/sweep/prediction-client.js +155 -0
- package/dist/src/features/sweep/prediction-client.js.map +7 -0
- package/dist/src/features/sweep/prompt-builder.js +85 -0
- package/dist/src/features/sweep/prompt-builder.js.map +7 -0
- package/dist/src/features/sweep/pty-wrapper.js +171 -0
- package/dist/src/features/sweep/pty-wrapper.js.map +7 -0
- package/dist/src/features/sweep/state-watcher.js +87 -0
- package/dist/src/features/sweep/state-watcher.js.map +7 -0
- package/dist/src/features/sweep/status-bar.js +88 -0
- package/dist/src/features/sweep/status-bar.js.map +7 -0
- package/dist/src/features/sweep/sweep-server-manager.js +226 -0
- package/dist/src/features/sweep/sweep-server-manager.js.map +7 -0
- package/dist/src/features/sweep/tab-interceptor.js +38 -0
- package/dist/src/features/sweep/tab-interceptor.js.map +7 -0
- package/dist/src/features/sweep/types.js +18 -0
- package/dist/src/features/sweep/types.js.map +7 -0
- package/dist/src/features/tasks/linear-task-manager.js +487 -0
- package/dist/src/features/tasks/linear-task-manager.js.map +7 -0
- package/dist/src/features/tasks/task-aware-context.js +410 -0
- package/dist/src/features/tasks/task-aware-context.js.map +7 -0
- package/dist/src/features/tui/simple-monitor.js +116 -0
- package/dist/src/features/tui/simple-monitor.js.map +7 -0
- package/dist/src/features/tui/swarm-monitor.js +648 -0
- package/dist/src/features/tui/swarm-monitor.js.map +7 -0
- package/dist/src/features/web/client/stores/task-store.js +26 -0
- package/dist/src/features/web/client/stores/task-store.js.map +7 -0
- package/dist/src/features/web/server/index.js +194 -0
- package/dist/src/features/web/server/index.js.map +7 -0
- package/dist/src/hooks/auto-background.js +151 -0
- package/dist/src/hooks/auto-background.js.map +7 -0
- package/dist/src/hooks/claude-code-whatsapp-hook.js +197 -0
- package/dist/src/hooks/claude-code-whatsapp-hook.js.map +7 -0
- package/dist/src/hooks/config.js +150 -0
- package/dist/src/hooks/config.js.map +7 -0
- package/dist/src/hooks/daemon.js +364 -0
- package/dist/src/hooks/daemon.js.map +7 -0
- package/dist/src/hooks/events.js +58 -0
- package/dist/src/hooks/events.js.map +7 -0
- package/dist/src/hooks/index.js +12 -0
- package/dist/src/hooks/index.js.map +7 -0
- package/dist/src/hooks/linear-task-picker.js +186 -0
- package/dist/src/hooks/linear-task-picker.js.map +7 -0
- package/dist/src/hooks/schemas.js +197 -0
- package/dist/src/hooks/schemas.js.map +7 -0
- package/dist/src/hooks/secure-fs.js +49 -0
- package/dist/src/hooks/secure-fs.js.map +7 -0
- package/dist/src/hooks/security-logger.js +155 -0
- package/dist/src/hooks/security-logger.js.map +7 -0
- package/dist/src/hooks/session-summary.js +222 -0
- package/dist/src/hooks/session-summary.js.map +7 -0
- package/dist/src/hooks/sms-action-runner.js +371 -0
- package/dist/src/hooks/sms-action-runner.js.map +7 -0
- package/dist/src/hooks/sms-notify.js +506 -0
- package/dist/src/hooks/sms-notify.js.map +7 -0
- package/dist/src/hooks/sms-watcher.js +93 -0
- package/dist/src/hooks/sms-watcher.js.map +7 -0
- package/dist/src/hooks/sms-webhook.js +555 -0
- package/dist/src/hooks/sms-webhook.js.map +7 -0
- package/dist/src/hooks/whatsapp-commands.js +479 -0
- package/dist/src/hooks/whatsapp-commands.js.map +7 -0
- package/dist/src/hooks/whatsapp-scheduler.js +317 -0
- package/dist/src/hooks/whatsapp-scheduler.js.map +7 -0
- package/dist/src/hooks/whatsapp-sync.js +409 -0
- package/dist/src/hooks/whatsapp-sync.js.map +7 -0
- package/dist/src/index.js +25 -0
- package/dist/src/index.js.map +7 -0
- package/dist/src/integrations/anthropic/client.js +263 -0
- package/dist/src/integrations/anthropic/client.js.map +7 -0
- package/dist/src/integrations/claude-code/agent-bridge.js +768 -0
- package/dist/src/integrations/claude-code/agent-bridge.js.map +7 -0
- package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js +459 -0
- package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
- package/dist/src/integrations/claude-code/lifecycle-hooks.js +254 -0
- package/dist/src/integrations/claude-code/lifecycle-hooks.js.map +7 -0
- package/dist/src/integrations/claude-code/post-task-hooks.js +545 -0
- package/dist/src/integrations/claude-code/post-task-hooks.js.map +7 -0
- package/dist/src/integrations/claude-code/subagent-client-stub.js +20 -0
- package/dist/src/integrations/claude-code/subagent-client-stub.js.map +7 -0
- package/dist/src/integrations/claude-code/subagent-client.js +511 -0
- package/dist/src/integrations/claude-code/subagent-client.js.map +7 -0
- package/dist/src/integrations/claude-code/task-coordinator.js +360 -0
- package/dist/src/integrations/claude-code/task-coordinator.js.map +7 -0
- package/dist/src/integrations/linear/auth.js +337 -0
- package/dist/src/integrations/linear/auth.js.map +7 -0
- package/dist/src/integrations/linear/auto-sync.js +258 -0
- package/dist/src/integrations/linear/auto-sync.js.map +7 -0
- package/dist/src/integrations/linear/client.js +634 -0
- package/dist/src/integrations/linear/client.js.map +7 -0
- package/dist/src/integrations/linear/config.js +130 -0
- package/dist/src/integrations/linear/config.js.map +7 -0
- package/dist/src/integrations/linear/migration.js +361 -0
- package/dist/src/integrations/linear/migration.js.map +7 -0
- package/dist/src/integrations/linear/oauth-server.js +454 -0
- package/dist/src/integrations/linear/oauth-server.js.map +7 -0
- package/dist/src/integrations/linear/rest-client.js +213 -0
- package/dist/src/integrations/linear/rest-client.js.map +7 -0
- package/dist/src/integrations/linear/sync-manager.js +236 -0
- package/dist/src/integrations/linear/sync-manager.js.map +7 -0
- package/dist/src/integrations/linear/sync-service.js +231 -0
- package/dist/src/integrations/linear/sync-service.js.map +7 -0
- package/dist/src/integrations/linear/sync.js +782 -0
- package/dist/src/integrations/linear/sync.js.map +7 -0
- package/dist/src/integrations/linear/types.js +5 -0
- package/dist/src/integrations/linear/types.js.map +7 -0
- package/dist/src/integrations/linear/unified-sync.js +589 -0
- package/dist/src/integrations/linear/unified-sync.js.map +7 -0
- package/dist/src/integrations/linear/webhook-handler.js +219 -0
- package/dist/src/integrations/linear/webhook-handler.js.map +7 -0
- package/dist/src/integrations/linear/webhook-server.js +218 -0
- package/dist/src/integrations/linear/webhook-server.js.map +7 -0
- package/dist/src/integrations/linear/webhook.js +291 -0
- package/dist/src/integrations/linear/webhook.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/code-execution-handlers.js +266 -0
- package/dist/src/integrations/mcp/handlers/code-execution-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/context-handlers.js +257 -0
- package/dist/src/integrations/mcp/handlers/context-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/discovery-handlers.js +497 -0
- package/dist/src/integrations/mcp/handlers/discovery-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/index.js +166 -0
- package/dist/src/integrations/mcp/handlers/index.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/linear-handlers.js +247 -0
- package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/skill-handlers.js +529 -0
- package/dist/src/integrations/mcp/handlers/skill-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/task-handlers.js +239 -0
- package/dist/src/integrations/mcp/handlers/task-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/trace-handlers.js +308 -0
- package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/index.js +23 -0
- package/dist/src/integrations/mcp/index.js.map +7 -0
- package/dist/src/integrations/mcp/middleware/tool-scoring.js +356 -0
- package/dist/src/integrations/mcp/middleware/tool-scoring.js.map +7 -0
- package/dist/src/integrations/mcp/refactored-server.js +374 -0
- package/dist/src/integrations/mcp/refactored-server.js.map +7 -0
- package/dist/src/integrations/mcp/remote-server.js +682 -0
- package/dist/src/integrations/mcp/remote-server.js.map +7 -0
- package/dist/src/integrations/mcp/schemas.js +147 -0
- package/dist/src/integrations/mcp/schemas.js.map +7 -0
- package/dist/src/integrations/mcp/server.js +1975 -0
- package/dist/src/integrations/mcp/server.js.map +7 -0
- package/dist/src/integrations/mcp/tool-definitions-code.js +125 -0
- package/dist/src/integrations/mcp/tool-definitions-code.js.map +7 -0
- package/dist/src/integrations/mcp/tool-definitions.js +702 -0
- package/dist/src/integrations/mcp/tool-definitions.js.map +7 -0
- package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js +860 -0
- package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +7 -0
- package/dist/src/integrations/ralph/context/context-budget-manager.js +301 -0
- package/dist/src/integrations/ralph/context/context-budget-manager.js.map +7 -0
- package/dist/src/integrations/ralph/context/stackmemory-context-loader.js +360 -0
- package/dist/src/integrations/ralph/context/stackmemory-context-loader.js.map +7 -0
- package/dist/src/integrations/ralph/coordination/enhanced-coordination.js +410 -0
- package/dist/src/integrations/ralph/coordination/enhanced-coordination.js.map +7 -0
- package/dist/src/integrations/ralph/index.js +18 -0
- package/dist/src/integrations/ralph/index.js.map +7 -0
- package/dist/src/integrations/ralph/learning/pattern-learner.js +401 -0
- package/dist/src/integrations/ralph/learning/pattern-learner.js.map +7 -0
- package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js +448 -0
- package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js.map +7 -0
- package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js +294 -0
- package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js.map +7 -0
- package/dist/src/integrations/ralph/monitoring/swarm-registry.js +108 -0
- package/dist/src/integrations/ralph/monitoring/swarm-registry.js.map +7 -0
- package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js +463 -0
- package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +7 -0
- package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js +400 -0
- package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js.map +7 -0
- package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js +473 -0
- package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js.map +7 -0
- package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js +388 -0
- package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js.map +7 -0
- package/dist/src/integrations/ralph/performance/performance-optimizer.js +358 -0
- package/dist/src/integrations/ralph/performance/performance-optimizer.js.map +7 -0
- package/dist/src/integrations/ralph/recovery/crash-recovery.js +462 -0
- package/dist/src/integrations/ralph/recovery/crash-recovery.js.map +7 -0
- package/dist/src/integrations/ralph/state/state-reconciler.js +404 -0
- package/dist/src/integrations/ralph/state/state-reconciler.js.map +7 -0
- package/dist/src/integrations/ralph/swarm/git-workflow-manager.js +428 -0
- package/dist/src/integrations/ralph/swarm/git-workflow-manager.js.map +7 -0
- package/dist/src/integrations/ralph/swarm/swarm-coordinator.js +996 -0
- package/dist/src/integrations/ralph/swarm/swarm-coordinator.js.map +7 -0
- package/dist/src/integrations/ralph/types.js +5 -0
- package/dist/src/integrations/ralph/types.js.map +7 -0
- package/dist/src/integrations/ralph/visualization/ralph-debugger.js +585 -0
- package/dist/src/integrations/ralph/visualization/ralph-debugger.js.map +7 -0
- package/dist/src/mcp/stackmemory-mcp-server.js +554 -0
- package/dist/src/mcp/stackmemory-mcp-server.js.map +7 -0
- package/dist/src/middleware/exponential-rate-limiter.js +289 -0
- package/dist/src/middleware/exponential-rate-limiter.js.map +7 -0
- package/dist/src/models/user.model.js +358 -0
- package/dist/src/models/user.model.js.map +7 -0
- package/dist/src/servers/production/auth-middleware.js +528 -0
- package/dist/src/servers/production/auth-middleware.js.map +7 -0
- package/dist/src/services/config-service.js +65 -0
- package/dist/src/services/config-service.js.map +7 -0
- package/dist/src/services/context-service.js +194 -0
- package/dist/src/services/context-service.js.map +7 -0
- package/dist/src/skills/api-discovery.js +354 -0
- package/dist/src/skills/api-discovery.js.map +7 -0
- package/dist/src/skills/api-skill.js +475 -0
- package/dist/src/skills/api-skill.js.map +7 -0
- package/dist/src/skills/claude-skills.js +1061 -0
- package/dist/src/skills/claude-skills.js.map +7 -0
- package/dist/src/skills/dashboard-launcher.js +216 -0
- package/dist/src/skills/dashboard-launcher.js.map +7 -0
- package/dist/src/skills/recursive-agent-orchestrator.js +575 -0
- package/dist/src/skills/recursive-agent-orchestrator.js.map +7 -0
- package/dist/src/skills/repo-ingestion-skill.js +609 -0
- package/dist/src/skills/repo-ingestion-skill.js.map +7 -0
- package/dist/src/skills/unified-rlm-orchestrator.js +404 -0
- package/dist/src/skills/unified-rlm-orchestrator.js.map +7 -0
- package/dist/src/types/task.js +5 -0
- package/dist/src/types/task.js.map +7 -0
- package/dist/src/utils/env.js +50 -0
- package/dist/src/utils/env.js.map +7 -0
- package/dist/src/utils/formatting.js +62 -0
- package/dist/src/utils/formatting.js.map +7 -0
- package/dist/src/utils/process-cleanup.js +136 -0
- package/dist/src/utils/process-cleanup.js.map +7 -0
- package/package.json +3 -3
- package/scripts/initialize.ts +16 -7
- package/scripts/install.sh +14 -62
- package/scripts/status.ts +111 -46
|
@@ -0,0 +1,462 @@
|
|
|
1
|
+
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
2
|
+
import { dirname as __pathDirname } from 'path';
|
|
3
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
4
|
+
const __dirname = __pathDirname(__filename);
|
|
5
|
+
import * as fs from "fs/promises";
|
|
6
|
+
import * as path from "path";
|
|
7
|
+
import { logger } from "../../../core/monitoring/logger.js";
|
|
8
|
+
class CrashRecoverySystem {
|
|
9
|
+
checkpoints = /* @__PURE__ */ new Map();
|
|
10
|
+
crashReports = [];
|
|
11
|
+
recoveryStrategies = [];
|
|
12
|
+
swarmCoordinator;
|
|
13
|
+
checkpointInterval;
|
|
14
|
+
recoveryDir;
|
|
15
|
+
constructor(swarmCoordinator, recoveryDir = ".swarm/recovery") {
|
|
16
|
+
this.swarmCoordinator = swarmCoordinator;
|
|
17
|
+
this.recoveryDir = recoveryDir;
|
|
18
|
+
this.setupRecoveryStrategies();
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Initialize crash recovery system
|
|
22
|
+
*/
|
|
23
|
+
async initialize() {
|
|
24
|
+
await this.ensureRecoveryDirectory();
|
|
25
|
+
await this.loadExistingCheckpoints();
|
|
26
|
+
this.startPeriodicCheckpoints();
|
|
27
|
+
process.on("unhandledRejection", (reason, promise) => {
|
|
28
|
+
this.handleCrash(new Error(`Unhandled Rejection: ${reason}`), {
|
|
29
|
+
type: "unhandled_rejection",
|
|
30
|
+
promise: promise.toString()
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
process.on("uncaughtException", (error) => {
|
|
34
|
+
this.handleCrash(error, { type: "uncaught_exception" });
|
|
35
|
+
});
|
|
36
|
+
logger.info("Crash recovery system initialized");
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Create recovery checkpoint
|
|
40
|
+
*/
|
|
41
|
+
async createCheckpoint(swarmId, reason = "periodic") {
|
|
42
|
+
try {
|
|
43
|
+
const swarmState = this.swarmCoordinator.swarmState;
|
|
44
|
+
const agents = Array.from(
|
|
45
|
+
this.swarmCoordinator.activeAgents.values()
|
|
46
|
+
);
|
|
47
|
+
const checkpoint = {
|
|
48
|
+
id: this.generateId(),
|
|
49
|
+
swarmId,
|
|
50
|
+
timestamp: Date.now(),
|
|
51
|
+
swarmState: { ...swarmState },
|
|
52
|
+
agents: agents.map((agent) => ({ ...agent })),
|
|
53
|
+
tasks: swarmState.tasks || [],
|
|
54
|
+
errorLog: this.crashReports.slice(-10),
|
|
55
|
+
// Last 10 errors
|
|
56
|
+
gitState: await this.captureGitState()
|
|
57
|
+
};
|
|
58
|
+
const checkpointPath = path.join(
|
|
59
|
+
this.recoveryDir,
|
|
60
|
+
`checkpoint-${checkpoint.id}.json`
|
|
61
|
+
);
|
|
62
|
+
await fs.writeFile(checkpointPath, JSON.stringify(checkpoint, null, 2));
|
|
63
|
+
this.checkpoints.set(checkpoint.id, checkpoint);
|
|
64
|
+
logger.info(
|
|
65
|
+
`Created checkpoint ${checkpoint.id} for swarm ${swarmId} (${reason})`
|
|
66
|
+
);
|
|
67
|
+
return checkpoint.id;
|
|
68
|
+
} catch (error) {
|
|
69
|
+
logger.error("Failed to create checkpoint:", error);
|
|
70
|
+
throw error;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Handle crash or error
|
|
75
|
+
*/
|
|
76
|
+
async handleCrash(error, context = {}) {
|
|
77
|
+
const report = {
|
|
78
|
+
id: this.generateId(),
|
|
79
|
+
timestamp: Date.now(),
|
|
80
|
+
agentId: context.agentId,
|
|
81
|
+
errorType: this.classifyError(error, context),
|
|
82
|
+
error,
|
|
83
|
+
context,
|
|
84
|
+
recoveryAction: "",
|
|
85
|
+
severity: this.assessSeverity(error, context),
|
|
86
|
+
resolved: false
|
|
87
|
+
};
|
|
88
|
+
this.crashReports.push(report);
|
|
89
|
+
logger.error(`Crash detected [${report.id}]:`, error);
|
|
90
|
+
const recovered = await this.attemptRecovery(report);
|
|
91
|
+
if (recovered) {
|
|
92
|
+
report.resolved = true;
|
|
93
|
+
report.recoveryAction = "auto_recovered";
|
|
94
|
+
logger.info(`Successfully recovered from crash ${report.id}`);
|
|
95
|
+
} else {
|
|
96
|
+
logger.error(`Failed to recover from crash ${report.id}`);
|
|
97
|
+
if (report.severity === "critical") {
|
|
98
|
+
await this.escalateCriticalFailure(report);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
await this.saveCrashReport(report);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Restore from checkpoint
|
|
105
|
+
*/
|
|
106
|
+
async restoreFromCheckpoint(checkpointId) {
|
|
107
|
+
try {
|
|
108
|
+
const checkpoint = this.checkpoints.get(checkpointId);
|
|
109
|
+
if (!checkpoint) {
|
|
110
|
+
logger.error(`Checkpoint ${checkpointId} not found`);
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
logger.info(`Restoring from checkpoint ${checkpointId}`);
|
|
114
|
+
await this.restoreGitState(checkpoint.gitState);
|
|
115
|
+
if (checkpoint.databaseBackup) {
|
|
116
|
+
await this.restoreDatabase(checkpoint.databaseBackup);
|
|
117
|
+
}
|
|
118
|
+
await this.restoreSwarmState(checkpoint);
|
|
119
|
+
logger.info(`Successfully restored from checkpoint ${checkpointId}`);
|
|
120
|
+
return true;
|
|
121
|
+
} catch (error) {
|
|
122
|
+
logger.error(
|
|
123
|
+
`Failed to restore from checkpoint ${checkpointId}:`,
|
|
124
|
+
error
|
|
125
|
+
);
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Get recovery recommendations
|
|
131
|
+
*/
|
|
132
|
+
getRecoveryRecommendations() {
|
|
133
|
+
const recent = Date.now() - 36e5;
|
|
134
|
+
const recentCheckpoints = Array.from(this.checkpoints.values()).filter((cp) => cp.timestamp > recent).sort((a, b) => b.timestamp - a.timestamp).slice(0, 5);
|
|
135
|
+
const errorCounts = /* @__PURE__ */ new Map();
|
|
136
|
+
const errorTimes = /* @__PURE__ */ new Map();
|
|
137
|
+
for (const report of this.crashReports.filter(
|
|
138
|
+
(r) => r.timestamp > recent
|
|
139
|
+
)) {
|
|
140
|
+
errorCounts.set(
|
|
141
|
+
report.errorType,
|
|
142
|
+
(errorCounts.get(report.errorType) || 0) + 1
|
|
143
|
+
);
|
|
144
|
+
errorTimes.set(
|
|
145
|
+
report.errorType,
|
|
146
|
+
Math.max(errorTimes.get(report.errorType) || 0, report.timestamp)
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
const frequentErrors = Array.from(errorCounts.entries()).map(([type, count]) => ({
|
|
150
|
+
type,
|
|
151
|
+
count,
|
|
152
|
+
lastOccurrence: errorTimes.get(type) || 0
|
|
153
|
+
})).sort((a, b) => b.count - a.count);
|
|
154
|
+
const criticalErrors = this.crashReports.filter(
|
|
155
|
+
(r) => r.severity === "critical" && r.timestamp > recent && !r.resolved
|
|
156
|
+
);
|
|
157
|
+
const systemHealth = criticalErrors.length > 0 ? "critical" : frequentErrors.length > 3 ? "degraded" : "good";
|
|
158
|
+
return {
|
|
159
|
+
recentCheckpoints,
|
|
160
|
+
frequentErrors,
|
|
161
|
+
recoveryActions: this.generateRecoveryActions(frequentErrors),
|
|
162
|
+
systemHealth
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Auto-recovery from common failures
|
|
167
|
+
*/
|
|
168
|
+
async attemptAutoRecovery(swarmId) {
|
|
169
|
+
logger.info(`Attempting auto-recovery for swarm ${swarmId}`);
|
|
170
|
+
try {
|
|
171
|
+
const recentCheckpoint = this.findRecentCheckpoint(swarmId);
|
|
172
|
+
if (recentCheckpoint) {
|
|
173
|
+
logger.info(`Found recent checkpoint: ${recentCheckpoint.id}`);
|
|
174
|
+
return await this.restoreFromCheckpoint(recentCheckpoint.id);
|
|
175
|
+
}
|
|
176
|
+
await this.swarmCoordinator.forceCleanup();
|
|
177
|
+
await this.clearProblematicState();
|
|
178
|
+
logger.info("Restarting swarm with minimal configuration");
|
|
179
|
+
return true;
|
|
180
|
+
} catch (error) {
|
|
181
|
+
logger.error("Auto-recovery failed:", error);
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
async attemptRecovery(report) {
|
|
186
|
+
for (const strategy of this.recoveryStrategies) {
|
|
187
|
+
if (strategy.condition(report.error, report.context)) {
|
|
188
|
+
logger.info(`Applying recovery strategy: ${strategy.errorType}`);
|
|
189
|
+
let retries = 0;
|
|
190
|
+
while (retries < strategy.maxRetries) {
|
|
191
|
+
try {
|
|
192
|
+
const success = await strategy.action(report, this);
|
|
193
|
+
if (success) {
|
|
194
|
+
report.recoveryAction = strategy.errorType;
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
} catch (error) {
|
|
198
|
+
logger.warn(
|
|
199
|
+
`Recovery attempt ${retries + 1} failed:`,
|
|
200
|
+
error
|
|
201
|
+
);
|
|
202
|
+
}
|
|
203
|
+
retries++;
|
|
204
|
+
if (retries < strategy.maxRetries) {
|
|
205
|
+
await this.sleep(strategy.backoffMs * Math.pow(2, retries));
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
classifyError(error, context) {
|
|
213
|
+
const message = error.message.toLowerCase();
|
|
214
|
+
if (message.includes("database") || message.includes("sqlite")) {
|
|
215
|
+
return "database_failure";
|
|
216
|
+
} else if (message.includes("git") || message.includes("branch")) {
|
|
217
|
+
return "git_conflict";
|
|
218
|
+
} else if (message.includes("timeout") || context.timeout) {
|
|
219
|
+
return "agent_timeout";
|
|
220
|
+
} else if (message.includes("memory") || message.includes("heap")) {
|
|
221
|
+
return "memory_overflow";
|
|
222
|
+
} else if (message.includes("network") || message.includes("connect")) {
|
|
223
|
+
return "network_error";
|
|
224
|
+
}
|
|
225
|
+
return "database_failure";
|
|
226
|
+
}
|
|
227
|
+
assessSeverity(error, context) {
|
|
228
|
+
if (context.type === "uncaught_exception") return "critical";
|
|
229
|
+
if (error.message.includes("unhandled")) return "high";
|
|
230
|
+
if (error.message.includes("database")) return "medium";
|
|
231
|
+
return "low";
|
|
232
|
+
}
|
|
233
|
+
setupRecoveryStrategies() {
|
|
234
|
+
this.recoveryStrategies = [
|
|
235
|
+
{
|
|
236
|
+
errorType: "database_failure",
|
|
237
|
+
condition: (error) => error.message.includes("database") || error.message.includes("sqlite"),
|
|
238
|
+
action: async (report, recovery) => {
|
|
239
|
+
logger.info("Attempting database recovery");
|
|
240
|
+
try {
|
|
241
|
+
await recovery.clearProblematicState();
|
|
242
|
+
return true;
|
|
243
|
+
} catch {
|
|
244
|
+
return false;
|
|
245
|
+
}
|
|
246
|
+
},
|
|
247
|
+
maxRetries: 3,
|
|
248
|
+
backoffMs: 1e3
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
errorType: "git_conflict",
|
|
252
|
+
condition: (error) => error.message.includes("git") || error.message.includes("branch"),
|
|
253
|
+
action: async (report, recovery) => {
|
|
254
|
+
logger.info("Attempting git conflict resolution");
|
|
255
|
+
try {
|
|
256
|
+
const { execSync } = await import("child_process");
|
|
257
|
+
execSync("git checkout main", { stdio: "ignore" });
|
|
258
|
+
execSync("git reset --hard HEAD", { stdio: "ignore" });
|
|
259
|
+
return true;
|
|
260
|
+
} catch {
|
|
261
|
+
return false;
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
maxRetries: 2,
|
|
265
|
+
backoffMs: 500
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
errorType: "agent_timeout",
|
|
269
|
+
condition: (error, context) => error.message.includes("timeout") || context.timeout,
|
|
270
|
+
action: async (report, recovery) => {
|
|
271
|
+
logger.info("Attempting agent timeout recovery");
|
|
272
|
+
await recovery.swarmCoordinator.forceCleanup();
|
|
273
|
+
return true;
|
|
274
|
+
},
|
|
275
|
+
maxRetries: 1,
|
|
276
|
+
backoffMs: 2e3
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
errorType: "memory_overflow",
|
|
280
|
+
condition: (error) => error.message.includes("memory") || error.message.includes("heap"),
|
|
281
|
+
action: async (report, recovery) => {
|
|
282
|
+
logger.info("Attempting memory recovery");
|
|
283
|
+
if (global.gc) global.gc();
|
|
284
|
+
await recovery.cleanupOldCheckpoints(5);
|
|
285
|
+
return true;
|
|
286
|
+
},
|
|
287
|
+
maxRetries: 1,
|
|
288
|
+
backoffMs: 5e3
|
|
289
|
+
}
|
|
290
|
+
];
|
|
291
|
+
}
|
|
292
|
+
async captureGitState() {
|
|
293
|
+
try {
|
|
294
|
+
const { execSync } = await import("child_process");
|
|
295
|
+
const currentBranch = execSync("git branch --show-current", {
|
|
296
|
+
encoding: "utf8"
|
|
297
|
+
}).trim();
|
|
298
|
+
const statusOutput = execSync("git status --porcelain", {
|
|
299
|
+
encoding: "utf8"
|
|
300
|
+
});
|
|
301
|
+
const uncommittedChanges = statusOutput.trim().split("\n").filter(Boolean);
|
|
302
|
+
const branchesOutput = execSync("git branch", { encoding: "utf8" });
|
|
303
|
+
const activeBranches = branchesOutput.split("\n").map((line) => line.trim().replace(/^\*?\s*/, "")).filter(Boolean);
|
|
304
|
+
return {
|
|
305
|
+
currentBranch,
|
|
306
|
+
uncommittedChanges,
|
|
307
|
+
activeBranches
|
|
308
|
+
};
|
|
309
|
+
} catch (error) {
|
|
310
|
+
logger.warn("Failed to capture git state:", error);
|
|
311
|
+
return {
|
|
312
|
+
currentBranch: "unknown",
|
|
313
|
+
uncommittedChanges: [],
|
|
314
|
+
activeBranches: []
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
async restoreGitState(gitState) {
|
|
319
|
+
try {
|
|
320
|
+
const { execSync } = await import("child_process");
|
|
321
|
+
execSync(`git checkout ${gitState.currentBranch}`, { stdio: "ignore" });
|
|
322
|
+
logger.info(`Restored git branch: ${gitState.currentBranch}`);
|
|
323
|
+
} catch (error) {
|
|
324
|
+
logger.warn("Failed to restore git state:", error);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
async restoreDatabase(backupPath) {
|
|
328
|
+
logger.info(`Restoring database from ${backupPath}`);
|
|
329
|
+
}
|
|
330
|
+
async restoreSwarmState(checkpoint) {
|
|
331
|
+
logger.info(`Restoring swarm state from checkpoint ${checkpoint.id}`);
|
|
332
|
+
}
|
|
333
|
+
findRecentCheckpoint(swarmId) {
|
|
334
|
+
const recent = Date.now() - 18e5;
|
|
335
|
+
return Array.from(this.checkpoints.values()).filter((cp) => cp.swarmId === swarmId && cp.timestamp > recent).sort((a, b) => b.timestamp - a.timestamp)[0] || null;
|
|
336
|
+
}
|
|
337
|
+
async clearProblematicState() {
|
|
338
|
+
try {
|
|
339
|
+
await this.cleanupTempFiles();
|
|
340
|
+
logger.info("Cleared problematic state");
|
|
341
|
+
} catch (error) {
|
|
342
|
+
logger.error("Failed to clear problematic state:", error);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
async cleanupTempFiles() {
|
|
346
|
+
}
|
|
347
|
+
async cleanupOldCheckpoints(keepCount) {
|
|
348
|
+
const sorted = Array.from(this.checkpoints.values()).sort(
|
|
349
|
+
(a, b) => b.timestamp - a.timestamp
|
|
350
|
+
);
|
|
351
|
+
const toDelete = sorted.slice(keepCount);
|
|
352
|
+
for (const checkpoint of toDelete) {
|
|
353
|
+
try {
|
|
354
|
+
const checkpointPath = path.join(
|
|
355
|
+
this.recoveryDir,
|
|
356
|
+
`checkpoint-${checkpoint.id}.json`
|
|
357
|
+
);
|
|
358
|
+
await fs.unlink(checkpointPath);
|
|
359
|
+
this.checkpoints.delete(checkpoint.id);
|
|
360
|
+
} catch (error) {
|
|
361
|
+
logger.warn(
|
|
362
|
+
`Failed to delete checkpoint ${checkpoint.id}:`,
|
|
363
|
+
error
|
|
364
|
+
);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
logger.info(`Cleaned up ${toDelete.length} old checkpoints`);
|
|
368
|
+
}
|
|
369
|
+
async escalateCriticalFailure(report) {
|
|
370
|
+
logger.error(`CRITICAL FAILURE [${report.id}]: ${report.error.message}`);
|
|
371
|
+
try {
|
|
372
|
+
const swarmState = this.swarmCoordinator.swarmState;
|
|
373
|
+
if (swarmState?.id) {
|
|
374
|
+
await this.createCheckpoint(swarmState.id, "critical_failure");
|
|
375
|
+
}
|
|
376
|
+
} catch {
|
|
377
|
+
logger.error("Failed to create emergency checkpoint");
|
|
378
|
+
}
|
|
379
|
+
await this.swarmCoordinator.forceCleanup();
|
|
380
|
+
}
|
|
381
|
+
generateRecoveryActions(frequentErrors) {
|
|
382
|
+
const actions = [];
|
|
383
|
+
for (const { type, count } of frequentErrors) {
|
|
384
|
+
if (count > 3) {
|
|
385
|
+
switch (type) {
|
|
386
|
+
case "database_failure":
|
|
387
|
+
actions.push("Consider upgrading database configuration");
|
|
388
|
+
break;
|
|
389
|
+
case "git_conflict":
|
|
390
|
+
actions.push("Review git workflow and branch strategy");
|
|
391
|
+
break;
|
|
392
|
+
case "agent_timeout":
|
|
393
|
+
actions.push(
|
|
394
|
+
"Increase agent timeout limits or reduce task complexity"
|
|
395
|
+
);
|
|
396
|
+
break;
|
|
397
|
+
case "memory_overflow":
|
|
398
|
+
actions.push("Monitor memory usage and consider increasing limits");
|
|
399
|
+
break;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
return actions;
|
|
404
|
+
}
|
|
405
|
+
startPeriodicCheckpoints() {
|
|
406
|
+
this.checkpointInterval = setInterval(async () => {
|
|
407
|
+
const swarmState = this.swarmCoordinator.swarmState;
|
|
408
|
+
if (swarmState?.id && swarmState.status === "active") {
|
|
409
|
+
await this.createCheckpoint(swarmState.id, "periodic");
|
|
410
|
+
}
|
|
411
|
+
}, 3e5);
|
|
412
|
+
}
|
|
413
|
+
async ensureRecoveryDirectory() {
|
|
414
|
+
try {
|
|
415
|
+
await fs.mkdir(this.recoveryDir, { recursive: true });
|
|
416
|
+
} catch (error) {
|
|
417
|
+
logger.error("Failed to create recovery directory:", error);
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
async loadExistingCheckpoints() {
|
|
421
|
+
try {
|
|
422
|
+
const files = await fs.readdir(this.recoveryDir);
|
|
423
|
+
for (const file of files) {
|
|
424
|
+
if (file.startsWith("checkpoint-") && file.endsWith(".json")) {
|
|
425
|
+
try {
|
|
426
|
+
const content = await fs.readFile(
|
|
427
|
+
path.join(this.recoveryDir, file),
|
|
428
|
+
"utf8"
|
|
429
|
+
);
|
|
430
|
+
const checkpoint = JSON.parse(content);
|
|
431
|
+
this.checkpoints.set(checkpoint.id, checkpoint);
|
|
432
|
+
} catch (error) {
|
|
433
|
+
logger.warn(`Failed to load checkpoint ${file}:`, error);
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
logger.info(`Loaded ${this.checkpoints.size} existing checkpoints`);
|
|
438
|
+
} catch (error) {
|
|
439
|
+
logger.warn("Failed to load existing checkpoints:", error);
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
async saveCrashReport(report) {
|
|
443
|
+
try {
|
|
444
|
+
const reportPath = path.join(this.recoveryDir, `crash-${report.id}.json`);
|
|
445
|
+
await fs.writeFile(reportPath, JSON.stringify(report, null, 2));
|
|
446
|
+
} catch (error) {
|
|
447
|
+
logger.error("Failed to save crash report:", error);
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
sleep(ms) {
|
|
451
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
452
|
+
}
|
|
453
|
+
generateId() {
|
|
454
|
+
return `recovery_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
var crash_recovery_default = CrashRecoverySystem;
|
|
458
|
+
export {
|
|
459
|
+
CrashRecoverySystem,
|
|
460
|
+
crash_recovery_default as default
|
|
461
|
+
};
|
|
462
|
+
//# sourceMappingURL=crash-recovery.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/integrations/ralph/recovery/crash-recovery.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Crash Recovery System for Ralph Swarms\n * Handles failures, provides auto-recovery, and maintains swarm resilience\n */\n\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { logger } from '../../../core/monitoring/logger.js';\nimport { SwarmCoordinator } from '../swarm/swarm-coordinator.js';\nimport { Agent, SwarmState } from '../types.js';\n\nexport interface RecoveryCheckpoint {\n id: string;\n swarmId: string;\n timestamp: number;\n swarmState: SwarmState;\n agents: Agent[];\n tasks: any[];\n errorLog: CrashReport[];\n databaseBackup?: string;\n gitState: {\n currentBranch: string;\n uncommittedChanges: string[];\n activeBranches: string[];\n };\n}\n\nexport interface CrashReport {\n id: string;\n timestamp: number;\n agentId?: string;\n errorType:\n | 'database_failure'\n | 'git_conflict'\n | 'agent_timeout'\n | 'memory_overflow'\n | 'network_error';\n error: Error;\n context: any;\n recoveryAction: string;\n severity: 'low' | 'medium' | 'high' | 'critical';\n resolved: boolean;\n}\n\nexport interface RecoveryStrategy {\n errorType: string;\n condition: (error: Error, context: any) => boolean;\n action: (\n report: CrashReport,\n recovery: CrashRecoverySystem\n ) => Promise<boolean>;\n maxRetries: number;\n backoffMs: number;\n}\n\nexport class CrashRecoverySystem {\n private checkpoints: Map<string, RecoveryCheckpoint> = new Map();\n private crashReports: CrashReport[] = [];\n private recoveryStrategies: RecoveryStrategy[] = [];\n private swarmCoordinator: SwarmCoordinator;\n private checkpointInterval?: NodeJS.Timeout;\n private recoveryDir: string;\n\n constructor(\n swarmCoordinator: SwarmCoordinator,\n recoveryDir: string = '.swarm/recovery'\n ) {\n this.swarmCoordinator = swarmCoordinator;\n this.recoveryDir = recoveryDir;\n this.setupRecoveryStrategies();\n }\n\n /**\n * Initialize crash recovery system\n */\n async initialize(): Promise<void> {\n await this.ensureRecoveryDirectory();\n await this.loadExistingCheckpoints();\n this.startPeriodicCheckpoints();\n\n // Set up global error handlers\n process.on('unhandledRejection', (reason, promise) => {\n this.handleCrash(new Error(`Unhandled Rejection: ${reason}`), {\n type: 'unhandled_rejection',\n promise: promise.toString(),\n });\n });\n\n process.on('uncaughtException', (error) => {\n this.handleCrash(error, { type: 'uncaught_exception' });\n });\n\n logger.info('Crash recovery system initialized');\n }\n\n /**\n * Create recovery checkpoint\n */\n async createCheckpoint(\n swarmId: string,\n reason: string = 'periodic'\n ): Promise<string> {\n try {\n const swarmState = (this.swarmCoordinator as any).swarmState;\n const agents = Array.from(\n (this.swarmCoordinator as any).activeAgents.values()\n );\n\n const checkpoint: RecoveryCheckpoint = {\n id: this.generateId(),\n swarmId,\n timestamp: Date.now(),\n swarmState: { ...swarmState },\n agents: agents.map((agent) => ({ ...agent })),\n tasks: swarmState.tasks || [],\n errorLog: this.crashReports.slice(-10), // Last 10 errors\n gitState: await this.captureGitState(),\n };\n\n // Save to disk\n const checkpointPath = path.join(\n this.recoveryDir,\n `checkpoint-${checkpoint.id}.json`\n );\n await fs.writeFile(checkpointPath, JSON.stringify(checkpoint, null, 2));\n\n this.checkpoints.set(checkpoint.id, checkpoint);\n\n logger.info(\n `Created checkpoint ${checkpoint.id} for swarm ${swarmId} (${reason})`\n );\n return checkpoint.id;\n } catch (error) {\n logger.error('Failed to create checkpoint:', error as Error);\n throw error;\n }\n }\n\n /**\n * Handle crash or error\n */\n async handleCrash(error: Error, context: any = {}): Promise<void> {\n const report: CrashReport = {\n id: this.generateId(),\n timestamp: Date.now(),\n agentId: context.agentId,\n errorType: this.classifyError(error, context),\n error,\n context,\n recoveryAction: '',\n severity: this.assessSeverity(error, context),\n resolved: false,\n };\n\n this.crashReports.push(report);\n logger.error(`Crash detected [${report.id}]:`, error);\n\n // Attempt automatic recovery\n const recovered = await this.attemptRecovery(report);\n\n if (recovered) {\n report.resolved = true;\n report.recoveryAction = 'auto_recovered';\n logger.info(`Successfully recovered from crash ${report.id}`);\n } else {\n logger.error(`Failed to recover from crash ${report.id}`);\n\n if (report.severity === 'critical') {\n await this.escalateCriticalFailure(report);\n }\n }\n\n // Save crash report\n await this.saveCrashReport(report);\n }\n\n /**\n * Restore from checkpoint\n */\n async restoreFromCheckpoint(checkpointId: string): Promise<boolean> {\n try {\n const checkpoint = this.checkpoints.get(checkpointId);\n if (!checkpoint) {\n logger.error(`Checkpoint ${checkpointId} not found`);\n return false;\n }\n\n logger.info(`Restoring from checkpoint ${checkpointId}`);\n\n // Restore git state\n await this.restoreGitState(checkpoint.gitState);\n\n // Restore database if backup exists\n if (checkpoint.databaseBackup) {\n await this.restoreDatabase(checkpoint.databaseBackup);\n }\n\n // Restore swarm state\n await this.restoreSwarmState(checkpoint);\n\n logger.info(`Successfully restored from checkpoint ${checkpointId}`);\n return true;\n } catch (error) {\n logger.error(\n `Failed to restore from checkpoint ${checkpointId}:`,\n error as Error\n );\n return false;\n }\n }\n\n /**\n * Get recovery recommendations\n */\n getRecoveryRecommendations(): {\n recentCheckpoints: RecoveryCheckpoint[];\n frequentErrors: Array<{\n type: string;\n count: number;\n lastOccurrence: number;\n }>;\n recoveryActions: string[];\n systemHealth: 'good' | 'degraded' | 'critical';\n } {\n const recent = Date.now() - 3600000; // Last hour\n const recentCheckpoints = Array.from(this.checkpoints.values())\n .filter((cp) => cp.timestamp > recent)\n .sort((a, b) => b.timestamp - a.timestamp)\n .slice(0, 5);\n\n const errorCounts = new Map<string, number>();\n const errorTimes = new Map<string, number>();\n\n for (const report of this.crashReports.filter(\n (r) => r.timestamp > recent\n )) {\n errorCounts.set(\n report.errorType,\n (errorCounts.get(report.errorType) || 0) + 1\n );\n errorTimes.set(\n report.errorType,\n Math.max(errorTimes.get(report.errorType) || 0, report.timestamp)\n );\n }\n\n const frequentErrors = Array.from(errorCounts.entries())\n .map(([type, count]) => ({\n type,\n count,\n lastOccurrence: errorTimes.get(type) || 0,\n }))\n .sort((a, b) => b.count - a.count);\n\n const criticalErrors = this.crashReports.filter(\n (r) => r.severity === 'critical' && r.timestamp > recent && !r.resolved\n );\n\n const systemHealth =\n criticalErrors.length > 0\n ? 'critical'\n : frequentErrors.length > 3\n ? 'degraded'\n : 'good';\n\n return {\n recentCheckpoints,\n frequentErrors,\n recoveryActions: this.generateRecoveryActions(frequentErrors),\n systemHealth,\n };\n }\n\n /**\n * Auto-recovery from common failures\n */\n async attemptAutoRecovery(swarmId: string): Promise<boolean> {\n logger.info(`Attempting auto-recovery for swarm ${swarmId}`);\n\n try {\n // 1. Check for recent checkpoint\n const recentCheckpoint = this.findRecentCheckpoint(swarmId);\n if (recentCheckpoint) {\n logger.info(`Found recent checkpoint: ${recentCheckpoint.id}`);\n return await this.restoreFromCheckpoint(recentCheckpoint.id);\n }\n\n // 2. Attempt graceful restart\n await this.swarmCoordinator.forceCleanup();\n\n // 3. Clear problematic state\n await this.clearProblematicState();\n\n // 4. Restart with minimal configuration\n logger.info('Restarting swarm with minimal configuration');\n return true;\n } catch (error) {\n logger.error('Auto-recovery failed:', error as Error);\n return false;\n }\n }\n\n private async attemptRecovery(report: CrashReport): Promise<boolean> {\n // Find appropriate recovery strategy\n for (const strategy of this.recoveryStrategies) {\n if (strategy.condition(report.error, report.context)) {\n logger.info(`Applying recovery strategy: ${strategy.errorType}`);\n\n let retries = 0;\n while (retries < strategy.maxRetries) {\n try {\n const success = await strategy.action(report, this);\n if (success) {\n report.recoveryAction = strategy.errorType;\n return true;\n }\n } catch (error) {\n logger.warn(\n `Recovery attempt ${retries + 1} failed:`,\n error as Error\n );\n }\n\n retries++;\n if (retries < strategy.maxRetries) {\n await this.sleep(strategy.backoffMs * Math.pow(2, retries));\n }\n }\n }\n }\n\n return false;\n }\n\n private classifyError(error: Error, context: any): CrashReport['errorType'] {\n const message = error.message.toLowerCase();\n\n if (message.includes('database') || message.includes('sqlite')) {\n return 'database_failure';\n } else if (message.includes('git') || message.includes('branch')) {\n return 'git_conflict';\n } else if (message.includes('timeout') || context.timeout) {\n return 'agent_timeout';\n } else if (message.includes('memory') || message.includes('heap')) {\n return 'memory_overflow';\n } else if (message.includes('network') || message.includes('connect')) {\n return 'network_error';\n }\n\n return 'database_failure'; // Default\n }\n\n private assessSeverity(error: Error, context: any): CrashReport['severity'] {\n if (context.type === 'uncaught_exception') return 'critical';\n if (error.message.includes('unhandled')) return 'high';\n if (error.message.includes('database')) return 'medium';\n return 'low';\n }\n\n private setupRecoveryStrategies(): void {\n this.recoveryStrategies = [\n {\n errorType: 'database_failure',\n condition: (error) =>\n error.message.includes('database') ||\n error.message.includes('sqlite'),\n action: async (report, recovery) => {\n // Reinitialize database connection\n logger.info('Attempting database recovery');\n\n // Create new database adapter\n try {\n await recovery.clearProblematicState();\n return true;\n } catch {\n return false;\n }\n },\n maxRetries: 3,\n backoffMs: 1000,\n },\n {\n errorType: 'git_conflict',\n condition: (error) =>\n error.message.includes('git') || error.message.includes('branch'),\n action: async (report, recovery) => {\n logger.info('Attempting git conflict resolution');\n\n try {\n // Force cleanup git state\n const { execSync } = await import('child_process');\n execSync('git checkout main', { stdio: 'ignore' });\n execSync('git reset --hard HEAD', { stdio: 'ignore' });\n return true;\n } catch {\n return false;\n }\n },\n maxRetries: 2,\n backoffMs: 500,\n },\n {\n errorType: 'agent_timeout',\n condition: (error, context) =>\n error.message.includes('timeout') || context.timeout,\n action: async (report, recovery) => {\n logger.info('Attempting agent timeout recovery');\n\n // Force cleanup stuck agents\n await recovery.swarmCoordinator.forceCleanup();\n return true;\n },\n maxRetries: 1,\n backoffMs: 2000,\n },\n {\n errorType: 'memory_overflow',\n condition: (error) =>\n error.message.includes('memory') || error.message.includes('heap'),\n action: async (report, recovery) => {\n logger.info('Attempting memory recovery');\n\n // Force garbage collection\n if (global.gc) global.gc();\n\n // Cleanup old checkpoints\n await recovery.cleanupOldCheckpoints(5);\n return true;\n },\n maxRetries: 1,\n backoffMs: 5000,\n },\n ];\n }\n\n private async captureGitState(): Promise<RecoveryCheckpoint['gitState']> {\n try {\n const { execSync } = await import('child_process');\n\n const currentBranch = execSync('git branch --show-current', {\n encoding: 'utf8',\n }).trim();\n const statusOutput = execSync('git status --porcelain', {\n encoding: 'utf8',\n });\n const uncommittedChanges = statusOutput\n .trim()\n .split('\\n')\n .filter(Boolean);\n const branchesOutput = execSync('git branch', { encoding: 'utf8' });\n const activeBranches = branchesOutput\n .split('\\n')\n .map((line) => line.trim().replace(/^\\*?\\s*/, ''))\n .filter(Boolean);\n\n return {\n currentBranch,\n uncommittedChanges,\n activeBranches,\n };\n } catch (error) {\n logger.warn('Failed to capture git state:', error as Error);\n return {\n currentBranch: 'unknown',\n uncommittedChanges: [],\n activeBranches: [],\n };\n }\n }\n\n private async restoreGitState(\n gitState: RecoveryCheckpoint['gitState']\n ): Promise<void> {\n try {\n const { execSync } = await import('child_process');\n execSync(`git checkout ${gitState.currentBranch}`, { stdio: 'ignore' });\n logger.info(`Restored git branch: ${gitState.currentBranch}`);\n } catch (error) {\n logger.warn('Failed to restore git state:', error as Error);\n }\n }\n\n private async restoreDatabase(backupPath: string): Promise<void> {\n // Implementation would restore database from backup\n logger.info(`Restoring database from ${backupPath}`);\n }\n\n private async restoreSwarmState(\n checkpoint: RecoveryCheckpoint\n ): Promise<void> {\n // Implementation would restore swarm coordinator state\n logger.info(`Restoring swarm state from checkpoint ${checkpoint.id}`);\n }\n\n private findRecentCheckpoint(swarmId: string): RecoveryCheckpoint | null {\n const recent = Date.now() - 1800000; // 30 minutes\n\n return (\n Array.from(this.checkpoints.values())\n .filter((cp) => cp.swarmId === swarmId && cp.timestamp > recent)\n .sort((a, b) => b.timestamp - a.timestamp)[0] || null\n );\n }\n\n private async clearProblematicState(): Promise<void> {\n try {\n // Clear temporary files\n await this.cleanupTempFiles();\n\n // Reset any stuck locks\n // Implementation specific cleanup\n\n logger.info('Cleared problematic state');\n } catch (error) {\n logger.error('Failed to clear problematic state:', error as Error);\n }\n }\n\n private async cleanupTempFiles(): Promise<void> {\n // Cleanup implementation\n }\n\n private async cleanupOldCheckpoints(keepCount: number): Promise<void> {\n const sorted = Array.from(this.checkpoints.values()).sort(\n (a, b) => b.timestamp - a.timestamp\n );\n\n const toDelete = sorted.slice(keepCount);\n\n for (const checkpoint of toDelete) {\n try {\n const checkpointPath = path.join(\n this.recoveryDir,\n `checkpoint-${checkpoint.id}.json`\n );\n await fs.unlink(checkpointPath);\n this.checkpoints.delete(checkpoint.id);\n } catch (error) {\n logger.warn(\n `Failed to delete checkpoint ${checkpoint.id}:`,\n error as Error\n );\n }\n }\n\n logger.info(`Cleaned up ${toDelete.length} old checkpoints`);\n }\n\n private async escalateCriticalFailure(report: CrashReport): Promise<void> {\n logger.error(`CRITICAL FAILURE [${report.id}]: ${report.error.message}`);\n\n // Create emergency checkpoint\n try {\n const swarmState = (this.swarmCoordinator as any).swarmState;\n if (swarmState?.id) {\n await this.createCheckpoint(swarmState.id, 'critical_failure');\n }\n } catch {\n logger.error('Failed to create emergency checkpoint');\n }\n\n // Graceful shutdown\n await this.swarmCoordinator.forceCleanup();\n }\n\n private generateRecoveryActions(\n frequentErrors: Array<{ type: string; count: number }>\n ): string[] {\n const actions: string[] = [];\n\n for (const { type, count } of frequentErrors) {\n if (count > 3) {\n switch (type) {\n case 'database_failure':\n actions.push('Consider upgrading database configuration');\n break;\n case 'git_conflict':\n actions.push('Review git workflow and branch strategy');\n break;\n case 'agent_timeout':\n actions.push(\n 'Increase agent timeout limits or reduce task complexity'\n );\n break;\n case 'memory_overflow':\n actions.push('Monitor memory usage and consider increasing limits');\n break;\n }\n }\n }\n\n return actions;\n }\n\n private startPeriodicCheckpoints(): void {\n this.checkpointInterval = setInterval(async () => {\n const swarmState = (this.swarmCoordinator as any).swarmState;\n if (swarmState?.id && swarmState.status === 'active') {\n await this.createCheckpoint(swarmState.id, 'periodic');\n }\n }, 300000); // Every 5 minutes\n }\n\n private async ensureRecoveryDirectory(): Promise<void> {\n try {\n await fs.mkdir(this.recoveryDir, { recursive: true });\n } catch (error) {\n logger.error('Failed to create recovery directory:', error as Error);\n }\n }\n\n private async loadExistingCheckpoints(): Promise<void> {\n try {\n const files = await fs.readdir(this.recoveryDir);\n\n for (const file of files) {\n if (file.startsWith('checkpoint-') && file.endsWith('.json')) {\n try {\n const content = await fs.readFile(\n path.join(this.recoveryDir, file),\n 'utf8'\n );\n const checkpoint: RecoveryCheckpoint = JSON.parse(content);\n this.checkpoints.set(checkpoint.id, checkpoint);\n } catch (error) {\n logger.warn(`Failed to load checkpoint ${file}:`, error as Error);\n }\n }\n }\n\n logger.info(`Loaded ${this.checkpoints.size} existing checkpoints`);\n } catch (error) {\n logger.warn('Failed to load existing checkpoints:', error as Error);\n }\n }\n\n private async saveCrashReport(report: CrashReport): Promise<void> {\n try {\n const reportPath = path.join(this.recoveryDir, `crash-${report.id}.json`);\n await fs.writeFile(reportPath, JSON.stringify(report, null, 2));\n } catch (error) {\n logger.error('Failed to save crash report:', error as Error);\n }\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n private generateId(): string {\n return `recovery_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n }\n}\n\nexport default CrashRecoverySystem;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|