@stackmemoryai/stackmemory 0.5.58 → 0.5.59
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/commands/search.js +20 -3
- package/dist/cli/commands/search.js.map +2 -2
- package/dist/core/database/sqlite-adapter.js +13 -3
- package/dist/core/database/sqlite-adapter.js.map +2 -2
- package/dist/core/errors/error-utils.js +208 -0
- package/dist/core/errors/error-utils.js.map +7 -0
- package/dist/core/errors/index.js +13 -4
- package/dist/core/errors/index.js.map +2 -2
- package/dist/core/merge/unified-merge-resolver.js +303 -0
- package/dist/core/merge/unified-merge-resolver.js.map +7 -0
- package/dist/core/monitoring/logger.js +61 -9
- package/dist/core/monitoring/logger.js.map +2 -2
- package/dist/core/security/index.js +35 -0
- package/dist/core/security/index.js.map +7 -0
- package/dist/core/security/input-sanitizer.js +321 -0
- package/dist/core/security/input-sanitizer.js.map +7 -0
- package/dist/integrations/linear/client.js +5 -1
- package/dist/integrations/linear/client.js.map +2 -2
- package/dist/integrations/mcp/remote-server.js +27 -36
- package/dist/integrations/mcp/remote-server.js.map +2 -2
- package/dist/integrations/mcp/server.js +44 -29
- package/dist/integrations/mcp/server.js.map +3 -3
- package/dist/scripts/benchmark-performance.js +48 -0
- package/dist/scripts/benchmark-performance.js.map +7 -0
- package/dist/scripts/check-redis.js +42 -0
- package/dist/scripts/check-redis.js.map +7 -0
- package/dist/scripts/initialize.js +116 -0
- package/dist/scripts/initialize.js.map +7 -0
- package/dist/scripts/list-linear-tasks.js +124 -0
- package/dist/scripts/list-linear-tasks.js.map +7 -0
- package/dist/scripts/measure-handoff-impact.js +340 -0
- package/dist/scripts/measure-handoff-impact.js.map +7 -0
- package/dist/scripts/query-chromadb.js +160 -0
- package/dist/scripts/query-chromadb.js.map +7 -0
- package/dist/scripts/show-linear-summary.js +119 -0
- package/dist/scripts/show-linear-summary.js.map +7 -0
- package/dist/scripts/simple-swarm-demo.js +90 -0
- package/dist/scripts/simple-swarm-demo.js.map +7 -0
- package/dist/scripts/status.js +155 -0
- package/dist/scripts/status.js.map +7 -0
- package/dist/scripts/test-chromadb-sync.js +192 -0
- package/dist/scripts/test-chromadb-sync.js.map +7 -0
- package/dist/scripts/test-ralph-iteration-fix.js +86 -0
- package/dist/scripts/test-ralph-iteration-fix.js.map +7 -0
- package/dist/scripts/test-ralph-iterations.js +121 -0
- package/dist/scripts/test-ralph-iterations.js.map +7 -0
- package/dist/scripts/test-redis-storage.js +389 -0
- package/dist/scripts/test-redis-storage.js.map +7 -0
- package/dist/scripts/test-simple-ralph-state-sync.js +115 -0
- package/dist/scripts/test-simple-ralph-state-sync.js.map +7 -0
- package/dist/scripts/test-swarm-fixes.js +125 -0
- package/dist/scripts/test-swarm-fixes.js.map +7 -0
- package/dist/scripts/test-swarm-tui.js +23 -0
- package/dist/scripts/test-swarm-tui.js.map +7 -0
- package/dist/scripts/test-tui-shortcuts.js +52 -0
- package/dist/scripts/test-tui-shortcuts.js.map +7 -0
- package/dist/scripts/validate-tui-shortcuts.js +60 -0
- package/dist/scripts/validate-tui-shortcuts.js.map +7 -0
- package/dist/src/agents/core/agent-task-manager.js +527 -0
- package/dist/src/agents/core/agent-task-manager.js.map +7 -0
- package/dist/src/agents/verifiers/base-verifier.js +133 -0
- package/dist/src/agents/verifiers/base-verifier.js.map +7 -0
- package/dist/src/agents/verifiers/formatter-verifier.js +130 -0
- package/dist/src/agents/verifiers/formatter-verifier.js.map +7 -0
- package/dist/src/agents/verifiers/llm-judge.js +252 -0
- package/dist/src/agents/verifiers/llm-judge.js.map +7 -0
- package/dist/src/cli/auto-detect.js +321 -0
- package/dist/src/cli/auto-detect.js.map +7 -0
- package/dist/src/cli/claude-sm-danger.js +21 -0
- package/dist/src/cli/claude-sm-danger.js.map +7 -0
- package/dist/src/cli/claude-sm.js +1156 -0
- package/dist/src/cli/claude-sm.js.map +7 -0
- package/dist/src/cli/codex-sm-danger.js +21 -0
- package/dist/src/cli/codex-sm-danger.js.map +7 -0
- package/dist/src/cli/codex-sm.js +349 -0
- package/dist/src/cli/codex-sm.js.map +7 -0
- package/dist/src/cli/commands/api.js +232 -0
- package/dist/src/cli/commands/api.js.map +7 -0
- package/dist/src/cli/commands/auto-background.js +180 -0
- package/dist/src/cli/commands/auto-background.js.map +7 -0
- package/dist/src/cli/commands/cleanup-processes.js +68 -0
- package/dist/src/cli/commands/cleanup-processes.js.map +7 -0
- package/dist/src/cli/commands/clear.js +202 -0
- package/dist/src/cli/commands/clear.js.map +7 -0
- package/dist/src/cli/commands/config.js +445 -0
- package/dist/src/cli/commands/config.js.map +7 -0
- package/dist/src/cli/commands/context-rehydrate.js +751 -0
- package/dist/src/cli/commands/context-rehydrate.js.map +7 -0
- package/dist/src/cli/commands/context.js +343 -0
- package/dist/src/cli/commands/context.js.map +7 -0
- package/dist/src/cli/commands/daemon.js +392 -0
- package/dist/src/cli/commands/daemon.js.map +7 -0
- package/dist/src/cli/commands/dashboard.js +210 -0
- package/dist/src/cli/commands/dashboard.js.map +7 -0
- package/dist/src/cli/commands/db.js +147 -0
- package/dist/src/cli/commands/db.js.map +7 -0
- package/dist/src/cli/commands/decision.js +266 -0
- package/dist/src/cli/commands/decision.js.map +7 -0
- package/dist/src/cli/commands/discovery.js +279 -0
- package/dist/src/cli/commands/discovery.js.map +7 -0
- package/dist/src/cli/commands/handoff.js +624 -0
- package/dist/src/cli/commands/handoff.js.map +7 -0
- package/dist/src/cli/commands/hooks.js +298 -0
- package/dist/src/cli/commands/hooks.js.map +7 -0
- package/dist/src/cli/commands/linear.js +529 -0
- package/dist/src/cli/commands/linear.js.map +7 -0
- package/dist/src/cli/commands/log.js +169 -0
- package/dist/src/cli/commands/log.js.map +7 -0
- package/dist/src/cli/commands/login.js +172 -0
- package/dist/src/cli/commands/login.js.map +7 -0
- package/dist/src/cli/commands/migrate.js +240 -0
- package/dist/src/cli/commands/migrate.js.map +7 -0
- package/dist/src/cli/commands/model.js +533 -0
- package/dist/src/cli/commands/model.js.map +7 -0
- package/dist/src/cli/commands/onboard.js +536 -0
- package/dist/src/cli/commands/onboard.js.map +7 -0
- package/dist/src/cli/commands/projects.js +199 -0
- package/dist/src/cli/commands/projects.js.map +7 -0
- package/dist/src/cli/commands/ralph.js +909 -0
- package/dist/src/cli/commands/ralph.js.map +7 -0
- package/dist/src/cli/commands/retrieval.js +248 -0
- package/dist/src/cli/commands/retrieval.js.map +7 -0
- package/dist/src/cli/commands/search.js +173 -0
- package/dist/src/cli/commands/search.js.map +7 -0
- package/dist/src/cli/commands/service.js +749 -0
- package/dist/src/cli/commands/service.js.map +7 -0
- package/dist/src/cli/commands/session.js +200 -0
- package/dist/src/cli/commands/session.js.map +7 -0
- package/dist/src/cli/commands/settings.js +306 -0
- package/dist/src/cli/commands/settings.js.map +7 -0
- package/dist/src/cli/commands/setup.js +701 -0
- package/dist/src/cli/commands/setup.js.map +7 -0
- package/dist/src/cli/commands/shell.js +249 -0
- package/dist/src/cli/commands/shell.js.map +7 -0
- package/dist/src/cli/commands/signup.js +50 -0
- package/dist/src/cli/commands/signup.js.map +7 -0
- package/dist/src/cli/commands/skills.js +470 -0
- package/dist/src/cli/commands/skills.js.map +7 -0
- package/dist/src/cli/commands/sms-notify.js +795 -0
- package/dist/src/cli/commands/sms-notify.js.map +7 -0
- package/dist/src/cli/commands/storage-tier.js +183 -0
- package/dist/src/cli/commands/storage-tier.js.map +7 -0
- package/dist/src/cli/commands/sweep.js +249 -0
- package/dist/src/cli/commands/sweep.js.map +7 -0
- package/dist/src/cli/commands/tasks.js +213 -0
- package/dist/src/cli/commands/tasks.js.map +7 -0
- package/dist/src/cli/commands/worktree.js +319 -0
- package/dist/src/cli/commands/worktree.js.map +7 -0
- package/dist/src/cli/index.js +594 -0
- package/dist/src/cli/index.js.map +7 -0
- package/dist/src/cli/opencode-sm.js +448 -0
- package/dist/src/cli/opencode-sm.js.map +7 -0
- package/dist/src/cli/utils/viewer.js +96 -0
- package/dist/src/cli/utils/viewer.js.map +7 -0
- package/dist/src/core/config/config-manager.js +398 -0
- package/dist/src/core/config/config-manager.js.map +7 -0
- package/dist/src/core/config/feature-flags.js +76 -0
- package/dist/src/core/config/feature-flags.js.map +7 -0
- package/dist/src/core/config/storage-config.js +115 -0
- package/dist/src/core/config/storage-config.js.map +7 -0
- package/dist/src/core/config/types.js +144 -0
- package/dist/src/core/config/types.js.map +7 -0
- package/dist/src/core/context/auto-context.js +80 -0
- package/dist/src/core/context/auto-context.js.map +7 -0
- package/dist/src/core/context/dual-stack-manager.js +870 -0
- package/dist/src/core/context/dual-stack-manager.js.map +7 -0
- package/dist/src/core/context/enhanced-rehydration.js +994 -0
- package/dist/src/core/context/enhanced-rehydration.js.map +7 -0
- package/dist/src/core/context/frame-database.js +479 -0
- package/dist/src/core/context/frame-database.js.map +7 -0
- package/dist/src/core/context/frame-digest.js +250 -0
- package/dist/src/core/context/frame-digest.js.map +7 -0
- package/dist/src/core/context/frame-handoff-manager.js +778 -0
- package/dist/src/core/context/frame-handoff-manager.js.map +7 -0
- package/dist/src/core/context/frame-lifecycle-hooks.js +119 -0
- package/dist/src/core/context/frame-lifecycle-hooks.js.map +7 -0
- package/dist/src/core/context/frame-recovery.js +302 -0
- package/dist/src/core/context/frame-recovery.js.map +7 -0
- package/dist/src/core/context/frame-stack.js +314 -0
- package/dist/src/core/context/frame-stack.js.map +7 -0
- package/dist/src/core/context/frame-types.js +5 -0
- package/dist/src/core/context/frame-types.js.map +7 -0
- package/dist/src/core/context/index.js +25 -0
- package/dist/src/core/context/index.js.map +7 -0
- package/dist/src/core/context/permission-manager.js +185 -0
- package/dist/src/core/context/permission-manager.js.map +7 -0
- package/dist/src/core/context/recursive-context-manager.js +592 -0
- package/dist/src/core/context/recursive-context-manager.js.map +7 -0
- package/dist/src/core/context/refactored-frame-manager.js +754 -0
- package/dist/src/core/context/refactored-frame-manager.js.map +7 -0
- package/dist/src/core/context/shared-context-layer.js +621 -0
- package/dist/src/core/context/shared-context-layer.js.map +7 -0
- package/dist/src/core/context/stack-merge-resolver.js +749 -0
- package/dist/src/core/context/stack-merge-resolver.js.map +7 -0
- package/dist/src/core/context/validation.js +130 -0
- package/dist/src/core/context/validation.js.map +7 -0
- package/dist/src/core/database/batch-operations.js +384 -0
- package/dist/src/core/database/batch-operations.js.map +7 -0
- package/dist/src/core/database/connection-pool.js +330 -0
- package/dist/src/core/database/connection-pool.js.map +7 -0
- package/dist/src/core/database/database-adapter.js +60 -0
- package/dist/src/core/database/database-adapter.js.map +7 -0
- package/dist/src/core/database/migration-manager.js +614 -0
- package/dist/src/core/database/migration-manager.js.map +7 -0
- package/dist/src/core/database/query-cache.js +298 -0
- package/dist/src/core/database/query-cache.js.map +7 -0
- package/dist/src/core/database/query-router.js +430 -0
- package/dist/src/core/database/query-router.js.map +7 -0
- package/dist/src/core/database/sqlite-adapter.js +738 -0
- package/dist/src/core/database/sqlite-adapter.js.map +7 -0
- package/dist/src/core/digest/enhanced-hybrid-digest.js +277 -0
- package/dist/src/core/digest/enhanced-hybrid-digest.js.map +7 -0
- package/dist/src/core/digest/frame-digest-integration.js +176 -0
- package/dist/src/core/digest/frame-digest-integration.js.map +7 -0
- package/dist/src/core/digest/hybrid-digest-generator.js +553 -0
- package/dist/src/core/digest/hybrid-digest-generator.js.map +7 -0
- package/dist/src/core/digest/index.js +9 -0
- package/dist/src/core/digest/index.js.map +7 -0
- package/dist/src/core/digest/types.js +25 -0
- package/dist/src/core/digest/types.js.map +7 -0
- package/dist/src/core/errors/error-utils.js +208 -0
- package/dist/src/core/errors/error-utils.js.map +7 -0
- package/dist/src/core/errors/index.js +521 -0
- package/dist/src/core/errors/index.js.map +7 -0
- package/dist/src/core/errors/recovery.js +269 -0
- package/dist/src/core/errors/recovery.js.map +7 -0
- package/dist/src/core/execution/parallel-executor.js +258 -0
- package/dist/src/core/execution/parallel-executor.js.map +7 -0
- package/dist/src/core/frame/workflow-templates.js +319 -0
- package/dist/src/core/frame/workflow-templates.js.map +7 -0
- package/dist/src/core/merge/conflict-detector.js +431 -0
- package/dist/src/core/merge/conflict-detector.js.map +7 -0
- package/dist/src/core/merge/index.js +9 -0
- package/dist/src/core/merge/index.js.map +7 -0
- package/dist/src/core/merge/resolution-engine.js +558 -0
- package/dist/src/core/merge/resolution-engine.js.map +7 -0
- package/dist/src/core/merge/stack-diff.js +532 -0
- package/dist/src/core/merge/stack-diff.js.map +7 -0
- package/dist/src/core/merge/types.js +5 -0
- package/dist/src/core/merge/types.js.map +7 -0
- package/dist/src/core/merge/unified-merge-resolver.js +303 -0
- package/dist/src/core/merge/unified-merge-resolver.js.map +7 -0
- package/dist/src/core/models/fallback-monitor.js +232 -0
- package/dist/src/core/models/fallback-monitor.js.map +7 -0
- package/dist/src/core/models/model-router.js +340 -0
- package/dist/src/core/models/model-router.js.map +7 -0
- package/dist/src/core/monitoring/error-handler.js +49 -0
- package/dist/src/core/monitoring/error-handler.js.map +7 -0
- package/dist/src/core/monitoring/logger.js +202 -0
- package/dist/src/core/monitoring/logger.js.map +7 -0
- package/dist/src/core/monitoring/metrics.js +172 -0
- package/dist/src/core/monitoring/metrics.js.map +7 -0
- package/dist/src/core/monitoring/progress-tracker.js +189 -0
- package/dist/src/core/monitoring/progress-tracker.js.map +7 -0
- package/dist/src/core/monitoring/session-monitor.js +300 -0
- package/dist/src/core/monitoring/session-monitor.js.map +7 -0
- package/dist/src/core/performance/context-cache.js +273 -0
- package/dist/src/core/performance/context-cache.js.map +7 -0
- package/dist/src/core/performance/index.js +11 -0
- package/dist/src/core/performance/index.js.map +7 -0
- package/dist/src/core/performance/lazy-context-loader.js +327 -0
- package/dist/src/core/performance/lazy-context-loader.js.map +7 -0
- package/dist/src/core/performance/monitor.js +221 -0
- package/dist/src/core/performance/monitor.js.map +7 -0
- package/dist/src/core/performance/optimized-frame-context.js +345 -0
- package/dist/src/core/performance/optimized-frame-context.js.map +7 -0
- package/dist/src/core/performance/performance-benchmark.js +277 -0
- package/dist/src/core/performance/performance-benchmark.js.map +7 -0
- package/dist/src/core/performance/performance-profiler.js +370 -0
- package/dist/src/core/performance/performance-profiler.js.map +7 -0
- package/dist/src/core/performance/streaming-jsonl-parser.js +195 -0
- package/dist/src/core/performance/streaming-jsonl-parser.js.map +7 -0
- package/dist/src/core/persistence/postgres-adapter.js +349 -0
- package/dist/src/core/persistence/postgres-adapter.js.map +7 -0
- package/dist/src/core/projects/project-isolation.js +201 -0
- package/dist/src/core/projects/project-isolation.js.map +7 -0
- package/dist/src/core/projects/project-manager.js +697 -0
- package/dist/src/core/projects/project-manager.js.map +7 -0
- package/dist/src/core/query/query-parser.js +370 -0
- package/dist/src/core/query/query-parser.js.map +7 -0
- package/dist/src/core/query/query-templates.js +321 -0
- package/dist/src/core/query/query-templates.js.map +7 -0
- package/dist/src/core/retrieval/context-retriever.js +479 -0
- package/dist/src/core/retrieval/context-retriever.js.map +7 -0
- package/dist/src/core/retrieval/index.js +8 -0
- package/dist/src/core/retrieval/index.js.map +7 -0
- package/dist/src/core/retrieval/llm-context-retrieval.js +613 -0
- package/dist/src/core/retrieval/llm-context-retrieval.js.map +7 -0
- package/dist/src/core/retrieval/llm-provider.js +151 -0
- package/dist/src/core/retrieval/llm-provider.js.map +7 -0
- package/dist/src/core/retrieval/retrieval-audit.js +236 -0
- package/dist/src/core/retrieval/retrieval-audit.js.map +7 -0
- package/dist/src/core/retrieval/summary-generator.js +589 -0
- package/dist/src/core/retrieval/summary-generator.js.map +7 -0
- package/dist/src/core/retrieval/types.js +21 -0
- package/dist/src/core/retrieval/types.js.map +7 -0
- package/dist/src/core/security/index.js +35 -0
- package/dist/src/core/security/index.js.map +7 -0
- package/dist/src/core/security/input-sanitizer.js +321 -0
- package/dist/src/core/security/input-sanitizer.js.map +7 -0
- package/dist/src/core/session/clear-survival.js +465 -0
- package/dist/src/core/session/clear-survival.js.map +7 -0
- package/dist/src/core/session/enhanced-handoff.js +792 -0
- package/dist/src/core/session/enhanced-handoff.js.map +7 -0
- package/dist/src/core/session/handoff-generator.js +343 -0
- package/dist/src/core/session/handoff-generator.js.map +7 -0
- package/dist/src/core/session/index.js +15 -0
- package/dist/src/core/session/index.js.map +7 -0
- package/dist/src/core/session/session-manager.js +347 -0
- package/dist/src/core/session/session-manager.js.map +7 -0
- package/dist/src/core/skills/index.js +7 -0
- package/dist/src/core/skills/index.js.map +7 -0
- package/dist/src/core/skills/skill-storage.js +764 -0
- package/dist/src/core/skills/skill-storage.js.map +7 -0
- package/dist/src/core/skills/types.js +193 -0
- package/dist/src/core/skills/types.js.map +7 -0
- package/dist/src/core/storage/chromadb-adapter.js +354 -0
- package/dist/src/core/storage/chromadb-adapter.js.map +7 -0
- package/dist/src/core/storage/infinite-storage.js +510 -0
- package/dist/src/core/storage/infinite-storage.js.map +7 -0
- package/dist/src/core/storage/remote-storage.js +489 -0
- package/dist/src/core/storage/remote-storage.js.map +7 -0
- package/dist/src/core/storage/two-tier-storage.js +766 -0
- package/dist/src/core/storage/two-tier-storage.js.map +7 -0
- package/dist/src/core/trace/cli-trace-wrapper.js +132 -0
- package/dist/src/core/trace/cli-trace-wrapper.js.map +7 -0
- package/dist/src/core/trace/db-trace-wrapper.js +247 -0
- package/dist/src/core/trace/db-trace-wrapper.js.map +7 -0
- package/dist/src/core/trace/debug-trace.js +417 -0
- package/dist/src/core/trace/debug-trace.js.map +7 -0
- package/dist/src/core/trace/index.js +109 -0
- package/dist/src/core/trace/index.js.map +7 -0
- package/dist/src/core/trace/linear-api-wrapper.js +178 -0
- package/dist/src/core/trace/linear-api-wrapper.js.map +7 -0
- package/dist/src/core/trace/trace-detector.js +528 -0
- package/dist/src/core/trace/trace-detector.js.map +7 -0
- package/dist/src/core/trace/trace-store.js +345 -0
- package/dist/src/core/trace/trace-store.js.map +7 -0
- package/dist/src/core/trace/types.js +77 -0
- package/dist/src/core/trace/types.js.map +7 -0
- package/dist/src/core/types.js +5 -0
- package/dist/src/core/types.js.map +7 -0
- package/dist/src/core/utils/async-mutex.js +114 -0
- package/dist/src/core/utils/async-mutex.js.map +7 -0
- package/dist/src/core/utils/compression.js +83 -0
- package/dist/src/core/utils/compression.js.map +7 -0
- package/dist/src/core/utils/update-checker.js +218 -0
- package/dist/src/core/utils/update-checker.js.map +7 -0
- package/dist/src/core/worktree/worktree-manager.js +465 -0
- package/dist/src/core/worktree/worktree-manager.js.map +7 -0
- package/dist/src/daemon/daemon-config.js +149 -0
- package/dist/src/daemon/daemon-config.js.map +7 -0
- package/dist/src/daemon/services/context-service.js +122 -0
- package/dist/src/daemon/services/context-service.js.map +7 -0
- package/dist/src/daemon/services/linear-service.js +136 -0
- package/dist/src/daemon/services/linear-service.js.map +7 -0
- package/dist/src/daemon/session-daemon.js +312 -0
- package/dist/src/daemon/session-daemon.js.map +7 -0
- package/dist/src/daemon/unified-daemon.js +276 -0
- package/dist/src/daemon/unified-daemon.js.map +7 -0
- package/dist/src/features/analytics/api/analytics-api.js +287 -0
- package/dist/src/features/analytics/api/analytics-api.js.map +7 -0
- package/dist/src/features/analytics/core/analytics-service.js +282 -0
- package/dist/src/features/analytics/core/analytics-service.js.map +7 -0
- package/dist/src/features/analytics/index.js +18 -0
- package/dist/src/features/analytics/index.js.map +7 -0
- package/dist/src/features/analytics/queries/metrics-queries.js +277 -0
- package/dist/src/features/analytics/queries/metrics-queries.js.map +7 -0
- package/dist/src/features/analytics/types/metrics.js +5 -0
- package/dist/src/features/analytics/types/metrics.js.map +7 -0
- package/dist/src/features/browser/browser-mcp.js +492 -0
- package/dist/src/features/browser/browser-mcp.js.map +7 -0
- package/dist/src/features/sweep/index.js +20 -0
- package/dist/src/features/sweep/index.js.map +7 -0
- package/dist/src/features/sweep/prediction-client.js +155 -0
- package/dist/src/features/sweep/prediction-client.js.map +7 -0
- package/dist/src/features/sweep/prompt-builder.js +85 -0
- package/dist/src/features/sweep/prompt-builder.js.map +7 -0
- package/dist/src/features/sweep/pty-wrapper.js +171 -0
- package/dist/src/features/sweep/pty-wrapper.js.map +7 -0
- package/dist/src/features/sweep/state-watcher.js +87 -0
- package/dist/src/features/sweep/state-watcher.js.map +7 -0
- package/dist/src/features/sweep/status-bar.js +88 -0
- package/dist/src/features/sweep/status-bar.js.map +7 -0
- package/dist/src/features/sweep/sweep-server-manager.js +226 -0
- package/dist/src/features/sweep/sweep-server-manager.js.map +7 -0
- package/dist/src/features/sweep/tab-interceptor.js +38 -0
- package/dist/src/features/sweep/tab-interceptor.js.map +7 -0
- package/dist/src/features/sweep/types.js +18 -0
- package/dist/src/features/sweep/types.js.map +7 -0
- package/dist/src/features/tasks/linear-task-manager.js +487 -0
- package/dist/src/features/tasks/linear-task-manager.js.map +7 -0
- package/dist/src/features/tasks/task-aware-context.js +410 -0
- package/dist/src/features/tasks/task-aware-context.js.map +7 -0
- package/dist/src/features/tui/simple-monitor.js +116 -0
- package/dist/src/features/tui/simple-monitor.js.map +7 -0
- package/dist/src/features/tui/swarm-monitor.js +648 -0
- package/dist/src/features/tui/swarm-monitor.js.map +7 -0
- package/dist/src/features/web/client/stores/task-store.js +26 -0
- package/dist/src/features/web/client/stores/task-store.js.map +7 -0
- package/dist/src/features/web/server/index.js +194 -0
- package/dist/src/features/web/server/index.js.map +7 -0
- package/dist/src/hooks/auto-background.js +151 -0
- package/dist/src/hooks/auto-background.js.map +7 -0
- package/dist/src/hooks/claude-code-whatsapp-hook.js +197 -0
- package/dist/src/hooks/claude-code-whatsapp-hook.js.map +7 -0
- package/dist/src/hooks/config.js +150 -0
- package/dist/src/hooks/config.js.map +7 -0
- package/dist/src/hooks/daemon.js +364 -0
- package/dist/src/hooks/daemon.js.map +7 -0
- package/dist/src/hooks/events.js +58 -0
- package/dist/src/hooks/events.js.map +7 -0
- package/dist/src/hooks/index.js +12 -0
- package/dist/src/hooks/index.js.map +7 -0
- package/dist/src/hooks/linear-task-picker.js +186 -0
- package/dist/src/hooks/linear-task-picker.js.map +7 -0
- package/dist/src/hooks/schemas.js +197 -0
- package/dist/src/hooks/schemas.js.map +7 -0
- package/dist/src/hooks/secure-fs.js +49 -0
- package/dist/src/hooks/secure-fs.js.map +7 -0
- package/dist/src/hooks/security-logger.js +155 -0
- package/dist/src/hooks/security-logger.js.map +7 -0
- package/dist/src/hooks/session-summary.js +222 -0
- package/dist/src/hooks/session-summary.js.map +7 -0
- package/dist/src/hooks/sms-action-runner.js +371 -0
- package/dist/src/hooks/sms-action-runner.js.map +7 -0
- package/dist/src/hooks/sms-notify.js +506 -0
- package/dist/src/hooks/sms-notify.js.map +7 -0
- package/dist/src/hooks/sms-watcher.js +93 -0
- package/dist/src/hooks/sms-watcher.js.map +7 -0
- package/dist/src/hooks/sms-webhook.js +555 -0
- package/dist/src/hooks/sms-webhook.js.map +7 -0
- package/dist/src/hooks/whatsapp-commands.js +479 -0
- package/dist/src/hooks/whatsapp-commands.js.map +7 -0
- package/dist/src/hooks/whatsapp-scheduler.js +317 -0
- package/dist/src/hooks/whatsapp-scheduler.js.map +7 -0
- package/dist/src/hooks/whatsapp-sync.js +409 -0
- package/dist/src/hooks/whatsapp-sync.js.map +7 -0
- package/dist/src/index.js +25 -0
- package/dist/src/index.js.map +7 -0
- package/dist/src/integrations/anthropic/client.js +263 -0
- package/dist/src/integrations/anthropic/client.js.map +7 -0
- package/dist/src/integrations/claude-code/agent-bridge.js +768 -0
- package/dist/src/integrations/claude-code/agent-bridge.js.map +7 -0
- package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js +459 -0
- package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
- package/dist/src/integrations/claude-code/lifecycle-hooks.js +254 -0
- package/dist/src/integrations/claude-code/lifecycle-hooks.js.map +7 -0
- package/dist/src/integrations/claude-code/post-task-hooks.js +545 -0
- package/dist/src/integrations/claude-code/post-task-hooks.js.map +7 -0
- package/dist/src/integrations/claude-code/subagent-client-stub.js +20 -0
- package/dist/src/integrations/claude-code/subagent-client-stub.js.map +7 -0
- package/dist/src/integrations/claude-code/subagent-client.js +511 -0
- package/dist/src/integrations/claude-code/subagent-client.js.map +7 -0
- package/dist/src/integrations/claude-code/task-coordinator.js +360 -0
- package/dist/src/integrations/claude-code/task-coordinator.js.map +7 -0
- package/dist/src/integrations/linear/auth.js +337 -0
- package/dist/src/integrations/linear/auth.js.map +7 -0
- package/dist/src/integrations/linear/auto-sync.js +258 -0
- package/dist/src/integrations/linear/auto-sync.js.map +7 -0
- package/dist/src/integrations/linear/client.js +634 -0
- package/dist/src/integrations/linear/client.js.map +7 -0
- package/dist/src/integrations/linear/config.js +130 -0
- package/dist/src/integrations/linear/config.js.map +7 -0
- package/dist/src/integrations/linear/migration.js +361 -0
- package/dist/src/integrations/linear/migration.js.map +7 -0
- package/dist/src/integrations/linear/oauth-server.js +454 -0
- package/dist/src/integrations/linear/oauth-server.js.map +7 -0
- package/dist/src/integrations/linear/rest-client.js +213 -0
- package/dist/src/integrations/linear/rest-client.js.map +7 -0
- package/dist/src/integrations/linear/sync-manager.js +236 -0
- package/dist/src/integrations/linear/sync-manager.js.map +7 -0
- package/dist/src/integrations/linear/sync-service.js +231 -0
- package/dist/src/integrations/linear/sync-service.js.map +7 -0
- package/dist/src/integrations/linear/sync.js +782 -0
- package/dist/src/integrations/linear/sync.js.map +7 -0
- package/dist/src/integrations/linear/types.js +5 -0
- package/dist/src/integrations/linear/types.js.map +7 -0
- package/dist/src/integrations/linear/unified-sync.js +589 -0
- package/dist/src/integrations/linear/unified-sync.js.map +7 -0
- package/dist/src/integrations/linear/webhook-handler.js +219 -0
- package/dist/src/integrations/linear/webhook-handler.js.map +7 -0
- package/dist/src/integrations/linear/webhook-server.js +218 -0
- package/dist/src/integrations/linear/webhook-server.js.map +7 -0
- package/dist/src/integrations/linear/webhook.js +291 -0
- package/dist/src/integrations/linear/webhook.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/code-execution-handlers.js +266 -0
- package/dist/src/integrations/mcp/handlers/code-execution-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/context-handlers.js +257 -0
- package/dist/src/integrations/mcp/handlers/context-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/discovery-handlers.js +497 -0
- package/dist/src/integrations/mcp/handlers/discovery-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/index.js +166 -0
- package/dist/src/integrations/mcp/handlers/index.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/linear-handlers.js +247 -0
- package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/skill-handlers.js +529 -0
- package/dist/src/integrations/mcp/handlers/skill-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/task-handlers.js +239 -0
- package/dist/src/integrations/mcp/handlers/task-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/trace-handlers.js +308 -0
- package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/index.js +23 -0
- package/dist/src/integrations/mcp/index.js.map +7 -0
- package/dist/src/integrations/mcp/middleware/tool-scoring.js +356 -0
- package/dist/src/integrations/mcp/middleware/tool-scoring.js.map +7 -0
- package/dist/src/integrations/mcp/refactored-server.js +374 -0
- package/dist/src/integrations/mcp/refactored-server.js.map +7 -0
- package/dist/src/integrations/mcp/remote-server.js +682 -0
- package/dist/src/integrations/mcp/remote-server.js.map +7 -0
- package/dist/src/integrations/mcp/schemas.js +147 -0
- package/dist/src/integrations/mcp/schemas.js.map +7 -0
- package/dist/src/integrations/mcp/server.js +1975 -0
- package/dist/src/integrations/mcp/server.js.map +7 -0
- package/dist/src/integrations/mcp/tool-definitions-code.js +125 -0
- package/dist/src/integrations/mcp/tool-definitions-code.js.map +7 -0
- package/dist/src/integrations/mcp/tool-definitions.js +702 -0
- package/dist/src/integrations/mcp/tool-definitions.js.map +7 -0
- package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js +860 -0
- package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +7 -0
- package/dist/src/integrations/ralph/context/context-budget-manager.js +301 -0
- package/dist/src/integrations/ralph/context/context-budget-manager.js.map +7 -0
- package/dist/src/integrations/ralph/context/stackmemory-context-loader.js +360 -0
- package/dist/src/integrations/ralph/context/stackmemory-context-loader.js.map +7 -0
- package/dist/src/integrations/ralph/coordination/enhanced-coordination.js +410 -0
- package/dist/src/integrations/ralph/coordination/enhanced-coordination.js.map +7 -0
- package/dist/src/integrations/ralph/index.js +18 -0
- package/dist/src/integrations/ralph/index.js.map +7 -0
- package/dist/src/integrations/ralph/learning/pattern-learner.js +401 -0
- package/dist/src/integrations/ralph/learning/pattern-learner.js.map +7 -0
- package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js +448 -0
- package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js.map +7 -0
- package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js +294 -0
- package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js.map +7 -0
- package/dist/src/integrations/ralph/monitoring/swarm-registry.js +108 -0
- package/dist/src/integrations/ralph/monitoring/swarm-registry.js.map +7 -0
- package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js +463 -0
- package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +7 -0
- package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js +400 -0
- package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js.map +7 -0
- package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js +473 -0
- package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js.map +7 -0
- package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js +388 -0
- package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js.map +7 -0
- package/dist/src/integrations/ralph/performance/performance-optimizer.js +358 -0
- package/dist/src/integrations/ralph/performance/performance-optimizer.js.map +7 -0
- package/dist/src/integrations/ralph/recovery/crash-recovery.js +462 -0
- package/dist/src/integrations/ralph/recovery/crash-recovery.js.map +7 -0
- package/dist/src/integrations/ralph/state/state-reconciler.js +404 -0
- package/dist/src/integrations/ralph/state/state-reconciler.js.map +7 -0
- package/dist/src/integrations/ralph/swarm/git-workflow-manager.js +428 -0
- package/dist/src/integrations/ralph/swarm/git-workflow-manager.js.map +7 -0
- package/dist/src/integrations/ralph/swarm/swarm-coordinator.js +996 -0
- package/dist/src/integrations/ralph/swarm/swarm-coordinator.js.map +7 -0
- package/dist/src/integrations/ralph/types.js +5 -0
- package/dist/src/integrations/ralph/types.js.map +7 -0
- package/dist/src/integrations/ralph/visualization/ralph-debugger.js +585 -0
- package/dist/src/integrations/ralph/visualization/ralph-debugger.js.map +7 -0
- package/dist/src/mcp/stackmemory-mcp-server.js +554 -0
- package/dist/src/mcp/stackmemory-mcp-server.js.map +7 -0
- package/dist/src/middleware/exponential-rate-limiter.js +289 -0
- package/dist/src/middleware/exponential-rate-limiter.js.map +7 -0
- package/dist/src/models/user.model.js +358 -0
- package/dist/src/models/user.model.js.map +7 -0
- package/dist/src/servers/production/auth-middleware.js +528 -0
- package/dist/src/servers/production/auth-middleware.js.map +7 -0
- package/dist/src/services/config-service.js +65 -0
- package/dist/src/services/config-service.js.map +7 -0
- package/dist/src/services/context-service.js +194 -0
- package/dist/src/services/context-service.js.map +7 -0
- package/dist/src/skills/api-discovery.js +354 -0
- package/dist/src/skills/api-discovery.js.map +7 -0
- package/dist/src/skills/api-skill.js +475 -0
- package/dist/src/skills/api-skill.js.map +7 -0
- package/dist/src/skills/claude-skills.js +1061 -0
- package/dist/src/skills/claude-skills.js.map +7 -0
- package/dist/src/skills/dashboard-launcher.js +216 -0
- package/dist/src/skills/dashboard-launcher.js.map +7 -0
- package/dist/src/skills/recursive-agent-orchestrator.js +575 -0
- package/dist/src/skills/recursive-agent-orchestrator.js.map +7 -0
- package/dist/src/skills/repo-ingestion-skill.js +609 -0
- package/dist/src/skills/repo-ingestion-skill.js.map +7 -0
- package/dist/src/skills/unified-rlm-orchestrator.js +404 -0
- package/dist/src/skills/unified-rlm-orchestrator.js.map +7 -0
- package/dist/src/types/task.js +5 -0
- package/dist/src/types/task.js.map +7 -0
- package/dist/src/utils/env.js +50 -0
- package/dist/src/utils/env.js.map +7 -0
- package/dist/src/utils/formatting.js +62 -0
- package/dist/src/utils/formatting.js.map +7 -0
- package/dist/src/utils/process-cleanup.js +136 -0
- package/dist/src/utils/process-cleanup.js.map +7 -0
- package/package.json +3 -3
- package/scripts/initialize.ts +16 -7
- package/scripts/install.sh +14 -62
- package/scripts/status.ts +111 -46
|
@@ -0,0 +1,585 @@
|
|
|
1
|
+
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
2
|
+
import { dirname as __pathDirname } from 'path';
|
|
3
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
4
|
+
const __dirname = __pathDirname(__filename);
|
|
5
|
+
import * as fs from "fs/promises";
|
|
6
|
+
import * as path from "path";
|
|
7
|
+
import { logger } from "../../../core/monitoring/logger.js";
|
|
8
|
+
import { FrameManager } from "../../../core/context/index.js";
|
|
9
|
+
import { sessionManager } from "../../../core/session/index.js";
|
|
10
|
+
class RalphDebugger {
|
|
11
|
+
frameManager;
|
|
12
|
+
activeSessions = /* @__PURE__ */ new Map();
|
|
13
|
+
config;
|
|
14
|
+
constructor(config) {
|
|
15
|
+
this.config = {
|
|
16
|
+
enableRealTimeMonitoring: true,
|
|
17
|
+
captureDetailedTrace: true,
|
|
18
|
+
generateVisualization: true,
|
|
19
|
+
exportFormat: "html",
|
|
20
|
+
maxTraceDepth: 50,
|
|
21
|
+
...config
|
|
22
|
+
};
|
|
23
|
+
logger.info("Ralph debugger initialized", this.config);
|
|
24
|
+
}
|
|
25
|
+
async initialize() {
|
|
26
|
+
try {
|
|
27
|
+
await sessionManager.initialize();
|
|
28
|
+
const session = await sessionManager.getOrCreateSession({});
|
|
29
|
+
if (session.database) {
|
|
30
|
+
this.frameManager = new FrameManager(session.database, session.projectId);
|
|
31
|
+
}
|
|
32
|
+
logger.info("Debugger initialized successfully");
|
|
33
|
+
} catch (error) {
|
|
34
|
+
logger.error("Failed to initialize debugger", error);
|
|
35
|
+
throw error;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Start debugging a Ralph loop
|
|
40
|
+
*/
|
|
41
|
+
async startDebugSession(loopId, ralphDir) {
|
|
42
|
+
logger.info("Starting debug session", { loopId, ralphDir });
|
|
43
|
+
const session = {
|
|
44
|
+
id: `debug-${Date.now()}`,
|
|
45
|
+
loopId,
|
|
46
|
+
ralphDir,
|
|
47
|
+
startTime: Date.now(),
|
|
48
|
+
iterations: [],
|
|
49
|
+
contextFlow: [],
|
|
50
|
+
performance: {
|
|
51
|
+
iterationTimes: [],
|
|
52
|
+
memoryUsage: [],
|
|
53
|
+
contextSizes: [],
|
|
54
|
+
averageIterationTime: 0,
|
|
55
|
+
peakMemory: 0,
|
|
56
|
+
contextEfficiency: 0
|
|
57
|
+
},
|
|
58
|
+
realTimeMonitoring: this.config.enableRealTimeMonitoring
|
|
59
|
+
};
|
|
60
|
+
this.activeSessions.set(loopId, session);
|
|
61
|
+
if (this.config.enableRealTimeMonitoring) {
|
|
62
|
+
await this.startRealTimeMonitoring(session);
|
|
63
|
+
}
|
|
64
|
+
return session;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Generate comprehensive debug report
|
|
68
|
+
*/
|
|
69
|
+
async generateDebugReport(loopId) {
|
|
70
|
+
const session = this.activeSessions.get(loopId);
|
|
71
|
+
if (!session) {
|
|
72
|
+
throw new Error(`No debug session found for loop ${loopId}`);
|
|
73
|
+
}
|
|
74
|
+
logger.info("Generating debug report", { loopId });
|
|
75
|
+
const report = {
|
|
76
|
+
sessionId: session.id,
|
|
77
|
+
loopId,
|
|
78
|
+
generatedAt: Date.now(),
|
|
79
|
+
summary: await this.generateSummary(session),
|
|
80
|
+
iterationAnalysis: await this.analyzeIterations(session),
|
|
81
|
+
contextAnalysis: await this.analyzeContextFlow(session),
|
|
82
|
+
performanceAnalysis: await this.analyzePerformance(session),
|
|
83
|
+
visualization: this.config.generateVisualization ? await this.generateVisualization(session) : void 0,
|
|
84
|
+
recommendations: await this.generateRecommendations(session),
|
|
85
|
+
exportPath: ""
|
|
86
|
+
};
|
|
87
|
+
const exportPath = await this.exportReport(report);
|
|
88
|
+
report.exportPath = exportPath;
|
|
89
|
+
logger.info("Debug report generated", { loopId, exportPath });
|
|
90
|
+
return report;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Create visual timeline of loop execution
|
|
94
|
+
*/
|
|
95
|
+
async generateLoopTimeline(loopId) {
|
|
96
|
+
const session = this.activeSessions.get(loopId);
|
|
97
|
+
if (!session) {
|
|
98
|
+
throw new Error(`No debug session found for loop ${loopId}`);
|
|
99
|
+
}
|
|
100
|
+
const timeline = {
|
|
101
|
+
title: `Ralph Loop Timeline: ${loopId}`,
|
|
102
|
+
startTime: session.startTime,
|
|
103
|
+
iterations: session.iterations.map((iter) => ({
|
|
104
|
+
iteration: iter.iteration,
|
|
105
|
+
startTime: iter.startTime,
|
|
106
|
+
endTime: iter.endTime,
|
|
107
|
+
duration: iter.endTime - iter.startTime,
|
|
108
|
+
success: iter.success,
|
|
109
|
+
changes: iter.changes?.length || 0,
|
|
110
|
+
errors: iter.errors?.length || 0,
|
|
111
|
+
contextSize: iter.contextSize,
|
|
112
|
+
phase: iter.phase
|
|
113
|
+
})),
|
|
114
|
+
totalDuration: session.performance.iterationTimes.reduce((sum, time) => sum + time, 0)
|
|
115
|
+
};
|
|
116
|
+
const html = await this.generateTimelineHTML(timeline);
|
|
117
|
+
const timelinePath = path.join(".ralph-debug", `timeline-${loopId}.html`);
|
|
118
|
+
await fs.mkdir(path.dirname(timelinePath), { recursive: true });
|
|
119
|
+
await fs.writeFile(timelinePath, html);
|
|
120
|
+
return timelinePath;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Create context flow diagram
|
|
124
|
+
*/
|
|
125
|
+
async generateContextFlowDiagram(loopId) {
|
|
126
|
+
const session = this.activeSessions.get(loopId);
|
|
127
|
+
if (!session) {
|
|
128
|
+
throw new Error(`No debug session found for loop ${loopId}`);
|
|
129
|
+
}
|
|
130
|
+
const diagram = {
|
|
131
|
+
id: `context-flow-${loopId}`,
|
|
132
|
+
nodes: [],
|
|
133
|
+
edges: [],
|
|
134
|
+
metrics: {
|
|
135
|
+
totalNodes: 0,
|
|
136
|
+
totalEdges: 0,
|
|
137
|
+
avgContextSize: 0,
|
|
138
|
+
maxContextSize: 0
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
for (let i = 0; i < session.iterations.length; i++) {
|
|
142
|
+
const iteration = session.iterations[i];
|
|
143
|
+
diagram.nodes.push({
|
|
144
|
+
id: `iter-${iteration.iteration}`,
|
|
145
|
+
type: "iteration",
|
|
146
|
+
label: `Iteration ${iteration.iteration}`,
|
|
147
|
+
size: iteration.contextSize || 100,
|
|
148
|
+
color: iteration.success ? "#4CAF50" : "#F44336",
|
|
149
|
+
metadata: {
|
|
150
|
+
duration: iteration.endTime - iteration.startTime,
|
|
151
|
+
changes: iteration.changes?.length || 0,
|
|
152
|
+
errors: iteration.errors?.length || 0
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
if (i < session.iterations.length - 1) {
|
|
156
|
+
diagram.edges.push({
|
|
157
|
+
id: `edge-${i}-${i + 1}`,
|
|
158
|
+
from: `iter-${iteration.iteration}`,
|
|
159
|
+
to: `iter-${session.iterations[i + 1].iteration}`,
|
|
160
|
+
type: "sequence",
|
|
161
|
+
weight: iteration.contextSize || 1
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
diagram.metrics = {
|
|
166
|
+
totalNodes: diagram.nodes.length,
|
|
167
|
+
totalEdges: diagram.edges.length,
|
|
168
|
+
avgContextSize: session.performance.contextSizes.length > 0 ? session.performance.contextSizes.reduce((sum, size) => sum + size, 0) / session.performance.contextSizes.length : 0,
|
|
169
|
+
maxContextSize: Math.max(...session.performance.contextSizes)
|
|
170
|
+
};
|
|
171
|
+
return diagram;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Real-time monitoring of loop execution
|
|
175
|
+
*/
|
|
176
|
+
async startRealTimeMonitoring(session) {
|
|
177
|
+
const monitoringInterval = setInterval(async () => {
|
|
178
|
+
try {
|
|
179
|
+
await this.captureIterationTrace(session);
|
|
180
|
+
await this.updatePerformanceMetrics(session);
|
|
181
|
+
} catch (error) {
|
|
182
|
+
logger.error("Monitoring error", error);
|
|
183
|
+
}
|
|
184
|
+
}, 1e3);
|
|
185
|
+
session.monitoringInterval = monitoringInterval;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Capture detailed trace of current iteration
|
|
189
|
+
*/
|
|
190
|
+
async captureIterationTrace(session) {
|
|
191
|
+
try {
|
|
192
|
+
const statePath = path.join(session.ralphDir, "state.json");
|
|
193
|
+
const iterationPath = path.join(session.ralphDir, "iteration.txt");
|
|
194
|
+
let currentState = {};
|
|
195
|
+
let currentIteration = 0;
|
|
196
|
+
try {
|
|
197
|
+
const stateData = await fs.readFile(statePath, "utf8");
|
|
198
|
+
currentState = JSON.parse(stateData);
|
|
199
|
+
const iterData = await fs.readFile(iterationPath, "utf8");
|
|
200
|
+
currentIteration = parseInt(iterData.trim()) || 0;
|
|
201
|
+
} catch {
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
const lastTrace = session.iterations[session.iterations.length - 1];
|
|
205
|
+
if (lastTrace?.iteration === currentIteration) {
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
const trace = {
|
|
209
|
+
iteration: currentIteration,
|
|
210
|
+
startTime: Date.now(),
|
|
211
|
+
endTime: Date.now(),
|
|
212
|
+
// Will be updated when iteration completes
|
|
213
|
+
phase: this.determineIterationPhase(session.ralphDir),
|
|
214
|
+
contextSize: await this.calculateContextSize(session.ralphDir),
|
|
215
|
+
success: false,
|
|
216
|
+
// Will be updated
|
|
217
|
+
changes: [],
|
|
218
|
+
errors: [],
|
|
219
|
+
memoryUsage: process.memoryUsage().heapUsed,
|
|
220
|
+
stackTrace: this.captureStackTrace()
|
|
221
|
+
};
|
|
222
|
+
session.iterations.push(trace);
|
|
223
|
+
} catch (error) {
|
|
224
|
+
logger.debug("Failed to capture iteration trace", error);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Update performance metrics
|
|
229
|
+
*/
|
|
230
|
+
async updatePerformanceMetrics(session) {
|
|
231
|
+
const currentMemory = process.memoryUsage().heapUsed;
|
|
232
|
+
session.performance.memoryUsage.push(currentMemory);
|
|
233
|
+
session.performance.peakMemory = Math.max(session.performance.peakMemory, currentMemory);
|
|
234
|
+
const contextSize = await this.calculateContextSize(session.ralphDir);
|
|
235
|
+
session.performance.contextSizes.push(contextSize);
|
|
236
|
+
if (session.performance.iterationTimes.length > 0) {
|
|
237
|
+
session.performance.averageIterationTime = session.performance.iterationTimes.reduce((sum, time) => sum + time, 0) / session.performance.iterationTimes.length;
|
|
238
|
+
}
|
|
239
|
+
if (session.performance.contextSizes.length > 0) {
|
|
240
|
+
const avgContextSize = session.performance.contextSizes.reduce((sum, size) => sum + size, 0) / session.performance.contextSizes.length;
|
|
241
|
+
session.performance.contextEfficiency = Math.max(0, 1 - avgContextSize / 1e4);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Generate executive summary
|
|
246
|
+
*/
|
|
247
|
+
async generateSummary(session) {
|
|
248
|
+
const totalIterations = session.iterations.length;
|
|
249
|
+
const successfulIterations = session.iterations.filter((i) => i.success).length;
|
|
250
|
+
const totalDuration = session.performance.iterationTimes.reduce((sum, time) => sum + time, 0);
|
|
251
|
+
return {
|
|
252
|
+
loopId: session.loopId,
|
|
253
|
+
totalIterations,
|
|
254
|
+
successfulIterations,
|
|
255
|
+
successRate: totalIterations > 0 ? successfulIterations / totalIterations : 0,
|
|
256
|
+
totalDuration,
|
|
257
|
+
averageIterationTime: session.performance.averageIterationTime,
|
|
258
|
+
peakMemoryUsage: session.performance.peakMemory,
|
|
259
|
+
contextEfficiency: session.performance.contextEfficiency,
|
|
260
|
+
status: totalIterations > 0 && session.iterations[session.iterations.length - 1].success ? "completed" : "in_progress"
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Analyze iteration patterns
|
|
265
|
+
*/
|
|
266
|
+
async analyzeIterations(session) {
|
|
267
|
+
if (session.iterations.length === 0) return { patterns: [], insights: [] };
|
|
268
|
+
const patterns = [];
|
|
269
|
+
const insights = [];
|
|
270
|
+
const durations = session.iterations.map((i) => i.endTime - i.startTime);
|
|
271
|
+
const avgDuration = durations.reduce((sum, d) => sum + d, 0) / durations.length;
|
|
272
|
+
if (durations.some((d) => d > avgDuration * 2)) {
|
|
273
|
+
patterns.push("Variable iteration times detected");
|
|
274
|
+
insights.push("Some iterations took significantly longer than average - investigate bottlenecks");
|
|
275
|
+
}
|
|
276
|
+
const consecutiveFailures = this.findConsecutiveFailures(session.iterations);
|
|
277
|
+
if (consecutiveFailures.length > 2) {
|
|
278
|
+
patterns.push("Multiple consecutive failures detected");
|
|
279
|
+
insights.push("Consider adjusting approach or criteria after consecutive failures");
|
|
280
|
+
}
|
|
281
|
+
if (session.performance.contextSizes.length > 1) {
|
|
282
|
+
const contextGrowth = session.performance.contextSizes[session.performance.contextSizes.length - 1] - session.performance.contextSizes[0];
|
|
283
|
+
if (contextGrowth > 1e3) {
|
|
284
|
+
patterns.push("Significant context growth");
|
|
285
|
+
insights.push("Context is growing rapidly - consider context pruning strategies");
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
return { patterns, insights };
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Analyze context flow
|
|
292
|
+
*/
|
|
293
|
+
async analyzeContextFlow(session) {
|
|
294
|
+
return {
|
|
295
|
+
avgContextSize: session.performance.contextSizes.length > 0 ? session.performance.contextSizes.reduce((sum, size) => sum + size, 0) / session.performance.contextSizes.length : 0,
|
|
296
|
+
maxContextSize: Math.max(...session.performance.contextSizes),
|
|
297
|
+
contextGrowthRate: this.calculateGrowthRate(session.performance.contextSizes),
|
|
298
|
+
efficiency: session.performance.contextEfficiency
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Analyze performance metrics
|
|
303
|
+
*/
|
|
304
|
+
async analyzePerformance(session) {
|
|
305
|
+
return {
|
|
306
|
+
memoryEfficiency: this.calculateMemoryEfficiency(session.performance.memoryUsage),
|
|
307
|
+
iterationEfficiency: session.performance.averageIterationTime,
|
|
308
|
+
resourceUtilization: {
|
|
309
|
+
cpu: "N/A",
|
|
310
|
+
// Would need CPU monitoring
|
|
311
|
+
memory: session.performance.peakMemory,
|
|
312
|
+
context: session.performance.contextEfficiency
|
|
313
|
+
}
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Generate visualization HTML
|
|
318
|
+
*/
|
|
319
|
+
async generateVisualization(session) {
|
|
320
|
+
const htmlContent = await this.generateVisualizationHTML(session);
|
|
321
|
+
const vizPath = path.join(".ralph-debug", `visualization-${session.loopId}.html`);
|
|
322
|
+
await fs.mkdir(path.dirname(vizPath), { recursive: true });
|
|
323
|
+
await fs.writeFile(vizPath, htmlContent);
|
|
324
|
+
return {
|
|
325
|
+
id: `viz-${session.loopId}`,
|
|
326
|
+
type: "interactive_timeline",
|
|
327
|
+
htmlPath: vizPath,
|
|
328
|
+
data: {
|
|
329
|
+
iterations: session.iterations,
|
|
330
|
+
performance: session.performance,
|
|
331
|
+
contextFlow: session.contextFlow
|
|
332
|
+
},
|
|
333
|
+
metadata: {
|
|
334
|
+
generatedAt: Date.now(),
|
|
335
|
+
format: "html",
|
|
336
|
+
interactive: true
|
|
337
|
+
}
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Generate recommendations
|
|
342
|
+
*/
|
|
343
|
+
async generateRecommendations(session) {
|
|
344
|
+
const recommendations = [];
|
|
345
|
+
if (session.performance.averageIterationTime > 3e4) {
|
|
346
|
+
recommendations.push("Consider breaking down complex tasks into smaller iterations");
|
|
347
|
+
}
|
|
348
|
+
if (session.performance.contextEfficiency < 0.7) {
|
|
349
|
+
recommendations.push("Optimize context management - consider using context budgeting");
|
|
350
|
+
}
|
|
351
|
+
const successRate = session.iterations.filter((i) => i.success).length / Math.max(1, session.iterations.length);
|
|
352
|
+
if (successRate < 0.5) {
|
|
353
|
+
recommendations.push("Low success rate detected - review task criteria and approach");
|
|
354
|
+
}
|
|
355
|
+
if (session.performance.peakMemory > 500 * 1024 * 1024) {
|
|
356
|
+
recommendations.push("High memory usage detected - investigate memory leaks");
|
|
357
|
+
}
|
|
358
|
+
return recommendations;
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Export report in specified format
|
|
362
|
+
*/
|
|
363
|
+
async exportReport(report) {
|
|
364
|
+
const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
|
|
365
|
+
const filename = `ralph-debug-${report.loopId}-${timestamp}`;
|
|
366
|
+
let content;
|
|
367
|
+
let extension;
|
|
368
|
+
switch (this.config.exportFormat) {
|
|
369
|
+
case "json":
|
|
370
|
+
content = JSON.stringify(report, null, 2);
|
|
371
|
+
extension = "json";
|
|
372
|
+
break;
|
|
373
|
+
case "markdown":
|
|
374
|
+
content = this.generateMarkdownReport(report);
|
|
375
|
+
extension = "md";
|
|
376
|
+
break;
|
|
377
|
+
case "html":
|
|
378
|
+
default:
|
|
379
|
+
content = this.generateHTMLReport(report);
|
|
380
|
+
extension = "html";
|
|
381
|
+
break;
|
|
382
|
+
}
|
|
383
|
+
const exportPath = path.join(".ralph-debug", `${filename}.${extension}`);
|
|
384
|
+
await fs.mkdir(path.dirname(exportPath), { recursive: true });
|
|
385
|
+
await fs.writeFile(exportPath, content);
|
|
386
|
+
return exportPath;
|
|
387
|
+
}
|
|
388
|
+
// Helper methods
|
|
389
|
+
determineIterationPhase(ralphDir) {
|
|
390
|
+
return "working";
|
|
391
|
+
}
|
|
392
|
+
async calculateContextSize(ralphDir) {
|
|
393
|
+
try {
|
|
394
|
+
const feedbackPath = path.join(ralphDir, "feedback.txt");
|
|
395
|
+
const feedback = await fs.readFile(feedbackPath, "utf8");
|
|
396
|
+
return feedback.length;
|
|
397
|
+
} catch {
|
|
398
|
+
return 0;
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
captureStackTrace() {
|
|
402
|
+
const stack = new Error().stack || "";
|
|
403
|
+
return stack.split("\n").slice(1, 6).join("\n");
|
|
404
|
+
}
|
|
405
|
+
findConsecutiveFailures(iterations) {
|
|
406
|
+
const failures = [];
|
|
407
|
+
let currentStreak = 0;
|
|
408
|
+
for (const iteration of iterations) {
|
|
409
|
+
if (!iteration.success) {
|
|
410
|
+
currentStreak++;
|
|
411
|
+
} else {
|
|
412
|
+
if (currentStreak > 0) {
|
|
413
|
+
failures.push(currentStreak);
|
|
414
|
+
}
|
|
415
|
+
currentStreak = 0;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
if (currentStreak > 0) {
|
|
419
|
+
failures.push(currentStreak);
|
|
420
|
+
}
|
|
421
|
+
return failures;
|
|
422
|
+
}
|
|
423
|
+
calculateGrowthRate(sizes) {
|
|
424
|
+
if (sizes.length < 2) return 0;
|
|
425
|
+
const first = sizes[0];
|
|
426
|
+
const last = sizes[sizes.length - 1];
|
|
427
|
+
return first > 0 ? (last - first) / first : 0;
|
|
428
|
+
}
|
|
429
|
+
calculateMemoryEfficiency(memoryUsage) {
|
|
430
|
+
if (memoryUsage.length < 2) return 1;
|
|
431
|
+
const min = Math.min(...memoryUsage);
|
|
432
|
+
const max = Math.max(...memoryUsage);
|
|
433
|
+
return max > 0 ? min / max : 1;
|
|
434
|
+
}
|
|
435
|
+
generateTimelineHTML(timeline) {
|
|
436
|
+
return `
|
|
437
|
+
<!DOCTYPE html>
|
|
438
|
+
<html>
|
|
439
|
+
<head>
|
|
440
|
+
<title>${timeline.title}</title>
|
|
441
|
+
<script src="https://d3js.org/d3.v7.min.js"></script>
|
|
442
|
+
<style>
|
|
443
|
+
body { font-family: Arial, sans-serif; margin: 20px; }
|
|
444
|
+
.timeline { margin: 20px 0; }
|
|
445
|
+
.iteration { margin: 10px 0; padding: 10px; border-left: 4px solid #ccc; }
|
|
446
|
+
.success { border-left-color: #4CAF50; }
|
|
447
|
+
.failure { border-left-color: #F44336; }
|
|
448
|
+
</style>
|
|
449
|
+
</head>
|
|
450
|
+
<body>
|
|
451
|
+
<h1>${timeline.title}</h1>
|
|
452
|
+
<div class="timeline">
|
|
453
|
+
${timeline.iterations.map((iter) => `
|
|
454
|
+
<div class="iteration ${iter.success ? "success" : "failure"}">
|
|
455
|
+
<h3>Iteration ${iter.iteration}</h3>
|
|
456
|
+
<p>Duration: ${iter.duration}ms</p>
|
|
457
|
+
<p>Changes: ${iter.changes} | Errors: ${iter.errors}</p>
|
|
458
|
+
<p>Context Size: ${iter.contextSize}</p>
|
|
459
|
+
</div>
|
|
460
|
+
`).join("")}
|
|
461
|
+
</div>
|
|
462
|
+
</body>
|
|
463
|
+
</html>
|
|
464
|
+
`;
|
|
465
|
+
}
|
|
466
|
+
generateVisualizationHTML(session) {
|
|
467
|
+
return `
|
|
468
|
+
<!DOCTYPE html>
|
|
469
|
+
<html>
|
|
470
|
+
<head>
|
|
471
|
+
<title>Ralph Loop Visualization - ${session.loopId}</title>
|
|
472
|
+
<script src="https://d3js.org/d3.v7.min.js"></script>
|
|
473
|
+
<style>
|
|
474
|
+
body { font-family: Arial, sans-serif; margin: 20px; }
|
|
475
|
+
.chart { margin: 20px 0; }
|
|
476
|
+
.metric { display: inline-block; margin: 10px; padding: 10px; border: 1px solid #ccc; }
|
|
477
|
+
</style>
|
|
478
|
+
</head>
|
|
479
|
+
<body>
|
|
480
|
+
<h1>Ralph Loop Debug Visualization</h1>
|
|
481
|
+
<div id="metrics">
|
|
482
|
+
<div class="metric">
|
|
483
|
+
<h3>Iterations</h3>
|
|
484
|
+
<p>${session.iterations.length}</p>
|
|
485
|
+
</div>
|
|
486
|
+
<div class="metric">
|
|
487
|
+
<h3>Avg Time</h3>
|
|
488
|
+
<p>${Math.round(session.performance.averageIterationTime)}ms</p>
|
|
489
|
+
</div>
|
|
490
|
+
<div class="metric">
|
|
491
|
+
<h3>Context Efficiency</h3>
|
|
492
|
+
<p>${Math.round(session.performance.contextEfficiency * 100)}%</p>
|
|
493
|
+
</div>
|
|
494
|
+
</div>
|
|
495
|
+
<div id="timeline" class="chart"></div>
|
|
496
|
+
<script>
|
|
497
|
+
// D3.js visualization code would go here
|
|
498
|
+
console.log('Visualization data:', ${JSON.stringify(session)});
|
|
499
|
+
</script>
|
|
500
|
+
</body>
|
|
501
|
+
</html>
|
|
502
|
+
`;
|
|
503
|
+
}
|
|
504
|
+
generateMarkdownReport(report) {
|
|
505
|
+
return `
|
|
506
|
+
# Ralph Loop Debug Report
|
|
507
|
+
|
|
508
|
+
**Loop ID:** ${report.loopId}
|
|
509
|
+
**Generated:** ${new Date(report.generatedAt).toLocaleString()}
|
|
510
|
+
|
|
511
|
+
## Summary
|
|
512
|
+
- **Total Iterations:** ${report.summary.totalIterations}
|
|
513
|
+
- **Success Rate:** ${Math.round(report.summary.successRate * 100)}%
|
|
514
|
+
- **Total Duration:** ${report.summary.totalDuration}ms
|
|
515
|
+
- **Average Iteration Time:** ${Math.round(report.summary.averageIterationTime)}ms
|
|
516
|
+
|
|
517
|
+
## Performance Analysis
|
|
518
|
+
- **Peak Memory:** ${Math.round(report.performanceAnalysis.resourceUtilization.memory / 1024 / 1024)}MB
|
|
519
|
+
- **Context Efficiency:** ${Math.round(report.performanceAnalysis.resourceUtilization.context * 100)}%
|
|
520
|
+
|
|
521
|
+
## Recommendations
|
|
522
|
+
${report.recommendations.map((r) => `- ${r}`).join("\n")}
|
|
523
|
+
`;
|
|
524
|
+
}
|
|
525
|
+
generateHTMLReport(report) {
|
|
526
|
+
return `
|
|
527
|
+
<!DOCTYPE html>
|
|
528
|
+
<html>
|
|
529
|
+
<head>
|
|
530
|
+
<title>Ralph Debug Report - ${report.loopId}</title>
|
|
531
|
+
<style>
|
|
532
|
+
body { font-family: Arial, sans-serif; max-width: 1200px; margin: 0 auto; padding: 20px; }
|
|
533
|
+
.summary { background: #f5f5f5; padding: 20px; border-radius: 8px; margin: 20px 0; }
|
|
534
|
+
.metric { display: inline-block; margin: 10px; padding: 15px; background: white; border-radius: 4px; }
|
|
535
|
+
.recommendations { background: #e3f2fd; padding: 15px; border-radius: 4px; }
|
|
536
|
+
</style>
|
|
537
|
+
</head>
|
|
538
|
+
<body>
|
|
539
|
+
<h1>Ralph Loop Debug Report</h1>
|
|
540
|
+
<div class="summary">
|
|
541
|
+
<h2>Executive Summary</h2>
|
|
542
|
+
<div class="metric">
|
|
543
|
+
<h3>${report.summary.totalIterations}</h3>
|
|
544
|
+
<p>Total Iterations</p>
|
|
545
|
+
</div>
|
|
546
|
+
<div class="metric">
|
|
547
|
+
<h3>${Math.round(report.summary.successRate * 100)}%</h3>
|
|
548
|
+
<p>Success Rate</p>
|
|
549
|
+
</div>
|
|
550
|
+
<div class="metric">
|
|
551
|
+
<h3>${Math.round(report.summary.averageIterationTime)}ms</h3>
|
|
552
|
+
<p>Avg Iteration Time</p>
|
|
553
|
+
</div>
|
|
554
|
+
</div>
|
|
555
|
+
|
|
556
|
+
<div class="recommendations">
|
|
557
|
+
<h2>Recommendations</h2>
|
|
558
|
+
<ul>
|
|
559
|
+
${report.recommendations.map((r) => `<li>${r}</li>`).join("")}
|
|
560
|
+
</ul>
|
|
561
|
+
</div>
|
|
562
|
+
</body>
|
|
563
|
+
</html>
|
|
564
|
+
`;
|
|
565
|
+
}
|
|
566
|
+
/**
|
|
567
|
+
* Stop debug session and cleanup
|
|
568
|
+
*/
|
|
569
|
+
async stopDebugSession(loopId) {
|
|
570
|
+
const session = this.activeSessions.get(loopId);
|
|
571
|
+
if (!session) return;
|
|
572
|
+
if (session.monitoringInterval) {
|
|
573
|
+
clearInterval(session.monitoringInterval);
|
|
574
|
+
}
|
|
575
|
+
await this.generateDebugReport(loopId);
|
|
576
|
+
this.activeSessions.delete(loopId);
|
|
577
|
+
logger.info("Debug session stopped", { loopId });
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
const ralphDebugger = new RalphDebugger();
|
|
581
|
+
export {
|
|
582
|
+
RalphDebugger,
|
|
583
|
+
ralphDebugger
|
|
584
|
+
};
|
|
585
|
+
//# sourceMappingURL=ralph-debugger.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/integrations/ralph/visualization/ralph-debugger.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Advanced Ralph Loop Debugger and Visualizer\n * Provides detailed debugging, monitoring, and visualization for Ralph loops\n */\n\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { logger } from '../../../core/monitoring/logger.js';\nimport { FrameManager } from '../../../core/context/index.js';\nimport { sessionManager } from '../../../core/session/index.js';\nimport {\n DebugSession,\n LoopVisualization,\n IterationTrace,\n ContextFlowDiagram,\n PerformanceMetrics,\n DebugReport\n} from '../types.js';\n\nexport interface DebuggerConfig {\n enableRealTimeMonitoring: boolean;\n captureDetailedTrace: boolean;\n generateVisualization: boolean;\n exportFormat: 'json' | 'html' | 'markdown';\n maxTraceDepth: number;\n}\n\nexport class RalphDebugger {\n private frameManager?: FrameManager;\n private activeSessions: Map<string, DebugSession> = new Map();\n private config: DebuggerConfig;\n\n constructor(config?: Partial<DebuggerConfig>) {\n this.config = {\n enableRealTimeMonitoring: true,\n captureDetailedTrace: true,\n generateVisualization: true,\n exportFormat: 'html',\n maxTraceDepth: 50,\n ...config\n };\n\n logger.info('Ralph debugger 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('Debugger initialized successfully');\n } catch (error: unknown) {\n logger.error('Failed to initialize debugger', error as Error);\n throw error;\n }\n }\n\n /**\n * Start debugging a Ralph loop\n */\n async startDebugSession(loopId: string, ralphDir: string): Promise<DebugSession> {\n logger.info('Starting debug session', { loopId, ralphDir });\n\n const session: DebugSession = {\n id: `debug-${Date.now()}`,\n loopId,\n ralphDir,\n startTime: Date.now(),\n iterations: [],\n contextFlow: [],\n performance: {\n iterationTimes: [],\n memoryUsage: [],\n contextSizes: [],\n averageIterationTime: 0,\n peakMemory: 0,\n contextEfficiency: 0\n },\n realTimeMonitoring: this.config.enableRealTimeMonitoring\n };\n\n this.activeSessions.set(loopId, session);\n\n if (this.config.enableRealTimeMonitoring) {\n await this.startRealTimeMonitoring(session);\n }\n\n return session;\n }\n\n /**\n * Generate comprehensive debug report\n */\n async generateDebugReport(loopId: string): Promise<DebugReport> {\n const session = this.activeSessions.get(loopId);\n if (!session) {\n throw new Error(`No debug session found for loop ${loopId}`);\n }\n\n logger.info('Generating debug report', { loopId });\n\n const report: DebugReport = {\n sessionId: session.id,\n loopId,\n generatedAt: Date.now(),\n summary: await this.generateSummary(session),\n iterationAnalysis: await this.analyzeIterations(session),\n contextAnalysis: await this.analyzeContextFlow(session),\n performanceAnalysis: await this.analyzePerformance(session),\n visualization: this.config.generateVisualization ? await this.generateVisualization(session) : undefined,\n recommendations: await this.generateRecommendations(session),\n exportPath: ''\n };\n\n // Export report\n const exportPath = await this.exportReport(report);\n report.exportPath = exportPath;\n\n logger.info('Debug report generated', { loopId, exportPath });\n return report;\n }\n\n /**\n * Create visual timeline of loop execution\n */\n async generateLoopTimeline(loopId: string): Promise<string> {\n const session = this.activeSessions.get(loopId);\n if (!session) {\n throw new Error(`No debug session found for loop ${loopId}`);\n }\n\n const timeline = {\n title: `Ralph Loop Timeline: ${loopId}`,\n startTime: session.startTime,\n iterations: session.iterations.map(iter => ({\n iteration: iter.iteration,\n startTime: iter.startTime,\n endTime: iter.endTime,\n duration: iter.endTime - iter.startTime,\n success: iter.success,\n changes: iter.changes?.length || 0,\n errors: iter.errors?.length || 0,\n contextSize: iter.contextSize,\n phase: iter.phase\n })),\n totalDuration: session.performance.iterationTimes.reduce((sum, time) => sum + time, 0)\n };\n\n // Generate HTML visualization\n const html = await this.generateTimelineHTML(timeline);\n \n const timelinePath = path.join('.ralph-debug', `timeline-${loopId}.html`);\n await fs.mkdir(path.dirname(timelinePath), { recursive: true });\n await fs.writeFile(timelinePath, html);\n\n return timelinePath;\n }\n\n /**\n * Create context flow diagram\n */\n async generateContextFlowDiagram(loopId: string): Promise<ContextFlowDiagram> {\n const session = this.activeSessions.get(loopId);\n if (!session) {\n throw new Error(`No debug session found for loop ${loopId}`);\n }\n\n const diagram: ContextFlowDiagram = {\n id: `context-flow-${loopId}`,\n nodes: [],\n edges: [],\n metrics: {\n totalNodes: 0,\n totalEdges: 0,\n avgContextSize: 0,\n maxContextSize: 0\n }\n };\n\n // Build context flow graph\n for (let i = 0; i < session.iterations.length; i++) {\n const iteration = session.iterations[i];\n \n // Add iteration node\n diagram.nodes.push({\n id: `iter-${iteration.iteration}`,\n type: 'iteration',\n label: `Iteration ${iteration.iteration}`,\n size: iteration.contextSize || 100,\n color: iteration.success ? '#4CAF50' : '#F44336',\n metadata: {\n duration: iteration.endTime - iteration.startTime,\n changes: iteration.changes?.length || 0,\n errors: iteration.errors?.length || 0\n }\n });\n\n // Add edge to next iteration\n if (i < session.iterations.length - 1) {\n diagram.edges.push({\n id: `edge-${i}-${i + 1}`,\n from: `iter-${iteration.iteration}`,\n to: `iter-${session.iterations[i + 1].iteration}`,\n type: 'sequence',\n weight: iteration.contextSize || 1\n });\n }\n }\n\n diagram.metrics = {\n totalNodes: diagram.nodes.length,\n totalEdges: diagram.edges.length,\n avgContextSize: session.performance.contextSizes.length > 0 ? \n session.performance.contextSizes.reduce((sum, size) => sum + size, 0) / session.performance.contextSizes.length : 0,\n maxContextSize: Math.max(...session.performance.contextSizes)\n };\n\n return diagram;\n }\n\n /**\n * Real-time monitoring of loop execution\n */\n private async startRealTimeMonitoring(session: DebugSession): Promise<void> {\n const monitoringInterval = setInterval(async () => {\n try {\n await this.captureIterationTrace(session);\n await this.updatePerformanceMetrics(session);\n } catch (error: unknown) {\n logger.error('Monitoring error', error as Error);\n }\n }, 1000); // Monitor every second\n\n // Store interval reference for cleanup\n (session as any).monitoringInterval = monitoringInterval;\n }\n\n /**\n * Capture detailed trace of current iteration\n */\n private async captureIterationTrace(session: DebugSession): Promise<void> {\n try {\n // Read current Ralph state\n const statePath = path.join(session.ralphDir, 'state.json');\n const iterationPath = path.join(session.ralphDir, 'iteration.txt');\n \n let currentState: any = {};\n let currentIteration = 0;\n\n try {\n const stateData = await fs.readFile(statePath, 'utf8');\n currentState = JSON.parse(stateData);\n \n const iterData = await fs.readFile(iterationPath, 'utf8');\n currentIteration = parseInt(iterData.trim()) || 0;\n } catch {\n // Files might not exist yet\n return;\n }\n\n // Check if this is a new iteration\n const lastTrace = session.iterations[session.iterations.length - 1];\n if (lastTrace?.iteration === currentIteration) {\n return; // Same iteration, update existing trace\n }\n\n // Create new iteration trace\n const trace: IterationTrace = {\n iteration: currentIteration,\n startTime: Date.now(),\n endTime: Date.now(), // Will be updated when iteration completes\n phase: this.determineIterationPhase(session.ralphDir),\n contextSize: await this.calculateContextSize(session.ralphDir),\n success: false, // Will be updated\n changes: [],\n errors: [],\n memoryUsage: process.memoryUsage().heapUsed,\n stackTrace: this.captureStackTrace()\n };\n\n session.iterations.push(trace);\n\n } catch (error: unknown) {\n logger.debug('Failed to capture iteration trace', error as Error);\n }\n }\n\n /**\n * Update performance metrics\n */\n private async updatePerformanceMetrics(session: DebugSession): Promise<void> {\n const currentMemory = process.memoryUsage().heapUsed;\n session.performance.memoryUsage.push(currentMemory);\n session.performance.peakMemory = Math.max(session.performance.peakMemory, currentMemory);\n\n // Update context sizes\n const contextSize = await this.calculateContextSize(session.ralphDir);\n session.performance.contextSizes.push(contextSize);\n\n // Calculate averages\n if (session.performance.iterationTimes.length > 0) {\n session.performance.averageIterationTime = \n session.performance.iterationTimes.reduce((sum, time) => sum + time, 0) / \n session.performance.iterationTimes.length;\n }\n\n // Calculate context efficiency\n if (session.performance.contextSizes.length > 0) {\n const avgContextSize = session.performance.contextSizes.reduce((sum, size) => sum + size, 0) / \n session.performance.contextSizes.length;\n session.performance.contextEfficiency = Math.max(0, 1 - (avgContextSize / 10000)); // Assume 10K is max context\n }\n }\n\n /**\n * Generate executive summary\n */\n private async generateSummary(session: DebugSession): Promise<any> {\n const totalIterations = session.iterations.length;\n const successfulIterations = session.iterations.filter(i => i.success).length;\n const totalDuration = session.performance.iterationTimes.reduce((sum, time) => sum + time, 0);\n\n return {\n loopId: session.loopId,\n totalIterations,\n successfulIterations,\n successRate: totalIterations > 0 ? successfulIterations / totalIterations : 0,\n totalDuration,\n averageIterationTime: session.performance.averageIterationTime,\n peakMemoryUsage: session.performance.peakMemory,\n contextEfficiency: session.performance.contextEfficiency,\n status: totalIterations > 0 && session.iterations[session.iterations.length - 1].success ? 'completed' : 'in_progress'\n };\n }\n\n /**\n * Analyze iteration patterns\n */\n private async analyzeIterations(session: DebugSession): Promise<any> {\n if (session.iterations.length === 0) return { patterns: [], insights: [] };\n\n const patterns: string[] = [];\n const insights: string[] = [];\n\n // Analyze iteration durations\n const durations = session.iterations.map(i => i.endTime - i.startTime);\n const avgDuration = durations.reduce((sum, d) => sum + d, 0) / durations.length;\n\n if (durations.some(d => d > avgDuration * 2)) {\n patterns.push('Variable iteration times detected');\n insights.push('Some iterations took significantly longer than average - investigate bottlenecks');\n }\n\n // Analyze success patterns\n const consecutiveFailures = this.findConsecutiveFailures(session.iterations);\n if (consecutiveFailures.length > 2) {\n patterns.push('Multiple consecutive failures detected');\n insights.push('Consider adjusting approach or criteria after consecutive failures');\n }\n\n // Analyze context growth\n if (session.performance.contextSizes.length > 1) {\n const contextGrowth = session.performance.contextSizes[session.performance.contextSizes.length - 1] - \n session.performance.contextSizes[0];\n \n if (contextGrowth > 1000) {\n patterns.push('Significant context growth');\n insights.push('Context is growing rapidly - consider context pruning strategies');\n }\n }\n\n return { patterns, insights };\n }\n\n /**\n * Analyze context flow\n */\n private async analyzeContextFlow(session: DebugSession): Promise<any> {\n return {\n avgContextSize: session.performance.contextSizes.length > 0 ? \n session.performance.contextSizes.reduce((sum, size) => sum + size, 0) / session.performance.contextSizes.length : 0,\n maxContextSize: Math.max(...session.performance.contextSizes),\n contextGrowthRate: this.calculateGrowthRate(session.performance.contextSizes),\n efficiency: session.performance.contextEfficiency\n };\n }\n\n /**\n * Analyze performance metrics\n */\n private async analyzePerformance(session: DebugSession): Promise<any> {\n return {\n memoryEfficiency: this.calculateMemoryEfficiency(session.performance.memoryUsage),\n iterationEfficiency: session.performance.averageIterationTime,\n resourceUtilization: {\n cpu: 'N/A', // Would need CPU monitoring\n memory: session.performance.peakMemory,\n context: session.performance.contextEfficiency\n }\n };\n }\n\n /**\n * Generate visualization HTML\n */\n private async generateVisualization(session: DebugSession): Promise<LoopVisualization> {\n const htmlContent = await this.generateVisualizationHTML(session);\n \n const vizPath = path.join('.ralph-debug', `visualization-${session.loopId}.html`);\n await fs.mkdir(path.dirname(vizPath), { recursive: true });\n await fs.writeFile(vizPath, htmlContent);\n\n return {\n id: `viz-${session.loopId}`,\n type: 'interactive_timeline',\n htmlPath: vizPath,\n data: {\n iterations: session.iterations,\n performance: session.performance,\n contextFlow: session.contextFlow\n },\n metadata: {\n generatedAt: Date.now(),\n format: 'html',\n interactive: true\n }\n };\n }\n\n /**\n * Generate recommendations\n */\n private async generateRecommendations(session: DebugSession): Promise<string[]> {\n const recommendations: string[] = [];\n\n // Performance recommendations\n if (session.performance.averageIterationTime > 30000) { // > 30 seconds\n recommendations.push('Consider breaking down complex tasks into smaller iterations');\n }\n\n if (session.performance.contextEfficiency < 0.7) {\n recommendations.push('Optimize context management - consider using context budgeting');\n }\n\n // Success rate recommendations\n const successRate = session.iterations.filter(i => i.success).length / Math.max(1, session.iterations.length);\n if (successRate < 0.5) {\n recommendations.push('Low success rate detected - review task criteria and approach');\n }\n\n // Memory recommendations\n if (session.performance.peakMemory > 500 * 1024 * 1024) { // > 500MB\n recommendations.push('High memory usage detected - investigate memory leaks');\n }\n\n return recommendations;\n }\n\n /**\n * Export report in specified format\n */\n private async exportReport(report: DebugReport): Promise<string> {\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n const filename = `ralph-debug-${report.loopId}-${timestamp}`;\n \n let content: string;\n let extension: string;\n\n switch (this.config.exportFormat) {\n case 'json':\n content = JSON.stringify(report, null, 2);\n extension = 'json';\n break;\n case 'markdown':\n content = this.generateMarkdownReport(report);\n extension = 'md';\n break;\n case 'html':\n default:\n content = this.generateHTMLReport(report);\n extension = 'html';\n break;\n }\n\n const exportPath = path.join('.ralph-debug', `${filename}.${extension}`);\n await fs.mkdir(path.dirname(exportPath), { recursive: true });\n await fs.writeFile(exportPath, content);\n\n return exportPath;\n }\n\n // Helper methods\n private determineIterationPhase(ralphDir: string): 'starting' | 'working' | 'reviewing' | 'completed' {\n // Determine current phase based on file states\n return 'working'; // Simplified implementation\n }\n\n private async calculateContextSize(ralphDir: string): Promise<number> {\n try {\n const feedbackPath = path.join(ralphDir, 'feedback.txt');\n const feedback = await fs.readFile(feedbackPath, 'utf8');\n return feedback.length;\n } catch {\n return 0;\n }\n }\n\n private captureStackTrace(): string {\n const stack = new Error().stack || '';\n return stack.split('\\n').slice(1, 6).join('\\n'); // First 5 stack frames\n }\n\n private findConsecutiveFailures(iterations: IterationTrace[]): number[] {\n const failures: number[] = [];\n let currentStreak = 0;\n\n for (const iteration of iterations) {\n if (!iteration.success) {\n currentStreak++;\n } else {\n if (currentStreak > 0) {\n failures.push(currentStreak);\n }\n currentStreak = 0;\n }\n }\n\n if (currentStreak > 0) {\n failures.push(currentStreak);\n }\n\n return failures;\n }\n\n private calculateGrowthRate(sizes: number[]): number {\n if (sizes.length < 2) return 0;\n \n const first = sizes[0];\n const last = sizes[sizes.length - 1];\n \n return first > 0 ? (last - first) / first : 0;\n }\n\n private calculateMemoryEfficiency(memoryUsage: number[]): number {\n if (memoryUsage.length < 2) return 1;\n \n const min = Math.min(...memoryUsage);\n const max = Math.max(...memoryUsage);\n \n return max > 0 ? min / max : 1;\n }\n\n private generateTimelineHTML(timeline: any): string {\n // Generate interactive HTML timeline\n return `\n<!DOCTYPE html>\n<html>\n<head>\n <title>${timeline.title}</title>\n <script src=\"https://d3js.org/d3.v7.min.js\"></script>\n <style>\n body { font-family: Arial, sans-serif; margin: 20px; }\n .timeline { margin: 20px 0; }\n .iteration { margin: 10px 0; padding: 10px; border-left: 4px solid #ccc; }\n .success { border-left-color: #4CAF50; }\n .failure { border-left-color: #F44336; }\n </style>\n</head>\n<body>\n <h1>${timeline.title}</h1>\n <div class=\"timeline\">\n ${timeline.iterations.map((iter: any) => `\n <div class=\"iteration ${iter.success ? 'success' : 'failure'}\">\n <h3>Iteration ${iter.iteration}</h3>\n <p>Duration: ${iter.duration}ms</p>\n <p>Changes: ${iter.changes} | Errors: ${iter.errors}</p>\n <p>Context Size: ${iter.contextSize}</p>\n </div>\n `).join('')}\n </div>\n</body>\n</html>\n `;\n }\n\n private generateVisualizationHTML(session: DebugSession): string {\n // Generate comprehensive visualization\n return `\n<!DOCTYPE html>\n<html>\n<head>\n <title>Ralph Loop Visualization - ${session.loopId}</title>\n <script src=\"https://d3js.org/d3.v7.min.js\"></script>\n <style>\n body { font-family: Arial, sans-serif; margin: 20px; }\n .chart { margin: 20px 0; }\n .metric { display: inline-block; margin: 10px; padding: 10px; border: 1px solid #ccc; }\n </style>\n</head>\n<body>\n <h1>Ralph Loop Debug Visualization</h1>\n <div id=\"metrics\">\n <div class=\"metric\">\n <h3>Iterations</h3>\n <p>${session.iterations.length}</p>\n </div>\n <div class=\"metric\">\n <h3>Avg Time</h3>\n <p>${Math.round(session.performance.averageIterationTime)}ms</p>\n </div>\n <div class=\"metric\">\n <h3>Context Efficiency</h3>\n <p>${Math.round(session.performance.contextEfficiency * 100)}%</p>\n </div>\n </div>\n <div id=\"timeline\" class=\"chart\"></div>\n <script>\n // D3.js visualization code would go here\n console.log('Visualization data:', ${JSON.stringify(session)});\n </script>\n</body>\n</html>\n `;\n }\n\n private generateMarkdownReport(report: DebugReport): string {\n return `\n# Ralph Loop Debug Report\n\n**Loop ID:** ${report.loopId}\n**Generated:** ${new Date(report.generatedAt).toLocaleString()}\n\n## Summary\n- **Total Iterations:** ${report.summary.totalIterations}\n- **Success Rate:** ${Math.round(report.summary.successRate * 100)}%\n- **Total Duration:** ${report.summary.totalDuration}ms\n- **Average Iteration Time:** ${Math.round(report.summary.averageIterationTime)}ms\n\n## Performance Analysis\n- **Peak Memory:** ${Math.round(report.performanceAnalysis.resourceUtilization.memory / 1024 / 1024)}MB\n- **Context Efficiency:** ${Math.round(report.performanceAnalysis.resourceUtilization.context * 100)}%\n\n## Recommendations\n${report.recommendations.map(r => `- ${r}`).join('\\n')}\n `;\n }\n\n private generateHTMLReport(report: DebugReport): string {\n return `\n<!DOCTYPE html>\n<html>\n<head>\n <title>Ralph Debug Report - ${report.loopId}</title>\n <style>\n body { font-family: Arial, sans-serif; max-width: 1200px; margin: 0 auto; padding: 20px; }\n .summary { background: #f5f5f5; padding: 20px; border-radius: 8px; margin: 20px 0; }\n .metric { display: inline-block; margin: 10px; padding: 15px; background: white; border-radius: 4px; }\n .recommendations { background: #e3f2fd; padding: 15px; border-radius: 4px; }\n </style>\n</head>\n<body>\n <h1>Ralph Loop Debug Report</h1>\n <div class=\"summary\">\n <h2>Executive Summary</h2>\n <div class=\"metric\">\n <h3>${report.summary.totalIterations}</h3>\n <p>Total Iterations</p>\n </div>\n <div class=\"metric\">\n <h3>${Math.round(report.summary.successRate * 100)}%</h3>\n <p>Success Rate</p>\n </div>\n <div class=\"metric\">\n <h3>${Math.round(report.summary.averageIterationTime)}ms</h3>\n <p>Avg Iteration Time</p>\n </div>\n </div>\n \n <div class=\"recommendations\">\n <h2>Recommendations</h2>\n <ul>\n ${report.recommendations.map(r => `<li>${r}</li>`).join('')}\n </ul>\n </div>\n</body>\n</html>\n `;\n }\n\n /**\n * Stop debug session and cleanup\n */\n async stopDebugSession(loopId: string): Promise<void> {\n const session = this.activeSessions.get(loopId);\n if (!session) return;\n\n // Stop real-time monitoring\n if ((session as any).monitoringInterval) {\n clearInterval((session as any).monitoringInterval);\n }\n\n // Generate final report\n await this.generateDebugReport(loopId);\n\n this.activeSessions.delete(loopId);\n logger.info('Debug session stopped', { loopId });\n }\n}\n\n// Export default instance\nexport const ralphDebugger = new RalphDebugger();"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|