@stackmemoryai/stackmemory 0.5.57 → 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/bin/codex-smd +6 -0
- package/dist/cli/codex-sm-danger.js +21 -0
- package/dist/cli/codex-sm-danger.js.map +7 -0
- package/dist/cli/commands/handoff.js +33 -3
- package/dist/cli/commands/handoff.js.map +2 -2
- 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/core/session/enhanced-handoff.js +136 -2
- package/dist/core/session/enhanced-handoff.js.map +3 -3
- 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 +4 -3
- package/scripts/create-cleanup-issues.js +302 -0
- package/scripts/demos/browser-test.ts +39 -0
- package/scripts/demos/ralph-integration-demo.ts +244 -0
- package/scripts/demos/trace-demo.ts +214 -0
- package/scripts/demos/trace-detector.demo.ts +171 -0
- package/scripts/demos/trace-test.ts +67 -0
- package/scripts/initialize.ts +16 -7
- package/scripts/install.sh +14 -62
- package/scripts/status.ts +111 -46
- package/scripts/test-claude-config.sh +123 -0
- package/scripts/validate-claude-config.sh +155 -0
|
@@ -0,0 +1,303 @@
|
|
|
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 { v4 as uuidv4 } from "uuid";
|
|
6
|
+
import { ConflictDetector } from "./conflict-detector.js";
|
|
7
|
+
import { StackDiffVisualizer } from "./stack-diff.js";
|
|
8
|
+
import { ResolutionEngine } from "./resolution-engine.js";
|
|
9
|
+
import { logger } from "../monitoring/logger.js";
|
|
10
|
+
class UnifiedMergeResolver {
|
|
11
|
+
conflictDetector;
|
|
12
|
+
diffVisualizer;
|
|
13
|
+
resolutionEngine;
|
|
14
|
+
activeSessions = /* @__PURE__ */ new Map();
|
|
15
|
+
rollbackSnapshots = /* @__PURE__ */ new Map();
|
|
16
|
+
statistics = {
|
|
17
|
+
totalConflicts: 0,
|
|
18
|
+
resolvedConflicts: 0,
|
|
19
|
+
averageResolutionTime: 0,
|
|
20
|
+
successRate: 0,
|
|
21
|
+
rollbackCount: 0
|
|
22
|
+
};
|
|
23
|
+
constructor() {
|
|
24
|
+
this.conflictDetector = new ConflictDetector();
|
|
25
|
+
this.diffVisualizer = new StackDiffVisualizer();
|
|
26
|
+
this.resolutionEngine = new ResolutionEngine();
|
|
27
|
+
logger.debug("UnifiedMergeResolver initialized");
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Start a new merge session with automatic conflict detection
|
|
31
|
+
*/
|
|
32
|
+
async startMergeSession(stack1, stack2, options) {
|
|
33
|
+
const sessionId = `unified-merge-${Date.now()}-${uuidv4().substring(0, 8)}`;
|
|
34
|
+
const conflicts = this.conflictDetector.detectConflicts(stack1, stack2);
|
|
35
|
+
let rollbackPoint;
|
|
36
|
+
if (options?.preserveRollback !== false) {
|
|
37
|
+
rollbackPoint = this.createRollbackSnapshot(sessionId, stack1, stack2);
|
|
38
|
+
}
|
|
39
|
+
const session = {
|
|
40
|
+
sessionId,
|
|
41
|
+
stack1,
|
|
42
|
+
stack2,
|
|
43
|
+
conflicts,
|
|
44
|
+
status: "analyzing",
|
|
45
|
+
rollbackPoint,
|
|
46
|
+
startedAt: Date.now(),
|
|
47
|
+
metadata: {
|
|
48
|
+
totalFrames: stack1.frames.length + stack2.frames.length,
|
|
49
|
+
conflictCount: conflicts.length,
|
|
50
|
+
resolvedCount: 0
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
this.activeSessions.set(sessionId, session);
|
|
54
|
+
this.statistics.totalConflicts += conflicts.length;
|
|
55
|
+
logger.info(`Merge session started: ${sessionId}`, {
|
|
56
|
+
stack1Id: stack1.id,
|
|
57
|
+
stack2Id: stack2.id,
|
|
58
|
+
conflictCount: conflicts.length
|
|
59
|
+
});
|
|
60
|
+
if (options?.autoResolve && conflicts.length > 0 && options.context) {
|
|
61
|
+
const defaultStrategy = options.strategy || "ai_suggest";
|
|
62
|
+
await this.resolveConflicts(sessionId, defaultStrategy, options.context);
|
|
63
|
+
}
|
|
64
|
+
return sessionId;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Generate a preview of the merge result
|
|
68
|
+
*/
|
|
69
|
+
async generatePreview(sessionId, strategy) {
|
|
70
|
+
const session = this.activeSessions.get(sessionId);
|
|
71
|
+
if (!session) {
|
|
72
|
+
throw new Error(`Session not found: ${sessionId}`);
|
|
73
|
+
}
|
|
74
|
+
const preview = this.diffVisualizer.generateMergePreview(
|
|
75
|
+
session.stack1,
|
|
76
|
+
session.stack2,
|
|
77
|
+
strategy
|
|
78
|
+
);
|
|
79
|
+
session.preview = preview;
|
|
80
|
+
session.status = "preview";
|
|
81
|
+
session.metadata.strategyUsed = strategy;
|
|
82
|
+
this.activeSessions.set(sessionId, session);
|
|
83
|
+
logger.info(`Preview generated for session: ${sessionId}`, {
|
|
84
|
+
mergedFrameCount: preview.mergedFrames.length,
|
|
85
|
+
estimatedSuccess: preview.estimatedSuccess
|
|
86
|
+
});
|
|
87
|
+
return preview;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Resolve conflicts using the specified strategy
|
|
91
|
+
*/
|
|
92
|
+
async resolveConflicts(sessionId, strategy, context) {
|
|
93
|
+
const session = this.activeSessions.get(sessionId);
|
|
94
|
+
if (!session) {
|
|
95
|
+
throw new Error(`Session not found: ${sessionId}`);
|
|
96
|
+
}
|
|
97
|
+
session.status = "resolving";
|
|
98
|
+
try {
|
|
99
|
+
const result = await this.resolutionEngine.resolveConflicts(
|
|
100
|
+
session.stack1,
|
|
101
|
+
session.stack2,
|
|
102
|
+
strategy,
|
|
103
|
+
context
|
|
104
|
+
);
|
|
105
|
+
session.resolution = result.resolution;
|
|
106
|
+
session.status = result.success ? "completed" : "failed";
|
|
107
|
+
session.completedAt = Date.now();
|
|
108
|
+
session.metadata.resolvedCount = session.conflicts.filter(
|
|
109
|
+
(c) => c.resolution !== void 0
|
|
110
|
+
).length;
|
|
111
|
+
session.metadata.strategyUsed = strategy;
|
|
112
|
+
this.activeSessions.set(sessionId, session);
|
|
113
|
+
if (result.success) {
|
|
114
|
+
this.statistics.resolvedConflicts += session.metadata.resolvedCount;
|
|
115
|
+
this.updateSuccessRate();
|
|
116
|
+
this.updateAverageResolutionTime(session);
|
|
117
|
+
}
|
|
118
|
+
logger.info(`Conflicts resolved for session: ${sessionId}`, {
|
|
119
|
+
success: result.success,
|
|
120
|
+
strategy,
|
|
121
|
+
resolvedCount: session.metadata.resolvedCount
|
|
122
|
+
});
|
|
123
|
+
return result;
|
|
124
|
+
} catch (error) {
|
|
125
|
+
session.status = "failed";
|
|
126
|
+
this.activeSessions.set(sessionId, session);
|
|
127
|
+
logger.error(
|
|
128
|
+
`Failed to resolve conflicts for session: ${sessionId}`,
|
|
129
|
+
error
|
|
130
|
+
);
|
|
131
|
+
throw error;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Rollback a merge to its original state
|
|
136
|
+
*/
|
|
137
|
+
async rollback(sessionId) {
|
|
138
|
+
const session = this.activeSessions.get(sessionId);
|
|
139
|
+
if (!session || !session.rollbackPoint) {
|
|
140
|
+
logger.warn(`Cannot rollback session: ${sessionId} - no rollback point`);
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
const snapshot = this.rollbackSnapshots.get(session.rollbackPoint);
|
|
144
|
+
if (!snapshot) {
|
|
145
|
+
logger.error(`Rollback snapshot not found: ${session.rollbackPoint}`);
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
session.stack1 = snapshot.stack1;
|
|
149
|
+
session.stack2 = snapshot.stack2;
|
|
150
|
+
session.status = "rolled_back";
|
|
151
|
+
session.resolution = void 0;
|
|
152
|
+
session.conflicts = this.conflictDetector.detectConflicts(
|
|
153
|
+
snapshot.stack1,
|
|
154
|
+
snapshot.stack2
|
|
155
|
+
);
|
|
156
|
+
session.metadata.resolvedCount = 0;
|
|
157
|
+
this.activeSessions.set(sessionId, session);
|
|
158
|
+
this.statistics.rollbackCount++;
|
|
159
|
+
logger.info(`Session rolled back: ${sessionId}`);
|
|
160
|
+
return true;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Get merge session details
|
|
164
|
+
*/
|
|
165
|
+
getSession(sessionId) {
|
|
166
|
+
return this.activeSessions.get(sessionId);
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* List all active merge sessions
|
|
170
|
+
*/
|
|
171
|
+
listActiveSessions() {
|
|
172
|
+
return Array.from(this.activeSessions.values()).filter(
|
|
173
|
+
(s) => s.status !== "completed" && s.status !== "rolled_back" && s.status !== "failed"
|
|
174
|
+
);
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Get merge statistics
|
|
178
|
+
*/
|
|
179
|
+
getStatistics() {
|
|
180
|
+
return { ...this.statistics };
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Analyze parallel solutions across stacks
|
|
184
|
+
*/
|
|
185
|
+
analyzeParallelSolutions(frames) {
|
|
186
|
+
const solutions = this.conflictDetector.analyzeParallelSolutions(frames);
|
|
187
|
+
const recommendations = [];
|
|
188
|
+
if (solutions.length > 1) {
|
|
189
|
+
const grouped = /* @__PURE__ */ new Map();
|
|
190
|
+
for (const sol of solutions) {
|
|
191
|
+
const key = sol.approach.toLowerCase();
|
|
192
|
+
if (!grouped.has(key)) {
|
|
193
|
+
grouped.set(key, []);
|
|
194
|
+
}
|
|
195
|
+
grouped.get(key).push(sol);
|
|
196
|
+
}
|
|
197
|
+
for (const [approach, group] of grouped) {
|
|
198
|
+
if (group.length > 1) {
|
|
199
|
+
const avgEffectiveness = group.reduce((sum, s) => sum + (s.effectiveness || 0), 0) / group.length;
|
|
200
|
+
recommendations.push(
|
|
201
|
+
`${group.length} parallel solutions using "${approach}" approach (avg effectiveness: ${(avgEffectiveness * 100).toFixed(1)}%)`
|
|
202
|
+
);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
const best = solutions.reduce(
|
|
206
|
+
(a, b) => (a.effectiveness || 0) > (b.effectiveness || 0) ? a : b,
|
|
207
|
+
solutions[0]
|
|
208
|
+
);
|
|
209
|
+
if (best && best.effectiveness && best.effectiveness > 0.7) {
|
|
210
|
+
recommendations.push(
|
|
211
|
+
`Recommended: Use solution from frame "${best.frameId}" (${(best.effectiveness * 100).toFixed(1)}% effectiveness)`
|
|
212
|
+
);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return {
|
|
216
|
+
solutions: solutions.map((s) => ({
|
|
217
|
+
frameId: s.frameId,
|
|
218
|
+
approach: s.approach,
|
|
219
|
+
effectiveness: s.effectiveness || 0
|
|
220
|
+
})),
|
|
221
|
+
recommendations
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Create a visual diff between two stacks
|
|
226
|
+
*/
|
|
227
|
+
createVisualDiff(baseFrame, stack1, stack2) {
|
|
228
|
+
const diff = this.diffVisualizer.visualizeDivergence(
|
|
229
|
+
baseFrame,
|
|
230
|
+
stack1,
|
|
231
|
+
stack2
|
|
232
|
+
);
|
|
233
|
+
const conflicts = this.conflictDetector.detectConflicts(stack1, stack2);
|
|
234
|
+
return {
|
|
235
|
+
nodes: diff.nodes.map((n) => ({
|
|
236
|
+
id: n.id,
|
|
237
|
+
type: n.type,
|
|
238
|
+
depth: n.frame?.depth
|
|
239
|
+
})),
|
|
240
|
+
edges: diff.edges.map((e) => ({
|
|
241
|
+
source: e.source,
|
|
242
|
+
target: e.target,
|
|
243
|
+
type: e.type
|
|
244
|
+
})),
|
|
245
|
+
conflicts: conflicts.map((c) => ({
|
|
246
|
+
frameId1: c.frameId1,
|
|
247
|
+
frameId2: c.frameId2,
|
|
248
|
+
severity: c.severity
|
|
249
|
+
}))
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Close a merge session and clean up resources
|
|
254
|
+
*/
|
|
255
|
+
closeSession(sessionId) {
|
|
256
|
+
const session = this.activeSessions.get(sessionId);
|
|
257
|
+
if (session) {
|
|
258
|
+
if (session.rollbackPoint) {
|
|
259
|
+
this.rollbackSnapshots.delete(session.rollbackPoint);
|
|
260
|
+
}
|
|
261
|
+
this.activeSessions.delete(sessionId);
|
|
262
|
+
logger.debug(`Session closed: ${sessionId}`);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
// Private helpers
|
|
266
|
+
createRollbackSnapshot(sessionId, stack1, stack2) {
|
|
267
|
+
const snapshotId = `rollback-${sessionId}`;
|
|
268
|
+
this.rollbackSnapshots.set(snapshotId, {
|
|
269
|
+
stack1: this.deepCloneStack(stack1),
|
|
270
|
+
stack2: this.deepCloneStack(stack2)
|
|
271
|
+
});
|
|
272
|
+
return snapshotId;
|
|
273
|
+
}
|
|
274
|
+
deepCloneStack(stack) {
|
|
275
|
+
return {
|
|
276
|
+
...stack,
|
|
277
|
+
frames: stack.frames.map((f) => ({ ...f })),
|
|
278
|
+
events: stack.events.map((e) => ({ ...e }))
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
updateSuccessRate() {
|
|
282
|
+
if (this.statistics.totalConflicts > 0) {
|
|
283
|
+
this.statistics.successRate = this.statistics.resolvedConflicts / this.statistics.totalConflicts;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
updateAverageResolutionTime(session) {
|
|
287
|
+
if (session.completedAt && session.startedAt) {
|
|
288
|
+
const duration = session.completedAt - session.startedAt;
|
|
289
|
+
const completedSessions = Array.from(this.activeSessions.values()).filter(
|
|
290
|
+
(s) => s.completedAt
|
|
291
|
+
).length;
|
|
292
|
+
if (completedSessions === 1) {
|
|
293
|
+
this.statistics.averageResolutionTime = duration;
|
|
294
|
+
} else {
|
|
295
|
+
this.statistics.averageResolutionTime = (this.statistics.averageResolutionTime * (completedSessions - 1) + duration) / completedSessions;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
export {
|
|
301
|
+
UnifiedMergeResolver
|
|
302
|
+
};
|
|
303
|
+
//# sourceMappingURL=unified-merge-resolver.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/core/merge/unified-merge-resolver.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Unified Merge Resolver - STA-101\n * Bridges StackMergeResolver with advanced ConflictDetector and ResolutionEngine\n * Provides a unified interface for all merge conflict resolution scenarios\n */\n\nimport { v4 as uuidv4 } from 'uuid';\nimport type { Frame, Event } from '../context/frame-types.js';\nimport { ConflictDetector } from './conflict-detector.js';\nimport { StackDiffVisualizer, PreviewResult } from './stack-diff.js';\nimport { ResolutionEngine, ResolutionContext } from './resolution-engine.js';\nimport {\n MergeConflict,\n ConflictResolution,\n ResolutionStrategy,\n FrameStack,\n MergeResult,\n MergeStatistics,\n} from './types.js';\nimport { logger } from '../monitoring/logger.js';\n\nexport interface UnifiedMergeSession {\n sessionId: string;\n stack1: FrameStack;\n stack2: FrameStack;\n conflicts: MergeConflict[];\n resolution?: ConflictResolution;\n status:\n | 'analyzing'\n | 'preview'\n | 'resolving'\n | 'completed'\n | 'failed'\n | 'rolled_back';\n preview?: PreviewResult;\n rollbackPoint?: string;\n startedAt: number;\n completedAt?: number;\n metadata: {\n totalFrames: number;\n conflictCount: number;\n resolvedCount: number;\n strategyUsed?: ResolutionStrategy['type'];\n };\n}\n\nexport interface MergeOptions {\n strategy?: ResolutionStrategy['type'];\n autoResolve?: boolean;\n preserveRollback?: boolean;\n notifyOnComplete?: boolean;\n context?: ResolutionContext;\n}\n\nexport class UnifiedMergeResolver {\n private conflictDetector: ConflictDetector;\n private diffVisualizer: StackDiffVisualizer;\n private resolutionEngine: ResolutionEngine;\n private activeSessions: Map<string, UnifiedMergeSession> = new Map();\n private rollbackSnapshots: Map<\n string,\n { stack1: FrameStack; stack2: FrameStack }\n > = new Map();\n private statistics: MergeStatistics = {\n totalConflicts: 0,\n resolvedConflicts: 0,\n averageResolutionTime: 0,\n successRate: 0,\n rollbackCount: 0,\n };\n\n constructor() {\n this.conflictDetector = new ConflictDetector();\n this.diffVisualizer = new StackDiffVisualizer();\n this.resolutionEngine = new ResolutionEngine();\n logger.debug('UnifiedMergeResolver initialized');\n }\n\n /**\n * Start a new merge session with automatic conflict detection\n */\n async startMergeSession(\n stack1: FrameStack,\n stack2: FrameStack,\n options?: MergeOptions\n ): Promise<string> {\n const sessionId = `unified-merge-${Date.now()}-${uuidv4().substring(0, 8)}`;\n\n // Detect conflicts\n const conflicts = this.conflictDetector.detectConflicts(stack1, stack2);\n\n // Create rollback snapshot if requested\n let rollbackPoint: string | undefined;\n if (options?.preserveRollback !== false) {\n rollbackPoint = this.createRollbackSnapshot(sessionId, stack1, stack2);\n }\n\n const session: UnifiedMergeSession = {\n sessionId,\n stack1,\n stack2,\n conflicts,\n status: 'analyzing',\n rollbackPoint,\n startedAt: Date.now(),\n metadata: {\n totalFrames: stack1.frames.length + stack2.frames.length,\n conflictCount: conflicts.length,\n resolvedCount: 0,\n },\n };\n\n this.activeSessions.set(sessionId, session);\n this.statistics.totalConflicts += conflicts.length;\n\n logger.info(`Merge session started: ${sessionId}`, {\n stack1Id: stack1.id,\n stack2Id: stack2.id,\n conflictCount: conflicts.length,\n });\n\n // Auto-resolve if requested and possible\n if (options?.autoResolve && conflicts.length > 0 && options.context) {\n const defaultStrategy = options.strategy || 'ai_suggest';\n await this.resolveConflicts(sessionId, defaultStrategy, options.context);\n }\n\n return sessionId;\n }\n\n /**\n * Generate a preview of the merge result\n */\n async generatePreview(\n sessionId: string,\n strategy: ResolutionStrategy['type']\n ): Promise<PreviewResult> {\n const session = this.activeSessions.get(sessionId);\n if (!session) {\n throw new Error(`Session not found: ${sessionId}`);\n }\n\n const preview = this.diffVisualizer.generateMergePreview(\n session.stack1,\n session.stack2,\n strategy\n );\n\n session.preview = preview;\n session.status = 'preview';\n session.metadata.strategyUsed = strategy;\n\n this.activeSessions.set(sessionId, session);\n\n logger.info(`Preview generated for session: ${sessionId}`, {\n mergedFrameCount: preview.mergedFrames.length,\n estimatedSuccess: preview.estimatedSuccess,\n });\n\n return preview;\n }\n\n /**\n * Resolve conflicts using the specified strategy\n */\n async resolveConflicts(\n sessionId: string,\n strategy: ResolutionStrategy['type'],\n context: ResolutionContext\n ): Promise<MergeResult> {\n const session = this.activeSessions.get(sessionId);\n if (!session) {\n throw new Error(`Session not found: ${sessionId}`);\n }\n\n session.status = 'resolving';\n\n try {\n const result = await this.resolutionEngine.resolveConflicts(\n session.stack1,\n session.stack2,\n strategy,\n context\n );\n\n session.resolution = result.resolution;\n session.status = result.success ? 'completed' : 'failed';\n session.completedAt = Date.now();\n session.metadata.resolvedCount = session.conflicts.filter(\n (c) => c.resolution !== undefined\n ).length;\n session.metadata.strategyUsed = strategy;\n\n this.activeSessions.set(sessionId, session);\n\n // Update statistics\n if (result.success) {\n this.statistics.resolvedConflicts += session.metadata.resolvedCount;\n this.updateSuccessRate();\n this.updateAverageResolutionTime(session);\n }\n\n logger.info(`Conflicts resolved for session: ${sessionId}`, {\n success: result.success,\n strategy,\n resolvedCount: session.metadata.resolvedCount,\n });\n\n return result;\n } catch (error) {\n session.status = 'failed';\n this.activeSessions.set(sessionId, session);\n\n logger.error(\n `Failed to resolve conflicts for session: ${sessionId}`,\n error\n );\n throw error;\n }\n }\n\n /**\n * Rollback a merge to its original state\n */\n async rollback(sessionId: string): Promise<boolean> {\n const session = this.activeSessions.get(sessionId);\n if (!session || !session.rollbackPoint) {\n logger.warn(`Cannot rollback session: ${sessionId} - no rollback point`);\n return false;\n }\n\n const snapshot = this.rollbackSnapshots.get(session.rollbackPoint);\n if (!snapshot) {\n logger.error(`Rollback snapshot not found: ${session.rollbackPoint}`);\n return false;\n }\n\n // Restore original state\n session.stack1 = snapshot.stack1;\n session.stack2 = snapshot.stack2;\n session.status = 'rolled_back';\n session.resolution = undefined;\n session.conflicts = this.conflictDetector.detectConflicts(\n snapshot.stack1,\n snapshot.stack2\n );\n session.metadata.resolvedCount = 0;\n\n this.activeSessions.set(sessionId, session);\n this.statistics.rollbackCount++;\n\n logger.info(`Session rolled back: ${sessionId}`);\n return true;\n }\n\n /**\n * Get merge session details\n */\n getSession(sessionId: string): UnifiedMergeSession | undefined {\n return this.activeSessions.get(sessionId);\n }\n\n /**\n * List all active merge sessions\n */\n listActiveSessions(): UnifiedMergeSession[] {\n return Array.from(this.activeSessions.values()).filter(\n (s) =>\n s.status !== 'completed' &&\n s.status !== 'rolled_back' &&\n s.status !== 'failed'\n );\n }\n\n /**\n * Get merge statistics\n */\n getStatistics(): MergeStatistics {\n return { ...this.statistics };\n }\n\n /**\n * Analyze parallel solutions across stacks\n */\n analyzeParallelSolutions(frames: Frame[]): {\n solutions: Array<{\n frameId: string;\n approach: string;\n effectiveness: number;\n }>;\n recommendations: string[];\n } {\n const solutions = this.conflictDetector.analyzeParallelSolutions(frames);\n\n const recommendations: string[] = [];\n if (solutions.length > 1) {\n // Group by similar solutions\n const grouped = new Map<string, typeof solutions>();\n for (const sol of solutions) {\n const key = sol.approach.toLowerCase();\n if (!grouped.has(key)) {\n grouped.set(key, []);\n }\n grouped.get(key)!.push(sol);\n }\n\n // Generate recommendations\n for (const [approach, group] of grouped) {\n if (group.length > 1) {\n const avgEffectiveness =\n group.reduce((sum, s) => sum + (s.effectiveness || 0), 0) /\n group.length;\n recommendations.push(\n `${group.length} parallel solutions using \"${approach}\" approach (avg effectiveness: ${(avgEffectiveness * 100).toFixed(1)}%)`\n );\n }\n }\n\n // Find best solution\n const best = solutions.reduce(\n (a, b) => ((a.effectiveness || 0) > (b.effectiveness || 0) ? a : b),\n solutions[0]\n );\n if (best && best.effectiveness && best.effectiveness > 0.7) {\n recommendations.push(\n `Recommended: Use solution from frame \"${best.frameId}\" (${(best.effectiveness * 100).toFixed(1)}% effectiveness)`\n );\n }\n }\n\n return {\n solutions: solutions.map((s) => ({\n frameId: s.frameId,\n approach: s.approach,\n effectiveness: s.effectiveness || 0,\n })),\n recommendations,\n };\n }\n\n /**\n * Create a visual diff between two stacks\n */\n createVisualDiff(\n baseFrame: Frame,\n stack1: FrameStack,\n stack2: FrameStack\n ): {\n nodes: Array<{ id: string; type: string; depth?: number }>;\n edges: Array<{ source: string; target: string; type: string }>;\n conflicts: Array<{ frameId1: string; frameId2: string; severity: string }>;\n } {\n const diff = this.diffVisualizer.visualizeDivergence(\n baseFrame,\n stack1,\n stack2\n );\n const conflicts = this.conflictDetector.detectConflicts(stack1, stack2);\n\n return {\n nodes: diff.nodes.map((n) => ({\n id: n.id,\n type: n.type,\n depth: n.frame?.depth,\n })),\n edges: diff.edges.map((e) => ({\n source: e.source,\n target: e.target,\n type: e.type,\n })),\n conflicts: conflicts.map((c) => ({\n frameId1: c.frameId1,\n frameId2: c.frameId2,\n severity: c.severity,\n })),\n };\n }\n\n /**\n * Close a merge session and clean up resources\n */\n closeSession(sessionId: string): void {\n const session = this.activeSessions.get(sessionId);\n if (session) {\n // Clean up rollback snapshot\n if (session.rollbackPoint) {\n this.rollbackSnapshots.delete(session.rollbackPoint);\n }\n this.activeSessions.delete(sessionId);\n\n logger.debug(`Session closed: ${sessionId}`);\n }\n }\n\n // Private helpers\n\n private createRollbackSnapshot(\n sessionId: string,\n stack1: FrameStack,\n stack2: FrameStack\n ): string {\n const snapshotId = `rollback-${sessionId}`;\n\n // Deep clone stacks\n this.rollbackSnapshots.set(snapshotId, {\n stack1: this.deepCloneStack(stack1),\n stack2: this.deepCloneStack(stack2),\n });\n\n return snapshotId;\n }\n\n private deepCloneStack(stack: FrameStack): FrameStack {\n return {\n ...stack,\n frames: stack.frames.map((f) => ({ ...f })),\n events: stack.events.map((e) => ({ ...e })),\n };\n }\n\n private updateSuccessRate(): void {\n if (this.statistics.totalConflicts > 0) {\n this.statistics.successRate =\n this.statistics.resolvedConflicts / this.statistics.totalConflicts;\n }\n }\n\n private updateAverageResolutionTime(session: UnifiedMergeSession): void {\n if (session.completedAt && session.startedAt) {\n const duration = session.completedAt - session.startedAt;\n const completedSessions = Array.from(this.activeSessions.values()).filter(\n (s) => s.completedAt\n ).length;\n\n if (completedSessions === 1) {\n this.statistics.averageResolutionTime = duration;\n } else {\n // Running average\n this.statistics.averageResolutionTime =\n (this.statistics.averageResolutionTime * (completedSessions - 1) +\n duration) /\n completedSessions;\n }\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -4,16 +4,63 @@ const __filename = __fileURLToPath(import.meta.url);
|
|
|
4
4
|
const __dirname = __pathDirname(__filename);
|
|
5
5
|
import * as fs from "fs";
|
|
6
6
|
import * as path from "path";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
const SENSITIVE_PATTERNS = [
|
|
8
|
+
/\b(api[_-]?key|apikey)\s*[:=]\s*['"]?[\w-]+['"]?/gi,
|
|
9
|
+
/\b(secret|password|token|credential|auth)\s*[:=]\s*['"]?[\w-]+['"]?/gi,
|
|
10
|
+
/\b(lin_api_[\w]+)/gi,
|
|
11
|
+
/\b(lin_oauth_[\w]+)/gi,
|
|
12
|
+
/\b(sk-[\w]+)/gi,
|
|
13
|
+
/\b(npm_[\w]+)/gi,
|
|
14
|
+
/\b(ghp_[\w]+)/gi,
|
|
15
|
+
/\b(ghs_[\w]+)/gi,
|
|
16
|
+
/Bearer\s+[\w.-]+/gi,
|
|
17
|
+
/Basic\s+[\w=]+/gi,
|
|
18
|
+
/postgres(ql)?:\/\/[^@\s]+:[^@\s]+@/gi
|
|
19
|
+
];
|
|
20
|
+
const SENSITIVE_FIELD_NAMES = [
|
|
21
|
+
"password",
|
|
22
|
+
"token",
|
|
23
|
+
"apikey",
|
|
24
|
+
"api_key",
|
|
25
|
+
"secret",
|
|
26
|
+
"credential",
|
|
27
|
+
"authorization",
|
|
28
|
+
"auth",
|
|
29
|
+
"accesstoken",
|
|
30
|
+
"access_token",
|
|
31
|
+
"refreshtoken",
|
|
32
|
+
"refresh_token"
|
|
33
|
+
];
|
|
34
|
+
function redactString(input) {
|
|
35
|
+
let result = input;
|
|
36
|
+
for (const pattern of SENSITIVE_PATTERNS) {
|
|
37
|
+
pattern.lastIndex = 0;
|
|
38
|
+
result = result.replace(pattern, "[REDACTED]");
|
|
12
39
|
}
|
|
13
|
-
return
|
|
40
|
+
return result;
|
|
14
41
|
}
|
|
15
|
-
function
|
|
16
|
-
|
|
42
|
+
function sanitizeForLogging(obj) {
|
|
43
|
+
if (obj === null || obj === void 0) {
|
|
44
|
+
return obj;
|
|
45
|
+
}
|
|
46
|
+
if (typeof obj === "string") {
|
|
47
|
+
return redactString(obj);
|
|
48
|
+
}
|
|
49
|
+
if (Array.isArray(obj)) {
|
|
50
|
+
return obj.map(sanitizeForLogging);
|
|
51
|
+
}
|
|
52
|
+
if (typeof obj === "object") {
|
|
53
|
+
const sanitized = {};
|
|
54
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
55
|
+
if (SENSITIVE_FIELD_NAMES.some((sf) => key.toLowerCase().includes(sf))) {
|
|
56
|
+
sanitized[key] = "[REDACTED]";
|
|
57
|
+
} else {
|
|
58
|
+
sanitized[key] = sanitizeForLogging(value);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return sanitized;
|
|
62
|
+
}
|
|
63
|
+
return obj;
|
|
17
64
|
}
|
|
18
65
|
var LogLevel = /* @__PURE__ */ ((LogLevel2) => {
|
|
19
66
|
LogLevel2[LogLevel2["ERROR"] = 0] = "ERROR";
|
|
@@ -75,7 +122,12 @@ class Logger {
|
|
|
75
122
|
}
|
|
76
123
|
}
|
|
77
124
|
writeLog(entry) {
|
|
78
|
-
const
|
|
125
|
+
const sanitizedEntry = {
|
|
126
|
+
...entry,
|
|
127
|
+
message: redactString(entry.message),
|
|
128
|
+
context: entry.context ? sanitizeForLogging(entry.context) : void 0
|
|
129
|
+
};
|
|
130
|
+
const logLine = JSON.stringify(sanitizedEntry) + "\n";
|
|
79
131
|
if (this.logFile) {
|
|
80
132
|
try {
|
|
81
133
|
fs.appendFileSync(this.logFile, logLine);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/core/monitoring/logger.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Structured logging utility for StackMemory CLI\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\n
|
|
5
|
-
"mappings": ";;;;
|
|
4
|
+
"sourcesContent": ["/**\n * Structured logging utility for StackMemory CLI\n * Includes automatic sensitive data redaction for security\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\n\n/**\n * Sensitive data patterns that should be redacted from logs\n */\nconst SENSITIVE_PATTERNS = [\n /\\b(api[_-]?key|apikey)\\s*[:=]\\s*['\"]?[\\w-]+['\"]?/gi,\n /\\b(secret|password|token|credential|auth)\\s*[:=]\\s*['\"]?[\\w-]+['\"]?/gi,\n /\\b(lin_api_[\\w]+)/gi,\n /\\b(lin_oauth_[\\w]+)/gi,\n /\\b(sk-[\\w]+)/gi,\n /\\b(npm_[\\w]+)/gi,\n /\\b(ghp_[\\w]+)/gi,\n /\\b(ghs_[\\w]+)/gi,\n /Bearer\\s+[\\w.-]+/gi,\n /Basic\\s+[\\w=]+/gi,\n /postgres(ql)?:\\/\\/[^@\\s]+:[^@\\s]+@/gi,\n];\n\nconst SENSITIVE_FIELD_NAMES = [\n 'password',\n 'token',\n 'apikey',\n 'api_key',\n 'secret',\n 'credential',\n 'authorization',\n 'auth',\n 'accesstoken',\n 'access_token',\n 'refreshtoken',\n 'refresh_token',\n];\n\n/**\n * Redact sensitive data from a string\n */\nfunction redactString(input: string): string {\n let result = input;\n for (const pattern of SENSITIVE_PATTERNS) {\n pattern.lastIndex = 0;\n result = result.replace(pattern, '[REDACTED]');\n }\n return result;\n}\n\n/**\n * Recursively sanitize an object for logging\n */\nfunction sanitizeForLogging(obj: unknown): unknown {\n if (obj === null || obj === undefined) {\n return obj;\n }\n\n if (typeof obj === 'string') {\n return redactString(obj);\n }\n\n if (Array.isArray(obj)) {\n return obj.map(sanitizeForLogging);\n }\n\n if (typeof obj === 'object') {\n const sanitized: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n if (SENSITIVE_FIELD_NAMES.some((sf) => key.toLowerCase().includes(sf))) {\n sanitized[key] = '[REDACTED]';\n } else {\n sanitized[key] = sanitizeForLogging(value);\n }\n }\n return sanitized;\n }\n\n return obj;\n}\n\nexport enum LogLevel {\n ERROR = 0,\n WARN = 1,\n INFO = 2,\n DEBUG = 3,\n}\n\ninterface LogEntry {\n timestamp: string;\n level: LogLevel;\n message: string;\n context?: Record<string, unknown>;\n error?: Error;\n}\n\nexport class Logger {\n private static instance: Logger;\n private logLevel: LogLevel = LogLevel.INFO;\n private logFile?: string;\n private fileLoggingDisabledNotified = false;\n\n private constructor() {\n // Set log level from environment\n const envLevel = process.env['STACKMEMORY_LOG_LEVEL']?.toUpperCase();\n switch (envLevel) {\n case 'ERROR':\n this.logLevel = LogLevel.ERROR;\n break;\n case 'WARN':\n this.logLevel = LogLevel.WARN;\n break;\n case 'DEBUG':\n this.logLevel = LogLevel.DEBUG;\n break;\n default:\n this.logLevel = LogLevel.INFO;\n }\n\n // Set up log file if in debug mode or if specified\n if (\n this.logLevel === LogLevel.DEBUG ||\n process.env['STACKMEMORY_LOG_FILE']\n ) {\n this.logFile =\n process.env['STACKMEMORY_LOG_FILE'] ||\n path.join(\n process.env['HOME'] || '.',\n '.stackmemory',\n 'logs',\n 'cli.log'\n );\n this.ensureLogDirectory();\n }\n }\n\n static getInstance(): Logger {\n if (!Logger.instance) {\n Logger.instance = new Logger();\n }\n return Logger.instance;\n }\n\n private ensureLogDirectory(): void {\n if (!this.logFile) return;\n const logDir = path.dirname(this.logFile);\n try {\n if (!fs.existsSync(logDir)) {\n fs.mkdirSync(logDir, { recursive: true });\n }\n } catch (err: unknown) {\n // Disable file logging if we cannot create the directory (e.g., ENOSPC)\n this.logFile = undefined;\n if (!this.fileLoggingDisabledNotified) {\n this.fileLoggingDisabledNotified = true;\n // Emit a single warning to console so we don't spam output\n const msg =\n '[Logger] File logging disabled (failed to create log directory). Falling back to console only.';\n // Use console directly to avoid recursion\n\n console.warn(msg);\n }\n }\n }\n\n private writeLog(entry: LogEntry): void {\n // Sanitize context and message to prevent logging sensitive data\n const sanitizedEntry: LogEntry = {\n ...entry,\n message: redactString(entry.message),\n context: entry.context\n ? (sanitizeForLogging(entry.context) as Record<string, unknown>)\n : undefined,\n };\n const logLine = JSON.stringify(sanitizedEntry) + '\\n';\n\n // Always write to file if configured\n if (this.logFile) {\n try {\n fs.appendFileSync(this.logFile, logLine);\n } catch (err: unknown) {\n // Disable file logging on error (e.g., ENOSPC) to avoid repeated failures\n this.logFile = undefined;\n if (!this.fileLoggingDisabledNotified) {\n this.fileLoggingDisabledNotified = true;\n const msg =\n '[Logger] File logging disabled (write failed). Falling back to console only.';\n\n console.warn(msg);\n }\n }\n }\n\n // Console output based on level\n if (entry.level <= this.logLevel) {\n const levelNames = ['ERROR', 'WARN', 'INFO', 'DEBUG'];\n const levelName = levelNames[entry.level] || 'UNKNOWN';\n\n const consoleMessage = `[${entry.timestamp}] ${levelName}: ${entry.message}`;\n\n if (entry.level === LogLevel.ERROR) {\n console.error(consoleMessage);\n if (entry.error) {\n console.error(entry.error.stack);\n }\n } else if (entry.level === LogLevel.WARN) {\n console.warn(consoleMessage);\n } else {\n console.log(consoleMessage);\n }\n }\n }\n\n error(\n message: string,\n errorOrContext?: Error | Record<string, unknown>,\n context?: Record<string, unknown>\n ): void {\n const isError = errorOrContext instanceof Error;\n this.writeLog({\n timestamp: new Date().toISOString(),\n level: LogLevel.ERROR,\n message,\n context: isError ? context : (errorOrContext as Record<string, unknown>),\n error: isError ? errorOrContext : undefined,\n });\n }\n\n warn(\n message: string,\n errorOrContext?: Error | Record<string, unknown>\n ): void {\n const isError = errorOrContext instanceof Error;\n this.writeLog({\n timestamp: new Date().toISOString(),\n level: LogLevel.WARN,\n message,\n context: isError\n ? undefined\n : (errorOrContext as Record<string, unknown>),\n error: isError ? errorOrContext : undefined,\n });\n }\n\n info(message: string, context?: Record<string, unknown>): void {\n this.writeLog({\n timestamp: new Date().toISOString(),\n level: LogLevel.INFO,\n message,\n context,\n });\n }\n\n debug(message: string, context?: Record<string, unknown>): void {\n this.writeLog({\n timestamp: new Date().toISOString(),\n level: LogLevel.DEBUG,\n message,\n context,\n });\n }\n}\n\n// Export singleton instance\nexport const logger = Logger.getInstance();\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["LogLevel"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,35 @@
|
|
|
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 {
|
|
6
|
+
SENSITIVE_PATTERNS,
|
|
7
|
+
redactSensitiveData,
|
|
8
|
+
containsSensitiveData,
|
|
9
|
+
sanitizeForLogging,
|
|
10
|
+
sanitizeForSqlLike,
|
|
11
|
+
sanitizeIdentifier,
|
|
12
|
+
validateTableName,
|
|
13
|
+
sanitizeFilePath,
|
|
14
|
+
InputSchemas,
|
|
15
|
+
validateInput,
|
|
16
|
+
createAggregateSchema,
|
|
17
|
+
validateShellArg,
|
|
18
|
+
safeJsonParse
|
|
19
|
+
} from "./input-sanitizer.js";
|
|
20
|
+
export {
|
|
21
|
+
InputSchemas,
|
|
22
|
+
SENSITIVE_PATTERNS,
|
|
23
|
+
containsSensitiveData,
|
|
24
|
+
createAggregateSchema,
|
|
25
|
+
redactSensitiveData,
|
|
26
|
+
safeJsonParse,
|
|
27
|
+
sanitizeFilePath,
|
|
28
|
+
sanitizeForLogging,
|
|
29
|
+
sanitizeForSqlLike,
|
|
30
|
+
sanitizeIdentifier,
|
|
31
|
+
validateInput,
|
|
32
|
+
validateShellArg,
|
|
33
|
+
validateTableName
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/core/security/index.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Security module exports\n * Provides centralized security utilities for the application\n */\n\nexport {\n // Sensitive data handling\n SENSITIVE_PATTERNS,\n redactSensitiveData,\n containsSensitiveData,\n sanitizeForLogging,\n\n // SQL safety\n sanitizeForSqlLike,\n sanitizeIdentifier,\n validateTableName,\n\n // File path safety\n sanitizeFilePath,\n\n // Input validation\n InputSchemas,\n validateInput,\n createAggregateSchema,\n\n // Shell command safety\n validateShellArg,\n\n // JSON safety\n safeJsonParse,\n} from './input-sanitizer.js';\n"],
|
|
5
|
+
"mappings": ";;;;AAKA;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EAGA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EAGA;AAAA,EAGA;AAAA,OACK;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|