@stackmemoryai/stackmemory 0.8.1 → 1.0.1
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 +64 -0
- package/README.md +81 -273
- package/dist/src/agents/core/agent-task-manager.js +0 -1
- package/dist/src/agents/verifiers/base-verifier.js +0 -1
- package/dist/src/agents/verifiers/formatter-verifier.js +0 -1
- package/dist/src/agents/verifiers/llm-judge.js +0 -1
- package/dist/src/cli/auto-detect.js +0 -1
- package/dist/src/cli/claude-sm-danger.js +0 -1
- package/dist/src/cli/claude-sm.js +9 -1
- package/dist/src/cli/codex-sm-danger.js +0 -1
- package/dist/src/cli/codex-sm.js +9 -1
- package/dist/src/cli/commands/api.js +0 -1
- package/dist/src/cli/commands/auto-background.js +0 -1
- package/dist/src/cli/commands/cleanup-processes.js +0 -1
- package/dist/src/cli/commands/clear.js +0 -1
- package/dist/src/cli/commands/config.js +0 -1
- package/dist/src/cli/commands/context-rehydrate.js +0 -1
- package/dist/src/cli/commands/context.js +0 -1
- package/dist/src/cli/commands/daemon.js +0 -1
- package/dist/src/cli/commands/dashboard.js +4 -5
- package/dist/src/cli/commands/db.js +0 -1
- package/dist/src/cli/commands/decision.js +0 -1
- package/dist/src/cli/commands/discovery.js +0 -1
- package/dist/src/cli/commands/handoff.js +0 -1
- package/dist/src/cli/commands/hooks.js +0 -1
- package/dist/src/cli/commands/linear.js +0 -1
- package/dist/src/cli/commands/log.js +0 -1
- package/dist/src/cli/commands/login.js +0 -1
- package/dist/src/cli/commands/migrate.js +0 -1
- package/dist/src/cli/commands/model.js +0 -1
- package/dist/src/cli/commands/onboard.js +0 -1
- package/dist/src/cli/commands/ping.js +0 -1
- package/dist/src/cli/commands/projects.js +0 -1
- package/dist/src/cli/commands/ralph.js +0 -1
- package/dist/src/cli/commands/retrieval.js +0 -1
- package/dist/src/cli/commands/search.js +0 -1
- package/dist/src/cli/commands/service.js +0 -1
- package/dist/src/cli/commands/session.js +0 -1
- package/dist/src/cli/commands/setup.js +0 -4
- package/dist/src/cli/commands/shell.js +0 -1
- package/dist/src/cli/commands/signup.js +0 -1
- package/dist/src/cli/commands/skills.js +4 -3
- package/dist/src/cli/commands/storage-tier.js +0 -1
- package/dist/src/cli/commands/sweep.js +0 -1
- package/dist/src/cli/commands/tasks.js +0 -1
- package/dist/src/cli/commands/worktree.js +10 -5
- package/dist/src/cli/index.js +8 -5
- package/dist/src/cli/opencode-sm.js +0 -1
- package/dist/src/cli/utils/viewer.js +0 -1
- package/dist/src/core/config/config-manager.js +0 -1
- package/dist/src/core/config/feature-flags.js +0 -1
- package/dist/src/core/config/storage-config.js +0 -1
- package/dist/src/core/config/types.js +0 -1
- package/dist/src/core/context/auto-context.js +0 -1
- package/dist/src/core/context/dual-stack-manager.js +0 -1
- package/dist/src/core/context/enhanced-rehydration.js +0 -2
- package/dist/src/core/context/frame-database.js +60 -6
- package/dist/src/core/context/frame-digest.js +0 -1
- package/dist/src/core/context/frame-handoff-manager.js +0 -1
- package/dist/src/core/context/frame-lifecycle-hooks.js +0 -1
- package/dist/src/core/context/frame-recovery.js +0 -1
- package/dist/src/core/context/frame-stack.js +0 -1
- package/dist/src/core/context/frame-types.js +0 -1
- package/dist/src/core/context/index.js +0 -1
- package/dist/src/core/context/permission-manager.js +0 -1
- package/dist/src/core/context/recursive-context-manager.js +3 -2
- package/dist/src/core/context/refactored-frame-manager.js +0 -1
- package/dist/src/core/context/shared-context-layer.js +0 -1
- package/dist/src/core/context/stack-merge-resolver.js +0 -1
- package/dist/src/core/context/validation.js +0 -1
- package/dist/src/core/database/batch-operations.js +0 -1
- package/dist/src/core/database/connection-pool.js +0 -1
- package/dist/src/core/database/database-adapter.js +0 -1
- package/dist/src/core/database/embedding-provider-factory.js +0 -1
- package/dist/src/core/database/embedding-provider.js +0 -1
- package/dist/src/core/database/migration-manager.js +0 -1
- package/dist/src/core/database/ollama-embedding-provider.js +0 -1
- package/dist/src/core/database/openai-embedding-provider.js +0 -1
- package/dist/src/core/database/query-cache.js +0 -1
- package/dist/src/core/database/query-router.js +0 -1
- package/dist/src/core/database/sqlite-adapter.js +18 -108
- package/dist/src/core/database/transformers-embedding-provider.js +0 -1
- package/dist/src/core/digest/enhanced-hybrid-digest.js +0 -1
- package/dist/src/core/digest/frame-digest-integration.js +0 -1
- package/dist/src/core/digest/hybrid-digest-generator.js +0 -1
- package/dist/src/core/digest/index.js +0 -1
- package/dist/src/core/digest/types.js +0 -1
- package/dist/src/core/errors/error-utils.js +0 -1
- package/dist/src/core/errors/index.js +0 -1
- package/dist/src/core/errors/recovery.js +0 -1
- package/dist/src/core/execution/parallel-executor.js +0 -1
- package/dist/src/core/extensions/custom-tools.js +0 -1
- package/dist/src/core/extensions/index.js +0 -1
- package/dist/src/core/extensions/loader.js +0 -1
- package/dist/src/core/extensions/plugin-system.js +0 -1
- package/dist/src/core/extensions/provider-adapter.js +0 -1
- package/dist/src/core/extensions/sandbox-runtime.js +0 -1
- package/dist/src/core/extensions/types.js +0 -1
- package/dist/src/core/frame/workflow-templates.js +0 -1
- package/dist/src/core/merge/conflict-detector.js +0 -1
- package/dist/src/core/merge/index.js +0 -1
- package/dist/src/core/merge/resolution-engine.js +0 -1
- package/dist/src/core/merge/stack-diff.js +0 -1
- package/dist/src/core/merge/types.js +0 -1
- package/dist/src/core/merge/unified-merge-resolver.js +0 -1
- package/dist/src/core/models/fallback-monitor.js +0 -1
- package/dist/src/core/models/model-router.js +0 -1
- package/dist/src/core/monitoring/error-handler.js +0 -1
- package/dist/src/core/monitoring/logger.js +0 -1
- package/dist/src/core/monitoring/metrics.js +0 -1
- package/dist/src/core/monitoring/progress-tracker.js +0 -1
- package/dist/src/core/monitoring/session-monitor.js +0 -1
- package/dist/src/core/performance/context-cache.js +0 -1
- package/dist/src/core/performance/index.js +0 -1
- package/dist/src/core/performance/lazy-context-loader.js +3 -8
- package/dist/src/core/performance/monitor.js +0 -1
- package/dist/src/core/performance/optimized-frame-context.js +0 -1
- package/dist/src/core/performance/performance-benchmark.js +0 -1
- package/dist/src/core/performance/performance-profiler.js +0 -1
- package/dist/src/core/performance/streaming-jsonl-parser.js +0 -1
- package/dist/src/core/persistence/postgres-adapter.js +0 -1
- package/dist/src/core/projects/project-isolation.js +0 -1
- package/dist/src/core/projects/project-manager.js +0 -1
- package/dist/src/core/query/query-parser.js +0 -1
- package/dist/src/core/query/query-templates.js +0 -1
- package/dist/src/core/retrieval/context-retriever.js +0 -1
- package/dist/src/core/retrieval/index.js +0 -1
- package/dist/src/core/retrieval/llm-context-retrieval.js +0 -1
- package/dist/src/core/retrieval/llm-provider.js +0 -1
- package/dist/src/core/retrieval/privacy-filter.js +0 -1
- package/dist/src/core/retrieval/retrieval-audit.js +0 -1
- package/dist/src/core/retrieval/summary-generator.js +15 -6
- package/dist/src/core/retrieval/types.js +0 -1
- package/dist/src/core/retrieval/unified-context-assembler.js +0 -1
- package/dist/src/core/security/index.js +0 -1
- package/dist/src/core/security/input-sanitizer.js +0 -1
- package/dist/src/core/session/clear-survival.js +0 -1
- package/dist/src/core/session/enhanced-handoff.js +0 -1
- package/dist/src/core/session/handoff-generator.js +0 -1
- package/dist/src/core/session/index.js +0 -1
- package/dist/src/core/session/session-manager.js +0 -1
- package/dist/src/core/skills/index.js +0 -1
- package/dist/src/core/skills/skill-storage.js +0 -1
- package/dist/src/core/skills/types.js +0 -1
- package/dist/src/core/storage/chromadb-adapter.js +0 -1
- package/dist/src/core/storage/infinite-storage.js +0 -1
- package/dist/src/core/storage/project-registry.js +0 -1
- package/dist/src/core/storage/remote-storage.js +4 -2
- package/dist/src/core/storage/storage-tier-manager.js +0 -1
- package/dist/src/core/storage/two-tier-storage.js +0 -1
- package/dist/src/core/trace/cli-trace-wrapper.js +0 -1
- package/dist/src/core/trace/db-trace-wrapper.js +0 -1
- package/dist/src/core/trace/debug-trace.js +0 -1
- package/dist/src/core/trace/index.js +0 -1
- package/dist/src/core/trace/linear-api-wrapper.js +0 -1
- package/dist/src/core/trace/trace-detector.js +0 -1
- package/dist/src/core/trace/trace-store.js +4 -5
- package/dist/src/core/trace/types.js +0 -1
- package/dist/src/core/types.js +0 -1
- package/dist/src/core/utils/async-mutex.js +0 -1
- package/dist/src/core/utils/compression.js +0 -1
- package/dist/src/core/utils/update-checker.js +0 -1
- package/dist/src/core/worktree/worktree-manager.js +0 -1
- package/dist/src/daemon/daemon-config.js +0 -1
- package/dist/src/daemon/services/context-service.js +0 -1
- package/dist/src/daemon/services/linear-service.js +0 -1
- package/dist/src/daemon/services/maintenance-service.js +0 -1
- package/dist/src/daemon/services/memory-service.js +0 -1
- package/dist/src/daemon/session-daemon.js +0 -1
- package/dist/src/daemon/unified-daemon.js +0 -1
- package/dist/src/features/analytics/api/analytics-api.js +0 -1
- package/dist/src/features/analytics/core/analytics-service.js +1 -2
- package/dist/src/features/analytics/index.js +0 -1
- package/dist/src/features/analytics/queries/metrics-queries.js +8 -9
- package/dist/src/features/analytics/types/metrics.js +0 -1
- package/dist/src/features/browser/browser-mcp.js +0 -1
- package/dist/src/features/sweep/index.js +0 -1
- package/dist/src/features/sweep/prediction-client.js +0 -1
- package/dist/src/features/sweep/prompt-builder.js +0 -1
- package/dist/src/features/sweep/pty-wrapper.js +9 -1
- package/dist/src/features/sweep/state-watcher.js +0 -1
- package/dist/src/features/sweep/status-bar.js +0 -1
- package/dist/src/features/sweep/sweep-server-manager.js +0 -1
- package/dist/src/features/sweep/tab-interceptor.js +0 -1
- package/dist/src/features/sweep/types.js +0 -1
- package/dist/src/features/tasks/linear-task-manager.js +0 -1
- package/dist/src/features/tasks/task-aware-context.js +0 -1
- package/dist/src/features/tui/simple-monitor.js +0 -1
- package/dist/src/features/tui/swarm-monitor.js +0 -1
- package/dist/src/features/web/client/stores/task-store.js +0 -1
- package/dist/src/features/web/server/index.js +0 -1
- package/dist/src/features/workers/tmux-manager.js +0 -1
- package/dist/src/features/workers/worker-registry.js +0 -1
- package/dist/src/hooks/auto-background.js +0 -1
- package/dist/src/hooks/config.js +0 -1
- package/dist/src/hooks/daemon.js +8 -1
- package/dist/src/hooks/diffmem-hooks.js +0 -1
- package/dist/src/hooks/events.js +0 -1
- package/dist/src/hooks/graphiti-hooks.js +104 -0
- package/dist/src/hooks/index.js +0 -1
- package/dist/src/hooks/linear-task-picker.js +0 -1
- package/dist/src/hooks/schemas.js +0 -1
- package/dist/src/hooks/secure-fs.js +0 -1
- package/dist/src/hooks/security-logger.js +0 -1
- package/dist/src/hooks/session-summary.js +0 -1
- package/dist/src/index.js +0 -1
- package/dist/src/integrations/anthropic/client.js +0 -1
- package/dist/src/integrations/claude-code/agent-bridge.js +0 -1
- package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js +0 -1
- package/dist/src/integrations/claude-code/lifecycle-hooks.js +0 -1
- package/dist/src/integrations/claude-code/post-task-hooks.js +0 -1
- package/dist/src/integrations/claude-code/subagent-client-stub.js +0 -1
- package/dist/src/integrations/claude-code/subagent-client.js +0 -1
- package/dist/src/integrations/claude-code/task-coordinator.js +0 -1
- package/dist/src/integrations/diffmem/client.js +0 -1
- package/dist/src/integrations/diffmem/config.js +0 -1
- package/dist/src/integrations/diffmem/index.js +0 -1
- package/dist/src/integrations/diffmem/types.js +0 -1
- package/dist/src/integrations/graphiti/client.js +103 -0
- package/dist/src/integrations/graphiti/config.js +17 -0
- package/dist/src/integrations/graphiti/types.js +4 -0
- package/dist/src/integrations/linear/auth.js +0 -1
- package/dist/src/integrations/linear/auto-sync.js +0 -1
- package/dist/src/integrations/linear/client.js +0 -1
- package/dist/src/integrations/linear/config.js +0 -1
- package/dist/src/integrations/linear/migration.js +0 -1
- package/dist/src/integrations/linear/oauth-server.js +0 -1
- package/dist/src/integrations/linear/rest-client.js +0 -1
- package/dist/src/integrations/linear/sync-manager.js +0 -1
- package/dist/src/integrations/linear/sync-service.js +0 -1
- package/dist/src/integrations/linear/sync.js +0 -1
- package/dist/src/integrations/linear/types.js +0 -1
- package/dist/src/integrations/linear/unified-sync.js +0 -1
- package/dist/src/integrations/linear/webhook-handler.js +0 -1
- package/dist/src/integrations/linear/webhook-server.js +0 -1
- package/dist/src/integrations/linear/webhook.js +0 -1
- package/dist/src/integrations/mcp/handlers/code-execution-handlers.js +0 -1
- package/dist/src/integrations/mcp/handlers/context-handlers.js +43 -30
- package/dist/src/integrations/mcp/handlers/diffmem-handlers.js +0 -1
- package/dist/src/integrations/mcp/handlers/discovery-handlers.js +0 -1
- package/dist/src/integrations/mcp/handlers/index.js +1 -3
- package/dist/src/integrations/mcp/handlers/linear-handlers.js +24 -61
- package/dist/src/integrations/mcp/handlers/skill-handlers.js +0 -1
- package/dist/src/integrations/mcp/handlers/task-handlers.js +0 -1
- package/dist/src/integrations/mcp/handlers/trace-handlers.js +0 -1
- package/dist/src/integrations/mcp/index.js +0 -1
- package/dist/src/integrations/mcp/middleware/tool-scoring.js +3 -2
- package/dist/src/integrations/mcp/pending-utils.js +0 -1
- package/dist/src/integrations/mcp/refactored-server.js +0 -1
- package/dist/src/integrations/mcp/remote-server.js +0 -1
- package/dist/src/integrations/mcp/schemas.js +0 -1
- package/dist/src/integrations/mcp/server.js +20 -24
- package/dist/src/integrations/mcp/tool-definitions-code.js +0 -1
- package/dist/src/integrations/mcp/tool-definitions.js +0 -1
- package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js +0 -1
- package/dist/src/integrations/ralph/context/context-budget-manager.js +0 -1
- package/dist/src/integrations/ralph/context/stackmemory-context-loader.js +0 -1
- package/dist/src/integrations/ralph/coordination/enhanced-coordination.js +0 -1
- package/dist/src/integrations/ralph/index.js +0 -1
- package/dist/src/integrations/ralph/learning/pattern-learner.js +0 -1
- package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js +5 -5
- package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js +0 -1
- package/dist/src/integrations/ralph/monitoring/swarm-registry.js +0 -1
- package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js +0 -1
- package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js +0 -1
- package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js +0 -1
- package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js +0 -1
- package/dist/src/integrations/ralph/performance/performance-optimizer.js +0 -1
- package/dist/src/integrations/ralph/recovery/crash-recovery.js +0 -1
- package/dist/src/integrations/ralph/state/state-reconciler.js +25 -9
- package/dist/src/integrations/ralph/swarm/git-workflow-manager.js +0 -1
- package/dist/src/integrations/ralph/swarm/swarm-coordinator.js +0 -1
- package/dist/src/integrations/ralph/types.js +0 -1
- package/dist/src/integrations/ralph/visualization/ralph-debugger.js +0 -1
- package/dist/src/mcp/stackmemory-mcp-server.js +0 -1
- package/dist/src/middleware/exponential-rate-limiter.js +0 -1
- package/dist/src/models/user.model.js +0 -1
- package/dist/src/orchestrators/multimodal/constants.js +0 -1
- package/dist/src/orchestrators/multimodal/harness.js +0 -1
- package/dist/src/orchestrators/multimodal/providers.js +0 -1
- package/dist/src/orchestrators/multimodal/types.js +0 -1
- package/dist/src/orchestrators/multimodal/utils.js +0 -1
- package/dist/src/servers/production/auth-middleware.js +0 -1
- package/dist/src/services/config-service.js +0 -1
- package/dist/src/services/context-service.js +0 -1
- package/dist/src/skills/api-discovery.js +0 -1
- package/dist/src/skills/api-skill.js +0 -1
- package/dist/src/skills/claude-skills.js +0 -1
- package/dist/src/skills/dashboard-launcher.js +0 -1
- package/dist/src/skills/linear-task-runner.js +0 -1
- package/dist/src/skills/recursive-agent-orchestrator.js +0 -1
- package/dist/src/skills/repo-ingestion-skill.js +0 -1
- package/dist/src/skills/spec-generator-skill.js +0 -1
- package/dist/src/skills/unified-rlm-orchestrator.js +0 -1
- package/dist/src/types/task.js +0 -1
- package/dist/src/utils/env.js +0 -1
- package/dist/src/utils/formatting.js +0 -1
- package/dist/src/utils/process-cleanup.js +0 -1
- package/package.json +32 -7
- package/dist/scripts/benchmark-performance.js +0 -48
- package/dist/scripts/benchmark-performance.js.map +0 -7
- package/dist/scripts/check-redis.js +0 -42
- package/dist/scripts/check-redis.js.map +0 -7
- package/dist/scripts/initialize.js +0 -183
- package/dist/scripts/initialize.js.map +0 -7
- package/dist/scripts/list-linear-tasks.js +0 -124
- package/dist/scripts/list-linear-tasks.js.map +0 -7
- package/dist/scripts/measure-handoff-impact.js +0 -340
- package/dist/scripts/measure-handoff-impact.js.map +0 -7
- package/dist/scripts/query-chromadb.js +0 -160
- package/dist/scripts/query-chromadb.js.map +0 -7
- package/dist/scripts/show-linear-summary.js +0 -119
- package/dist/scripts/show-linear-summary.js.map +0 -7
- package/dist/scripts/simple-swarm-demo.js +0 -90
- package/dist/scripts/simple-swarm-demo.js.map +0 -7
- package/dist/scripts/status.js +0 -155
- package/dist/scripts/status.js.map +0 -7
- package/dist/scripts/test-chromadb-sync.js +0 -192
- package/dist/scripts/test-chromadb-sync.js.map +0 -7
- package/dist/scripts/test-ralph-iteration-fix.js +0 -86
- package/dist/scripts/test-ralph-iteration-fix.js.map +0 -7
- package/dist/scripts/test-ralph-iterations.js +0 -121
- package/dist/scripts/test-ralph-iterations.js.map +0 -7
- package/dist/scripts/test-redis-storage.js +0 -389
- package/dist/scripts/test-redis-storage.js.map +0 -7
- package/dist/scripts/test-simple-ralph-state-sync.js +0 -115
- package/dist/scripts/test-simple-ralph-state-sync.js.map +0 -7
- package/dist/scripts/test-swarm-fixes.js +0 -125
- package/dist/scripts/test-swarm-fixes.js.map +0 -7
- package/dist/scripts/test-swarm-tui.js +0 -23
- package/dist/scripts/test-swarm-tui.js.map +0 -7
- package/dist/scripts/test-tui-shortcuts.js +0 -52
- package/dist/scripts/test-tui-shortcuts.js.map +0 -7
- package/dist/scripts/validate-tui-shortcuts.js +0 -60
- package/dist/scripts/validate-tui-shortcuts.js.map +0 -7
- package/dist/src/agents/core/agent-task-manager.js.map +0 -7
- package/dist/src/agents/verifiers/base-verifier.js.map +0 -7
- package/dist/src/agents/verifiers/formatter-verifier.js.map +0 -7
- package/dist/src/agents/verifiers/llm-judge.js.map +0 -7
- package/dist/src/cli/auto-detect.js.map +0 -7
- package/dist/src/cli/claude-sm-danger.js.map +0 -7
- package/dist/src/cli/claude-sm.js.map +0 -7
- package/dist/src/cli/codex-sm-danger.js.map +0 -7
- package/dist/src/cli/codex-sm.js.map +0 -7
- package/dist/src/cli/commands/api.js.map +0 -7
- package/dist/src/cli/commands/auto-background.js.map +0 -7
- package/dist/src/cli/commands/cleanup-processes.js.map +0 -7
- package/dist/src/cli/commands/clear.js.map +0 -7
- package/dist/src/cli/commands/config.js.map +0 -7
- package/dist/src/cli/commands/context-rehydrate.js.map +0 -7
- package/dist/src/cli/commands/context.js.map +0 -7
- package/dist/src/cli/commands/daemon.js.map +0 -7
- package/dist/src/cli/commands/dashboard.js.map +0 -7
- package/dist/src/cli/commands/db.js.map +0 -7
- package/dist/src/cli/commands/decision.js.map +0 -7
- package/dist/src/cli/commands/discovery.js.map +0 -7
- package/dist/src/cli/commands/handoff.js.map +0 -7
- package/dist/src/cli/commands/hooks.js.map +0 -7
- package/dist/src/cli/commands/linear.js.map +0 -7
- package/dist/src/cli/commands/log.js.map +0 -7
- package/dist/src/cli/commands/login.js.map +0 -7
- package/dist/src/cli/commands/migrate.js.map +0 -7
- package/dist/src/cli/commands/model.js.map +0 -7
- package/dist/src/cli/commands/onboard.js.map +0 -7
- package/dist/src/cli/commands/ping.js.map +0 -7
- package/dist/src/cli/commands/projects.js.map +0 -7
- package/dist/src/cli/commands/ralph.js.map +0 -7
- package/dist/src/cli/commands/retrieval.js.map +0 -7
- package/dist/src/cli/commands/search.js.map +0 -7
- package/dist/src/cli/commands/service.js.map +0 -7
- package/dist/src/cli/commands/session.js.map +0 -7
- package/dist/src/cli/commands/settings.js +0 -306
- package/dist/src/cli/commands/settings.js.map +0 -7
- package/dist/src/cli/commands/setup.js.map +0 -7
- package/dist/src/cli/commands/shell.js.map +0 -7
- package/dist/src/cli/commands/signup.js.map +0 -7
- package/dist/src/cli/commands/skills.js.map +0 -7
- package/dist/src/cli/commands/sms-notify.js +0 -795
- package/dist/src/cli/commands/sms-notify.js.map +0 -7
- package/dist/src/cli/commands/storage-tier.js.map +0 -7
- package/dist/src/cli/commands/sweep.js.map +0 -7
- package/dist/src/cli/commands/tasks.js.map +0 -7
- package/dist/src/cli/commands/worktree.js.map +0 -7
- package/dist/src/cli/index.js.map +0 -7
- package/dist/src/cli/opencode-sm.js.map +0 -7
- package/dist/src/cli/utils/viewer.js.map +0 -7
- package/dist/src/core/config/config-manager.js.map +0 -7
- package/dist/src/core/config/feature-flags.js.map +0 -7
- package/dist/src/core/config/storage-config.js.map +0 -7
- package/dist/src/core/config/types.js.map +0 -7
- package/dist/src/core/context/auto-context.js.map +0 -7
- package/dist/src/core/context/dual-stack-manager.js.map +0 -7
- package/dist/src/core/context/enhanced-rehydration.js.map +0 -7
- package/dist/src/core/context/frame-database.js.map +0 -7
- package/dist/src/core/context/frame-digest.js.map +0 -7
- package/dist/src/core/context/frame-handoff-manager.js.map +0 -7
- package/dist/src/core/context/frame-lifecycle-hooks.js.map +0 -7
- package/dist/src/core/context/frame-recovery.js.map +0 -7
- package/dist/src/core/context/frame-stack.js.map +0 -7
- package/dist/src/core/context/frame-types.js.map +0 -7
- package/dist/src/core/context/index.js.map +0 -7
- package/dist/src/core/context/permission-manager.js.map +0 -7
- package/dist/src/core/context/recursive-context-manager.js.map +0 -7
- package/dist/src/core/context/refactored-frame-manager.js.map +0 -7
- package/dist/src/core/context/shared-context-layer.js.map +0 -7
- package/dist/src/core/context/stack-merge-resolver.js.map +0 -7
- package/dist/src/core/context/validation.js.map +0 -7
- package/dist/src/core/database/batch-operations.js.map +0 -7
- package/dist/src/core/database/connection-pool.js.map +0 -7
- package/dist/src/core/database/database-adapter.js.map +0 -7
- package/dist/src/core/database/embedding-provider-factory.js.map +0 -7
- package/dist/src/core/database/embedding-provider.js.map +0 -7
- package/dist/src/core/database/migration-manager.js.map +0 -7
- package/dist/src/core/database/ollama-embedding-provider.js.map +0 -7
- package/dist/src/core/database/openai-embedding-provider.js.map +0 -7
- package/dist/src/core/database/query-cache.js.map +0 -7
- package/dist/src/core/database/query-router.js.map +0 -7
- package/dist/src/core/database/sqlite-adapter.js.map +0 -7
- package/dist/src/core/database/transformers-embedding-provider.js.map +0 -7
- package/dist/src/core/digest/enhanced-hybrid-digest.js.map +0 -7
- package/dist/src/core/digest/frame-digest-integration.js.map +0 -7
- package/dist/src/core/digest/hybrid-digest-generator.js.map +0 -7
- package/dist/src/core/digest/index.js.map +0 -7
- package/dist/src/core/digest/types.js.map +0 -7
- package/dist/src/core/errors/error-utils.js.map +0 -7
- package/dist/src/core/errors/index.js.map +0 -7
- package/dist/src/core/errors/recovery.js.map +0 -7
- package/dist/src/core/execution/parallel-executor.js.map +0 -7
- package/dist/src/core/extensions/custom-tools.js.map +0 -7
- package/dist/src/core/extensions/index.js.map +0 -7
- package/dist/src/core/extensions/loader.js.map +0 -7
- package/dist/src/core/extensions/plugin-system.js.map +0 -7
- package/dist/src/core/extensions/provider-adapter.js.map +0 -7
- package/dist/src/core/extensions/sandbox-runtime.js.map +0 -7
- package/dist/src/core/extensions/types.js.map +0 -7
- package/dist/src/core/frame/workflow-templates.js.map +0 -7
- package/dist/src/core/merge/conflict-detector.js.map +0 -7
- package/dist/src/core/merge/index.js.map +0 -7
- package/dist/src/core/merge/resolution-engine.js.map +0 -7
- package/dist/src/core/merge/stack-diff.js.map +0 -7
- package/dist/src/core/merge/types.js.map +0 -7
- package/dist/src/core/merge/unified-merge-resolver.js.map +0 -7
- package/dist/src/core/models/fallback-monitor.js.map +0 -7
- package/dist/src/core/models/model-router.js.map +0 -7
- package/dist/src/core/monitoring/error-handler.js.map +0 -7
- package/dist/src/core/monitoring/logger.js.map +0 -7
- package/dist/src/core/monitoring/metrics.js.map +0 -7
- package/dist/src/core/monitoring/progress-tracker.js.map +0 -7
- package/dist/src/core/monitoring/session-monitor.js.map +0 -7
- package/dist/src/core/performance/context-cache.js.map +0 -7
- package/dist/src/core/performance/index.js.map +0 -7
- package/dist/src/core/performance/lazy-context-loader.js.map +0 -7
- package/dist/src/core/performance/monitor.js.map +0 -7
- package/dist/src/core/performance/optimized-frame-context.js.map +0 -7
- package/dist/src/core/performance/performance-benchmark.js.map +0 -7
- package/dist/src/core/performance/performance-profiler.js.map +0 -7
- package/dist/src/core/performance/streaming-jsonl-parser.js.map +0 -7
- package/dist/src/core/persistence/postgres-adapter.js.map +0 -7
- package/dist/src/core/projects/project-isolation.js.map +0 -7
- package/dist/src/core/projects/project-manager.js.map +0 -7
- package/dist/src/core/query/query-parser.js.map +0 -7
- package/dist/src/core/query/query-templates.js.map +0 -7
- package/dist/src/core/retrieval/context-retriever.js.map +0 -7
- package/dist/src/core/retrieval/index.js.map +0 -7
- package/dist/src/core/retrieval/llm-context-retrieval.js.map +0 -7
- package/dist/src/core/retrieval/llm-provider.js.map +0 -7
- package/dist/src/core/retrieval/privacy-filter.js.map +0 -7
- package/dist/src/core/retrieval/retrieval-audit.js.map +0 -7
- package/dist/src/core/retrieval/summary-generator.js.map +0 -7
- package/dist/src/core/retrieval/types.js.map +0 -7
- package/dist/src/core/retrieval/unified-context-assembler.js.map +0 -7
- package/dist/src/core/security/index.js.map +0 -7
- package/dist/src/core/security/input-sanitizer.js.map +0 -7
- package/dist/src/core/session/clear-survival.js.map +0 -7
- package/dist/src/core/session/enhanced-handoff.js.map +0 -7
- package/dist/src/core/session/handoff-generator.js.map +0 -7
- package/dist/src/core/session/index.js.map +0 -7
- package/dist/src/core/session/session-manager.js.map +0 -7
- package/dist/src/core/skills/index.js.map +0 -7
- package/dist/src/core/skills/skill-storage.js.map +0 -7
- package/dist/src/core/skills/types.js.map +0 -7
- package/dist/src/core/storage/chromadb-adapter.js.map +0 -7
- package/dist/src/core/storage/infinite-storage.js.map +0 -7
- package/dist/src/core/storage/project-registry.js.map +0 -7
- package/dist/src/core/storage/remote-storage.js.map +0 -7
- package/dist/src/core/storage/storage-tier-manager.js.map +0 -7
- package/dist/src/core/storage/two-tier-storage.js.map +0 -7
- package/dist/src/core/trace/cli-trace-wrapper.js.map +0 -7
- package/dist/src/core/trace/db-trace-wrapper.js.map +0 -7
- package/dist/src/core/trace/debug-trace.js.map +0 -7
- package/dist/src/core/trace/index.js.map +0 -7
- package/dist/src/core/trace/linear-api-wrapper.js.map +0 -7
- package/dist/src/core/trace/trace-detector.js.map +0 -7
- package/dist/src/core/trace/trace-store.js.map +0 -7
- package/dist/src/core/trace/types.js.map +0 -7
- package/dist/src/core/types.js.map +0 -7
- package/dist/src/core/utils/async-mutex.js.map +0 -7
- package/dist/src/core/utils/compression.js.map +0 -7
- package/dist/src/core/utils/update-checker.js.map +0 -7
- package/dist/src/core/worktree/worktree-manager.js.map +0 -7
- package/dist/src/daemon/daemon-config.js.map +0 -7
- package/dist/src/daemon/services/context-service.js.map +0 -7
- package/dist/src/daemon/services/linear-service.js.map +0 -7
- package/dist/src/daemon/services/maintenance-service.js.map +0 -7
- package/dist/src/daemon/services/memory-service.js.map +0 -7
- package/dist/src/daemon/session-daemon.js.map +0 -7
- package/dist/src/daemon/unified-daemon.js.map +0 -7
- package/dist/src/features/analytics/api/analytics-api.js.map +0 -7
- package/dist/src/features/analytics/core/analytics-service.js.map +0 -7
- package/dist/src/features/analytics/index.js.map +0 -7
- package/dist/src/features/analytics/queries/metrics-queries.js.map +0 -7
- package/dist/src/features/analytics/types/metrics.js.map +0 -7
- package/dist/src/features/browser/browser-mcp.js.map +0 -7
- package/dist/src/features/sweep/index.js.map +0 -7
- package/dist/src/features/sweep/prediction-client.js.map +0 -7
- package/dist/src/features/sweep/prompt-builder.js.map +0 -7
- package/dist/src/features/sweep/pty-wrapper.js.map +0 -7
- package/dist/src/features/sweep/state-watcher.js.map +0 -7
- package/dist/src/features/sweep/status-bar.js.map +0 -7
- package/dist/src/features/sweep/sweep-server-manager.js.map +0 -7
- package/dist/src/features/sweep/tab-interceptor.js.map +0 -7
- package/dist/src/features/sweep/types.js.map +0 -7
- package/dist/src/features/tasks/linear-task-manager.js.map +0 -7
- package/dist/src/features/tasks/task-aware-context.js.map +0 -7
- package/dist/src/features/tui/simple-monitor.js.map +0 -7
- package/dist/src/features/tui/swarm-monitor.js.map +0 -7
- package/dist/src/features/web/client/stores/task-store.js.map +0 -7
- package/dist/src/features/web/server/index.js.map +0 -7
- package/dist/src/features/workers/tmux-manager.js.map +0 -7
- package/dist/src/features/workers/worker-registry.js.map +0 -7
- package/dist/src/hooks/auto-background.js.map +0 -7
- package/dist/src/hooks/claude-code-whatsapp-hook.js +0 -197
- package/dist/src/hooks/claude-code-whatsapp-hook.js.map +0 -7
- package/dist/src/hooks/config.js.map +0 -7
- package/dist/src/hooks/daemon.js.map +0 -7
- package/dist/src/hooks/diffmem-hooks.js.map +0 -7
- package/dist/src/hooks/events.js.map +0 -7
- package/dist/src/hooks/index.js.map +0 -7
- package/dist/src/hooks/linear-task-picker.js.map +0 -7
- package/dist/src/hooks/schemas.js.map +0 -7
- package/dist/src/hooks/secure-fs.js.map +0 -7
- package/dist/src/hooks/security-logger.js.map +0 -7
- package/dist/src/hooks/session-summary.js.map +0 -7
- package/dist/src/hooks/sms-action-runner.js +0 -371
- package/dist/src/hooks/sms-action-runner.js.map +0 -7
- package/dist/src/hooks/sms-notify.js +0 -506
- package/dist/src/hooks/sms-notify.js.map +0 -7
- package/dist/src/hooks/sms-watcher.js +0 -93
- package/dist/src/hooks/sms-watcher.js.map +0 -7
- package/dist/src/hooks/sms-webhook.js +0 -555
- package/dist/src/hooks/sms-webhook.js.map +0 -7
- package/dist/src/hooks/whatsapp-commands.js +0 -479
- package/dist/src/hooks/whatsapp-commands.js.map +0 -7
- package/dist/src/hooks/whatsapp-scheduler.js +0 -317
- package/dist/src/hooks/whatsapp-scheduler.js.map +0 -7
- package/dist/src/hooks/whatsapp-sync.js +0 -409
- package/dist/src/hooks/whatsapp-sync.js.map +0 -7
- package/dist/src/index.js.map +0 -7
- package/dist/src/integrations/anthropic/client.js.map +0 -7
- package/dist/src/integrations/claude-code/agent-bridge.js.map +0 -7
- package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js.map +0 -7
- package/dist/src/integrations/claude-code/lifecycle-hooks.js.map +0 -7
- package/dist/src/integrations/claude-code/post-task-hooks.js.map +0 -7
- package/dist/src/integrations/claude-code/subagent-client-stub.js.map +0 -7
- package/dist/src/integrations/claude-code/subagent-client.js.map +0 -7
- package/dist/src/integrations/claude-code/task-coordinator.js.map +0 -7
- package/dist/src/integrations/diffmem/client.js.map +0 -7
- package/dist/src/integrations/diffmem/config.js.map +0 -7
- package/dist/src/integrations/diffmem/index.js.map +0 -7
- package/dist/src/integrations/diffmem/types.js.map +0 -7
- package/dist/src/integrations/linear/auth.js.map +0 -7
- package/dist/src/integrations/linear/auto-sync.js.map +0 -7
- package/dist/src/integrations/linear/client.js.map +0 -7
- package/dist/src/integrations/linear/config.js.map +0 -7
- package/dist/src/integrations/linear/migration.js.map +0 -7
- package/dist/src/integrations/linear/oauth-server.js.map +0 -7
- package/dist/src/integrations/linear/rest-client.js.map +0 -7
- package/dist/src/integrations/linear/sync-manager.js.map +0 -7
- package/dist/src/integrations/linear/sync-service.js.map +0 -7
- package/dist/src/integrations/linear/sync.js.map +0 -7
- package/dist/src/integrations/linear/types.js.map +0 -7
- package/dist/src/integrations/linear/unified-sync.js.map +0 -7
- package/dist/src/integrations/linear/webhook-handler.js.map +0 -7
- package/dist/src/integrations/linear/webhook-server.js.map +0 -7
- package/dist/src/integrations/linear/webhook.js.map +0 -7
- package/dist/src/integrations/mcp/handlers/code-execution-handlers.js.map +0 -7
- package/dist/src/integrations/mcp/handlers/context-handlers.js.map +0 -7
- package/dist/src/integrations/mcp/handlers/diffmem-handlers.js.map +0 -7
- package/dist/src/integrations/mcp/handlers/discovery-handlers.js.map +0 -7
- package/dist/src/integrations/mcp/handlers/index.js.map +0 -7
- package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +0 -7
- package/dist/src/integrations/mcp/handlers/skill-handlers.js.map +0 -7
- package/dist/src/integrations/mcp/handlers/task-handlers.js.map +0 -7
- package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +0 -7
- package/dist/src/integrations/mcp/index.js.map +0 -7
- package/dist/src/integrations/mcp/middleware/tool-scoring.js.map +0 -7
- package/dist/src/integrations/mcp/pending-utils.js.map +0 -7
- package/dist/src/integrations/mcp/refactored-server.js.map +0 -7
- package/dist/src/integrations/mcp/remote-server.js.map +0 -7
- package/dist/src/integrations/mcp/schemas.js.map +0 -7
- package/dist/src/integrations/mcp/server.js.map +0 -7
- package/dist/src/integrations/mcp/tool-definitions-code.js.map +0 -7
- package/dist/src/integrations/mcp/tool-definitions.js.map +0 -7
- package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +0 -7
- package/dist/src/integrations/ralph/context/context-budget-manager.js.map +0 -7
- package/dist/src/integrations/ralph/context/stackmemory-context-loader.js.map +0 -7
- package/dist/src/integrations/ralph/coordination/enhanced-coordination.js.map +0 -7
- package/dist/src/integrations/ralph/index.js.map +0 -7
- package/dist/src/integrations/ralph/learning/pattern-learner.js.map +0 -7
- package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js.map +0 -7
- package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js.map +0 -7
- package/dist/src/integrations/ralph/monitoring/swarm-registry.js.map +0 -7
- package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +0 -7
- package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js.map +0 -7
- package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js.map +0 -7
- package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js.map +0 -7
- package/dist/src/integrations/ralph/performance/performance-optimizer.js.map +0 -7
- package/dist/src/integrations/ralph/recovery/crash-recovery.js.map +0 -7
- package/dist/src/integrations/ralph/state/state-reconciler.js.map +0 -7
- package/dist/src/integrations/ralph/swarm/git-workflow-manager.js.map +0 -7
- package/dist/src/integrations/ralph/swarm/swarm-coordinator.js.map +0 -7
- package/dist/src/integrations/ralph/types.js.map +0 -7
- package/dist/src/integrations/ralph/visualization/ralph-debugger.js.map +0 -7
- package/dist/src/mcp/stackmemory-mcp-server.js.map +0 -7
- package/dist/src/middleware/exponential-rate-limiter.js.map +0 -7
- package/dist/src/models/user.model.js.map +0 -7
- package/dist/src/orchestrators/multimodal/constants.js.map +0 -7
- package/dist/src/orchestrators/multimodal/harness.js.map +0 -7
- package/dist/src/orchestrators/multimodal/providers.js.map +0 -7
- package/dist/src/orchestrators/multimodal/types.js.map +0 -7
- package/dist/src/orchestrators/multimodal/utils.js.map +0 -7
- package/dist/src/servers/production/auth-middleware.js.map +0 -7
- package/dist/src/services/config-service.js.map +0 -7
- package/dist/src/services/context-service.js.map +0 -7
- package/dist/src/skills/api-discovery.js.map +0 -7
- package/dist/src/skills/api-skill.js.map +0 -7
- package/dist/src/skills/claude-skills.js.map +0 -7
- package/dist/src/skills/dashboard-launcher.js.map +0 -7
- package/dist/src/skills/linear-task-runner.js.map +0 -7
- package/dist/src/skills/recursive-agent-orchestrator.js.map +0 -7
- package/dist/src/skills/repo-ingestion-skill.js.map +0 -7
- package/dist/src/skills/spec-generator-skill.js.map +0 -7
- package/dist/src/skills/unified-rlm-orchestrator.js.map +0 -7
- package/dist/src/types/task.js.map +0 -7
- package/dist/src/utils/env.js.map +0 -7
- package/dist/src/utils/formatting.js.map +0 -7
- package/dist/src/utils/process-cleanup.js.map +0 -7
- package/scripts/README-TESTING.md +0 -186
- package/scripts/analyze-cli-security.js +0 -288
- package/scripts/archive/add-phase-tasks-to-linear.js +0 -163
- package/scripts/archive/analyze-linear-duplicates.js +0 -214
- package/scripts/archive/analyze-remaining-duplicates.js +0 -230
- package/scripts/archive/analyze-sta-duplicates.js +0 -292
- package/scripts/archive/analyze-sta-graphql.js +0 -399
- package/scripts/archive/cancel-duplicate-tasks.ts +0 -246
- package/scripts/archive/check-all-duplicates.ts +0 -419
- package/scripts/archive/clean-duplicate-tasks.js +0 -114
- package/scripts/archive/cleanup-duplicate-tasks.ts +0 -286
- package/scripts/archive/create-phase-tasks.js +0 -387
- package/scripts/archive/delete-linear-duplicates.js +0 -182
- package/scripts/archive/delete-remaining-duplicates.js +0 -158
- package/scripts/archive/delete-sta-duplicates.js +0 -201
- package/scripts/archive/delete-sta-oauth.js +0 -201
- package/scripts/archive/export-sta-tasks.js +0 -62
- package/scripts/archive/install-auto-sync.js +0 -266
- package/scripts/archive/install-chromadb-hooks.sh +0 -133
- package/scripts/archive/install-enhanced-clear-hooks.sh +0 -431
- package/scripts/archive/install-post-task-hooks.sh +0 -289
- package/scripts/archive/install-stackmemory-hooks.sh +0 -420
- package/scripts/archive/merge-linear-duplicates-safe.ts +0 -362
- package/scripts/archive/merge-linear-duplicates.ts +0 -182
- package/scripts/archive/remove-sta-tasks.js +0 -70
- package/scripts/archive/setup-background-sync.sh +0 -168
- package/scripts/archive/setup-claude-auto-triggers.sh +0 -181
- package/scripts/archive/setup-claude-autostart.sh +0 -305
- package/scripts/archive/setup-git-hooks.sh +0 -25
- package/scripts/archive/setup-linear-oauth.sh +0 -46
- package/scripts/archive/setup-mcp.sh +0 -113
- package/scripts/archive/setup-railway-deployment.sh +0 -81
- package/scripts/auto-handoff.sh +0 -262
- package/scripts/background-sync-manager.js +0 -478
- package/scripts/benchmark-performance.ts +0 -57
- package/scripts/check-redis.ts +0 -48
- package/scripts/chromadb-auto-loader.sh +0 -128
- package/scripts/chromadb-context-loader.js +0 -479
- package/scripts/claude-chromadb-hook.js +0 -460
- package/scripts/claude-linear-skill.js +0 -455
- package/scripts/claude-pre-commit.sh +0 -302
- package/scripts/claude-sm-autostart.js +0 -579
- package/scripts/claude-with-chromadb.sh +0 -69
- package/scripts/clean-linear-backlog.js +0 -273
- package/scripts/cleanup-old-sessions.sh +0 -57
- package/scripts/create-cleanup-issues.js +0 -302
- package/scripts/create-sandbox.sh +0 -269
- package/scripts/debug-linear-update.js +0 -174
- package/scripts/delete-linear-tasks.js +0 -167
- package/scripts/demos/browser-test.ts +0 -39
- package/scripts/demos/ralph-integration-demo.ts +0 -245
- package/scripts/demos/trace-demo.ts +0 -200
- package/scripts/demos/trace-detector.demo.ts +0 -171
- package/scripts/demos/trace-test.ts +0 -79
- package/scripts/deploy-ralph-swarm.sh +0 -365
- package/scripts/deploy.sh +0 -89
- package/scripts/deployment/test-deployment.js +0 -194
- package/scripts/detect-and-rehydrate.js +0 -162
- package/scripts/detect-and-rehydrate.mjs +0 -165
- package/scripts/development/create-demo-tasks.js +0 -143
- package/scripts/development/debug-frame-test.js +0 -16
- package/scripts/development/demo-auto-sync.js +0 -128
- package/scripts/development/fix-all-imports.js +0 -213
- package/scripts/development/fix-imports.js +0 -229
- package/scripts/development/fix-lint-loop.cjs +0 -103
- package/scripts/development/fix-project-id.ts +0 -161
- package/scripts/development/fix-strict-mode-issues.ts +0 -291
- package/scripts/development/reorganize-structure.sh +0 -228
- package/scripts/development/test-persistence-direct.js +0 -148
- package/scripts/development/test-persistence.js +0 -114
- package/scripts/development/test-tasks.js +0 -93
- package/scripts/development/update-imports.js +0 -212
- package/scripts/fetch-linear-status.js +0 -125
- package/scripts/initialize.ts +0 -220
- package/scripts/linear-auto-sync.js +0 -262
- package/scripts/linear-auto-sync.sh +0 -161
- package/scripts/linear-sync-daemon.js +0 -150
- package/scripts/linear-task-review.js +0 -237
- package/scripts/list-linear-tasks.ts +0 -178
- package/scripts/mcp-proxy.js +0 -66
- package/scripts/measure-handoff-impact.mjs +0 -395
- package/scripts/measure-handoff-impact.ts +0 -450
- package/scripts/publish-local.js +0 -74
- package/scripts/query-chromadb.ts +0 -201
- package/scripts/ralph-integration-test.js +0 -274
- package/scripts/reconcile-local-tasks.js +0 -170
- package/scripts/recreate-frames-db.js +0 -89
- package/scripts/show-linear-summary.ts +0 -172
- package/scripts/simple-swarm-demo.ts +0 -114
- package/scripts/stackmemory-auto-handoff.sh +0 -231
- package/scripts/start-linear-sync-daemon.sh +0 -141
- package/scripts/start-temporal-paradox.sh +0 -214
- package/scripts/status.ts +0 -224
- package/scripts/stop-notify-webhook.sh +0 -19
- package/scripts/swarm-monitor.js +0 -509
- package/scripts/sync-and-clean-tasks.js +0 -258
- package/scripts/sync-linear-graphql.js +0 -303
- package/scripts/sync-linear-tasks.js +0 -186
- package/scripts/test-auto-triggers.sh +0 -57
- package/scripts/test-browser-mcp.js +0 -74
- package/scripts/test-chromadb-full.js +0 -115
- package/scripts/test-chromadb-hooks.sh +0 -28
- package/scripts/test-chromadb-sync.ts +0 -245
- package/scripts/test-claude-config.sh +0 -123
- package/scripts/test-cli-security.js +0 -293
- package/scripts/test-code-execution.js +0 -143
- package/scripts/test-hooks-persistence.sh +0 -220
- package/scripts/test-installation-scenarios.sh +0 -359
- package/scripts/test-installation.sh +0 -224
- package/scripts/test-mcp.js +0 -163
- package/scripts/test-parallel-swarms.js +0 -443
- package/scripts/test-pre-publish-quick.sh +0 -69
- package/scripts/test-quality-gates.sh +0 -263
- package/scripts/test-ralph-iteration-fix.ts +0 -118
- package/scripts/test-ralph-iterations.ts +0 -164
- package/scripts/test-redis-storage.ts +0 -490
- package/scripts/test-rlm-basic.sh +0 -122
- package/scripts/test-rlm-comprehensive.sh +0 -260
- package/scripts/test-rlm-e2e.sh +0 -268
- package/scripts/test-rlm-simple.js +0 -90
- package/scripts/test-rlm.js +0 -110
- package/scripts/test-session-handoff.sh +0 -165
- package/scripts/test-setup-e2e.sh +0 -154
- package/scripts/test-shell-integration.sh +0 -275
- package/scripts/test-simple-ralph-state-sync.ts +0 -178
- package/scripts/test-swarm-fixes.ts +0 -161
- package/scripts/test-swarm-git-workflow.js +0 -338
- package/scripts/test-swarm-tui.ts +0 -34
- package/scripts/test-tui-shortcuts.ts +0 -66
- package/scripts/testing/ab-test-runner.ts +0 -510
- package/scripts/testing/collect-metrics.ts +0 -457
- package/scripts/testing/quick-effectiveness-demo.js +0 -187
- package/scripts/testing/ralph-cli-test.js +0 -88
- package/scripts/testing/ralph-integration-validation.js +0 -727
- package/scripts/testing/ralph-swarm-test-scenarios.js +0 -613
- package/scripts/testing/real-performance-test.js +0 -422
- package/scripts/testing/results/real-performance-results.json +0 -90
- package/scripts/testing/run-effectiveness-tests.sh +0 -176
- package/scripts/testing/simple-effectiveness-test.js +0 -310
- package/scripts/testing/test-tier-migration.js +0 -100
- package/scripts/update-linear-status.js +0 -268
- package/scripts/update-linear-tasks-fixed.js +0 -284
- package/scripts/validate-claude-config.sh +0 -155
- package/scripts/validate-swarm-implementation.js +0 -467
- package/scripts/validate-tui-shortcuts.ts +0 -83
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../src/integrations/ralph/monitoring/swarm-dashboard.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Real-time Swarm Monitoring Dashboard\n * Provides live metrics and visualization for active swarms\n */\n\nimport { EventEmitter } from 'events';\nimport { logger } from '../../../core/monitoring/logger.js';\nimport { SwarmCoordinator } from '../swarm/swarm-coordinator.js';\nimport { Agent, SwarmState } from '../types.js';\n\nexport interface SwarmMetrics {\n swarmId: string;\n status: 'active' | 'idle' | 'completed' | 'error';\n totalAgents: number;\n activeAgents: number;\n completedTasks: number;\n activeTasks: number;\n averageTaskTime: number;\n resourceUsage: {\n memoryMB: number;\n cpuPercent: number;\n diskMB: number;\n };\n performance: {\n throughput: number; // tasks per minute\n efficiency: number; // completion rate\n uptime: number; // milliseconds\n };\n agents: AgentMetrics[];\n}\n\nexport interface AgentMetrics {\n id: string;\n role: string;\n status: 'active' | 'idle' | 'error' | 'completed';\n currentTask?: string;\n tasksCompleted: number;\n averageTaskTime: number;\n successRate: number;\n lastActivity: number;\n resourceUsage: {\n memoryMB: number;\n iterations: number;\n };\n}\n\nexport interface AlertRule {\n id: string;\n type: 'performance' | 'error' | 'resource' | 'completion';\n condition: string; // e.g., \"throughput < 0.5\" or \"errorRate > 0.1\"\n threshold: number;\n message: string;\n severity: 'low' | 'medium' | 'high' | 'critical';\n}\n\nexport class SwarmDashboard extends EventEmitter {\n private metrics: Map<string, SwarmMetrics> = new Map();\n private alerts: AlertRule[] = [];\n private monitoringInterval?: NodeJS.Timeout;\n private swarmCoordinator: SwarmCoordinator;\n\n constructor(swarmCoordinator: SwarmCoordinator) {\n super();\n this.swarmCoordinator = swarmCoordinator;\n this.setupDefaultAlerts();\n }\n\n /**\n * Start real-time monitoring\n */\n startMonitoring(intervalMs: number = 5000): void {\n this.monitoringInterval = setInterval(() => {\n this.collectMetrics();\n this.checkAlerts();\n }, intervalMs);\n\n logger.info('Swarm monitoring dashboard started');\n }\n\n /**\n * Stop monitoring\n */\n stopMonitoring(): void {\n if (this.monitoringInterval) {\n clearInterval(this.monitoringInterval);\n this.monitoringInterval = undefined;\n }\n logger.info('Swarm monitoring dashboard stopped');\n }\n\n /**\n * Get current metrics for a swarm\n */\n getSwarmMetrics(swarmId: string): SwarmMetrics | undefined {\n return this.metrics.get(swarmId);\n }\n\n /**\n * Get all active swarm metrics\n */\n getAllMetrics(): SwarmMetrics[] {\n return Array.from(this.metrics.values());\n }\n\n /**\n * Add custom alert rule\n */\n addAlert(rule: AlertRule): void {\n this.alerts.push(rule);\n logger.info(`Added alert rule: ${rule.id}`);\n }\n\n /**\n * Generate real-time dashboard HTML\n */\n generateDashboardHTML(): string {\n const metrics = this.getAllMetrics();\n\n return `\n<!DOCTYPE html>\n<html>\n<head>\n <title>Ralph Swarm Dashboard</title>\n <style>\n body { font-family: Arial, sans-serif; margin: 20px; background: #f5f5f5; }\n .dashboard { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }\n .card { background: white; padding: 20px; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); }\n .metric { display: flex; justify-content: space-between; margin: 10px 0; }\n .status-active { color: #28a745; }\n .status-error { color: #dc3545; }\n .status-idle { color: #6c757d; }\n .alert-critical { color: #dc3545; font-weight: bold; }\n .progress { background: #e9ecef; border-radius: 4px; height: 8px; }\n .progress-bar { background: #007bff; height: 100%; border-radius: 4px; }\n </style>\n <script>\n setTimeout(() => location.reload(), 5000); // Auto-refresh\n </script>\n</head>\n<body>\n <h1>\uD83E\uDDBE Ralph Swarm Dashboard</h1>\n <div class=\"dashboard\">\n ${metrics\n .map(\n (swarm) => `\n <div class=\"card\">\n <h3>Swarm ${swarm.swarmId.substring(0, 8)}</h3>\n <div class=\"metric\">\n <span>Status:</span>\n <span class=\"status-${swarm.status}\">${swarm.status.toUpperCase()}</span>\n </div>\n <div class=\"metric\">\n <span>Agents:</span>\n <span>${swarm.activeAgents}/${swarm.totalAgents}</span>\n </div>\n <div class=\"metric\">\n <span>Tasks:</span>\n <span>${swarm.completedTasks}/${swarm.activeTasks + swarm.completedTasks}</span>\n </div>\n <div class=\"metric\">\n <span>Throughput:</span>\n <span>${swarm.performance.throughput.toFixed(2)} tasks/min</span>\n </div>\n <div class=\"metric\">\n <span>Memory:</span>\n <span>${swarm.resourceUsage.memoryMB} MB</span>\n </div>\n <div class=\"metric\">\n <span>Uptime:</span>\n <span>${Math.round(swarm.performance.uptime / 1000)}s</span>\n </div>\n <div style=\"margin-top: 15px;\">\n <h4>Agents:</h4>\n ${swarm.agents\n .map(\n (agent) => `\n <div class=\"metric\">\n <span>${agent.role}:</span>\n <span class=\"status-${agent.status}\">${agent.status}</span>\n </div>\n `\n )\n .join('')}\n </div>\n </div>\n `\n )\n .join('')}\n </div>\n \n <div class=\"card\" style=\"margin-top: 20px;\">\n <h3>\uD83D\uDEA8 Active Alerts</h3>\n <div id=\"alerts\">${this.getActiveAlerts()\n .map(\n (alert) =>\n `<div class=\"alert-${alert.severity}\">${alert.message}</div>`\n )\n .join('')}</div>\n </div>\n</body>\n</html>`;\n }\n\n /**\n * Export metrics to JSON\n */\n exportMetrics(): string {\n return JSON.stringify(\n {\n timestamp: new Date().toISOString(),\n swarms: this.getAllMetrics(),\n alerts: this.getActiveAlerts(),\n },\n null,\n 2\n );\n }\n\n private collectMetrics(): void {\n const usage = this.swarmCoordinator.getResourceUsage();\n const swarmState = (this.swarmCoordinator as any).swarmState;\n\n if (!swarmState || !swarmState.id) return;\n\n const metrics: SwarmMetrics = {\n swarmId: swarmState.id,\n status: swarmState.status,\n totalAgents: usage.activeAgents,\n activeAgents: usage.activeAgents,\n completedTasks: swarmState.completedTaskCount || 0,\n activeTasks: swarmState.activeTaskCount || 0,\n averageTaskTime: 0, // Calculate from agent metrics\n resourceUsage: {\n memoryMB: usage.memoryEstimate,\n cpuPercent: this.estimateCpuUsage(),\n diskMB: this.estimateDiskUsage(),\n },\n performance: {\n throughput: swarmState.performance?.throughput || 0,\n efficiency: swarmState.performance?.efficiency || 0,\n uptime: Date.now() - swarmState.startTime,\n },\n agents: this.collectAgentMetrics(),\n };\n\n this.metrics.set(swarmState.id, metrics);\n this.emit('metricsUpdated', metrics);\n }\n\n private collectAgentMetrics(): AgentMetrics[] {\n const agents = (this.swarmCoordinator as any).activeAgents;\n if (!agents) return [];\n\n return Array.from(agents.values()).map(\n (agent: Agent): AgentMetrics => ({\n id: agent.id,\n role: agent.role,\n status: agent.status,\n currentTask: agent.currentTask || undefined,\n tasksCompleted: agent.performance?.tasksCompleted || 0,\n averageTaskTime: agent.performance?.averageTaskTime || 0,\n successRate: agent.performance?.successRate || 1.0,\n lastActivity: agent.performance?.lastFreshStart || Date.now(),\n resourceUsage: {\n memoryMB: 50, // Estimate per agent\n iterations: agent.performance?.tasksCompleted || 0,\n },\n })\n );\n }\n\n private checkAlerts(): void {\n const metrics = this.getAllMetrics();\n\n for (const swarmMetrics of metrics) {\n for (const alert of this.alerts) {\n if (this.evaluateAlertCondition(alert, swarmMetrics)) {\n this.emit('alert', {\n ...alert,\n swarmId: swarmMetrics.swarmId,\n timestamp: Date.now(),\n value: this.getMetricValue(alert.condition, swarmMetrics),\n });\n }\n }\n }\n }\n\n private evaluateAlertCondition(\n alert: AlertRule,\n metrics: SwarmMetrics\n ): boolean {\n const value = this.getMetricValue(alert.condition, metrics);\n\n switch (alert.type) {\n case 'performance':\n return value < alert.threshold;\n case 'error':\n return 1 - metrics.performance.efficiency > alert.threshold;\n case 'resource':\n return metrics.resourceUsage.memoryMB > alert.threshold;\n case 'completion':\n return metrics.performance.uptime > alert.threshold;\n default:\n return false;\n }\n }\n\n private getMetricValue(condition: string, metrics: SwarmMetrics): number {\n // Simple metric extraction - could be enhanced with expression parser\n if (condition.includes('throughput')) return metrics.performance.throughput;\n if (condition.includes('efficiency')) return metrics.performance.efficiency;\n if (condition.includes('memory')) return metrics.resourceUsage.memoryMB;\n if (condition.includes('uptime')) return metrics.performance.uptime;\n return 0;\n }\n\n private getActiveAlerts(): any[] {\n // Return recent alerts - implementation would track alert history\n return [];\n }\n\n private estimateCpuUsage(): number {\n // Estimate CPU usage based on active agents\n const activeAgents = this.collectAgentMetrics().filter(\n (a) => a.status === 'active'\n ).length;\n return Math.min(activeAgents * 15, 100); // ~15% per active agent\n }\n\n private estimateDiskUsage(): number {\n // Estimate disk usage from working directories\n const usage = this.swarmCoordinator.getResourceUsage();\n return usage.workingDirectories.length * 10; // ~10MB per directory\n }\n\n private setupDefaultAlerts(): void {\n this.alerts = [\n {\n id: 'low-throughput',\n type: 'performance',\n condition: 'throughput < 0.5',\n threshold: 0.5,\n message: 'Low throughput detected: Less than 0.5 tasks per minute',\n severity: 'medium',\n },\n {\n id: 'high-memory',\n type: 'resource',\n condition: 'memory > 500',\n threshold: 500,\n message: 'High memory usage detected: Over 500MB',\n severity: 'high',\n },\n {\n id: 'long-running',\n type: 'completion',\n condition: 'uptime > 1800000',\n threshold: 1800000, // 30 minutes\n message: 'Long running swarm detected: Over 30 minutes',\n severity: 'low',\n },\n {\n id: 'low-efficiency',\n type: 'error',\n condition: 'errorRate > 0.3',\n threshold: 0.3,\n message: 'High error rate detected: Over 30% failure rate',\n severity: 'critical',\n },\n ];\n }\n}\n\nexport default SwarmDashboard;\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../src/integrations/ralph/monitoring/swarm-registry.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Global swarm registry for tracking active swarms\n * Allows TUI to connect to running swarms\n */\n\nimport { EventEmitter } from 'events';\nimport { SwarmCoordinator } from '../swarm/swarm-coordinator.js';\nimport { logger } from '../../../core/monitoring/logger.js';\n\nexport interface RegisteredSwarm {\n id: string;\n coordinator: SwarmCoordinator;\n startTime: number;\n status: 'active' | 'idle' | 'completed' | 'error';\n description: string;\n}\n\nexport class SwarmRegistry extends EventEmitter {\n private static instance: SwarmRegistry | null = null;\n private swarms: Map<string, RegisteredSwarm> = new Map();\n\n private constructor() {\n super();\n logger.info('SwarmRegistry initialized');\n }\n\n static getInstance(): SwarmRegistry {\n if (!SwarmRegistry.instance) {\n SwarmRegistry.instance = new SwarmRegistry();\n }\n return SwarmRegistry.instance;\n }\n\n /**\n * Register a swarm coordinator\n */\n registerSwarm(coordinator: SwarmCoordinator, description: string): string {\n const swarmId = this.generateSwarmId();\n\n const registration: RegisteredSwarm = {\n id: swarmId,\n coordinator,\n startTime: Date.now(),\n status: 'active',\n description,\n };\n\n this.swarms.set(swarmId, registration);\n this.emit('swarmRegistered', registration);\n\n logger.info(`Swarm registered: ${swarmId} - ${description}`);\n return swarmId;\n }\n\n /**\n * Unregister a swarm\n */\n unregisterSwarm(swarmId: string): void {\n const swarm = this.swarms.get(swarmId);\n if (swarm) {\n this.swarms.delete(swarmId);\n this.emit('swarmUnregistered', { id: swarmId });\n logger.info(`Swarm unregistered: ${swarmId}`);\n }\n }\n\n /**\n * Get a specific swarm by ID\n */\n getSwarm(swarmId: string): RegisteredSwarm | null {\n return this.swarms.get(swarmId) || null;\n }\n\n /**\n * List all active swarms\n */\n listActiveSwarms(): RegisteredSwarm[] {\n return Array.from(this.swarms.values()).filter(\n (swarm) => swarm.status === 'active'\n );\n }\n\n /**\n * Update swarm status\n */\n updateSwarmStatus(\n swarmId: string,\n status: 'active' | 'idle' | 'completed' | 'error'\n ): void {\n const swarm = this.swarms.get(swarmId);\n if (swarm) {\n swarm.status = status;\n this.emit('swarmStatusChanged', { id: swarmId, status });\n logger.debug(`Swarm ${swarmId} status updated: ${status}`);\n }\n }\n\n /**\n * Get swarm statistics\n */\n getStatistics(): {\n totalSwarms: number;\n activeSwarms: number;\n completedSwarms: number;\n averageUptime: number;\n } {\n const active = this.listActiveSwarms();\n const completed = Array.from(this.swarms.values()).filter(\n (s) => s.status === 'completed'\n );\n\n const totalUptime = active.reduce(\n (sum, swarm) => sum + (Date.now() - swarm.startTime),\n 0\n );\n\n return {\n totalSwarms: this.swarms.size,\n activeSwarms: active.length,\n completedSwarms: completed.length,\n averageUptime: active.length > 0 ? totalUptime / active.length : 0,\n };\n }\n\n /**\n * Cleanup all swarms and reset registry\n */\n cleanup(): void {\n this.swarms.clear();\n logger.info('SwarmRegistry cleaned up');\n }\n\n private generateSwarmId(): string {\n return `swarm_${Date.now()}_${Math.random().toString(36).substring(2, 8)}`;\n }\n}\n\nexport default SwarmRegistry;\n"],
|
|
5
|
-
"mappings": ";;;;AAKA,SAAS,oBAAoB;AAE7B,SAAS,cAAc;AAUhB,MAAM,sBAAsB,aAAa;AAAA,EAC9C,OAAe,WAAiC;AAAA,EACxC,SAAuC,oBAAI,IAAI;AAAA,EAE/C,cAAc;AACpB,UAAM;AACN,WAAO,KAAK,2BAA2B;AAAA,EACzC;AAAA,EAEA,OAAO,cAA6B;AAClC,QAAI,CAAC,cAAc,UAAU;AAC3B,oBAAc,WAAW,IAAI,cAAc;AAAA,IAC7C;AACA,WAAO,cAAc;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,aAA+B,aAA6B;AACxE,UAAM,UAAU,KAAK,gBAAgB;AAErC,UAAM,eAAgC;AAAA,MACpC,IAAI;AAAA,MACJ;AAAA,MACA,WAAW,KAAK,IAAI;AAAA,MACpB,QAAQ;AAAA,MACR;AAAA,IACF;AAEA,SAAK,OAAO,IAAI,SAAS,YAAY;AACrC,SAAK,KAAK,mBAAmB,YAAY;AAEzC,WAAO,KAAK,qBAAqB,OAAO,MAAM,WAAW,EAAE;AAC3D,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB,SAAuB;AACrC,UAAM,QAAQ,KAAK,OAAO,IAAI,OAAO;AACrC,QAAI,OAAO;AACT,WAAK,OAAO,OAAO,OAAO;AAC1B,WAAK,KAAK,qBAAqB,EAAE,IAAI,QAAQ,CAAC;AAC9C,aAAO,KAAK,uBAAuB,OAAO,EAAE;AAAA,IAC9C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,SAAyC;AAChD,WAAO,KAAK,OAAO,IAAI,OAAO,KAAK;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAsC;AACpC,WAAO,MAAM,KAAK,KAAK,OAAO,OAAO,CAAC,EAAE;AAAA,MACtC,CAAC,UAAU,MAAM,WAAW;AAAA,IAC9B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,kBACE,SACA,QACM;AACN,UAAM,QAAQ,KAAK,OAAO,IAAI,OAAO;AACrC,QAAI,OAAO;AACT,YAAM,SAAS;AACf,WAAK,KAAK,sBAAsB,EAAE,IAAI,SAAS,OAAO,CAAC;AACvD,aAAO,MAAM,SAAS,OAAO,oBAAoB,MAAM,EAAE;AAAA,IAC3D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,gBAKE;AACA,UAAM,SAAS,KAAK,iBAAiB;AACrC,UAAM,YAAY,MAAM,KAAK,KAAK,OAAO,OAAO,CAAC,EAAE;AAAA,MACjD,CAAC,MAAM,EAAE,WAAW;AAAA,IACtB;AAEA,UAAM,cAAc,OAAO;AAAA,MACzB,CAAC,KAAK,UAAU,OAAO,KAAK,IAAI,IAAI,MAAM;AAAA,MAC1C;AAAA,IACF;AAEA,WAAO;AAAA,MACL,aAAa,KAAK,OAAO;AAAA,MACzB,cAAc,OAAO;AAAA,MACrB,iBAAiB,UAAU;AAAA,MAC3B,eAAe,OAAO,SAAS,IAAI,cAAc,OAAO,SAAS;AAAA,IACnE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,UAAgB;AACd,SAAK,OAAO,MAAM;AAClB,WAAO,KAAK,0BAA0B;AAAA,EACxC;AAAA,EAEQ,kBAA0B;AAChC,WAAO,SAAS,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,GAAG,CAAC,CAAC;AAAA,EAC1E;AACF;AAEA,IAAO,yBAAQ;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../src/integrations/ralph/orchestration/multi-loop-orchestrator.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Multi-Loop Orchestrator for Complex Tasks\n * Manages multiple Ralph loops working together on large, complex tasks\n */\n\nimport { v4 as uuidv4 } from 'uuid';\nimport { logger } from '../../../core/monitoring/logger.js';\nimport { FrameManager } from '../../../core/context/index.js';\nimport { sessionManager } from '../../../core/session/index.js';\nimport { RalphStackMemoryBridge } from '../bridge/ralph-stackmemory-bridge.js';\nimport {\n OrchestratedTask,\n TaskDependency,\n LoopCoordination,\n ParallelExecution,\n TaskBreakdown,\n ExecutionPlan,\n OrchestrationResult\n} from '../types.js';\n\nexport interface OrchestrationConfig {\n maxConcurrentLoops: number;\n dependencyResolutionTimeout: number;\n enableAdaptivePlanning: boolean;\n sharedContextEnabled: boolean;\n fallbackStrategy: 'sequential' | 'abort' | 'manual';\n}\n\nexport class MultiLoopOrchestrator {\n private frameManager?: FrameManager;\n private activeTasks: Map<string, OrchestratedTask> = new Map();\n private activeLoops: Map<string, RalphStackMemoryBridge> = new Map();\n private config: OrchestrationConfig;\n\n constructor(config?: Partial<OrchestrationConfig>) {\n this.config = {\n maxConcurrentLoops: 3,\n dependencyResolutionTimeout: 30000, // 30 seconds\n enableAdaptivePlanning: true,\n sharedContextEnabled: true,\n fallbackStrategy: 'sequential',\n ...config\n };\n\n logger.info('Multi-loop orchestrator initialized', this.config);\n }\n\n async initialize(): Promise<void> {\n try {\n await sessionManager.initialize();\n\n const session = await sessionManager.getOrCreateSession({});\n if (session.database) {\n this.frameManager = new FrameManager(session.database, session.projectId);\n }\n\n logger.info('Orchestrator initialized successfully');\n } catch (error: unknown) {\n logger.error('Failed to initialize orchestrator', error as Error);\n throw error;\n }\n }\n\n /**\n * Break down complex task into manageable loops\n */\n async orchestrateComplexTask(\n description: string, \n criteria: string[], \n options?: {\n maxLoops?: number;\n forceSequential?: boolean;\n customBreakdown?: TaskBreakdown[];\n }\n ): Promise<OrchestrationResult> {\n logger.info('Orchestrating complex task', {\n task: description.substring(0, 100),\n criteriaCount: criteria.length,\n maxLoops: options?.maxLoops || this.config.maxConcurrentLoops\n });\n\n const orchestrationId = uuidv4();\n\n try {\n // 1. Break down task into subtasks\n const breakdown = options?.customBreakdown || \n await this.analyzeAndBreakdownTask(description, criteria);\n\n // 2. Create execution plan\n const executionPlan = await this.createExecutionPlan(breakdown, options);\n\n // 3. Validate dependencies\n const dependencyErrors = this.validateDependencies(executionPlan);\n if (dependencyErrors.length > 0) {\n throw new Error(`Dependency errors: ${dependencyErrors.join(', ')}`);\n }\n\n // 4. Create orchestrated task\n const orchestratedTask: OrchestratedTask = {\n id: orchestrationId,\n description,\n breakdown,\n executionPlan,\n status: 'planning',\n startTime: Date.now(),\n loops: new Map(),\n sharedContext: {}\n };\n\n this.activeTasks.set(orchestrationId, orchestratedTask);\n\n // 5. Execute the plan\n const result = await this.executeOrchestration(orchestratedTask);\n\n logger.info('Complex task orchestration completed', {\n orchestrationId,\n status: result.success ? 'success' : 'failure',\n loopsExecuted: result.completedLoops.length,\n duration: Date.now() - orchestratedTask.startTime\n });\n\n return result;\n\n } catch (error: unknown) {\n logger.error('Orchestration failed', error as Error);\n throw error;\n } finally {\n this.activeTasks.delete(orchestrationId);\n }\n }\n\n /**\n * Execute coordinated parallel loops\n */\n async executeParallelLoops(\n tasks: TaskBreakdown[],\n coordination?: LoopCoordination\n ): Promise<ParallelExecution> {\n logger.info(`Executing ${tasks.length} parallel loops`);\n\n const execution: ParallelExecution = {\n id: uuidv4(),\n tasks: tasks,\n startTime: Date.now(),\n results: new Map(),\n sharedState: coordination?.sharedState || {}\n };\n\n const promises = tasks.map(task => this.executeParallelTask(task, execution));\n \n try {\n await Promise.allSettled(promises);\n\n execution.endTime = Date.now();\n execution.status = Array.from(execution.results.values()).every(r => r.success) ? 'success' : 'partial';\n\n return execution;\n\n } catch (error: unknown) {\n logger.error('Parallel execution failed', error as Error);\n execution.status = 'failed';\n execution.error = (error as Error).message;\n return execution;\n }\n }\n\n /**\n * Analyze and break down complex task\n */\n private async analyzeAndBreakdownTask(\n description: string,\n criteria: string[]\n ): Promise<TaskBreakdown[]> {\n // Intelligent task breakdown using patterns and heuristics\n const complexity = this.assessTaskComplexity(description);\n \n if (complexity.score < 5) {\n // Simple task - no breakdown needed\n return [{\n id: uuidv4(),\n title: description,\n description,\n criteria: criteria,\n priority: 1,\n estimatedIterations: 3,\n dependencies: [],\n type: 'single'\n }];\n }\n\n // Complex task - break down by patterns\n const subtasks: TaskBreakdown[] = [];\n \n // Pattern 1: Setup/Foundation tasks\n if (this.needsSetup(description)) {\n subtasks.push({\n id: uuidv4(),\n title: 'Project Setup',\n description: 'Set up project structure and dependencies',\n criteria: ['Project structure created', 'Dependencies installed'],\n priority: 1,\n estimatedIterations: 2,\n dependencies: [],\n type: 'setup'\n });\n }\n\n // Pattern 2: Core implementation\n const coreTask = this.extractCoreTask(description);\n if (coreTask) {\n subtasks.push({\n id: uuidv4(),\n title: 'Core Implementation',\n description: coreTask,\n criteria: criteria.filter(c => c.toLowerCase().includes('function') || c.toLowerCase().includes('implement')),\n priority: 2,\n estimatedIterations: 5,\n dependencies: subtasks.length > 0 ? [subtasks[0].id] : [],\n type: 'implementation'\n });\n }\n\n // Pattern 3: Testing tasks\n if (this.needsTesting(criteria)) {\n subtasks.push({\n id: uuidv4(),\n title: 'Testing Implementation',\n description: 'Create comprehensive tests',\n criteria: criteria.filter(c => c.toLowerCase().includes('test')),\n priority: 3,\n estimatedIterations: 3,\n dependencies: subtasks.length > 0 ? [subtasks[subtasks.length - 1].id] : [],\n type: 'testing'\n });\n }\n\n // Pattern 4: Documentation tasks\n if (this.needsDocumentation(criteria)) {\n subtasks.push({\n id: uuidv4(),\n title: 'Documentation',\n description: 'Create documentation and examples',\n criteria: criteria.filter(c => c.toLowerCase().includes('doc')),\n priority: 4,\n estimatedIterations: 2,\n dependencies: [],\n type: 'documentation'\n });\n }\n\n return subtasks.length > 0 ? subtasks : [{\n id: uuidv4(),\n title: description,\n description,\n criteria,\n priority: 1,\n estimatedIterations: Math.min(8, Math.max(3, complexity.score)),\n dependencies: [],\n type: 'single'\n }];\n }\n\n /**\n * Create execution plan from breakdown\n */\n private async createExecutionPlan(\n breakdown: TaskBreakdown[],\n options?: { forceSequential?: boolean }\n ): Promise<ExecutionPlan> {\n const plan: ExecutionPlan = {\n phases: [],\n totalEstimatedTime: 0,\n parallelizable: !options?.forceSequential && breakdown.length > 1\n };\n\n if (options?.forceSequential || !this.canExecuteInParallel(breakdown)) {\n // Sequential execution\n plan.phases = breakdown.map((task, index) => ({\n id: `phase-${index + 1}`,\n tasks: [task],\n dependencies: index > 0 ? [`phase-${index}`] : [],\n parallelExecution: false\n }));\n } else {\n // Group tasks by dependencies for parallel execution\n const phases = this.groupTasksByDependencies(breakdown);\n plan.phases = phases;\n }\n\n plan.totalEstimatedTime = plan.phases.reduce(\n (sum, phase) => sum + Math.max(...phase.tasks.map(t => t.estimatedIterations)) * 30000, // 30s per iteration\n 0\n );\n\n return plan;\n }\n\n /**\n * Execute the orchestration plan\n */\n private async executeOrchestration(task: OrchestratedTask): Promise<OrchestrationResult> {\n const result: OrchestrationResult = {\n orchestrationId: task.id,\n success: false,\n completedLoops: [],\n failedLoops: [],\n totalDuration: 0,\n insights: []\n };\n\n try {\n task.status = 'executing';\n\n for (const phase of task.executionPlan.phases) {\n logger.info(`Executing phase ${phase.id} with ${phase.tasks.length} tasks`);\n\n if (phase.parallelExecution && phase.tasks.length > 1) {\n // Parallel execution\n const parallelResult = await this.executeParallelLoops(phase.tasks);\n \n for (const [taskId, taskResult] of parallelResult.results) {\n if (taskResult.success) {\n result.completedLoops.push(taskResult.loopId);\n } else {\n result.failedLoops.push({ loopId: taskResult.loopId, error: taskResult.error || 'Unknown error' });\n }\n }\n } else {\n // Sequential execution\n for (const phaseTask of phase.tasks) {\n const loopResult = await this.executeTaskLoop(phaseTask, task);\n \n if (loopResult.success) {\n result.completedLoops.push(loopResult.loopId);\n \n // Share learnings with other tasks\n if (this.config.sharedContextEnabled) {\n await this.updateSharedContext(task, loopResult);\n }\n } else {\n result.failedLoops.push({ loopId: loopResult.loopId, error: loopResult.error || 'Unknown error' });\n \n // Handle failure based on strategy\n if (this.config.fallbackStrategy === 'abort') {\n throw new Error(`Task failed: ${loopResult.error}`);\n }\n }\n }\n }\n }\n\n task.status = 'completed';\n result.success = result.failedLoops.length === 0;\n result.totalDuration = Date.now() - task.startTime;\n\n // Generate insights\n result.insights = this.generateOrchestrationInsights(task, result);\n\n return result;\n\n } catch (error: unknown) {\n task.status = 'failed';\n result.success = false;\n result.error = (error as Error).message;\n return result;\n }\n }\n\n /**\n * Execute a single task as a Ralph loop\n */\n private async executeTaskLoop(\n taskBreakdown: TaskBreakdown,\n orchestratedTask: OrchestratedTask\n ): Promise<{ success: boolean; loopId: string; error?: string }> {\n try {\n // Create Ralph loop with shared context\n const bridge = new RalphStackMemoryBridge({\n baseDir: `.ralph-${taskBreakdown.id}`,\n maxIterations: taskBreakdown.estimatedIterations * 2, // Allow extra iterations\n useStackMemory: true\n });\n\n await bridge.initialize({\n task: taskBreakdown.description,\n criteria: taskBreakdown.criteria.join('\\n')\n });\n\n // Store loop reference\n this.activeLoops.set(taskBreakdown.id, bridge);\n orchestratedTask.loops.set(taskBreakdown.id, {\n bridge,\n status: 'running',\n startTime: Date.now()\n });\n\n // Run the loop\n await bridge.run();\n\n // Check result\n const loopInfo = orchestratedTask.loops.get(taskBreakdown.id);\n if (loopInfo) {\n loopInfo.status = 'completed';\n loopInfo.endTime = Date.now();\n }\n\n this.activeLoops.delete(taskBreakdown.id);\n\n return { success: true, loopId: taskBreakdown.id };\n\n } catch (error: unknown) {\n logger.error(`Task loop failed: ${taskBreakdown.title}`, error as Error);\n \n const loopInfo = orchestratedTask.loops.get(taskBreakdown.id);\n if (loopInfo) {\n loopInfo.status = 'failed';\n loopInfo.error = (error as Error).message;\n loopInfo.endTime = Date.now();\n }\n\n this.activeLoops.delete(taskBreakdown.id);\n\n return { success: false, loopId: taskBreakdown.id, error: (error as Error).message };\n }\n }\n\n /**\n * Execute a task in parallel context\n */\n private async executeParallelTask(\n task: TaskBreakdown,\n execution: ParallelExecution\n ): Promise<void> {\n try {\n const result = await this.executeTaskLoop(task, {\n id: execution.id,\n description: `Parallel task: ${task.title}`,\n breakdown: [task],\n executionPlan: { phases: [], totalEstimatedTime: 0, parallelizable: false },\n status: 'executing',\n startTime: execution.startTime,\n loops: new Map(),\n sharedContext: execution.sharedState\n });\n\n execution.results.set(task.id, result);\n\n } catch (error: unknown) {\n execution.results.set(task.id, {\n success: false,\n loopId: task.id,\n error: (error as Error).message\n });\n }\n }\n\n /**\n * Update shared context between tasks\n */\n private async updateSharedContext(\n orchestratedTask: OrchestratedTask,\n loopResult: { loopId: string }\n ): Promise<void> {\n // Extract learnings from completed loop and share with other active loops\n // This would integrate with StackMemory's shared context layer\n logger.debug('Updating shared context', { orchestrationId: orchestratedTask.id, loopId: loopResult.loopId });\n }\n\n /**\n * Generate insights from orchestration\n */\n private generateOrchestrationInsights(\n task: OrchestratedTask,\n result: OrchestrationResult\n ): string[] {\n const insights: string[] = [];\n\n // Performance insights\n const avgLoopDuration = Array.from(task.loops.values())\n .filter(l => l.endTime && l.startTime)\n .map(l => l.endTime! - l.startTime)\n .reduce((sum, duration) => sum + duration, 0) / task.loops.size;\n\n if (avgLoopDuration > 0) {\n insights.push(`Average loop duration: ${Math.round(avgLoopDuration / 1000)}s`);\n }\n\n // Success rate insights\n const successRate = result.completedLoops.length / (result.completedLoops.length + result.failedLoops.length);\n insights.push(`Success rate: ${Math.round(successRate * 100)}%`);\n\n // Complexity insights\n if (task.breakdown.length > 3) {\n insights.push('Complex task benefited from breakdown into multiple loops');\n }\n\n return insights;\n }\n\n // Helper methods for task analysis\n private assessTaskComplexity(description: string): { score: number; factors: string[] } {\n const factors: string[] = [];\n let score = 1;\n\n if (description.length > 200) { score += 2; factors.push('long description'); }\n if (description.includes('and')) { score += 1; factors.push('multiple requirements'); }\n if (description.toLowerCase().includes('test')) { score += 2; factors.push('testing required'); }\n if (description.toLowerCase().includes('document')) { score += 1; factors.push('documentation needed'); }\n if (description.toLowerCase().includes('refactor')) { score += 3; factors.push('refactoring complexity'); }\n\n return { score, factors };\n }\n\n private needsSetup(description: string): boolean {\n const setupKeywords = ['project', 'initialize', 'setup', 'scaffold', 'create structure'];\n return setupKeywords.some(keyword => description.toLowerCase().includes(keyword));\n }\n\n private needsTesting(criteria: string[]): boolean {\n return criteria.some(c => c.toLowerCase().includes('test'));\n }\n\n private needsDocumentation(criteria: string[]): boolean {\n return criteria.some(c => c.toLowerCase().includes('doc'));\n }\n\n private extractCoreTask(description: string): string | null {\n // Extract the main implementation task from description\n const sentences = description.split('.');\n return sentences.find(s => s.toLowerCase().includes('implement') || s.toLowerCase().includes('create') || s.toLowerCase().includes('add')) || null;\n }\n\n private canExecuteInParallel(breakdown: TaskBreakdown[]): boolean {\n // Check if tasks can be executed in parallel based on dependencies\n return breakdown.some(task => task.dependencies.length === 0);\n }\n\n private groupTasksByDependencies(breakdown: TaskBreakdown[]): any[] {\n // Group tasks into phases based on dependencies\n const phases: any[] = [];\n const processed = new Set<string>();\n \n while (processed.size < breakdown.length) {\n const readyTasks = breakdown.filter(task => \n !processed.has(task.id) && \n task.dependencies.every(dep => processed.has(dep))\n );\n\n if (readyTasks.length === 0) break; // Circular dependency\n\n phases.push({\n id: `phase-${phases.length + 1}`,\n tasks: readyTasks,\n dependencies: phases.length > 0 ? [`phase-${phases.length}`] : [],\n parallelExecution: readyTasks.length > 1\n });\n\n readyTasks.forEach(task => processed.add(task.id));\n }\n\n return phases;\n }\n\n private validateDependencies(plan: ExecutionPlan): string[] {\n const errors: string[] = [];\n const allTaskIds = new Set(\n plan.phases.flatMap(phase => phase.tasks.map(task => task.id))\n );\n\n for (const phase of plan.phases) {\n for (const task of phase.tasks) {\n for (const dep of task.dependencies) {\n if (!allTaskIds.has(dep)) {\n errors.push(`Task ${task.id} depends on non-existent task ${dep}`);\n }\n }\n }\n }\n\n return errors;\n }\n\n /**\n * Monitor orchestration progress\n */\n getOrchestrationStatus(orchestrationId: string): OrchestratedTask | null {\n return this.activeTasks.get(orchestrationId) || null;\n }\n\n /**\n * Stop orchestration\n */\n async stopOrchestration(orchestrationId: string): Promise<void> {\n const task = this.activeTasks.get(orchestrationId);\n if (!task) return;\n\n // Stop all active loops\n for (const [loopId, loopInfo] of task.loops) {\n if (loopInfo.status === 'running') {\n try {\n // Signal stop to the loop\n loopInfo.status = 'stopped';\n this.activeLoops.delete(loopId);\n } catch (error: unknown) {\n logger.error(`Failed to stop loop ${loopId}`, error as Error);\n }\n }\n }\n\n task.status = 'stopped';\n this.activeTasks.delete(orchestrationId);\n\n logger.info('Orchestration stopped', { orchestrationId });\n }\n}\n\n// Export default instance\nexport const multiLoopOrchestrator = new MultiLoopOrchestrator();"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../src/integrations/ralph/patterns/compounding-engineering-pattern.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Compounding Engineering Pattern Implementation\n * \n * Transforms traditional engineering's diminishing returns into cumulative learning.\n * Each feature development improves future development capabilities.\n * \n * Core Philosophy: \"Make the next feature easier to build from the feature that you just added.\"\n */\n\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { v4 as uuidv4 } from 'uuid';\nimport { logger } from '../../../core/monitoring/logger.js';\n\nexport interface FeatureLearning {\n id: string;\n featureName: string;\n timestamp: number;\n developmentPhase: 'planning' | 'implementation' | 'testing' | 'deployment';\n \n // What worked well\n successes: {\n strategy: string;\n impact: 'high' | 'medium' | 'low';\n reusability: 'universal' | 'domain_specific' | 'feature_specific';\n description: string;\n }[];\n \n // What didn't work\n failures: {\n issue: string;\n cause: string;\n solution: string;\n prevention: string;\n }[];\n \n // Emerging patterns\n patterns: {\n name: string;\n context: string;\n solution: string;\n examples: string[];\n }[];\n \n // Agent improvements\n agentLearnings: {\n commonMistakes: string[];\n effectivePrompts: string[];\n toolUsagePatterns: string[];\n coordinationInsights: string[];\n };\n \n // Automation opportunities\n automationOpportunities: {\n task: string;\n frequency: 'always' | 'often' | 'sometimes';\n complexity: 'trivial' | 'simple' | 'complex';\n implementation: 'hook' | 'command' | 'subagent';\n }[];\n}\n\nexport interface CompoundedKnowledge {\n totalFeatures: number;\n learningsByCategory: {\n planning: FeatureLearning[];\n implementation: FeatureLearning[];\n testing: FeatureLearning[];\n deployment: FeatureLearning[];\n };\n \n // Distilled wisdom\n bestPractices: {\n category: string;\n practice: string;\n evidence: string[];\n confidence: number;\n }[];\n \n // Generated artifacts\n automatedHooks: string[];\n specializedAgents: string[];\n customCommands: string[];\n \n // Metrics\n metrics: {\n developmentVelocityTrend: number[];\n errorRateReduction: number;\n codeReuseIncrease: number;\n onboardingTimeReduction: number;\n };\n}\n\n/**\n * Compounding Engineering Pattern Manager\n * Captures, processes, and compounds development learnings\n */\nexport class CompoundingEngineeringManager {\n private knowledgeBase: CompoundedKnowledge;\n private baseDir: string;\n private projectId: string;\n \n constructor(baseDir: string = './.compounding', projectId?: string) {\n this.baseDir = baseDir;\n this.projectId = projectId || 'default';\n this.knowledgeBase = {\n totalFeatures: 0,\n learningsByCategory: {\n planning: [],\n implementation: [],\n testing: [],\n deployment: [],\n },\n bestPractices: [],\n automatedHooks: [],\n specializedAgents: [],\n customCommands: [],\n metrics: {\n developmentVelocityTrend: [],\n errorRateReduction: 0,\n codeReuseIncrease: 0,\n onboardingTimeReduction: 0,\n },\n };\n }\n\n /**\n * Initialize the compounding system\n */\n async initialize(): Promise<void> {\n await fs.mkdir(this.baseDir, { recursive: true });\n await this.loadExistingKnowledge();\n logger.info('Compounding Engineering Manager initialized', {\n totalFeatures: this.knowledgeBase.totalFeatures,\n baseDir: this.baseDir,\n });\n }\n\n /**\n * Capture learning from a feature development session\n */\n async captureFeatureLearning(\n featureName: string,\n sessionData: any,\n agentOutputs: any[],\n userFeedback?: string\n ): Promise<string> {\n const learningId = uuidv4();\n \n logger.info('Capturing feature learning', { \n featureName, \n learningId,\n agentCount: agentOutputs.length \n });\n\n // Analyze session for learnings\n const learning = await this.extractLearningsFromSession(\n learningId,\n featureName,\n sessionData,\n agentOutputs,\n userFeedback\n );\n\n // Store the learning\n await this.storeLearning(learning);\n \n // Update compounded knowledge\n await this.updateCompoundedKnowledge(learning);\n \n // Generate new artifacts if patterns emerge\n await this.generateArtifacts();\n \n return learningId;\n }\n\n /**\n * Extract actionable learnings from development session\n */\n private async extractLearningsFromSession(\n id: string,\n featureName: string,\n sessionData: any,\n agentOutputs: any[],\n userFeedback?: string\n ): Promise<FeatureLearning> {\n // Analyze what worked well\n const successes = this.identifySuccesses(sessionData, agentOutputs);\n \n // Analyze failures and resolutions\n const failures = this.identifyFailures(sessionData, agentOutputs);\n \n // Extract emerging patterns\n const patterns = this.extractPatterns(sessionData, agentOutputs);\n \n // Analyze agent behavior\n const agentLearnings = this.analyzeAgentBehavior(agentOutputs);\n \n // Identify automation opportunities\n const automationOpportunities = this.identifyAutomationOpportunities(\n sessionData,\n agentOutputs\n );\n\n return {\n id,\n featureName,\n timestamp: Date.now(),\n developmentPhase: this.inferDevelopmentPhase(sessionData),\n successes,\n failures,\n patterns,\n agentLearnings,\n automationOpportunities,\n };\n }\n\n /**\n * Identify what worked well in the session\n */\n private identifySuccesses(\n sessionData: any,\n agentOutputs: any[]\n ): FeatureLearning['successes'] {\n const successes = [];\n\n // Analyze successful agent strategies\n for (const output of agentOutputs) {\n if (output.success && output.strategy) {\n successes.push({\n strategy: output.strategy,\n impact: this.assessImpact(output),\n reusability: this.assessReusability(output),\n description: output.description || 'Successful agent execution',\n });\n }\n }\n\n // Analyze successful patterns in code\n if (sessionData.codePatterns) {\n for (const pattern of sessionData.codePatterns) {\n if (pattern.successful) {\n successes.push({\n strategy: `Code pattern: ${pattern.name}`,\n impact: 'high',\n reusability: 'universal',\n description: pattern.description,\n });\n }\n }\n }\n\n return successes;\n }\n\n /**\n * Identify failures and their resolutions\n */\n private identifyFailures(\n sessionData: any,\n agentOutputs: any[]\n ): FeatureLearning['failures'] {\n const failures = [];\n\n // Analyze agent failures\n for (const output of agentOutputs) {\n if (output.errors && output.errors.length > 0) {\n for (const error of output.errors) {\n failures.push({\n issue: error.message || 'Agent execution failed',\n cause: error.cause || 'Unknown cause',\n solution: error.resolution || 'Manual intervention required',\n prevention: this.generatePreventionStrategy(error),\n });\n }\n }\n }\n\n // Analyze build/test failures\n if (sessionData.buildErrors) {\n for (const error of sessionData.buildErrors) {\n failures.push({\n issue: `Build error: ${error.type}`,\n cause: error.details,\n solution: error.fix,\n prevention: 'Add pre-build validation hook',\n });\n }\n }\n\n return failures;\n }\n\n /**\n * Extract reusable patterns from the session\n */\n private extractPatterns(\n sessionData: any,\n agentOutputs: any[]\n ): FeatureLearning['patterns'] {\n const patterns = [];\n\n // Agent coordination patterns\n if (agentOutputs.length > 1) {\n const coordinationPattern = this.analyzeCoordinationPattern(agentOutputs);\n if (coordinationPattern) {\n patterns.push(coordinationPattern);\n }\n }\n\n // Code structure patterns\n if (sessionData.codeStructure) {\n const structurePattern = this.analyzeCodeStructurePattern(sessionData.codeStructure);\n if (structurePattern) {\n patterns.push(structurePattern);\n }\n }\n\n return patterns;\n }\n\n /**\n * Analyze agent behavior for improvements\n */\n private analyzeAgentBehavior(agentOutputs: any[]): FeatureLearning['agentLearnings'] {\n const commonMistakes = [];\n const effectivePrompts = [];\n const toolUsagePatterns = [];\n const coordinationInsights = [];\n\n for (const output of agentOutputs) {\n // Common mistakes\n if (output.retries && output.retries.length > 0) {\n commonMistakes.push(...output.retries.map((r: any) => r.reason));\n }\n\n // Effective prompts\n if (output.success && output.promptUsed) {\n effectivePrompts.push(output.promptUsed);\n }\n\n // Tool usage\n if (output.toolsUsed) {\n toolUsagePatterns.push(...output.toolsUsed);\n }\n\n // Coordination\n if (output.coordination) {\n coordinationInsights.push(output.coordination.insight);\n }\n }\n\n return {\n commonMistakes: [...new Set(commonMistakes)],\n effectivePrompts: [...new Set(effectivePrompts)],\n toolUsagePatterns: [...new Set(toolUsagePatterns)],\n coordinationInsights: [...new Set(coordinationInsights)],\n };\n }\n\n /**\n * Identify tasks that can be automated\n */\n private identifyAutomationOpportunities(\n sessionData: any,\n agentOutputs: any[]\n ): FeatureLearning['automationOpportunities'] {\n const opportunities = [];\n\n // Repeated agent tasks\n const taskFrequency = this.analyzeTaskFrequency(agentOutputs);\n for (const [task, frequency] of Object.entries(taskFrequency)) {\n if (frequency > 2) {\n opportunities.push({\n task,\n frequency: 'often',\n complexity: 'simple',\n implementation: 'hook',\n });\n }\n }\n\n // Manual interventions\n if (sessionData.manualSteps) {\n for (const step of sessionData.manualSteps) {\n opportunities.push({\n task: step.description,\n frequency: 'sometimes',\n complexity: step.complexity || 'simple',\n implementation: 'command',\n });\n }\n }\n\n return opportunities;\n }\n\n /**\n * Update compounded knowledge with new learning\n */\n private async updateCompoundedKnowledge(learning: FeatureLearning): Promise<void> {\n // Add to appropriate category\n this.knowledgeBase.learningsByCategory[learning.developmentPhase].push(learning);\n this.knowledgeBase.totalFeatures++;\n\n // Update best practices\n await this.updateBestPractices(learning);\n \n // Update metrics\n await this.updateMetrics(learning);\n \n // Save updated knowledge\n await this.saveKnowledge();\n }\n\n /**\n * Generate artifacts (hooks, commands, agents) from accumulated learnings\n */\n private async generateArtifacts(): Promise<void> {\n // Generate hooks from automation opportunities\n await this.generateHooks();\n \n // Generate specialized agents from patterns\n await this.generateSpecializedAgents();\n \n // Generate custom commands from repeated tasks\n await this.generateCustomCommands();\n }\n\n /**\n * Generate automation hooks\n */\n private async generateHooks(): Promise<void> {\n const allOpportunities = Object.values(this.knowledgeBase.learningsByCategory)\n .flat()\n .flatMap(learning => learning.automationOpportunities)\n .filter(opp => opp.implementation === 'hook');\n\n const hookCounts = new Map<string, number>();\n for (const opp of allOpportunities) {\n hookCounts.set(opp.task, (hookCounts.get(opp.task) || 0) + 1);\n }\n\n // Generate hooks for frequently occurring tasks\n for (const [task, count] of hookCounts) {\n if (count >= 3 && !this.knowledgeBase.automatedHooks.includes(task)) {\n await this.createHook(task);\n this.knowledgeBase.automatedHooks.push(task);\n }\n }\n }\n\n /**\n * Create an automation hook\n */\n private async createHook(task: string): Promise<void> {\n const hookName = task.replace(/\\s+/g, '-').toLowerCase();\n const hookPath = path.join(this.baseDir, 'hooks', `${hookName}.ts`);\n \n await fs.mkdir(path.dirname(hookPath), { recursive: true });\n \n const hookContent = `\n/**\n * Auto-generated hook for: ${task}\n * Generated by Compounding Engineering Pattern\n */\n\nexport async function ${hookName.replace(/-/g, '')}Hook() {\n // TODO: Implement automation for: ${task}\n console.log('Executing automated hook: ${task}');\n}\n `;\n\n await fs.writeFile(hookPath, hookContent);\n logger.info('Generated automation hook', { task, hookPath });\n }\n\n /**\n * Load existing knowledge base\n */\n private async loadExistingKnowledge(): Promise<void> {\n const knowledgePath = path.join(this.baseDir, 'knowledge.json');\n \n try {\n const content = await fs.readFile(knowledgePath, 'utf-8');\n this.knowledgeBase = JSON.parse(content);\n } catch (error) {\n // No existing knowledge, start fresh\n logger.info('Starting fresh knowledge base');\n }\n }\n\n /**\n * Save knowledge base to disk\n */\n private async saveKnowledge(): Promise<void> {\n const knowledgePath = path.join(this.baseDir, 'knowledge.json');\n await fs.writeFile(\n knowledgePath,\n JSON.stringify(this.knowledgeBase, null, 2)\n );\n }\n\n /**\n * Get current compounding metrics\n */\n getCompoundingMetrics(): {\n totalFeatures: number;\n automationLevel: number;\n learningVelocity: number;\n knowledgeReuse: number;\n } {\n const totalLearnings = Object.values(this.knowledgeBase.learningsByCategory)\n .flat().length;\n \n const automationLevel = this.knowledgeBase.automatedHooks.length / \n Math.max(totalLearnings, 1);\n \n const recentLearnings = totalLearnings > 5 ? \n totalLearnings / 5 : totalLearnings;\n \n return {\n totalFeatures: this.knowledgeBase.totalFeatures,\n automationLevel,\n learningVelocity: recentLearnings,\n knowledgeReuse: this.knowledgeBase.bestPractices.length,\n };\n }\n\n // Helper methods\n private assessImpact(output: any): 'high' | 'medium' | 'low' {\n if (output.linesChanged > 100) return 'high';\n if (output.linesChanged > 20) return 'medium';\n return 'low';\n }\n\n private assessReusability(output: any): 'universal' | 'domain_specific' | 'feature_specific' {\n if (output.pattern === 'generic') return 'universal';\n if (output.domain) return 'domain_specific';\n return 'feature_specific';\n }\n\n private generatePreventionStrategy(error: any): string {\n return `Add validation for: ${error.type || 'unknown error type'}`;\n }\n\n private inferDevelopmentPhase(sessionData: any): 'planning' | 'implementation' | 'testing' | 'deployment' {\n if (sessionData.phase) return sessionData.phase;\n if (sessionData.testsRun) return 'testing';\n if (sessionData.codeGenerated) return 'implementation';\n return 'planning';\n }\n\n private analyzeCoordinationPattern(agentOutputs: any[]): any {\n return {\n name: 'Multi-agent coordination',\n context: `${agentOutputs.length} agents worked together`,\n solution: 'Successful multi-agent coordination pattern',\n examples: agentOutputs.map(a => a.role || 'unknown'),\n };\n }\n\n private analyzeCodeStructurePattern(structure: any): any {\n return {\n name: 'Code structure pattern',\n context: structure.type,\n solution: structure.pattern,\n examples: structure.examples || [],\n };\n }\n\n private analyzeTaskFrequency(agentOutputs: any[]): Record<string, number> {\n const frequency: Record<string, number> = {};\n for (const output of agentOutputs) {\n if (output.task) {\n frequency[output.task] = (frequency[output.task] || 0) + 1;\n }\n }\n return frequency;\n }\n\n private async updateBestPractices(learning: FeatureLearning): Promise<void> {\n // Extract best practices from successes\n for (const success of learning.successes) {\n if (success.impact === 'high' && success.reusability === 'universal') {\n const existing = this.knowledgeBase.bestPractices.find(\n bp => bp.practice === success.strategy\n );\n \n if (existing) {\n existing.evidence.push(learning.featureName);\n existing.confidence = Math.min(existing.confidence + 0.1, 1.0);\n } else {\n this.knowledgeBase.bestPractices.push({\n category: learning.developmentPhase,\n practice: success.strategy,\n evidence: [learning.featureName],\n confidence: 0.7,\n });\n }\n }\n }\n }\n\n private async updateMetrics(learning: FeatureLearning): Promise<void> {\n // Update development velocity trend\n const velocityScore = learning.successes.length - learning.failures.length;\n this.knowledgeBase.metrics.developmentVelocityTrend.push(velocityScore);\n \n // Keep only last 10 measurements\n if (this.knowledgeBase.metrics.developmentVelocityTrend.length > 10) {\n this.knowledgeBase.metrics.developmentVelocityTrend.shift();\n }\n }\n\n private async generateSpecializedAgents(): Promise<void> {\n // Implementation for generating specialized agents from patterns\n }\n\n private async generateCustomCommands(): Promise<void> {\n // Implementation for generating custom commands from repeated tasks\n }\n}\n\nexport default CompoundingEngineeringManager;"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../src/integrations/ralph/patterns/extended-coherence-sessions.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Extended Coherence Work Sessions Implementation\n * \n * Enables agents to work continuously for hours without performance degradation.\n * Maintains contextual awareness and high-quality output over extended periods.\n * \n * Addresses the challenge of AI agents losing coherence after short time periods.\n */\n\nimport { v4 as uuidv4 } from 'uuid';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { logger } from '../../../core/monitoring/logger.js';\nimport { RalphStackMemoryBridge } from '../bridge/ralph-stackmemory-bridge.js';\n\nexport interface CoherenceMetrics {\n sessionId: string;\n startTime: number;\n currentTime: number;\n duration: number; // in minutes\n \n // Performance indicators\n outputQuality: number; // 0-1 scale\n contextRetention: number; // 0-1 scale\n taskRelevance: number; // 0-1 scale\n progressRate: number; // tasks/hour\n \n // Coherence indicators\n repetitionRate: number; // how often agent repeats itself\n divergenceRate: number; // how often agent goes off-topic\n errorRate: number; // errors per iteration\n \n // State management\n memoryUsage: number; // MB\n contextWindowUsage: number; // percentage\n stateCheckpoints: number; // number of saves\n}\n\nexport interface CoherenceSession {\n id: string;\n agent: {\n id: string;\n role: string;\n model: string;\n };\n task: {\n description: string;\n complexity: 'low' | 'medium' | 'high' | 'very_high';\n estimatedDuration: number; // minutes\n breakpoints: string[]; // natural stopping points\n };\n \n // Session configuration\n config: {\n maxDuration: number; // minutes\n coherenceThreshold: number; // 0-1, below which to intervene\n checkpointInterval: number; // minutes\n refreshStrategy: 'none' | 'checkpoint' | 'context_refresh' | 'full_restart';\n \n // Advanced coherence features\n enableMemoryPalace: boolean; // structured memory system\n enableProgressTracking: boolean; // track incremental progress\n enableAutoRefresh: boolean; // automatic context refresh\n enableHealthMonitoring: boolean; // monitor agent health\n };\n \n // Runtime state\n state: {\n status: 'active' | 'paused' | 'degraded' | 'completed' | 'failed';\n currentPhase: string;\n completedMilestones: string[];\n lastCheckpoint: number;\n interventionCount: number;\n refreshCount: number;\n };\n \n // Historical data\n metrics: CoherenceMetrics[];\n interventions: {\n timestamp: number;\n type: 'checkpoint' | 'refresh' | 'restart' | 'guidance';\n reason: string;\n effectiveness: number; // 0-1\n }[];\n}\n\n/**\n * Extended Coherence Manager\n * Orchestrates long-running agent sessions with coherence preservation\n */\nexport class ExtendedCoherenceManager {\n private activeSessions: Map<string, CoherenceSession> = new Map();\n private baseDir: string;\n private monitoringInterval?: NodeJS.Timeout;\n private performanceHistory: Map<string, number[]> = new Map();\n \n constructor(baseDir: string = './.coherence-sessions') {\n this.baseDir = baseDir;\n }\n\n /**\n * Initialize the coherence management system\n */\n async initialize(): Promise<void> {\n await fs.mkdir(this.baseDir, { recursive: true });\n \n // Start monitoring loop\n this.monitoringInterval = setInterval(\n () => this.monitorActiveSessionsHealth(),\n 60000 // Check every minute\n );\n \n logger.info('Extended Coherence Manager initialized', {\n baseDir: this.baseDir,\n monitoringEnabled: true,\n });\n }\n\n /**\n * Start an extended coherence work session\n */\n async startCoherenceSession(\n agentConfig: { id: string; role: string; model: string },\n taskConfig: {\n description: string;\n complexity: 'low' | 'medium' | 'high' | 'very_high';\n estimatedDuration: number;\n breakpoints?: string[];\n },\n sessionConfig?: Partial<CoherenceSession['config']>\n ): Promise<string> {\n const sessionId = uuidv4();\n \n // Configure session based on task complexity\n const defaultConfig = this.generateConfigForComplexity(taskConfig.complexity);\n const config = { ...defaultConfig, ...sessionConfig };\n \n const session: CoherenceSession = {\n id: sessionId,\n agent: agentConfig,\n task: {\n ...taskConfig,\n breakpoints: taskConfig.breakpoints || this.generateBreakpoints(taskConfig),\n },\n config,\n state: {\n status: 'active',\n currentPhase: 'initialization',\n completedMilestones: [],\n lastCheckpoint: Date.now(),\n interventionCount: 0,\n refreshCount: 0,\n },\n metrics: [],\n interventions: [],\n };\n\n this.activeSessions.set(sessionId, session);\n \n // Initialize session workspace\n await this.initializeSessionWorkspace(session);\n \n // Start the actual agent work session\n await this.launchAgentSession(session);\n \n logger.info('Extended coherence session started', {\n sessionId,\n agent: agentConfig.role,\n estimatedDuration: taskConfig.estimatedDuration,\n maxDuration: config.maxDuration,\n });\n\n return sessionId;\n }\n\n /**\n * Generate configuration optimized for task complexity\n */\n private generateConfigForComplexity(\n complexity: 'low' | 'medium' | 'high' | 'very_high'\n ): CoherenceSession['config'] {\n const configs = {\n low: {\n maxDuration: 60, // 1 hour\n coherenceThreshold: 0.7,\n checkpointInterval: 15, // 15 minutes\n refreshStrategy: 'checkpoint' as const,\n enableMemoryPalace: false,\n enableProgressTracking: true,\n enableAutoRefresh: false,\n enableHealthMonitoring: true,\n },\n medium: {\n maxDuration: 180, // 3 hours\n coherenceThreshold: 0.8,\n checkpointInterval: 10, // 10 minutes\n refreshStrategy: 'context_refresh' as const,\n enableMemoryPalace: true,\n enableProgressTracking: true,\n enableAutoRefresh: true,\n enableHealthMonitoring: true,\n },\n high: {\n maxDuration: 360, // 6 hours\n coherenceThreshold: 0.85,\n checkpointInterval: 8, // 8 minutes\n refreshStrategy: 'context_refresh' as const,\n enableMemoryPalace: true,\n enableProgressTracking: true,\n enableAutoRefresh: true,\n enableHealthMonitoring: true,\n },\n very_high: {\n maxDuration: 720, // 12 hours\n coherenceThreshold: 0.9,\n checkpointInterval: 5, // 5 minutes\n refreshStrategy: 'full_restart' as const,\n enableMemoryPalace: true,\n enableProgressTracking: true,\n enableAutoRefresh: true,\n enableHealthMonitoring: true,\n },\n };\n\n return configs[complexity];\n }\n\n /**\n * Monitor active sessions for coherence degradation\n */\n private async monitorActiveSessionsHealth(): Promise<void> {\n for (const [sessionId, session] of this.activeSessions) {\n if (session.state.status === 'active') {\n await this.assessSessionCoherence(session);\n }\n }\n }\n\n /**\n * Assess session coherence and intervene if necessary\n */\n private async assessSessionCoherence(session: CoherenceSession): Promise<void> {\n const metrics = await this.calculateCoherenceMetrics(session);\n session.metrics.push(metrics);\n \n // Keep only last 10 metrics for performance\n if (session.metrics.length > 10) {\n session.metrics.shift();\n }\n\n const overallCoherence = this.calculateOverallCoherence(metrics);\n \n logger.debug('Session coherence assessment', {\n sessionId: session.id,\n coherence: overallCoherence,\n threshold: session.config.coherenceThreshold,\n duration: metrics.duration,\n });\n\n // Intervene if coherence drops below threshold\n if (overallCoherence < session.config.coherenceThreshold) {\n await this.interventeInSession(session, 'coherence_degradation', overallCoherence);\n }\n \n // Check if checkpoint is due\n const timeSinceCheckpoint = Date.now() - session.state.lastCheckpoint;\n const checkpointDue = timeSinceCheckpoint > (session.config.checkpointInterval * 60 * 1000);\n \n if (checkpointDue) {\n await this.checkpointSession(session);\n }\n }\n\n /**\n * Calculate comprehensive coherence metrics\n */\n private async calculateCoherenceMetrics(session: CoherenceSession): Promise<CoherenceMetrics> {\n const now = Date.now();\n const duration = (now - session.metrics[0]?.startTime || now) / (1000 * 60); // minutes\n \n // Load recent agent outputs for analysis\n const recentOutputs = await this.getRecentAgentOutputs(session);\n \n // Calculate various coherence indicators\n const outputQuality = this.assessOutputQuality(recentOutputs);\n const contextRetention = this.assessContextRetention(recentOutputs, session.task);\n const taskRelevance = this.assessTaskRelevance(recentOutputs, session.task);\n const repetitionRate = this.calculateRepetitionRate(recentOutputs);\n const divergenceRate = this.calculateDivergenceRate(recentOutputs, session.task);\n const errorRate = this.calculateErrorRate(recentOutputs);\n const progressRate = this.calculateProgressRate(session);\n\n return {\n sessionId: session.id,\n startTime: session.metrics[0]?.startTime || now,\n currentTime: now,\n duration,\n outputQuality,\n contextRetention,\n taskRelevance,\n progressRate,\n repetitionRate,\n divergenceRate,\n errorRate,\n memoryUsage: await this.getMemoryUsage(session),\n contextWindowUsage: await this.getContextWindowUsage(session),\n stateCheckpoints: session.interventions.filter(i => i.type === 'checkpoint').length,\n };\n }\n\n /**\n * Calculate overall coherence score\n */\n private calculateOverallCoherence(metrics: CoherenceMetrics): number {\n // Weighted average of coherence indicators\n const weights = {\n outputQuality: 0.3,\n contextRetention: 0.25,\n taskRelevance: 0.25,\n repetitionPenalty: 0.1, // penalty for repetition\n divergencePenalty: 0.1, // penalty for divergence\n };\n\n const baseScore = \n metrics.outputQuality * weights.outputQuality +\n metrics.contextRetention * weights.contextRetention +\n metrics.taskRelevance * weights.taskRelevance;\n \n const penalties = \n metrics.repetitionRate * weights.repetitionPenalty +\n metrics.divergenceRate * weights.divergencePenalty;\n\n return Math.max(0, baseScore - penalties);\n }\n\n /**\n * Intervene in a session to restore coherence\n */\n private async interventeInSession(\n session: CoherenceSession,\n reason: string,\n currentCoherence: number\n ): Promise<void> {\n logger.warn('Intervening in session due to coherence degradation', {\n sessionId: session.id,\n reason,\n currentCoherence,\n interventionCount: session.state.interventionCount,\n });\n\n const intervention = {\n timestamp: Date.now(),\n type: session.config.refreshStrategy,\n reason,\n effectiveness: 0, // will be calculated later\n };\n\n switch (session.config.refreshStrategy) {\n case 'checkpoint':\n await this.checkpointSession(session);\n break;\n \n case 'context_refresh':\n await this.refreshSessionContext(session);\n break;\n \n case 'full_restart':\n await this.restartSession(session);\n break;\n \n default:\n await this.provideGuidance(session, reason);\n intervention.type = 'guidance';\n }\n\n session.interventions.push(intervention);\n session.state.interventionCount++;\n \n // Mark session as temporarily degraded\n const previousStatus = session.state.status;\n session.state.status = 'degraded';\n \n // Schedule restoration check\n setTimeout(async () => {\n const newMetrics = await this.calculateCoherenceMetrics(session);\n const newCoherence = this.calculateOverallCoherence(newMetrics);\n \n // Calculate intervention effectiveness\n intervention.effectiveness = Math.max(0, newCoherence - currentCoherence);\n \n if (newCoherence > session.config.coherenceThreshold) {\n session.state.status = 'active';\n logger.info('Session coherence restored', {\n sessionId: session.id,\n newCoherence,\n effectiveness: intervention.effectiveness,\n });\n }\n }, 120000); // Check after 2 minutes\n }\n\n /**\n * Create a checkpoint of session state\n */\n private async checkpointSession(session: CoherenceSession): Promise<void> {\n const checkpointPath = path.join(\n this.baseDir,\n session.id,\n `checkpoint-${Date.now()}.json`\n );\n \n const checkpointData = {\n timestamp: Date.now(),\n state: session.state,\n recentMetrics: session.metrics.slice(-3),\n currentPhase: session.state.currentPhase,\n completedMilestones: session.state.completedMilestones,\n // Include recent agent context\n contextSummary: await this.generateContextSummary(session),\n };\n\n await fs.writeFile(checkpointPath, JSON.stringify(checkpointData, null, 2));\n session.state.lastCheckpoint = Date.now();\n \n logger.info('Session checkpoint created', {\n sessionId: session.id,\n checkpointPath,\n });\n }\n\n /**\n * Refresh session context to restore coherence\n */\n private async refreshSessionContext(session: CoherenceSession): Promise<void> {\n logger.info('Refreshing session context', { sessionId: session.id });\n \n // Generate context refresh prompt\n const refreshPrompt = await this.generateContextRefreshPrompt(session);\n \n // Apply refresh to the running agent\n await this.applyContextRefresh(session, refreshPrompt);\n \n session.state.refreshCount++;\n }\n\n /**\n * Restart session from last good checkpoint\n */\n private async restartSession(session: CoherenceSession): Promise<void> {\n logger.info('Restarting session from checkpoint', { sessionId: session.id });\n \n // Load last checkpoint\n const checkpoint = await this.loadLatestCheckpoint(session);\n \n if (checkpoint) {\n // Restore session state\n session.state = { ...checkpoint.state };\n \n // Restart agent with checkpoint context\n await this.restartAgentFromCheckpoint(session, checkpoint);\n } else {\n // No checkpoint available, restart from beginning\n await this.restartAgentFromBeginning(session);\n }\n }\n\n /**\n * Initialize workspace for a coherence session\n */\n private async initializeSessionWorkspace(session: CoherenceSession): Promise<void> {\n const sessionDir = path.join(this.baseDir, session.id);\n await fs.mkdir(sessionDir, { recursive: true });\n \n // Create session manifest\n const manifest = {\n sessionId: session.id,\n agent: session.agent,\n task: session.task,\n config: session.config,\n createdAt: Date.now(),\n };\n \n await fs.writeFile(\n path.join(sessionDir, 'manifest.json'),\n JSON.stringify(manifest, null, 2)\n );\n }\n\n /**\n * Launch the actual agent work session\n */\n private async launchAgentSession(session: CoherenceSession): Promise<void> {\n const sessionDir = path.join(this.baseDir, session.id);\n \n // Create enhanced Ralph bridge for extended sessions\n const ralph = new RalphStackMemoryBridge({\n baseDir: sessionDir,\n maxIterations: Math.ceil(session.config.maxDuration / 5), // ~5 min per iteration\n useStackMemory: true,\n });\n\n // Configure for extended coherence\n await ralph.initialize({\n task: this.buildExtendedCoherencePrompt(session),\n criteria: session.task.breakpoints.join('\\n'),\n });\n\n // Start the session (non-blocking)\n ralph.run().catch(error => {\n logger.error('Extended coherence session failed', {\n sessionId: session.id,\n error: error.message,\n });\n session.state.status = 'failed';\n });\n }\n\n /**\n * Build prompt optimized for extended coherence\n */\n private buildExtendedCoherencePrompt(session: CoherenceSession): string {\n return `\n# EXTENDED COHERENCE WORK SESSION\n\n## Your Mission\n${session.task.description}\n\n## Session Parameters\n- Estimated Duration: ${session.task.estimatedDuration} minutes\n- Maximum Duration: ${session.config.maxDuration} minutes \n- Coherence Threshold: ${session.config.coherenceThreshold * 100}%\n\n## Coherence Guidelines\n1. **Maintain Focus**: Stay on task throughout the entire session\n2. **Track Progress**: Document incremental progress at each step\n3. **Context Awareness**: Reference previous work and maintain consistency\n4. **Quality Control**: Regularly assess your output quality\n5. **Milestone Reporting**: Report when you reach natural breakpoints\n\n## Breakpoints & Milestones\n${session.task.breakpoints.map((bp, i) => `${i + 1}. ${bp}`).join('\\n')}\n\n## Extended Session Strategy\n- Take regular checkpoint breaks (every ${session.config.checkpointInterval} minutes)\n- Summarize your progress regularly\n- Ask for context refresh if you feel you're losing focus\n- Maintain awareness of the overall project goal\n- Break complex tasks into smaller, manageable chunks\n\n## Memory Palace (if enabled)\n${session.config.enableMemoryPalace ? `\nUse structured memory organization:\n- **Project Context**: Overall goals and requirements\n- **Current Status**: What's been completed and what's next\n- **Working Memory**: Current task details and immediate context\n- **Reference Memory**: Important patterns, decisions, and learnings\n` : ''}\n\n## Success Criteria\n- Complete the task within the allocated time\n- Maintain high output quality throughout\n- Document progress and decisions clearly\n- Stay coherent and focused for the entire session\n\nBegin your extended coherence work session now.\n `;\n }\n\n // Placeholder implementations for helper methods\n private async getRecentAgentOutputs(session: CoherenceSession): Promise<any[]> {\n // Implementation to retrieve recent agent outputs\n return [];\n }\n\n private assessOutputQuality(outputs: any[]): number {\n // Analyze output quality metrics\n return 0.8; // placeholder\n }\n\n private assessContextRetention(outputs: any[], task: any): number {\n // Measure how well agent retains context\n return 0.7; // placeholder \n }\n\n private assessTaskRelevance(outputs: any[], task: any): number {\n // Measure relevance to original task\n return 0.9; // placeholder\n }\n\n private calculateRepetitionRate(outputs: any[]): number {\n // Calculate how often agent repeats itself\n return 0.1; // placeholder\n }\n\n private calculateDivergenceRate(outputs: any[], task: any): number {\n // Calculate how often agent goes off-topic\n return 0.05; // placeholder\n }\n\n private calculateErrorRate(outputs: any[]): number {\n // Calculate errors per iteration\n return 0.02; // placeholder\n }\n\n private calculateProgressRate(session: CoherenceSession): number {\n // Calculate tasks completed per hour\n return 2.5; // placeholder\n }\n\n private async getMemoryUsage(session: CoherenceSession): Promise<number> {\n // Get current memory usage\n return 150; // MB placeholder\n }\n\n private async getContextWindowUsage(session: CoherenceSession): Promise<number> {\n // Get context window usage percentage\n return 65; // placeholder\n }\n\n private generateBreakpoints(taskConfig: any): string[] {\n // Generate natural stopping points based on task\n return [\n 'Initial analysis complete',\n 'Core implementation finished',\n 'Testing phase complete',\n 'Final review and cleanup done',\n ];\n }\n\n private async generateContextSummary(session: CoherenceSession): Promise<string> {\n return `Session ${session.id} context summary`;\n }\n\n private async generateContextRefreshPrompt(session: CoherenceSession): Promise<string> {\n return 'Context refresh prompt';\n }\n\n private async applyContextRefresh(session: CoherenceSession, prompt: string): Promise<void> {\n // Apply context refresh to running agent\n }\n\n private async loadLatestCheckpoint(session: CoherenceSession): Promise<any> {\n // Load most recent checkpoint\n return null;\n }\n\n private async restartAgentFromCheckpoint(session: CoherenceSession, checkpoint: any): Promise<void> {\n // Restart agent with checkpoint state\n }\n\n private async restartAgentFromBeginning(session: CoherenceSession): Promise<void> {\n // Restart agent from the beginning\n }\n\n private async provideGuidance(session: CoherenceSession, reason: string): Promise<void> {\n // Provide guidance to help agent refocus\n }\n\n /**\n * Get extended coherence capabilities\n */\n getCoherenceCapabilities(): {\n maxSessionDuration: number;\n activeSessionCount: number;\n averageCoherence: number;\n totalInterventions: number;\n } {\n const activeSessions = Array.from(this.activeSessions.values());\n \n return {\n maxSessionDuration: Math.max(...activeSessions.map(s => s.config.maxDuration)),\n activeSessionCount: activeSessions.filter(s => s.state.status === 'active').length,\n averageCoherence: activeSessions.reduce((sum, s) => {\n const recent = s.metrics.slice(-1)[0];\n return sum + (recent ? this.calculateOverallCoherence(recent) : 0);\n }, 0) / activeSessions.length,\n totalInterventions: activeSessions.reduce((sum, s) => sum + s.interventions.length, 0),\n };\n }\n}\n\nexport default ExtendedCoherenceManager;"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../src/integrations/ralph/patterns/oracle-worker-pattern.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Oracle/Worker Pattern Implementation for StackMemory Swarms\n *\n * Uses high-end model (Oracle) for planning, review, and coordination\n * Uses smaller models (Workers) for task execution and implementation\n *\n * Cost-effective scaling: Intelligence where needed, efficiency for execution\n */\n\nimport { v4 as uuidv4 } from 'uuid';\nimport { logger } from '../../../core/monitoring/logger.js';\nimport { SwarmCoordinator } from '../swarm/swarm-coordinator.js';\nimport { RalphStackMemoryBridge } from '../bridge/ralph-stackmemory-bridge.js';\n\n// Model tiers based on capability and cost\nexport type ModelTier = 'oracle' | 'worker' | 'reviewer';\n\nexport interface ModelConfig {\n tier: ModelTier;\n provider: 'claude' | 'openai' | 'anthropic';\n model: string;\n costPerToken: number;\n capabilities: string[];\n}\n\nexport interface OracleWorkerConfig {\n oracle: ModelConfig;\n workers: ModelConfig[];\n reviewers: ModelConfig[];\n maxWorkers: number;\n coordinationInterval: number;\n costBudget?: number;\n}\n\nexport interface TaskDecomposition {\n id: string;\n type: 'planning' | 'implementation' | 'review' | 'coordination';\n priority: number;\n complexity: 'low' | 'medium' | 'high';\n estimatedTokens: number;\n assignedModel: ModelTier;\n dependencies: string[];\n acceptanceCriteria: string[];\n}\n\n/**\n * Oracle/Worker Pattern Coordinator\n * Implements cost-effective multi-model orchestration\n */\nexport class OracleWorkerCoordinator extends SwarmCoordinator {\n private oracle: ModelConfig;\n private workerPool: ModelConfig[];\n private reviewerPool: ModelConfig[];\n private costTracker: {\n oracleSpent: number;\n workerSpent: number;\n reviewerSpent: number;\n totalBudget: number;\n };\n\n constructor(config: OracleWorkerConfig) {\n super({\n maxAgents: config.maxWorkers + 2, // Workers + Oracle + Reviewer\n coordinationInterval: config.coordinationInterval,\n enableDynamicPlanning: true,\n pathologicalBehaviorDetection: true,\n });\n\n this.oracle = config.oracle;\n this.workerPool = config.workers;\n this.reviewerPool = config.reviewers;\n\n this.costTracker = {\n oracleSpent: 0,\n workerSpent: 0,\n reviewerSpent: 0,\n totalBudget: config.costBudget || 10.0, // $10 default\n };\n\n logger.info('Oracle/Worker coordinator initialized', {\n oracle: this.oracle.model,\n workers: this.workerPool.length,\n budget: this.costTracker.totalBudget,\n });\n }\n\n /**\n * Launch swarm with Oracle/Worker pattern\n */\n async launchOracleWorkerSwarm(\n projectDescription: string,\n taskHints?: string[]\n ): Promise<string> {\n logger.info('Launching Oracle/Worker swarm', {\n project: projectDescription.substring(0, 100),\n });\n\n // Phase 1: Oracle Planning\n const oracleTaskId = await this.createOracleTask(\n 'project_planning',\n projectDescription,\n taskHints\n );\n\n const decomposition = await this.executeOracleTask(oracleTaskId);\n\n // Phase 2: Worker Assignment\n const workerTasks = this.allocateTasksToWorkers(decomposition);\n\n // Phase 3: Parallel Worker Execution\n const workerPromises = workerTasks.map((task) =>\n this.executeWorkerTask(task)\n );\n\n // Phase 4: Oracle Review & Coordination\n const reviewTaskId = await this.scheduleOracleReview(decomposition);\n\n // Execute workers in parallel, oracle coordinates\n const [workerResults, reviewResult] = await Promise.all([\n Promise.allSettled(workerPromises),\n this.executeOracleTask(reviewTaskId),\n ]);\n\n // Phase 5: Final Integration\n const swarmId = await this.integrateResults(workerResults, reviewResult);\n\n this.logCostAnalysis();\n return swarmId;\n }\n\n /**\n * Create planning task for Oracle\n */\n private async createOracleTask(\n type: string,\n description: string,\n hints?: string[]\n ): Promise<string> {\n const taskId = uuidv4();\n\n const oraclePrompt = this.buildOraclePrompt(type, description, hints);\n const estimatedTokens = this.estimateTokens(oraclePrompt);\n\n logger.info('Oracle task created', {\n taskId,\n type,\n estimatedTokens,\n estimatedCost: estimatedTokens * this.oracle.costPerToken,\n });\n\n return taskId;\n }\n\n /**\n * Build specialized prompt for Oracle model\n */\n private buildOraclePrompt(\n type: string,\n description: string,\n hints?: string[]\n ): string {\n const basePrompt = `\n# ORACLE ROLE: Strategic Planning & Coordination\n\nYou are the Oracle in an Oracle/Worker pattern. Your role:\n- HIGH-LEVEL STRATEGIC thinking\n- TASK DECOMPOSITION for worker agents \n- QUALITY CONTROL and review\n- COORDINATION between workers\n- ERROR CORRECTION and replanning\n\n## Project Context\n${description}\n\n${hints ? `## Hints & Context\\n${hints.map((h) => `- ${h}`).join('\\n')}` : ''}\n\n## Your Oracle Responsibilities\n1. **Decompose** this project into discrete, parallelizable tasks\n2. **Assign complexity levels** (low/medium/high) to guide worker selection\n3. **Define acceptance criteria** for each task\n4. **Identify dependencies** between tasks\n5. **Plan coordination touchpoints** for integration\n\n## Worker Constraints\n- Workers are smaller models optimized for focused execution\n- Workers excel at: implementation, testing, documentation, simple analysis\n- Workers struggle with: complex architecture, strategic decisions, cross-cutting concerns\n\n## Output Required\nProvide a detailed task decomposition in JSON format:\n\n\\`\\`\\`json\n{\n \"project_summary\": \"Brief overview\",\n \"task_decomposition\": [\n {\n \"id\": \"unique-id\",\n \"title\": \"Task name\",\n \"description\": \"Detailed description\",\n \"complexity\": \"low|medium|high\",\n \"type\": \"implementation|testing|documentation|analysis\",\n \"estimated_effort\": \"1-5 scale\",\n \"worker_requirements\": [\"specific capabilities needed\"],\n \"acceptance_criteria\": [\"criterion 1\", \"criterion 2\"],\n \"dependencies\": [\"task-id-1\", \"task-id-2\"]\n }\n ],\n \"coordination_plan\": {\n \"integration_points\": [\"When to sync between workers\"],\n \"review_checkpoints\": [\"When Oracle should review progress\"],\n \"risk_mitigation\": [\"Potential issues and solutions\"]\n }\n}\n\\`\\`\\`\n\nRemember: Your intelligence is expensive. Focus on high-value strategic thinking that workers cannot do effectively.\n `;\n\n return basePrompt;\n }\n\n /**\n * Execute Oracle task with high-end model\n */\n private async executeOracleTask(\n taskId: string\n ): Promise<TaskDecomposition[]> {\n logger.info('Executing Oracle task', { taskId });\n\n // Create Ralph loop with Oracle model configuration\n const ralph = new RalphStackMemoryBridge({\n baseDir: `.oracle/${taskId}`,\n maxIterations: 3, // Oracle should be efficient\n useStackMemory: true,\n });\n\n // Execute with Oracle model (implementation would integrate with actual model APIs)\n const result = await ralph.run();\n\n // Track Oracle costs\n const tokens = this.estimateTokens(result);\n const cost = tokens * this.oracle.costPerToken;\n this.costTracker.oracleSpent += cost;\n\n logger.info('Oracle task completed', {\n taskId,\n tokensUsed: tokens,\n cost: cost.toFixed(4),\n });\n\n return this.parseTaskDecomposition(result);\n }\n\n /**\n * Allocate decomposed tasks to worker models\n */\n private allocateTasksToWorkers(\n decomposition: TaskDecomposition[]\n ): TaskDecomposition[] {\n const allocatedTasks: TaskDecomposition[] = [];\n\n for (const task of decomposition) {\n // Select optimal worker model based on task complexity\n const workerModel = this.selectWorkerForTask(task);\n\n // Create worker-specific prompt\n const workerPrompt = this.buildWorkerPrompt(task, workerModel);\n\n allocatedTasks.push({\n ...task,\n assignedModel: 'worker' as ModelTier,\n });\n\n logger.debug('Task allocated to worker', {\n taskId: task.id,\n complexity: task.complexity,\n worker: workerModel.model,\n });\n }\n\n return allocatedTasks;\n }\n\n /**\n * Select optimal worker model for task complexity\n */\n private selectWorkerForTask(task: TaskDecomposition): ModelConfig {\n // Simple allocation strategy - can be enhanced\n if (task.complexity === 'high') {\n // Use best available worker for complex tasks\n return this.workerPool[0];\n } else {\n // Use cheapest worker for simple tasks\n return this.workerPool.reduce((cheapest, current) =>\n current.costPerToken < cheapest.costPerToken ? current : cheapest\n );\n }\n }\n\n /**\n * Build focused prompt for worker models\n */\n private buildWorkerPrompt(\n task: TaskDecomposition,\n worker: ModelConfig\n ): string {\n return `\n# WORKER ROLE: Focused Task Execution\n\nYou are a specialized worker in an Oracle/Worker pattern.\n\n## Your Task\n${task.type}: ${task.title}\n\n${task.description}\n\n## Success Criteria\n${task.acceptanceCriteria.map((c) => `- ${c}`).join('\\n')}\n\n## Worker Guidelines\n- FOCUS on this specific task only\n- IMPLEMENT according to the specifications provided\n- ASK for clarification if requirements are unclear\n- COMMUNICATE progress through shared context\n- COMPLETE the task efficiently without over-engineering\n\n## Constraints\n- You are optimized for execution, not planning\n- Stay within your assigned scope\n- Collaborate with other workers through shared context\n- The Oracle will handle integration and review\n\nExecute your task now.\n `;\n }\n\n /**\n * Execute worker task with cost tracking\n */\n private async executeWorkerTask(task: TaskDecomposition): Promise<any> {\n logger.info('Executing worker task', {\n taskId: task.id,\n complexity: task.complexity,\n });\n\n const ralph = new RalphStackMemoryBridge({\n baseDir: `.workers/${task.id}`,\n maxIterations: task.complexity === 'low' ? 3 : 7,\n useStackMemory: true,\n });\n\n const result = await ralph.run();\n\n // Track worker costs\n const workerModel = this.selectWorkerForTask(task);\n const tokens = this.estimateTokens(result);\n const cost = tokens * workerModel.costPerToken;\n this.costTracker.workerSpent += cost;\n\n logger.info('Worker task completed', {\n taskId: task.id,\n tokensUsed: tokens,\n cost: cost.toFixed(4),\n });\n\n return result;\n }\n\n /**\n * Schedule Oracle review of worker progress\n */\n private async scheduleOracleReview(\n decomposition: TaskDecomposition[]\n ): Promise<string> {\n const reviewTaskId = uuidv4();\n\n // Oracle reviews worker outputs and coordinates integration\n logger.info('Oracle review scheduled', {\n reviewTaskId,\n tasksToReview: decomposition.length,\n });\n\n return reviewTaskId;\n }\n\n /**\n * Integrate worker results under Oracle coordination\n */\n private async integrateResults(\n workerResults: PromiseSettledResult<any>[],\n reviewResult: any\n ): Promise<string> {\n const swarmId = uuidv4();\n\n const successfulTasks = workerResults.filter(\n (result) => result.status === 'fulfilled'\n ).length;\n\n logger.info('Integration completed', {\n swarmId,\n totalTasks: workerResults.length,\n successfulTasks,\n successRate: ((successfulTasks / workerResults.length) * 100).toFixed(1),\n });\n\n return swarmId;\n }\n\n /**\n * Parse task decomposition from Oracle output\n */\n private parseTaskDecomposition(output: string): TaskDecomposition[] {\n // Parse JSON from Oracle output\n // Implementation would extract the JSON task decomposition\n return [];\n }\n\n /**\n * Estimate token usage for cost calculation\n */\n private estimateTokens(text: string): number {\n // Rough estimation: ~4 characters per token\n return Math.ceil(text.length / 4);\n }\n\n /**\n * Log cost analysis and efficiency metrics\n */\n private logCostAnalysis(): void {\n const total =\n this.costTracker.oracleSpent +\n this.costTracker.workerSpent +\n this.costTracker.reviewerSpent;\n\n const savings = this.calculateTraditionalCost() - total;\n\n logger.info('Oracle/Worker Cost Analysis', {\n oracleSpent: `$${this.costTracker.oracleSpent.toFixed(4)}`,\n workerSpent: `$${this.costTracker.workerSpent.toFixed(4)}`,\n totalSpent: `$${total.toFixed(4)}`,\n budgetUsed: `${((total / this.costTracker.totalBudget) * 100).toFixed(1)}%`,\n estimatedSavings: `$${savings.toFixed(4)}`,\n efficiency: `${((this.costTracker.workerSpent / total) * 100).toFixed(1)}% worker tasks`,\n });\n }\n\n /**\n * Calculate what this would cost with all-Oracle approach\n */\n private calculateTraditionalCost(): number {\n const totalSpent =\n this.costTracker.oracleSpent +\n this.costTracker.workerSpent +\n this.costTracker.reviewerSpent;\n\n // Estimate if everything was done with Oracle model\n const avgWorkerCost = this.workerPool[0]?.costPerToken || 0.001;\n const workerTokensAsOracle = this.costTracker.workerSpent / avgWorkerCost;\n\n return (\n this.costTracker.oracleSpent +\n workerTokensAsOracle * this.oracle.costPerToken\n );\n }\n}\n\n/**\n * Default model configurations for Oracle/Worker pattern\n */\nexport const defaultModelConfigs: Record<ModelTier, ModelConfig[]> = {\n oracle: [\n {\n tier: 'oracle',\n provider: 'claude',\n model: 'claude-3-opus-20240229',\n costPerToken: 0.015, // $15/1M input tokens\n capabilities: [\n 'strategic_planning',\n 'complex_reasoning',\n 'task_decomposition',\n 'quality_review',\n 'error_correction',\n ],\n },\n ],\n\n worker: [\n {\n tier: 'worker',\n provider: 'claude',\n model: 'claude-3-5-haiku-20241022',\n costPerToken: 0.00025, // $0.25/1M input tokens\n capabilities: [\n 'code_implementation',\n 'unit_testing',\n 'documentation',\n 'simple_analysis',\n 'data_processing',\n ],\n },\n {\n tier: 'worker',\n provider: 'openai',\n model: 'gpt-4o-mini',\n costPerToken: 0.00015, // $0.15/1M input tokens\n capabilities: [\n 'rapid_prototyping',\n 'script_writing',\n 'basic_testing',\n 'formatting',\n 'simple_refactoring',\n ],\n },\n ],\n\n reviewer: [\n {\n tier: 'reviewer',\n provider: 'claude',\n model: 'claude-3-sonnet-20240229',\n costPerToken: 0.003, // $3/1M input tokens\n capabilities: [\n 'code_review',\n 'quality_assessment',\n 'integration_testing',\n 'performance_analysis',\n 'security_review',\n ],\n },\n ],\n};\n\nexport default OracleWorkerCoordinator;\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../src/integrations/ralph/performance/performance-optimizer.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Performance Optimizer for Ralph-StackMemory Integration\n * Handles async saves, batching, compression, and caching for optimal performance\n */\n\nimport { logger } from '../../../core/monitoring/logger.js';\nimport * as zlib from 'zlib';\nimport { promisify } from 'util';\nimport {\n RalphIteration,\n PerformanceMetrics,\n OptimizationStrategy,\n RalphStackMemoryConfig,\n Frame,\n} from '../types.js';\n\nconst gzip = promisify(zlib.gzip);\nconst gunzip = promisify(zlib.gunzip);\n\nexport class PerformanceOptimizer {\n private config: RalphStackMemoryConfig['performance'];\n private saveBatch: SaveOperation[] = [];\n private batchTimer?: NodeJS.Timeout;\n private cache: Map<string, CacheEntry> = new Map();\n private metrics: PerformanceMetrics = {\n iterationTime: 0,\n contextLoadTime: 0,\n stateSaveTime: 0,\n memoryUsage: 0,\n tokenCount: 0,\n cacheHitRate: 0,\n };\n private cacheHits = 0;\n private cacheMisses = 0;\n private strategies: OptimizationStrategy[] = [];\n\n constructor(config?: Partial<RalphStackMemoryConfig['performance']>) {\n this.config = {\n asyncSaves: config?.asyncSaves ?? true,\n batchSize: config?.batchSize || 10,\n compressionLevel: config?.compressionLevel || 2,\n cacheEnabled: config?.cacheEnabled ?? true,\n parallelOperations: config?.parallelOperations ?? true,\n };\n\n this.initializeStrategies();\n this.startMetricsCollection();\n }\n\n /**\n * Save frame with optimizations\n */\n async saveFrame(frame: Frame): Promise<void> {\n const startTime = Date.now();\n\n if (this.config.asyncSaves) {\n // Add to batch for async saving\n this.addToBatch({\n type: 'frame',\n data: frame,\n timestamp: Date.now(),\n });\n } else {\n // Save synchronously\n await this.saveFrameInternal(frame);\n }\n\n this.metrics.stateSaveTime += Date.now() - startTime;\n }\n\n /**\n * Save iteration with optimizations\n */\n async saveIteration(iteration: RalphIteration): Promise<void> {\n const startTime = Date.now();\n\n // Compress if enabled\n const data = this.config.compressionLevel > 0\n ? await this.compressData(iteration)\n : iteration;\n\n if (this.config.asyncSaves) {\n // Add to batch\n this.addToBatch({\n type: 'iteration',\n data,\n timestamp: Date.now(),\n });\n } else {\n // Save synchronously\n await this.saveIterationInternal(data);\n }\n\n this.metrics.stateSaveTime += Date.now() - startTime;\n }\n\n /**\n * Load frames with caching\n */\n async loadFrames(query: FrameQuery): Promise<Frame[]> {\n const startTime = Date.now();\n const cacheKey = this.generateCacheKey('frames', query);\n\n // Check cache first\n if (this.config.cacheEnabled) {\n const cached = this.getFromCache<Frame[]>(cacheKey);\n if (cached) {\n this.cacheHits++;\n this.metrics.contextLoadTime += Date.now() - startTime;\n return cached;\n }\n }\n\n this.cacheMisses++;\n\n // Load from storage\n const frames = await this.loadFramesInternal(query);\n\n // Cache the result\n if (this.config.cacheEnabled) {\n this.setCache(cacheKey, frames, 60000); // Cache for 1 minute\n }\n\n this.metrics.contextLoadTime += Date.now() - startTime;\n return frames;\n }\n\n /**\n * Batch save operations\n */\n async flushBatch(): Promise<void> {\n if (this.saveBatch.length === 0) return;\n\n const batch = [...this.saveBatch];\n this.saveBatch = [];\n\n logger.debug('Flushing batch', { size: batch.length });\n\n if (this.config.parallelOperations) {\n // Save in parallel\n await Promise.all(batch.map(op => this.executeSaveOperation(op)));\n } else {\n // Save sequentially\n for (const op of batch) {\n await this.executeSaveOperation(op);\n }\n }\n }\n\n /**\n * Compress data based on compression level\n */\n async compressData(data: any): Promise<any> {\n if (this.config.compressionLevel === 0) return data;\n\n const json = JSON.stringify(data);\n const compressionOptions: zlib.ZlibOptions = {\n level: this.config.compressionLevel * 3, // Map 1-3 to zlib levels 3-9\n };\n\n const compressed = await gzip(json, compressionOptions);\n \n return {\n compressed: true,\n data: compressed.toString('base64'),\n originalSize: json.length,\n compressedSize: compressed.length,\n };\n }\n\n /**\n * Decompress data\n */\n async decompressData(compressed: any): Promise<any> {\n if (!compressed.compressed) return compressed;\n\n const buffer = Buffer.from(compressed.data, 'base64');\n const decompressed = await gunzip(buffer);\n \n return JSON.parse(decompressed.toString());\n }\n\n /**\n * Apply optimization strategies\n */\n async optimize(operation: string, data: any): Promise<any> {\n let optimized = data;\n\n for (const strategy of this.strategies) {\n if (strategy.enabled) {\n try {\n optimized = await strategy.apply(optimized);\n } catch (error: any) {\n logger.error('Optimization strategy failed', {\n strategy: strategy.name,\n error: error.message,\n });\n }\n }\n }\n\n return optimized;\n }\n\n /**\n * Get performance metrics\n */\n getMetrics(): PerformanceMetrics {\n // Update cache hit rate\n const totalCacheAttempts = this.cacheHits + this.cacheMisses;\n this.metrics.cacheHitRate = totalCacheAttempts > 0\n ? this.cacheHits / totalCacheAttempts\n : 0;\n\n // Update memory usage\n this.metrics.memoryUsage = process.memoryUsage().heapUsed;\n\n return { ...this.metrics };\n }\n\n /**\n * Clear cache\n */\n clearCache(): void {\n const size = this.cache.size;\n this.cache.clear();\n logger.debug('Cache cleared', { entries: size });\n }\n\n /**\n * Enable/disable strategy\n */\n setStrategyEnabled(strategyName: string, enabled: boolean): void {\n const strategy = this.strategies.find(s => s.name === strategyName);\n if (strategy) {\n strategy.enabled = enabled;\n logger.debug('Strategy updated', { name: strategyName, enabled });\n }\n }\n\n /**\n * Cleanup resources\n */\n cleanup(): void {\n if (this.batchTimer) {\n clearTimeout(this.batchTimer);\n }\n this.clearCache();\n this.saveBatch = [];\n }\n\n /**\n * Initialize optimization strategies\n */\n private initializeStrategies(): void {\n this.strategies = [\n {\n name: 'deduplication',\n enabled: true,\n priority: 1,\n apply: async (data: any) => this.deduplicateData(data),\n metrics: () => this.getMetrics(),\n },\n {\n name: 'chunking',\n enabled: true,\n priority: 2,\n apply: async (data: any) => this.chunkLargeData(data),\n metrics: () => this.getMetrics(),\n },\n {\n name: 'lazy-loading',\n enabled: this.config.cacheEnabled,\n priority: 3,\n apply: async (data: any) => this.createLazyProxy(data),\n metrics: () => this.getMetrics(),\n },\n ];\n\n // Sort by priority\n this.strategies.sort((a, b) => a.priority - b.priority);\n }\n\n /**\n * Start metrics collection\n */\n private startMetricsCollection(): void {\n // Collect metrics every 30 seconds\n setInterval(() => {\n const metrics = this.getMetrics();\n logger.debug('Performance metrics', metrics);\n }, 30000);\n }\n\n /**\n * Add operation to batch\n */\n private addToBatch(operation: SaveOperation): void {\n this.saveBatch.push(operation);\n\n // Start batch timer if not already running\n if (!this.batchTimer) {\n this.batchTimer = setTimeout(() => {\n this.flushBatch().catch(error => {\n logger.error('Batch flush failed', { error: error.message });\n });\n this.batchTimer = undefined;\n }, 1000); // Flush after 1 second\n }\n\n // Flush immediately if batch is full\n if (this.saveBatch.length >= this.config.batchSize) {\n if (this.batchTimer) {\n clearTimeout(this.batchTimer);\n this.batchTimer = undefined;\n }\n this.flushBatch().catch(error => {\n logger.error('Batch flush failed', { error: error.message });\n });\n }\n }\n\n /**\n * Execute save operation\n */\n private async executeSaveOperation(operation: SaveOperation): Promise<void> {\n switch (operation.type) {\n case 'frame':\n await this.saveFrameInternal(operation.data);\n break;\n case 'iteration':\n await this.saveIterationInternal(operation.data);\n break;\n default:\n logger.warn('Unknown operation type', { type: operation.type });\n }\n }\n\n /**\n * Internal frame save\n */\n private async saveFrameInternal(frame: Frame): Promise<void> {\n // This would integrate with StackMemory's frame storage\n // Placeholder implementation\n logger.debug('Frame saved', { frameId: frame.frame_id });\n }\n\n /**\n * Internal iteration save\n */\n private async saveIterationInternal(iteration: any): Promise<void> {\n // This would save iteration data\n // Placeholder implementation\n logger.debug('Iteration saved', { iteration: iteration.number });\n }\n\n /**\n * Internal frame load\n */\n private async loadFramesInternal(query: FrameQuery): Promise<Frame[]> {\n // This would load frames from StackMemory\n // Placeholder implementation\n return [];\n }\n\n /**\n * Generate cache key\n */\n private generateCacheKey(type: string, params: any): string {\n return `${type}:${JSON.stringify(params)}`;\n }\n\n /**\n * Get from cache\n */\n private getFromCache<T>(key: string): T | undefined {\n const entry = this.cache.get(key);\n \n if (!entry) return undefined;\n \n // Check if expired\n if (entry.expiry && entry.expiry < Date.now()) {\n this.cache.delete(key);\n return undefined;\n }\n\n return entry.data as T;\n }\n\n /**\n * Set cache entry\n */\n private setCache(key: string, data: any, ttl?: number): void {\n const entry: CacheEntry = {\n data,\n timestamp: Date.now(),\n expiry: ttl ? Date.now() + ttl : undefined,\n };\n\n this.cache.set(key, entry);\n\n // Limit cache size\n if (this.cache.size > 100) {\n // Remove oldest entries\n const entries = Array.from(this.cache.entries());\n entries.sort((a, b) => a[1].timestamp - b[1].timestamp);\n \n for (let i = 0; i < 20; i++) {\n this.cache.delete(entries[i][0]);\n }\n }\n }\n\n /**\n * Deduplicate data\n */\n private deduplicateData(data: any): any {\n if (Array.isArray(data)) {\n const seen = new Set();\n return data.filter(item => {\n const key = JSON.stringify(item);\n if (seen.has(key)) {\n return false;\n }\n seen.add(key);\n return true;\n });\n }\n return data;\n }\n\n /**\n * Chunk large data\n */\n private chunkLargeData(data: any): any {\n const json = JSON.stringify(data);\n \n // If data is too large, create chunks\n if (json.length > 100000) {\n // This would implement chunking logic\n // For now, return as-is\n logger.debug('Large data detected', { size: json.length });\n }\n\n return data;\n }\n\n /**\n * Create lazy-loading proxy\n */\n private createLazyProxy(data: any): any {\n // This would create a proxy that loads data on demand\n // For now, return as-is\n return data;\n }\n}\n\n// Internal types\ninterface SaveOperation {\n type: 'frame' | 'iteration';\n data: any;\n timestamp: number;\n}\n\ninterface CacheEntry {\n data: any;\n timestamp: number;\n expiry?: number;\n}\n\ninterface FrameQuery {\n loopId?: string;\n sessionId?: string;\n limit?: number;\n since?: number;\n}"],
|
|
5
|
-
"mappings": ";;;;AAKA,SAAS,cAAc;AACvB,YAAY,UAAU;AACtB,SAAS,iBAAiB;AAS1B,MAAM,OAAO,UAAU,KAAK,IAAI;AAChC,MAAM,SAAS,UAAU,KAAK,MAAM;AAE7B,MAAM,qBAAqB;AAAA,EACxB;AAAA,EACA,YAA6B,CAAC;AAAA,EAC9B;AAAA,EACA,QAAiC,oBAAI,IAAI;AAAA,EACzC,UAA8B;AAAA,IACpC,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,eAAe;AAAA,IACf,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB;AAAA,EACQ,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,aAAqC,CAAC;AAAA,EAE9C,YAAY,QAAyD;AACnE,SAAK,SAAS;AAAA,MACZ,YAAY,QAAQ,cAAc;AAAA,MAClC,WAAW,QAAQ,aAAa;AAAA,MAChC,kBAAkB,QAAQ,oBAAoB;AAAA,MAC9C,cAAc,QAAQ,gBAAgB;AAAA,MACtC,oBAAoB,QAAQ,sBAAsB;AAAA,IACpD;AAEA,SAAK,qBAAqB;AAC1B,SAAK,uBAAuB;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAU,OAA6B;AAC3C,UAAM,YAAY,KAAK,IAAI;AAE3B,QAAI,KAAK,OAAO,YAAY;AAE1B,WAAK,WAAW;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,QACN,WAAW,KAAK,IAAI;AAAA,MACtB,CAAC;AAAA,IACH,OAAO;AAEL,YAAM,KAAK,kBAAkB,KAAK;AAAA,IACpC;AAEA,SAAK,QAAQ,iBAAiB,KAAK,IAAI,IAAI;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,WAA0C;AAC5D,UAAM,YAAY,KAAK,IAAI;AAG3B,UAAM,OAAO,KAAK,OAAO,mBAAmB,IACxC,MAAM,KAAK,aAAa,SAAS,IACjC;AAEJ,QAAI,KAAK,OAAO,YAAY;AAE1B,WAAK,WAAW;AAAA,QACd,MAAM;AAAA,QACN;AAAA,QACA,WAAW,KAAK,IAAI;AAAA,MACtB,CAAC;AAAA,IACH,OAAO;AAEL,YAAM,KAAK,sBAAsB,IAAI;AAAA,IACvC;AAEA,SAAK,QAAQ,iBAAiB,KAAK,IAAI,IAAI;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAW,OAAqC;AACpD,UAAM,YAAY,KAAK,IAAI;AAC3B,UAAM,WAAW,KAAK,iBAAiB,UAAU,KAAK;AAGtD,QAAI,KAAK,OAAO,cAAc;AAC5B,YAAM,SAAS,KAAK,aAAsB,QAAQ;AAClD,UAAI,QAAQ;AACV,aAAK;AACL,aAAK,QAAQ,mBAAmB,KAAK,IAAI,IAAI;AAC7C,eAAO;AAAA,MACT;AAAA,IACF;AAEA,SAAK;AAGL,UAAM,SAAS,MAAM,KAAK,mBAAmB,KAAK;AAGlD,QAAI,KAAK,OAAO,cAAc;AAC5B,WAAK,SAAS,UAAU,QAAQ,GAAK;AAAA,IACvC;AAEA,SAAK,QAAQ,mBAAmB,KAAK,IAAI,IAAI;AAC7C,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAA4B;AAChC,QAAI,KAAK,UAAU,WAAW,EAAG;AAEjC,UAAM,QAAQ,CAAC,GAAG,KAAK,SAAS;AAChC,SAAK,YAAY,CAAC;AAElB,WAAO,MAAM,kBAAkB,EAAE,MAAM,MAAM,OAAO,CAAC;AAErD,QAAI,KAAK,OAAO,oBAAoB;AAElC,YAAM,QAAQ,IAAI,MAAM,IAAI,QAAM,KAAK,qBAAqB,EAAE,CAAC,CAAC;AAAA,IAClE,OAAO;AAEL,iBAAW,MAAM,OAAO;AACtB,cAAM,KAAK,qBAAqB,EAAE;AAAA,MACpC;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAa,MAAyB;AAC1C,QAAI,KAAK,OAAO,qBAAqB,EAAG,QAAO;AAE/C,UAAM,OAAO,KAAK,UAAU,IAAI;AAChC,UAAM,qBAAuC;AAAA,MAC3C,OAAO,KAAK,OAAO,mBAAmB;AAAA;AAAA,IACxC;AAEA,UAAM,aAAa,MAAM,KAAK,MAAM,kBAAkB;AAEtD,WAAO;AAAA,MACL,YAAY;AAAA,MACZ,MAAM,WAAW,SAAS,QAAQ;AAAA,MAClC,cAAc,KAAK;AAAA,MACnB,gBAAgB,WAAW;AAAA,IAC7B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eAAe,YAA+B;AAClD,QAAI,CAAC,WAAW,WAAY,QAAO;AAEnC,UAAM,SAAS,OAAO,KAAK,WAAW,MAAM,QAAQ;AACpD,UAAM,eAAe,MAAM,OAAO,MAAM;AAExC,WAAO,KAAK,MAAM,aAAa,SAAS,CAAC;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,WAAmB,MAAyB;AACzD,QAAI,YAAY;AAEhB,eAAW,YAAY,KAAK,YAAY;AACtC,UAAI,SAAS,SAAS;AACpB,YAAI;AACF,sBAAY,MAAM,SAAS,MAAM,SAAS;AAAA,QAC5C,SAAS,OAAY;AACnB,iBAAO,MAAM,gCAAgC;AAAA,YAC3C,UAAU,SAAS;AAAA,YACnB,OAAO,MAAM;AAAA,UACf,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,aAAiC;AAE/B,UAAM,qBAAqB,KAAK,YAAY,KAAK;AACjD,SAAK,QAAQ,eAAe,qBAAqB,IAC7C,KAAK,YAAY,qBACjB;AAGJ,SAAK,QAAQ,cAAc,QAAQ,YAAY,EAAE;AAEjD,WAAO,EAAE,GAAG,KAAK,QAAQ;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,aAAmB;AACjB,UAAM,OAAO,KAAK,MAAM;AACxB,SAAK,MAAM,MAAM;AACjB,WAAO,MAAM,iBAAiB,EAAE,SAAS,KAAK,CAAC;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAmB,cAAsB,SAAwB;AAC/D,UAAM,WAAW,KAAK,WAAW,KAAK,OAAK,EAAE,SAAS,YAAY;AAClE,QAAI,UAAU;AACZ,eAAS,UAAU;AACnB,aAAO,MAAM,oBAAoB,EAAE,MAAM,cAAc,QAAQ,CAAC;AAAA,IAClE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,UAAgB;AACd,QAAI,KAAK,YAAY;AACnB,mBAAa,KAAK,UAAU;AAAA,IAC9B;AACA,SAAK,WAAW;AAChB,SAAK,YAAY,CAAC;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKQ,uBAA6B;AACnC,SAAK,aAAa;AAAA,MAChB;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,UAAU;AAAA,QACV,OAAO,OAAO,SAAc,KAAK,gBAAgB,IAAI;AAAA,QACrD,SAAS,MAAM,KAAK,WAAW;AAAA,MACjC;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,UAAU;AAAA,QACV,OAAO,OAAO,SAAc,KAAK,eAAe,IAAI;AAAA,QACpD,SAAS,MAAM,KAAK,WAAW;AAAA,MACjC;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS,KAAK,OAAO;AAAA,QACrB,UAAU;AAAA,QACV,OAAO,OAAO,SAAc,KAAK,gBAAgB,IAAI;AAAA,QACrD,SAAS,MAAM,KAAK,WAAW;AAAA,MACjC;AAAA,IACF;AAGA,SAAK,WAAW,KAAK,CAAC,GAAG,MAAM,EAAE,WAAW,EAAE,QAAQ;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA,EAKQ,yBAA+B;AAErC,gBAAY,MAAM;AAChB,YAAM,UAAU,KAAK,WAAW;AAChC,aAAO,MAAM,uBAAuB,OAAO;AAAA,IAC7C,GAAG,GAAK;AAAA,EACV;AAAA;AAAA;AAAA;AAAA,EAKQ,WAAW,WAAgC;AACjD,SAAK,UAAU,KAAK,SAAS;AAG7B,QAAI,CAAC,KAAK,YAAY;AACpB,WAAK,aAAa,WAAW,MAAM;AACjC,aAAK,WAAW,EAAE,MAAM,WAAS;AAC/B,iBAAO,MAAM,sBAAsB,EAAE,OAAO,MAAM,QAAQ,CAAC;AAAA,QAC7D,CAAC;AACD,aAAK,aAAa;AAAA,MACpB,GAAG,GAAI;AAAA,IACT;AAGA,QAAI,KAAK,UAAU,UAAU,KAAK,OAAO,WAAW;AAClD,UAAI,KAAK,YAAY;AACnB,qBAAa,KAAK,UAAU;AAC5B,aAAK,aAAa;AAAA,MACpB;AACA,WAAK,WAAW,EAAE,MAAM,WAAS;AAC/B,eAAO,MAAM,sBAAsB,EAAE,OAAO,MAAM,QAAQ,CAAC;AAAA,MAC7D,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,qBAAqB,WAAyC;AAC1E,YAAQ,UAAU,MAAM;AAAA,MACtB,KAAK;AACH,cAAM,KAAK,kBAAkB,UAAU,IAAI;AAC3C;AAAA,MACF,KAAK;AACH,cAAM,KAAK,sBAAsB,UAAU,IAAI;AAC/C;AAAA,MACF;AACE,eAAO,KAAK,0BAA0B,EAAE,MAAM,UAAU,KAAK,CAAC;AAAA,IAClE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,kBAAkB,OAA6B;AAG3D,WAAO,MAAM,eAAe,EAAE,SAAS,MAAM,SAAS,CAAC;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,sBAAsB,WAA+B;AAGjE,WAAO,MAAM,mBAAmB,EAAE,WAAW,UAAU,OAAO,CAAC;AAAA,EACjE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,mBAAmB,OAAqC;AAGpE,WAAO,CAAC;AAAA,EACV;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAiB,MAAc,QAAqB;AAC1D,WAAO,GAAG,IAAI,IAAI,KAAK,UAAU,MAAM,CAAC;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKQ,aAAgB,KAA4B;AAClD,UAAM,QAAQ,KAAK,MAAM,IAAI,GAAG;AAEhC,QAAI,CAAC,MAAO,QAAO;AAGnB,QAAI,MAAM,UAAU,MAAM,SAAS,KAAK,IAAI,GAAG;AAC7C,WAAK,MAAM,OAAO,GAAG;AACrB,aAAO;AAAA,IACT;AAEA,WAAO,MAAM;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAKQ,SAAS,KAAa,MAAW,KAAoB;AAC3D,UAAM,QAAoB;AAAA,MACxB;AAAA,MACA,WAAW,KAAK,IAAI;AAAA,MACpB,QAAQ,MAAM,KAAK,IAAI,IAAI,MAAM;AAAA,IACnC;AAEA,SAAK,MAAM,IAAI,KAAK,KAAK;AAGzB,QAAI,KAAK,MAAM,OAAO,KAAK;AAEzB,YAAM,UAAU,MAAM,KAAK,KAAK,MAAM,QAAQ,CAAC;AAC/C,cAAQ,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS;AAEtD,eAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,aAAK,MAAM,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAC;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAgB,MAAgB;AACtC,QAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,YAAM,OAAO,oBAAI,IAAI;AACrB,aAAO,KAAK,OAAO,UAAQ;AACzB,cAAM,MAAM,KAAK,UAAU,IAAI;AAC/B,YAAI,KAAK,IAAI,GAAG,GAAG;AACjB,iBAAO;AAAA,QACT;AACA,aAAK,IAAI,GAAG;AACZ,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAe,MAAgB;AACrC,UAAM,OAAO,KAAK,UAAU,IAAI;AAGhC,QAAI,KAAK,SAAS,KAAQ;AAGxB,aAAO,MAAM,uBAAuB,EAAE,MAAM,KAAK,OAAO,CAAC;AAAA,IAC3D;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAgB,MAAgB;AAGtC,WAAO;AAAA,EACT;AACF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
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": ";;;;AAKA,YAAY,QAAQ;AACpB,YAAY,UAAU;AACtB,SAAS,cAAc;AAgDhB,MAAM,oBAAoB;AAAA,EACvB,cAA+C,oBAAI,IAAI;AAAA,EACvD,eAA8B,CAAC;AAAA,EAC/B,qBAAyC,CAAC;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EAER,YACE,kBACA,cAAsB,mBACtB;AACA,SAAK,mBAAmB;AACxB,SAAK,cAAc;AACnB,SAAK,wBAAwB;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAA4B;AAChC,UAAM,KAAK,wBAAwB;AACnC,UAAM,KAAK,wBAAwB;AACnC,SAAK,yBAAyB;AAG9B,YAAQ,GAAG,sBAAsB,CAAC,QAAQ,YAAY;AACpD,WAAK,YAAY,IAAI,MAAM,wBAAwB,MAAM,EAAE,GAAG;AAAA,QAC5D,MAAM;AAAA,QACN,SAAS,QAAQ,SAAS;AAAA,MAC5B,CAAC;AAAA,IACH,CAAC;AAED,YAAQ,GAAG,qBAAqB,CAAC,UAAU;AACzC,WAAK,YAAY,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAAA,IACxD,CAAC;AAED,WAAO,KAAK,mCAAmC;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBACJ,SACA,SAAiB,YACA;AACjB,QAAI;AACF,YAAM,aAAc,KAAK,iBAAyB;AAClD,YAAM,SAAS,MAAM;AAAA,QAClB,KAAK,iBAAyB,aAAa,OAAO;AAAA,MACrD;AAEA,YAAM,aAAiC;AAAA,QACrC,IAAI,KAAK,WAAW;AAAA,QACpB;AAAA,QACA,WAAW,KAAK,IAAI;AAAA,QACpB,YAAY,EAAE,GAAG,WAAW;AAAA,QAC5B,QAAQ,OAAO,IAAI,CAAC,WAAW,EAAE,GAAG,MAAM,EAAE;AAAA,QAC5C,OAAO,WAAW,SAAS,CAAC;AAAA,QAC5B,UAAU,KAAK,aAAa,MAAM,GAAG;AAAA;AAAA,QACrC,UAAU,MAAM,KAAK,gBAAgB;AAAA,MACvC;AAGA,YAAM,iBAAiB,KAAK;AAAA,QAC1B,KAAK;AAAA,QACL,cAAc,WAAW,EAAE;AAAA,MAC7B;AACA,YAAM,GAAG,UAAU,gBAAgB,KAAK,UAAU,YAAY,MAAM,CAAC,CAAC;AAEtE,WAAK,YAAY,IAAI,WAAW,IAAI,UAAU;AAE9C,aAAO;AAAA,QACL,sBAAsB,WAAW,EAAE,cAAc,OAAO,KAAK,MAAM;AAAA,MACrE;AACA,aAAO,WAAW;AAAA,IACpB,SAAS,OAAO;AACd,aAAO,MAAM,gCAAgC,KAAc;AAC3D,YAAM;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAY,OAAc,UAAe,CAAC,GAAkB;AAChE,UAAM,SAAsB;AAAA,MAC1B,IAAI,KAAK,WAAW;AAAA,MACpB,WAAW,KAAK,IAAI;AAAA,MACpB,SAAS,QAAQ;AAAA,MACjB,WAAW,KAAK,cAAc,OAAO,OAAO;AAAA,MAC5C;AAAA,MACA;AAAA,MACA,gBAAgB;AAAA,MAChB,UAAU,KAAK,eAAe,OAAO,OAAO;AAAA,MAC5C,UAAU;AAAA,IACZ;AAEA,SAAK,aAAa,KAAK,MAAM;AAC7B,WAAO,MAAM,mBAAmB,OAAO,EAAE,MAAM,KAAK;AAGpD,UAAM,YAAY,MAAM,KAAK,gBAAgB,MAAM;AAEnD,QAAI,WAAW;AACb,aAAO,WAAW;AAClB,aAAO,iBAAiB;AACxB,aAAO,KAAK,qCAAqC,OAAO,EAAE,EAAE;AAAA,IAC9D,OAAO;AACL,aAAO,MAAM,gCAAgC,OAAO,EAAE,EAAE;AAExD,UAAI,OAAO,aAAa,YAAY;AAClC,cAAM,KAAK,wBAAwB,MAAM;AAAA,MAC3C;AAAA,IACF;AAGA,UAAM,KAAK,gBAAgB,MAAM;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,sBAAsB,cAAwC;AAClE,QAAI;AACF,YAAM,aAAa,KAAK,YAAY,IAAI,YAAY;AACpD,UAAI,CAAC,YAAY;AACf,eAAO,MAAM,cAAc,YAAY,YAAY;AACnD,eAAO;AAAA,MACT;AAEA,aAAO,KAAK,6BAA6B,YAAY,EAAE;AAGvD,YAAM,KAAK,gBAAgB,WAAW,QAAQ;AAG9C,UAAI,WAAW,gBAAgB;AAC7B,cAAM,KAAK,gBAAgB,WAAW,cAAc;AAAA,MACtD;AAGA,YAAM,KAAK,kBAAkB,UAAU;AAEvC,aAAO,KAAK,yCAAyC,YAAY,EAAE;AACnE,aAAO;AAAA,IACT,SAAS,OAAO;AACd,aAAO;AAAA,QACL,qCAAqC,YAAY;AAAA,QACjD;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,6BASE;AACA,UAAM,SAAS,KAAK,IAAI,IAAI;AAC5B,UAAM,oBAAoB,MAAM,KAAK,KAAK,YAAY,OAAO,CAAC,EAC3D,OAAO,CAAC,OAAO,GAAG,YAAY,MAAM,EACpC,KAAK,CAAC,GAAG,MAAM,EAAE,YAAY,EAAE,SAAS,EACxC,MAAM,GAAG,CAAC;AAEb,UAAM,cAAc,oBAAI,IAAoB;AAC5C,UAAM,aAAa,oBAAI,IAAoB;AAE3C,eAAW,UAAU,KAAK,aAAa;AAAA,MACrC,CAAC,MAAM,EAAE,YAAY;AAAA,IACvB,GAAG;AACD,kBAAY;AAAA,QACV,OAAO;AAAA,SACN,YAAY,IAAI,OAAO,SAAS,KAAK,KAAK;AAAA,MAC7C;AACA,iBAAW;AAAA,QACT,OAAO;AAAA,QACP,KAAK,IAAI,WAAW,IAAI,OAAO,SAAS,KAAK,GAAG,OAAO,SAAS;AAAA,MAClE;AAAA,IACF;AAEA,UAAM,iBAAiB,MAAM,KAAK,YAAY,QAAQ,CAAC,EACpD,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO;AAAA,MACvB;AAAA,MACA;AAAA,MACA,gBAAgB,WAAW,IAAI,IAAI,KAAK;AAAA,IAC1C,EAAE,EACD,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AAEnC,UAAM,iBAAiB,KAAK,aAAa;AAAA,MACvC,CAAC,MAAM,EAAE,aAAa,cAAc,EAAE,YAAY,UAAU,CAAC,EAAE;AAAA,IACjE;AAEA,UAAM,eACJ,eAAe,SAAS,IACpB,aACA,eAAe,SAAS,IACtB,aACA;AAER,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,iBAAiB,KAAK,wBAAwB,cAAc;AAAA,MAC5D;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,oBAAoB,SAAmC;AAC3D,WAAO,KAAK,sCAAsC,OAAO,EAAE;AAE3D,QAAI;AAEF,YAAM,mBAAmB,KAAK,qBAAqB,OAAO;AAC1D,UAAI,kBAAkB;AACpB,eAAO,KAAK,4BAA4B,iBAAiB,EAAE,EAAE;AAC7D,eAAO,MAAM,KAAK,sBAAsB,iBAAiB,EAAE;AAAA,MAC7D;AAGA,YAAM,KAAK,iBAAiB,aAAa;AAGzC,YAAM,KAAK,sBAAsB;AAGjC,aAAO,KAAK,6CAA6C;AACzD,aAAO;AAAA,IACT,SAAS,OAAO;AACd,aAAO,MAAM,yBAAyB,KAAc;AACpD,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAc,gBAAgB,QAAuC;AAEnE,eAAW,YAAY,KAAK,oBAAoB;AAC9C,UAAI,SAAS,UAAU,OAAO,OAAO,OAAO,OAAO,GAAG;AACpD,eAAO,KAAK,+BAA+B,SAAS,SAAS,EAAE;AAE/D,YAAI,UAAU;AACd,eAAO,UAAU,SAAS,YAAY;AACpC,cAAI;AACF,kBAAM,UAAU,MAAM,SAAS,OAAO,QAAQ,IAAI;AAClD,gBAAI,SAAS;AACX,qBAAO,iBAAiB,SAAS;AACjC,qBAAO;AAAA,YACT;AAAA,UACF,SAAS,OAAO;AACd,mBAAO;AAAA,cACL,oBAAoB,UAAU,CAAC;AAAA,cAC/B;AAAA,YACF;AAAA,UACF;AAEA;AACA,cAAI,UAAU,SAAS,YAAY;AACjC,kBAAM,KAAK,MAAM,SAAS,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC;AAAA,UAC5D;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,cAAc,OAAc,SAAwC;AAC1E,UAAM,UAAU,MAAM,QAAQ,YAAY;AAE1C,QAAI,QAAQ,SAAS,UAAU,KAAK,QAAQ,SAAS,QAAQ,GAAG;AAC9D,aAAO;AAAA,IACT,WAAW,QAAQ,SAAS,KAAK,KAAK,QAAQ,SAAS,QAAQ,GAAG;AAChE,aAAO;AAAA,IACT,WAAW,QAAQ,SAAS,SAAS,KAAK,QAAQ,SAAS;AACzD,aAAO;AAAA,IACT,WAAW,QAAQ,SAAS,QAAQ,KAAK,QAAQ,SAAS,MAAM,GAAG;AACjE,aAAO;AAAA,IACT,WAAW,QAAQ,SAAS,SAAS,KAAK,QAAQ,SAAS,SAAS,GAAG;AACrE,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,eAAe,OAAc,SAAuC;AAC1E,QAAI,QAAQ,SAAS,qBAAsB,QAAO;AAClD,QAAI,MAAM,QAAQ,SAAS,WAAW,EAAG,QAAO;AAChD,QAAI,MAAM,QAAQ,SAAS,UAAU,EAAG,QAAO;AAC/C,WAAO;AAAA,EACT;AAAA,EAEQ,0BAAgC;AACtC,SAAK,qBAAqB;AAAA,MACxB;AAAA,QACE,WAAW;AAAA,QACX,WAAW,CAAC,UACV,MAAM,QAAQ,SAAS,UAAU,KACjC,MAAM,QAAQ,SAAS,QAAQ;AAAA,QACjC,QAAQ,OAAO,QAAQ,aAAa;AAElC,iBAAO,KAAK,8BAA8B;AAG1C,cAAI;AACF,kBAAM,SAAS,sBAAsB;AACrC,mBAAO;AAAA,UACT,QAAQ;AACN,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,QACA,YAAY;AAAA,QACZ,WAAW;AAAA,MACb;AAAA,MACA;AAAA,QACE,WAAW;AAAA,QACX,WAAW,CAAC,UACV,MAAM,QAAQ,SAAS,KAAK,KAAK,MAAM,QAAQ,SAAS,QAAQ;AAAA,QAClE,QAAQ,OAAO,QAAQ,aAAa;AAClC,iBAAO,KAAK,oCAAoC;AAEhD,cAAI;AAEF,kBAAM,EAAE,SAAS,IAAI,MAAM,OAAO,eAAe;AACjD,qBAAS,qBAAqB,EAAE,OAAO,SAAS,CAAC;AACjD,qBAAS,yBAAyB,EAAE,OAAO,SAAS,CAAC;AACrD,mBAAO;AAAA,UACT,QAAQ;AACN,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,QACA,YAAY;AAAA,QACZ,WAAW;AAAA,MACb;AAAA,MACA;AAAA,QACE,WAAW;AAAA,QACX,WAAW,CAAC,OAAO,YACjB,MAAM,QAAQ,SAAS,SAAS,KAAK,QAAQ;AAAA,QAC/C,QAAQ,OAAO,QAAQ,aAAa;AAClC,iBAAO,KAAK,mCAAmC;AAG/C,gBAAM,SAAS,iBAAiB,aAAa;AAC7C,iBAAO;AAAA,QACT;AAAA,QACA,YAAY;AAAA,QACZ,WAAW;AAAA,MACb;AAAA,MACA;AAAA,QACE,WAAW;AAAA,QACX,WAAW,CAAC,UACV,MAAM,QAAQ,SAAS,QAAQ,KAAK,MAAM,QAAQ,SAAS,MAAM;AAAA,QACnE,QAAQ,OAAO,QAAQ,aAAa;AAClC,iBAAO,KAAK,4BAA4B;AAGxC,cAAI,OAAO,GAAI,QAAO,GAAG;AAGzB,gBAAM,SAAS,sBAAsB,CAAC;AACtC,iBAAO;AAAA,QACT;AAAA,QACA,YAAY;AAAA,QACZ,WAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,kBAA2D;AACvE,QAAI;AACF,YAAM,EAAE,SAAS,IAAI,MAAM,OAAO,eAAe;AAEjD,YAAM,gBAAgB,SAAS,6BAA6B;AAAA,QAC1D,UAAU;AAAA,MACZ,CAAC,EAAE,KAAK;AACR,YAAM,eAAe,SAAS,0BAA0B;AAAA,QACtD,UAAU;AAAA,MACZ,CAAC;AACD,YAAM,qBAAqB,aACxB,KAAK,EACL,MAAM,IAAI,EACV,OAAO,OAAO;AACjB,YAAM,iBAAiB,SAAS,cAAc,EAAE,UAAU,OAAO,CAAC;AAClE,YAAM,iBAAiB,eACpB,MAAM,IAAI,EACV,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE,QAAQ,WAAW,EAAE,CAAC,EAChD,OAAO,OAAO;AAEjB,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,aAAO,KAAK,gCAAgC,KAAc;AAC1D,aAAO;AAAA,QACL,eAAe;AAAA,QACf,oBAAoB,CAAC;AAAA,QACrB,gBAAgB,CAAC;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,gBACZ,UACe;AACf,QAAI;AACF,YAAM,EAAE,SAAS,IAAI,MAAM,OAAO,eAAe;AACjD,eAAS,gBAAgB,SAAS,aAAa,IAAI,EAAE,OAAO,SAAS,CAAC;AACtE,aAAO,KAAK,wBAAwB,SAAS,aAAa,EAAE;AAAA,IAC9D,SAAS,OAAO;AACd,aAAO,KAAK,gCAAgC,KAAc;AAAA,IAC5D;AAAA,EACF;AAAA,EAEA,MAAc,gBAAgB,YAAmC;AAE/D,WAAO,KAAK,2BAA2B,UAAU,EAAE;AAAA,EACrD;AAAA,EAEA,MAAc,kBACZ,YACe;AAEf,WAAO,KAAK,yCAAyC,WAAW,EAAE,EAAE;AAAA,EACtE;AAAA,EAEQ,qBAAqB,SAA4C;AACvE,UAAM,SAAS,KAAK,IAAI,IAAI;AAE5B,WACE,MAAM,KAAK,KAAK,YAAY,OAAO,CAAC,EACjC,OAAO,CAAC,OAAO,GAAG,YAAY,WAAW,GAAG,YAAY,MAAM,EAC9D,KAAK,CAAC,GAAG,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,KAAK;AAAA,EAEvD;AAAA,EAEA,MAAc,wBAAuC;AACnD,QAAI;AAEF,YAAM,KAAK,iBAAiB;AAK5B,aAAO,KAAK,2BAA2B;AAAA,IACzC,SAAS,OAAO;AACd,aAAO,MAAM,sCAAsC,KAAc;AAAA,IACnE;AAAA,EACF;AAAA,EAEA,MAAc,mBAAkC;AAAA,EAEhD;AAAA,EAEA,MAAc,sBAAsB,WAAkC;AACpE,UAAM,SAAS,MAAM,KAAK,KAAK,YAAY,OAAO,CAAC,EAAE;AAAA,MACnD,CAAC,GAAG,MAAM,EAAE,YAAY,EAAE;AAAA,IAC5B;AAEA,UAAM,WAAW,OAAO,MAAM,SAAS;AAEvC,eAAW,cAAc,UAAU;AACjC,UAAI;AACF,cAAM,iBAAiB,KAAK;AAAA,UAC1B,KAAK;AAAA,UACL,cAAc,WAAW,EAAE;AAAA,QAC7B;AACA,cAAM,GAAG,OAAO,cAAc;AAC9B,aAAK,YAAY,OAAO,WAAW,EAAE;AAAA,MACvC,SAAS,OAAO;AACd,eAAO;AAAA,UACL,+BAA+B,WAAW,EAAE;AAAA,UAC5C;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO,KAAK,cAAc,SAAS,MAAM,kBAAkB;AAAA,EAC7D;AAAA,EAEA,MAAc,wBAAwB,QAAoC;AACxE,WAAO,MAAM,qBAAqB,OAAO,EAAE,MAAM,OAAO,MAAM,OAAO,EAAE;AAGvE,QAAI;AACF,YAAM,aAAc,KAAK,iBAAyB;AAClD,UAAI,YAAY,IAAI;AAClB,cAAM,KAAK,iBAAiB,WAAW,IAAI,kBAAkB;AAAA,MAC/D;AAAA,IACF,QAAQ;AACN,aAAO,MAAM,uCAAuC;AAAA,IACtD;AAGA,UAAM,KAAK,iBAAiB,aAAa;AAAA,EAC3C;AAAA,EAEQ,wBACN,gBACU;AACV,UAAM,UAAoB,CAAC;AAE3B,eAAW,EAAE,MAAM,MAAM,KAAK,gBAAgB;AAC5C,UAAI,QAAQ,GAAG;AACb,gBAAQ,MAAM;AAAA,UACZ,KAAK;AACH,oBAAQ,KAAK,2CAA2C;AACxD;AAAA,UACF,KAAK;AACH,oBAAQ,KAAK,yCAAyC;AACtD;AAAA,UACF,KAAK;AACH,oBAAQ;AAAA,cACN;AAAA,YACF;AACA;AAAA,UACF,KAAK;AACH,oBAAQ,KAAK,qDAAqD;AAClE;AAAA,QACJ;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,2BAAiC;AACvC,SAAK,qBAAqB,YAAY,YAAY;AAChD,YAAM,aAAc,KAAK,iBAAyB;AAClD,UAAI,YAAY,MAAM,WAAW,WAAW,UAAU;AACpD,cAAM,KAAK,iBAAiB,WAAW,IAAI,UAAU;AAAA,MACvD;AAAA,IACF,GAAG,GAAM;AAAA,EACX;AAAA,EAEA,MAAc,0BAAyC;AACrD,QAAI;AACF,YAAM,GAAG,MAAM,KAAK,aAAa,EAAE,WAAW,KAAK,CAAC;AAAA,IACtD,SAAS,OAAO;AACd,aAAO,MAAM,wCAAwC,KAAc;AAAA,IACrE;AAAA,EACF;AAAA,EAEA,MAAc,0BAAyC;AACrD,QAAI;AACF,YAAM,QAAQ,MAAM,GAAG,QAAQ,KAAK,WAAW;AAE/C,iBAAW,QAAQ,OAAO;AACxB,YAAI,KAAK,WAAW,aAAa,KAAK,KAAK,SAAS,OAAO,GAAG;AAC5D,cAAI;AACF,kBAAM,UAAU,MAAM,GAAG;AAAA,cACvB,KAAK,KAAK,KAAK,aAAa,IAAI;AAAA,cAChC;AAAA,YACF;AACA,kBAAM,aAAiC,KAAK,MAAM,OAAO;AACzD,iBAAK,YAAY,IAAI,WAAW,IAAI,UAAU;AAAA,UAChD,SAAS,OAAO;AACd,mBAAO,KAAK,6BAA6B,IAAI,KAAK,KAAc;AAAA,UAClE;AAAA,QACF;AAAA,MACF;AAEA,aAAO,KAAK,UAAU,KAAK,YAAY,IAAI,uBAAuB;AAAA,IACpE,SAAS,OAAO;AACd,aAAO,KAAK,wCAAwC,KAAc;AAAA,IACpE;AAAA,EACF;AAAA,EAEA,MAAc,gBAAgB,QAAoC;AAChE,QAAI;AACF,YAAM,aAAa,KAAK,KAAK,KAAK,aAAa,SAAS,OAAO,EAAE,OAAO;AACxE,YAAM,GAAG,UAAU,YAAY,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAAA,IAChE,SAAS,OAAO;AACd,aAAO,MAAM,gCAAgC,KAAc;AAAA,IAC7D;AAAA,EACF;AAAA,EAEQ,MAAM,IAA2B;AACvC,WAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AAAA,EACzD;AAAA,EAEQ,aAAqB;AAC3B,WAAO,YAAY,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC,CAAC;AAAA,EAC1E;AACF;AAEA,IAAO,yBAAQ;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../src/integrations/ralph/state/state-reconciler.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * State Reconciler for Ralph-StackMemory Integration\n * Handles conflict resolution and state consistency across git, files, and memory\n */\n\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { execSync } from 'child_process';\nimport { logger } from '../../../core/monitoring/logger.js';\nimport {\n RalphLoopState,\n StateSource,\n Conflict,\n Resolution,\n ValidationResult,\n RalphStackMemoryConfig,\n} from '../types.js';\n\nexport class StateReconciler {\n private config: RalphStackMemoryConfig['stateReconciliation'];\n private readonly ralphDir = '.ralph';\n private reconciliationLog: Resolution[] = [];\n\n constructor(config?: Partial<RalphStackMemoryConfig['stateReconciliation']>) {\n this.config = {\n precedence: config?.precedence || ['git', 'files', 'memory'],\n conflictResolution: config?.conflictResolution || 'automatic',\n syncInterval: config?.syncInterval || 5000,\n validateConsistency: config?.validateConsistency ?? true,\n };\n }\n\n /**\n * Reconcile state from multiple sources\n */\n async reconcile(sources: StateSource[]): Promise<RalphLoopState> {\n logger.info('Reconciling state from sources', {\n sources: sources.map(s => ({ type: s.type, confidence: s.confidence })),\n });\n\n // Sort sources by precedence\n const sortedSources = this.sortByPrecedence(sources);\n \n // Detect conflicts\n const conflicts = this.detectConflicts(sortedSources);\n \n if (conflicts.length > 0) {\n logger.warn('State conflicts detected', {\n count: conflicts.length,\n fields: conflicts.map(c => c.field),\n });\n\n // Resolve conflicts based on configuration\n const resolutions = await this.resolveConflicts(conflicts);\n return this.applyResolutions(sortedSources[0].state as RalphLoopState, resolutions);\n }\n\n // No conflicts, merge states\n return this.mergeStates(sortedSources);\n }\n\n /**\n * Detect conflicts between state sources\n */\n detectConflicts(sources: StateSource[]): Conflict[] {\n const conflicts: Conflict[] = [];\n const fields = new Set<string>();\n\n // Collect all fields across sources\n sources.forEach(source => {\n Object.keys(source.state).forEach(field => fields.add(field));\n });\n\n // Check each field for conflicts\n for (const field of fields) {\n const values = sources\n .filter(s => s.state[field as keyof RalphLoopState] !== undefined)\n .map(s => ({\n source: s,\n value: s.state[field as keyof RalphLoopState],\n }));\n\n if (values.length > 1 && !this.valuesMatch(values.map(v => v.value))) {\n conflicts.push({\n field,\n sources: values.map(v => v.source),\n severity: this.assessConflictSeverity(field),\n suggestedResolution: this.suggestResolution(field, values.map(v => v.source)),\n });\n }\n }\n\n return conflicts;\n }\n\n /**\n * Resolve a single conflict\n */\n async resolveConflict(conflict: Conflict): Promise<Resolution> {\n const resolution = await this.resolveConflictByStrategy(conflict);\n \n this.reconciliationLog.push(resolution);\n \n logger.debug('Conflict resolved', {\n field: conflict.field,\n resolution: resolution.source,\n rationale: resolution.rationale,\n });\n\n return resolution;\n }\n\n /**\n * Validate state consistency\n */\n async validateConsistency(state: RalphLoopState): Promise<ValidationResult> {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n try {\n // Validate file system state\n await this.validateFileSystemState(state, errors, warnings);\n \n // Validate git state\n this.validateGitState(state, errors, warnings);\n \n // Validate logical consistency\n this.validateLogicalConsistency(state, errors, warnings);\n\n return {\n testsPass: errors.length === 0,\n lintClean: true,\n buildSuccess: true,\n errors,\n warnings,\n };\n } catch (error: any) {\n errors.push(`Validation failed: ${error.message}`);\n return {\n testsPass: false,\n lintClean: false,\n buildSuccess: false,\n errors,\n warnings,\n };\n }\n }\n\n /**\n * Get state from git\n */\n async getGitState(): Promise<StateSource> {\n try {\n const currentCommit = execSync('git rev-parse HEAD', { encoding: 'utf8' }).trim();\n const branch = execSync('git branch --show-current', { encoding: 'utf8' }).trim();\n const uncommittedChanges = execSync('git status --porcelain', { encoding: 'utf8' });\n \n // Check for Ralph commits\n const ralphCommits = execSync('git log --oneline --grep=\"Ralph iteration\"', {\n encoding: 'utf8',\n }).split('\\n').filter(Boolean);\n\n const lastRalphCommit = ralphCommits[0]?.split(' ')[0];\n const iteration = ralphCommits.length;\n\n return {\n type: 'git',\n state: {\n currentCommit,\n startCommit: lastRalphCommit,\n iteration,\n status: uncommittedChanges ? 'running' : 'completed',\n },\n timestamp: Date.now(),\n confidence: 0.9,\n };\n } catch (error: any) {\n logger.error('Failed to get git state', { error: error.message });\n return {\n type: 'git',\n state: {},\n timestamp: Date.now(),\n confidence: 0.1,\n };\n }\n }\n\n /**\n * Get state from file system\n */\n async getFileState(): Promise<StateSource> {\n try {\n const statePath = path.join(this.ralphDir, 'state.json');\n const iterationPath = path.join(this.ralphDir, 'iteration.txt');\n const feedbackPath = path.join(this.ralphDir, 'feedback.txt');\n const taskPath = path.join(this.ralphDir, 'task.md');\n const criteriaPath = path.join(this.ralphDir, 'completion-criteria.md');\n\n const [stateData, iteration, feedback, task, criteria] = await Promise.all([\n fs.readFile(statePath, 'utf8').catch(() => '{}'),\n fs.readFile(iterationPath, 'utf8').catch(() => '0'),\n fs.readFile(feedbackPath, 'utf8').catch(() => ''),\n fs.readFile(taskPath, 'utf8').catch(() => ''),\n fs.readFile(criteriaPath, 'utf8').catch(() => ''),\n ]);\n\n const state = JSON.parse(stateData);\n\n return {\n type: 'files',\n state: {\n ...state,\n iteration: parseInt(iteration.trim()),\n feedback: feedback.trim() || undefined,\n task: task.trim(),\n criteria: criteria.trim(),\n },\n timestamp: Date.now(),\n confidence: 0.95,\n };\n } catch (error: any) {\n logger.error('Failed to get file state', { error: error.message });\n return {\n type: 'files',\n state: {},\n timestamp: Date.now(),\n confidence: 0.1,\n };\n }\n }\n\n /**\n * Get state from memory (StackMemory)\n */\n async getMemoryState(loopId: string): Promise<StateSource> {\n try {\n // This would integrate with StackMemory's frame system\n // For now, returning a placeholder\n return {\n type: 'memory',\n state: {\n loopId,\n lastUpdateTime: Date.now(),\n },\n timestamp: Date.now(),\n confidence: 0.8,\n };\n } catch (error: any) {\n logger.error('Failed to get memory state', { error: error.message });\n return {\n type: 'memory',\n state: {},\n timestamp: Date.now(),\n confidence: 0.1,\n };\n }\n }\n\n /**\n * Sort sources by configured precedence\n */\n private sortByPrecedence(sources: StateSource[]): StateSource[] {\n return sources.sort((a, b) => {\n const aIndex = this.config.precedence.indexOf(a.type);\n const bIndex = this.config.precedence.indexOf(b.type);\n \n if (aIndex === -1 && bIndex === -1) {\n return b.confidence - a.confidence;\n }\n if (aIndex === -1) return 1;\n if (bIndex === -1) return -1;\n \n return aIndex - bIndex;\n });\n }\n\n /**\n * Check if values match\n */\n private valuesMatch(values: any[]): boolean {\n if (values.length === 0) return true;\n const first = JSON.stringify(values[0]);\n return values.every(v => JSON.stringify(v) === first);\n }\n\n /**\n * Assess conflict severity\n */\n private assessConflictSeverity(field: string): 'low' | 'medium' | 'high' {\n const highSeverityFields = ['loopId', 'task', 'criteria', 'status'];\n const mediumSeverityFields = ['iteration', 'currentCommit', 'feedback'];\n \n if (highSeverityFields.includes(field)) return 'high';\n if (mediumSeverityFields.includes(field)) return 'medium';\n return 'low';\n }\n\n /**\n * Suggest resolution based on field and sources\n */\n private suggestResolution(field: string, sources: StateSource[]): any {\n // Sort by confidence and precedence\n const sorted = this.sortByPrecedence(sources);\n const highestConfidence = sorted.reduce((max, s) => \n s.confidence > max.confidence ? s : max\n );\n \n return highestConfidence.state[field as keyof RalphLoopState];\n }\n\n /**\n * Resolve conflicts based on configured strategy\n */\n private async resolveConflicts(conflicts: Conflict[]): Promise<Resolution[]> {\n const resolutions: Resolution[] = [];\n\n for (const conflict of conflicts) {\n const resolution = await this.resolveConflictByStrategy(conflict);\n resolutions.push(resolution);\n }\n\n return resolutions;\n }\n\n /**\n * Resolve conflict based on strategy\n */\n private async resolveConflictByStrategy(conflict: Conflict): Promise<Resolution> {\n switch (this.config.conflictResolution) {\n case 'automatic':\n return this.automaticResolution(conflict);\n \n case 'manual':\n return this.manualResolution(conflict);\n \n case 'interactive':\n return this.interactiveResolution(conflict);\n \n default:\n return this.automaticResolution(conflict);\n }\n }\n\n /**\n * Automatic resolution based on precedence and confidence\n */\n private automaticResolution(conflict: Conflict): Resolution {\n const sorted = this.sortByPrecedence(conflict.sources);\n const winner = sorted[0];\n \n return {\n field: conflict.field,\n value: winner.state[conflict.field as keyof RalphLoopState],\n source: winner.type,\n rationale: `Automatic resolution: ${winner.type} has highest precedence (confidence: ${winner.confidence})`,\n };\n }\n\n /**\n * Manual resolution (uses suggested resolution)\n */\n private manualResolution(conflict: Conflict): Resolution {\n return {\n field: conflict.field,\n value: conflict.suggestedResolution,\n source: 'manual',\n rationale: 'Manual resolution: using suggested value',\n };\n }\n\n /**\n * Interactive resolution (would prompt user in real implementation)\n */\n private async interactiveResolution(conflict: Conflict): Promise<Resolution> {\n // In real implementation, this would prompt the user\n logger.info('Interactive resolution required', {\n field: conflict.field,\n options: conflict.sources.map(s => ({\n type: s.type,\n value: s.state[conflict.field as keyof RalphLoopState],\n confidence: s.confidence,\n })),\n });\n\n // For now, fallback to automatic\n return this.automaticResolution(conflict);\n }\n\n /**\n * Apply resolutions to base state\n */\n private applyResolutions(\n baseState: RalphLoopState,\n resolutions: Resolution[]\n ): RalphLoopState {\n const resolvedState = { ...baseState };\n\n for (const resolution of resolutions) {\n (resolvedState as any)[resolution.field] = resolution.value;\n }\n\n return resolvedState;\n }\n\n /**\n * Merge states without conflicts\n */\n private mergeStates(sources: StateSource[]): RalphLoopState {\n const merged: any = {};\n\n // Apply in precedence order\n for (const source of sources) {\n Object.assign(merged, source.state);\n }\n\n return merged as RalphLoopState;\n }\n\n /**\n * Validate file system state\n */\n private async validateFileSystemState(\n state: RalphLoopState,\n errors: string[],\n warnings: string[]\n ): Promise<void> {\n try {\n const ralphDirExists = await fs.stat(this.ralphDir).then(() => true).catch(() => false);\n \n if (!ralphDirExists) {\n warnings.push('Ralph directory does not exist');\n return;\n }\n\n const requiredFiles = ['task.md', 'state.json', 'iteration.txt'];\n for (const file of requiredFiles) {\n const filePath = path.join(this.ralphDir, file);\n const exists = await fs.stat(filePath).then(() => true).catch(() => false);\n \n if (!exists) {\n warnings.push(`Missing file: ${file}`);\n }\n }\n } catch (error: any) {\n errors.push(`File system validation failed: ${error.message}`);\n }\n }\n\n /**\n * Validate git state\n */\n private validateGitState(\n state: RalphLoopState,\n errors: string[],\n warnings: string[]\n ): void {\n try {\n const isGitRepo = execSync('git rev-parse --is-inside-work-tree', {\n encoding: 'utf8',\n }).trim() === 'true';\n \n if (!isGitRepo) {\n warnings.push('Not in a git repository');\n }\n\n if (state.currentCommit && state.startCommit) {\n try {\n execSync(`git rev-parse ${state.currentCommit}`, { encoding: 'utf8' });\n } catch {\n errors.push(`Invalid current commit: ${state.currentCommit}`);\n }\n\n try {\n execSync(`git rev-parse ${state.startCommit}`, { encoding: 'utf8' });\n } catch {\n warnings.push(`Invalid start commit: ${state.startCommit}`);\n }\n }\n } catch (error: any) {\n warnings.push(`Git validation failed: ${error.message}`);\n }\n }\n\n /**\n * Validate logical consistency\n */\n private validateLogicalConsistency(\n state: RalphLoopState,\n errors: string[],\n warnings: string[]\n ): void {\n // Check iteration number\n if (state.iteration < 0) {\n errors.push('Invalid iteration number: cannot be negative');\n }\n\n // Check status consistency\n if (state.status === 'completed' && !state.completionData) {\n warnings.push('Status is completed but no completion data');\n }\n\n // Check time consistency\n if (state.lastUpdateTime && state.startTime && state.lastUpdateTime < state.startTime) {\n errors.push('Last update time is before start time');\n }\n\n // Check task and criteria\n if (!state.task) {\n errors.push('No task defined');\n }\n\n if (!state.criteria) {\n warnings.push('No completion criteria defined');\n }\n }\n}"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|