@stackmemoryai/stackmemory 0.3.0 → 0.3.3
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/README.md +52 -272
- package/dist/cli/codex-sm.js +48 -19
- package/dist/cli/codex-sm.js.map +2 -2
- package/dist/cli/commands/clear.js +191 -0
- package/dist/cli/commands/clear.js.map +7 -0
- package/dist/cli/commands/config.js +152 -1
- package/dist/cli/commands/config.js.map +2 -2
- package/dist/cli/commands/dashboard.js +178 -0
- package/dist/cli/commands/dashboard.js.map +7 -0
- package/dist/cli/commands/handoff.js +125 -8
- package/dist/cli/commands/handoff.js.map +2 -2
- package/dist/cli/commands/linear-create.js +132 -0
- package/dist/cli/commands/linear-create.js.map +7 -0
- package/dist/cli/commands/linear-list.js +69 -0
- package/dist/cli/commands/linear-list.js.map +7 -0
- package/dist/cli/commands/linear-migrate.js +40 -0
- package/dist/cli/commands/linear-migrate.js.map +7 -0
- package/dist/cli/commands/linear.js +185 -36
- package/dist/cli/commands/linear.js.map +2 -2
- package/dist/cli/commands/monitor.js +309 -0
- package/dist/cli/commands/monitor.js.map +7 -0
- package/dist/cli/commands/quality.js +414 -0
- package/dist/cli/commands/quality.js.map +7 -0
- package/dist/cli/commands/storage.js +275 -0
- package/dist/cli/commands/storage.js.map +7 -0
- package/dist/cli/commands/tui.js +66 -0
- package/dist/cli/commands/tui.js.map +7 -0
- package/dist/cli/commands/workflow.js +134 -0
- package/dist/cli/commands/workflow.js.map +7 -0
- package/dist/cli/index.js +105 -9
- package/dist/cli/index.js.map +3 -3
- package/dist/core/analytics/team-analytics.js +374 -0
- package/dist/core/analytics/team-analytics.js.map +7 -0
- package/dist/core/context/context-bridge.js +234 -0
- package/dist/core/context/context-bridge.js.map +7 -0
- package/dist/core/context/dual-stack-manager.js +850 -0
- package/dist/core/context/dual-stack-manager.js.map +7 -0
- package/dist/core/context/frame-handoff-manager.js +384 -0
- package/dist/core/context/frame-handoff-manager.js.map +7 -0
- package/dist/core/context/frame-manager.js +132 -12
- package/dist/core/context/frame-manager.js.map +2 -2
- package/dist/core/context/permission-manager.js +181 -0
- package/dist/core/context/permission-manager.js.map +7 -0
- package/dist/core/context/shared-context-layer.js +386 -0
- package/dist/core/context/shared-context-layer.js.map +7 -0
- package/dist/core/context/stack-merge-resolver.js +600 -0
- package/dist/core/context/stack-merge-resolver.js.map +7 -0
- package/dist/core/context/validation.js +121 -0
- package/dist/core/context/validation.js.map +7 -0
- package/dist/core/database/connection-pool.js +266 -175
- package/dist/core/database/connection-pool.js.map +2 -2
- package/dist/core/database/database-adapter.js +51 -0
- package/dist/core/database/database-adapter.js.map +7 -0
- package/dist/core/database/migration-manager.js +514 -0
- package/dist/core/database/migration-manager.js.map +7 -0
- package/dist/core/database/paradedb-adapter.js +970 -0
- package/dist/core/database/paradedb-adapter.js.map +7 -0
- package/dist/core/database/query-router.js +421 -0
- package/dist/core/database/query-router.js.map +7 -0
- package/dist/core/database/sqlite-adapter.js +547 -0
- package/dist/core/database/sqlite-adapter.js.map +7 -0
- package/dist/core/errors/index.js +21 -1
- package/dist/core/errors/index.js.map +2 -2
- package/dist/core/frame/workflow-templates-stub.js +42 -0
- package/dist/core/frame/workflow-templates-stub.js.map +7 -0
- package/dist/core/frame/workflow-templates.js +276 -0
- package/dist/core/frame/workflow-templates.js.map +7 -0
- package/dist/core/merge/conflict-detector.js +5 -2
- package/dist/core/merge/conflict-detector.js.map +2 -2
- package/dist/core/merge/resolution-engine.js +3 -14
- package/dist/core/merge/resolution-engine.js.map +2 -2
- package/dist/core/merge/stack-diff.js.map +2 -2
- package/dist/core/monitoring/logger.js +18 -3
- package/dist/core/monitoring/logger.js.map +2 -2
- package/dist/core/monitoring/session-monitor.js +296 -0
- package/dist/core/monitoring/session-monitor.js.map +7 -0
- package/dist/core/retrieval/context-retriever.js +475 -0
- package/dist/core/retrieval/context-retriever.js.map +7 -0
- package/dist/core/retrieval/graph-retrieval.js +658 -0
- package/dist/core/retrieval/graph-retrieval.js.map +7 -0
- package/dist/core/retrieval/hierarchical-retrieval.js +652 -0
- package/dist/core/retrieval/hierarchical-retrieval.js.map +7 -0
- package/dist/core/retrieval/retrieval-benchmarks.js +517 -0
- package/dist/core/retrieval/retrieval-benchmarks.js.map +7 -0
- package/dist/core/session/clear-survival-stub.js +49 -0
- package/dist/core/session/clear-survival-stub.js.map +7 -0
- package/dist/core/session/clear-survival.js +426 -0
- package/dist/core/session/clear-survival.js.map +7 -0
- package/dist/core/session/handoff-generator.js +339 -0
- package/dist/core/session/handoff-generator.js.map +7 -0
- package/dist/core/session/session-manager.js +61 -26
- package/dist/core/session/session-manager.js.map +3 -3
- package/dist/core/skills/index.js +3 -0
- package/dist/core/skills/index.js.map +7 -0
- package/dist/core/skills/skill-storage.js +749 -0
- package/dist/core/skills/skill-storage.js.map +7 -0
- package/dist/core/skills/types.js +189 -0
- package/dist/core/skills/types.js.map +7 -0
- package/dist/core/storage/railway-optimized-storage.js +550 -0
- package/dist/core/storage/railway-optimized-storage.js.map +7 -0
- package/dist/core/storage/remote-storage.js +456 -0
- package/dist/core/storage/remote-storage.js.map +7 -0
- package/dist/core/trace/trace-detector.js +136 -5
- package/dist/core/trace/trace-detector.js.map +2 -2
- package/dist/core/trace/trace-store.js.map +2 -2
- package/dist/features/tui/components/analytics-panel.js +136 -0
- package/dist/features/tui/components/analytics-panel.js.map +7 -0
- package/dist/features/tui/components/frame-visualizer.js +377 -0
- package/dist/features/tui/components/frame-visualizer.js.map +7 -0
- package/dist/features/tui/components/pr-tracker.js +123 -0
- package/dist/features/tui/components/pr-tracker.js.map +7 -0
- package/dist/features/tui/components/session-monitor.js +286 -0
- package/dist/features/tui/components/session-monitor.js.map +7 -0
- package/dist/features/tui/components/subagent-fleet.js +388 -0
- package/dist/features/tui/components/subagent-fleet.js.map +7 -0
- package/dist/features/tui/components/task-board.js +475 -0
- package/dist/features/tui/components/task-board.js.map +7 -0
- package/dist/features/tui/index.js +397 -0
- package/dist/features/tui/index.js.map +7 -0
- package/dist/features/tui/services/data-service.js +654 -0
- package/dist/features/tui/services/data-service.js.map +7 -0
- package/dist/features/tui/services/websocket-client.js +149 -0
- package/dist/features/tui/services/websocket-client.js.map +7 -0
- package/dist/features/tui/terminal-compat.js +205 -0
- package/dist/features/tui/terminal-compat.js.map +7 -0
- package/dist/features/tui/types.js +1 -0
- package/dist/features/tui/types.js.map +7 -0
- package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js +455 -0
- package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
- package/dist/integrations/claude-code/lifecycle-hooks.js +250 -0
- package/dist/integrations/claude-code/lifecycle-hooks.js.map +7 -0
- package/dist/integrations/claude-code/post-task-hooks.js +541 -0
- package/dist/integrations/claude-code/post-task-hooks.js.map +7 -0
- package/dist/integrations/linear/client.js +22 -4
- package/dist/integrations/linear/client.js.map +2 -2
- package/dist/integrations/linear/migration.js +299 -0
- package/dist/integrations/linear/migration.js.map +7 -0
- package/dist/integrations/linear/oauth-server.js +396 -0
- package/dist/integrations/linear/oauth-server.js.map +7 -0
- package/dist/integrations/linear/rest-client.js +199 -0
- package/dist/integrations/linear/rest-client.js.map +7 -0
- package/dist/integrations/linear/sync.js +14 -2
- package/dist/integrations/linear/sync.js.map +2 -2
- package/dist/integrations/linear/webhook-handler.js +200 -0
- package/dist/integrations/linear/webhook-handler.js.map +7 -0
- package/dist/integrations/mcp/handlers/skill-handlers.js +514 -0
- package/dist/integrations/mcp/handlers/skill-handlers.js.map +7 -0
- package/dist/integrations/mcp/middleware/tool-scoring.js +352 -0
- package/dist/integrations/mcp/middleware/tool-scoring.js.map +7 -0
- package/dist/integrations/mcp/refactored-server.js +31 -3
- package/dist/integrations/mcp/refactored-server.js.map +2 -2
- package/dist/integrations/mcp/server.js +25 -7
- package/dist/integrations/mcp/server.js.map +2 -2
- package/dist/mcp/stackmemory-mcp-server.js.map +1 -1
- package/dist/models/user.model.js +3 -0
- package/dist/models/user.model.js.map +2 -2
- package/dist/services/context-service.js.map +2 -2
- package/dist/utils/formatting.js +58 -0
- package/dist/utils/formatting.js.map +7 -0
- package/package.json +24 -5
- package/dist/cli/__tests__/index.test.js +0 -290
- package/dist/cli/__tests__/index.test.js.map +0 -7
- package/dist/core/config/__tests__/config-manager.test.js +0 -248
- package/dist/core/config/__tests__/config-manager.test.js.map +0 -7
- package/dist/core/context/__tests__/frame-manager.test.js +0 -879
- package/dist/core/context/__tests__/frame-manager.test.js.map +0 -7
- package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js +0 -379
- package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js.map +0 -7
- package/dist/core/digest/__tests__/frame-digest-integration.test.js +0 -230
- package/dist/core/digest/__tests__/frame-digest-integration.test.js.map +0 -7
- package/dist/core/errors/__tests__/error-handling.test.js +0 -270
- package/dist/core/errors/__tests__/error-handling.test.js.map +0 -7
- package/dist/core/merge/__tests__/conflict-scenarios.test.js +0 -414
- package/dist/core/merge/__tests__/conflict-scenarios.test.js.map +0 -7
- package/dist/core/query/__tests__/query-parser.test.js +0 -301
- package/dist/core/query/__tests__/query-parser.test.js.map +0 -7
- package/dist/core/query/__tests__/query-templates.test.js +0 -210
- package/dist/core/query/__tests__/query-templates.test.js.map +0 -7
- package/dist/core/trace/trace-detector.test.js +0 -401
- package/dist/core/trace/trace-detector.test.js.map +0 -7
- package/dist/features/tasks/__tests__/pebbles-task-store.test.js +0 -747
- package/dist/features/tasks/__tests__/pebbles-task-store.test.js.map +0 -7
- package/dist/integrations/linear/__tests__/auth.test.js +0 -558
- package/dist/integrations/linear/__tests__/auth.test.js.map +0 -7
- package/dist/integrations/linear/__tests__/sync-service.test.js +0 -760
- package/dist/integrations/linear/__tests__/sync-service.test.js.map +0 -7
- package/dist/integrations/mcp/__tests__/server.test.js +0 -798
- package/dist/integrations/mcp/__tests__/server.test.js.map +0 -7
- package/dist/scripts/benchmark-performance.d.ts +0 -7
- package/dist/scripts/benchmark-performance.d.ts.map +0 -1
- package/dist/scripts/benchmark-performance.js +0 -44
- package/dist/scripts/benchmark-performance.js.map +0 -1
- package/dist/scripts/cancel-duplicate-tasks.d.ts +0 -7
- package/dist/scripts/cancel-duplicate-tasks.d.ts.map +0 -1
- package/dist/scripts/cancel-duplicate-tasks.js +0 -172
- package/dist/scripts/cancel-duplicate-tasks.js.map +0 -1
- package/dist/scripts/cleanup-duplicate-tasks.d.ts +0 -12
- package/dist/scripts/cleanup-duplicate-tasks.d.ts.map +0 -1
- package/dist/scripts/cleanup-duplicate-tasks.js +0 -215
- package/dist/scripts/cleanup-duplicate-tasks.js.map +0 -1
- package/dist/scripts/initialize.d.ts +0 -6
- package/dist/scripts/initialize.d.ts.map +0 -1
- package/dist/scripts/initialize.js +0 -93
- package/dist/scripts/initialize.js.map +0 -1
- package/dist/scripts/list-linear-tasks.d.ts +0 -6
- package/dist/scripts/list-linear-tasks.d.ts.map +0 -1
- package/dist/scripts/list-linear-tasks.js +0 -121
- package/dist/scripts/list-linear-tasks.js.map +0 -1
- package/dist/scripts/merge-linear-duplicates-safe.d.ts +0 -7
- package/dist/scripts/merge-linear-duplicates-safe.d.ts.map +0 -1
- package/dist/scripts/merge-linear-duplicates-safe.js +0 -267
- package/dist/scripts/merge-linear-duplicates-safe.js.map +0 -1
- package/dist/scripts/show-linear-summary.d.ts +0 -6
- package/dist/scripts/show-linear-summary.d.ts.map +0 -1
- package/dist/scripts/show-linear-summary.js +0 -120
- package/dist/scripts/show-linear-summary.js.map +0 -1
- package/dist/scripts/status.d.ts +0 -6
- package/dist/scripts/status.d.ts.map +0 -1
- package/dist/scripts/status.js +0 -101
- package/dist/scripts/status.js.map +0 -1
- package/dist/src/agents/core/agent-task-manager.d.ts +0 -154
- package/dist/src/agents/core/agent-task-manager.d.ts.map +0 -1
- package/dist/src/agents/core/agent-task-manager.js +0 -504
- package/dist/src/agents/core/agent-task-manager.js.map +0 -1
- package/dist/src/agents/verifiers/base-verifier.d.ts +0 -112
- package/dist/src/agents/verifiers/base-verifier.d.ts.map +0 -1
- package/dist/src/agents/verifiers/base-verifier.js +0 -130
- package/dist/src/agents/verifiers/base-verifier.js.map +0 -1
- package/dist/src/agents/verifiers/formatter-verifier.d.ts +0 -14
- package/dist/src/agents/verifiers/formatter-verifier.d.ts.map +0 -1
- package/dist/src/agents/verifiers/formatter-verifier.js +0 -107
- package/dist/src/agents/verifiers/formatter-verifier.js.map +0 -1
- package/dist/src/agents/verifiers/llm-judge.d.ts +0 -46
- package/dist/src/agents/verifiers/llm-judge.d.ts.map +0 -1
- package/dist/src/agents/verifiers/llm-judge.js +0 -248
- package/dist/src/agents/verifiers/llm-judge.js.map +0 -1
- package/dist/src/cli/auto-detect.d.ts +0 -61
- package/dist/src/cli/auto-detect.d.ts.map +0 -1
- package/dist/src/cli/auto-detect.js +0 -350
- package/dist/src/cli/auto-detect.js.map +0 -1
- package/dist/src/cli/browser-test.d.ts +0 -6
- package/dist/src/cli/browser-test.d.ts.map +0 -1
- package/dist/src/cli/browser-test.js +0 -32
- package/dist/src/cli/browser-test.js.map +0 -1
- package/dist/src/cli/claude-sm.d.ts +0 -7
- package/dist/src/cli/claude-sm.d.ts.map +0 -1
- package/dist/src/cli/claude-sm.js +0 -412
- package/dist/src/cli/claude-sm.js.map +0 -1
- package/dist/src/cli/commands/agent.d.ts +0 -9
- package/dist/src/cli/commands/agent.d.ts.map +0 -1
- package/dist/src/cli/commands/agent.js +0 -303
- package/dist/src/cli/commands/agent.js.map +0 -1
- package/dist/src/cli/commands/config.d.ts +0 -6
- package/dist/src/cli/commands/config.d.ts.map +0 -1
- package/dist/src/cli/commands/config.js +0 -224
- package/dist/src/cli/commands/config.js.map +0 -1
- package/dist/src/cli/commands/context.d.ts +0 -7
- package/dist/src/cli/commands/context.d.ts.map +0 -1
- package/dist/src/cli/commands/context.js +0 -365
- package/dist/src/cli/commands/context.js.map +0 -1
- package/dist/src/cli/commands/handoff.d.ts +0 -6
- package/dist/src/cli/commands/handoff.d.ts.map +0 -1
- package/dist/src/cli/commands/handoff.js +0 -212
- package/dist/src/cli/commands/handoff.js.map +0 -1
- package/dist/src/cli/commands/linear-test.d.ts +0 -6
- package/dist/src/cli/commands/linear-test.d.ts.map +0 -1
- package/dist/src/cli/commands/linear-test.js +0 -123
- package/dist/src/cli/commands/linear-test.js.map +0 -1
- package/dist/src/cli/commands/linear.d.ts +0 -6
- package/dist/src/cli/commands/linear.d.ts.map +0 -1
- package/dist/src/cli/commands/linear.js +0 -393
- package/dist/src/cli/commands/linear.js.map +0 -1
- package/dist/src/cli/commands/log.d.ts +0 -7
- package/dist/src/cli/commands/log.d.ts.map +0 -1
- package/dist/src/cli/commands/log.js +0 -168
- package/dist/src/cli/commands/log.js.map +0 -1
- package/dist/src/cli/commands/onboard.d.ts +0 -8
- package/dist/src/cli/commands/onboard.d.ts.map +0 -1
- package/dist/src/cli/commands/onboard.js +0 -363
- package/dist/src/cli/commands/onboard.js.map +0 -1
- package/dist/src/cli/commands/projects.d.ts +0 -8
- package/dist/src/cli/commands/projects.d.ts.map +0 -1
- package/dist/src/cli/commands/projects.js +0 -220
- package/dist/src/cli/commands/projects.js.map +0 -1
- package/dist/src/cli/commands/search.d.ts +0 -7
- package/dist/src/cli/commands/search.d.ts.map +0 -1
- package/dist/src/cli/commands/search.js +0 -162
- package/dist/src/cli/commands/search.js.map +0 -1
- package/dist/src/cli/commands/session.d.ts +0 -7
- package/dist/src/cli/commands/session.d.ts.map +0 -1
- package/dist/src/cli/commands/session.js +0 -222
- package/dist/src/cli/commands/session.js.map +0 -1
- package/dist/src/cli/commands/tasks.d.ts +0 -7
- package/dist/src/cli/commands/tasks.d.ts.map +0 -1
- package/dist/src/cli/commands/tasks.js +0 -229
- package/dist/src/cli/commands/tasks.js.map +0 -1
- package/dist/src/cli/commands/webhook.d.ts +0 -3
- package/dist/src/cli/commands/webhook.d.ts.map +0 -1
- package/dist/src/cli/commands/webhook.js +0 -157
- package/dist/src/cli/commands/webhook.js.map +0 -1
- package/dist/src/cli/commands/worktree.d.ts +0 -8
- package/dist/src/cli/commands/worktree.d.ts.map +0 -1
- package/dist/src/cli/commands/worktree.js +0 -339
- package/dist/src/cli/commands/worktree.js.map +0 -1
- package/dist/src/cli/index.d.ts +0 -8
- package/dist/src/cli/index.d.ts.map +0 -1
- package/dist/src/cli/index.js +0 -995
- package/dist/src/cli/index.js.map +0 -1
- package/dist/src/cli/utils/viewer.d.ts +0 -3
- package/dist/src/cli/utils/viewer.d.ts.map +0 -1
- package/dist/src/cli/utils/viewer.js +0 -91
- package/dist/src/cli/utils/viewer.js.map +0 -1
- package/dist/src/core/config/config-manager.d.ts +0 -95
- package/dist/src/core/config/config-manager.d.ts.map +0 -1
- package/dist/src/core/config/config-manager.js +0 -359
- package/dist/src/core/config/config-manager.js.map +0 -1
- package/dist/src/core/config/types.d.ts +0 -72
- package/dist/src/core/config/types.d.ts.map +0 -1
- package/dist/src/core/config/types.js +0 -127
- package/dist/src/core/config/types.js.map +0 -1
- package/dist/src/core/context/auto-context.d.ts +0 -22
- package/dist/src/core/context/auto-context.d.ts.map +0 -1
- package/dist/src/core/context/auto-context.js +0 -77
- package/dist/src/core/context/auto-context.js.map +0 -1
- package/dist/src/core/context/compaction-handler.d.ts +0 -119
- package/dist/src/core/context/compaction-handler.d.ts.map +0 -1
- package/dist/src/core/context/compaction-handler.js +0 -306
- package/dist/src/core/context/compaction-handler.js.map +0 -1
- package/dist/src/core/context/frame-database.d.ts +0 -59
- package/dist/src/core/context/frame-database.d.ts.map +0 -1
- package/dist/src/core/context/frame-database.js +0 -333
- package/dist/src/core/context/frame-database.js.map +0 -1
- package/dist/src/core/context/frame-digest.d.ts +0 -59
- package/dist/src/core/context/frame-digest.d.ts.map +0 -1
- package/dist/src/core/context/frame-digest.js +0 -264
- package/dist/src/core/context/frame-digest.js.map +0 -1
- package/dist/src/core/context/frame-manager.d.ts +0 -112
- package/dist/src/core/context/frame-manager.d.ts.map +0 -1
- package/dist/src/core/context/frame-manager.js +0 -600
- package/dist/src/core/context/frame-manager.js.map +0 -1
- package/dist/src/core/context/frame-stack.d.ts +0 -85
- package/dist/src/core/context/frame-stack.d.ts.map +0 -1
- package/dist/src/core/context/frame-stack.js +0 -287
- package/dist/src/core/context/frame-stack.js.map +0 -1
- package/dist/src/core/context/frame-types.d.ts +0 -67
- package/dist/src/core/context/frame-types.d.ts.map +0 -1
- package/dist/src/core/context/frame-types.js +0 -6
- package/dist/src/core/context/frame-types.js.map +0 -1
- package/dist/src/core/context/index.d.ts +0 -11
- package/dist/src/core/context/index.d.ts.map +0 -1
- package/dist/src/core/context/index.js +0 -14
- package/dist/src/core/context/index.js.map +0 -1
- package/dist/src/core/context/model-aware-compaction.d.ts +0 -101
- package/dist/src/core/context/model-aware-compaction.d.ts.map +0 -1
- package/dist/src/core/context/model-aware-compaction.js +0 -616
- package/dist/src/core/context/model-aware-compaction.js.map +0 -1
- package/dist/src/core/context/refactored-frame-manager.d.ts +0 -99
- package/dist/src/core/context/refactored-frame-manager.d.ts.map +0 -1
- package/dist/src/core/context/refactored-frame-manager.js +0 -340
- package/dist/src/core/context/refactored-frame-manager.js.map +0 -1
- package/dist/src/core/database/batch-operations.d.ts +0 -118
- package/dist/src/core/database/batch-operations.d.ts.map +0 -1
- package/dist/src/core/database/batch-operations.js +0 -339
- package/dist/src/core/database/batch-operations.js.map +0 -1
- package/dist/src/core/database/connection-pool.d.ts +0 -79
- package/dist/src/core/database/connection-pool.d.ts.map +0 -1
- package/dist/src/core/database/connection-pool.js +0 -236
- package/dist/src/core/database/connection-pool.js.map +0 -1
- package/dist/src/core/database/query-cache.d.ts +0 -135
- package/dist/src/core/database/query-cache.d.ts.map +0 -1
- package/dist/src/core/database/query-cache.js +0 -294
- package/dist/src/core/database/query-cache.js.map +0 -1
- package/dist/src/core/digest/enhanced-hybrid-digest.d.ts +0 -125
- package/dist/src/core/digest/enhanced-hybrid-digest.d.ts.map +0 -1
- package/dist/src/core/digest/enhanced-hybrid-digest.js +0 -282
- package/dist/src/core/digest/enhanced-hybrid-digest.js.map +0 -1
- package/dist/src/core/digest/frame-digest-integration.d.ts +0 -67
- package/dist/src/core/digest/frame-digest-integration.d.ts.map +0 -1
- package/dist/src/core/digest/frame-digest-integration.js +0 -198
- package/dist/src/core/digest/frame-digest-integration.js.map +0 -1
- package/dist/src/core/digest/hybrid-digest-generator.d.ts +0 -76
- package/dist/src/core/digest/hybrid-digest-generator.d.ts.map +0 -1
- package/dist/src/core/digest/hybrid-digest-generator.js +0 -629
- package/dist/src/core/digest/hybrid-digest-generator.js.map +0 -1
- package/dist/src/core/digest/index.d.ts +0 -9
- package/dist/src/core/digest/index.d.ts.map +0 -1
- package/dist/src/core/digest/index.js +0 -9
- package/dist/src/core/digest/index.js.map +0 -1
- package/dist/src/core/digest/types.d.ts +0 -154
- package/dist/src/core/digest/types.d.ts.map +0 -1
- package/dist/src/core/digest/types.js +0 -18
- package/dist/src/core/digest/types.js.map +0 -1
- package/dist/src/core/errors/index.d.ts +0 -143
- package/dist/src/core/errors/index.d.ts.map +0 -1
- package/dist/src/core/errors/index.js +0 -282
- package/dist/src/core/errors/index.js.map +0 -1
- package/dist/src/core/errors/recovery.d.ts +0 -86
- package/dist/src/core/errors/recovery.d.ts.map +0 -1
- package/dist/src/core/errors/recovery.js +0 -274
- package/dist/src/core/errors/recovery.js.map +0 -1
- package/dist/src/core/merge/conflict-detector.d.ts +0 -122
- package/dist/src/core/merge/conflict-detector.d.ts.map +0 -1
- package/dist/src/core/merge/conflict-detector.js +0 -468
- package/dist/src/core/merge/conflict-detector.js.map +0 -1
- package/dist/src/core/merge/index.d.ts +0 -9
- package/dist/src/core/merge/index.d.ts.map +0 -1
- package/dist/src/core/merge/index.js +0 -9
- package/dist/src/core/merge/index.js.map +0 -1
- package/dist/src/core/merge/resolution-engine.d.ts +0 -120
- package/dist/src/core/merge/resolution-engine.d.ts.map +0 -1
- package/dist/src/core/merge/resolution-engine.js +0 -573
- package/dist/src/core/merge/resolution-engine.js.map +0 -1
- package/dist/src/core/merge/stack-diff.d.ts +0 -97
- package/dist/src/core/merge/stack-diff.d.ts.map +0 -1
- package/dist/src/core/merge/stack-diff.js +0 -516
- package/dist/src/core/merge/stack-diff.js.map +0 -1
- package/dist/src/core/merge/types.d.ts +0 -110
- package/dist/src/core/merge/types.d.ts.map +0 -1
- package/dist/src/core/merge/types.js +0 -6
- package/dist/src/core/merge/types.js.map +0 -1
- package/dist/src/core/monitoring/error-handler.d.ts +0 -46
- package/dist/src/core/monitoring/error-handler.d.ts.map +0 -1
- package/dist/src/core/monitoring/error-handler.js +0 -212
- package/dist/src/core/monitoring/error-handler.js.map +0 -1
- package/dist/src/core/monitoring/logger.d.ts +0 -24
- package/dist/src/core/monitoring/logger.d.ts.map +0 -1
- package/dist/src/core/monitoring/logger.js +0 -126
- package/dist/src/core/monitoring/logger.js.map +0 -1
- package/dist/src/core/monitoring/metrics.d.ts +0 -10
- package/dist/src/core/monitoring/metrics.d.ts.map +0 -1
- package/dist/src/core/monitoring/metrics.js +0 -152
- package/dist/src/core/monitoring/metrics.js.map +0 -1
- package/dist/src/core/monitoring/progress-tracker.d.ts +0 -95
- package/dist/src/core/monitoring/progress-tracker.d.ts.map +0 -1
- package/dist/src/core/monitoring/progress-tracker.js +0 -178
- package/dist/src/core/monitoring/progress-tracker.js.map +0 -1
- package/dist/src/core/performance/context-cache.d.ts +0 -109
- package/dist/src/core/performance/context-cache.d.ts.map +0 -1
- package/dist/src/core/performance/context-cache.js +0 -280
- package/dist/src/core/performance/context-cache.js.map +0 -1
- package/dist/src/core/performance/index.d.ts +0 -3
- package/dist/src/core/performance/index.d.ts.map +0 -1
- package/dist/src/core/performance/index.js +0 -3
- package/dist/src/core/performance/index.js.map +0 -1
- package/dist/src/core/performance/lazy-context-loader.d.ts +0 -93
- package/dist/src/core/performance/lazy-context-loader.d.ts.map +0 -1
- package/dist/src/core/performance/lazy-context-loader.js +0 -332
- package/dist/src/core/performance/lazy-context-loader.js.map +0 -1
- package/dist/src/core/performance/monitor.d.ts +0 -48
- package/dist/src/core/performance/monitor.d.ts.map +0 -1
- package/dist/src/core/performance/monitor.js +0 -226
- package/dist/src/core/performance/monitor.js.map +0 -1
- package/dist/src/core/performance/optimized-frame-context.d.ts +0 -74
- package/dist/src/core/performance/optimized-frame-context.d.ts.map +0 -1
- package/dist/src/core/performance/optimized-frame-context.js +0 -330
- package/dist/src/core/performance/optimized-frame-context.js.map +0 -1
- package/dist/src/core/performance/performance-benchmark.d.ts +0 -50
- package/dist/src/core/performance/performance-benchmark.d.ts.map +0 -1
- package/dist/src/core/performance/performance-benchmark.js +0 -290
- package/dist/src/core/performance/performance-benchmark.js.map +0 -1
- package/dist/src/core/performance/performance-profiler.d.ts +0 -151
- package/dist/src/core/performance/performance-profiler.d.ts.map +0 -1
- package/dist/src/core/performance/performance-profiler.js +0 -346
- package/dist/src/core/performance/performance-profiler.js.map +0 -1
- package/dist/src/core/performance/streaming-jsonl-parser.d.ts +0 -41
- package/dist/src/core/performance/streaming-jsonl-parser.d.ts.map +0 -1
- package/dist/src/core/performance/streaming-jsonl-parser.js +0 -193
- package/dist/src/core/performance/streaming-jsonl-parser.js.map +0 -1
- package/dist/src/core/persistence/postgres-adapter.d.ts +0 -31
- package/dist/src/core/persistence/postgres-adapter.d.ts.map +0 -1
- package/dist/src/core/persistence/postgres-adapter.js +0 -330
- package/dist/src/core/persistence/postgres-adapter.js.map +0 -1
- package/dist/src/core/projects/project-manager.d.ts +0 -130
- package/dist/src/core/projects/project-manager.d.ts.map +0 -1
- package/dist/src/core/projects/project-manager.js +0 -709
- package/dist/src/core/projects/project-manager.js.map +0 -1
- package/dist/src/core/query/query-parser.d.ts +0 -109
- package/dist/src/core/query/query-parser.d.ts.map +0 -1
- package/dist/src/core/query/query-parser.js +0 -415
- package/dist/src/core/query/query-parser.js.map +0 -1
- package/dist/src/core/query/query-templates.d.ts +0 -44
- package/dist/src/core/query/query-templates.d.ts.map +0 -1
- package/dist/src/core/query/query-templates.js +0 -326
- package/dist/src/core/query/query-templates.js.map +0 -1
- package/dist/src/core/retrieval/index.d.ts +0 -8
- package/dist/src/core/retrieval/index.d.ts.map +0 -1
- package/dist/src/core/retrieval/index.js +0 -8
- package/dist/src/core/retrieval/index.js.map +0 -1
- package/dist/src/core/retrieval/llm-context-retrieval.d.ts +0 -73
- package/dist/src/core/retrieval/llm-context-retrieval.d.ts.map +0 -1
- package/dist/src/core/retrieval/llm-context-retrieval.js +0 -597
- package/dist/src/core/retrieval/llm-context-retrieval.js.map +0 -1
- package/dist/src/core/retrieval/summary-generator.d.ts +0 -63
- package/dist/src/core/retrieval/summary-generator.d.ts.map +0 -1
- package/dist/src/core/retrieval/summary-generator.js +0 -622
- package/dist/src/core/retrieval/summary-generator.js.map +0 -1
- package/dist/src/core/retrieval/types.d.ts +0 -257
- package/dist/src/core/retrieval/types.d.ts.map +0 -1
- package/dist/src/core/retrieval/types.js +0 -18
- package/dist/src/core/retrieval/types.js.map +0 -1
- package/dist/src/core/session/index.d.ts +0 -2
- package/dist/src/core/session/index.d.ts.map +0 -1
- package/dist/src/core/session/index.js +0 -2
- package/dist/src/core/session/index.js.map +0 -1
- package/dist/src/core/session/session-manager.d.ts +0 -69
- package/dist/src/core/session/session-manager.d.ts.map +0 -1
- package/dist/src/core/session/session-manager.js +0 -311
- package/dist/src/core/session/session-manager.js.map +0 -1
- package/dist/src/core/trace/cli-trace-wrapper.d.ts +0 -23
- package/dist/src/core/trace/cli-trace-wrapper.d.ts.map +0 -1
- package/dist/src/core/trace/cli-trace-wrapper.js +0 -141
- package/dist/src/core/trace/cli-trace-wrapper.js.map +0 -1
- package/dist/src/core/trace/db-trace-wrapper.d.ts +0 -36
- package/dist/src/core/trace/db-trace-wrapper.d.ts.map +0 -1
- package/dist/src/core/trace/db-trace-wrapper.js +0 -252
- package/dist/src/core/trace/db-trace-wrapper.js.map +0 -1
- package/dist/src/core/trace/debug-trace.d.ts +0 -84
- package/dist/src/core/trace/debug-trace.d.ts.map +0 -1
- package/dist/src/core/trace/debug-trace.js +0 -402
- package/dist/src/core/trace/debug-trace.js.map +0 -1
- package/dist/src/core/trace/error-test.d.ts +0 -6
- package/dist/src/core/trace/error-test.d.ts.map +0 -1
- package/dist/src/core/trace/error-test.js +0 -128
- package/dist/src/core/trace/error-test.js.map +0 -1
- package/dist/src/core/trace/index.d.ts +0 -25
- package/dist/src/core/trace/index.d.ts.map +0 -1
- package/dist/src/core/trace/index.js +0 -121
- package/dist/src/core/trace/index.js.map +0 -1
- package/dist/src/core/trace/linear-api-wrapper.d.ts +0 -17
- package/dist/src/core/trace/linear-api-wrapper.d.ts.map +0 -1
- package/dist/src/core/trace/linear-api-wrapper.js +0 -205
- package/dist/src/core/trace/linear-api-wrapper.js.map +0 -1
- package/dist/src/core/trace/performance-test.d.ts +0 -6
- package/dist/src/core/trace/performance-test.d.ts.map +0 -1
- package/dist/src/core/trace/performance-test.js +0 -111
- package/dist/src/core/trace/performance-test.js.map +0 -1
- package/dist/src/core/trace/trace-demo.d.ts +0 -8
- package/dist/src/core/trace/trace-demo.d.ts.map +0 -1
- package/dist/src/core/trace/trace-demo.js +0 -154
- package/dist/src/core/trace/trace-demo.js.map +0 -1
- package/dist/src/core/trace/trace-detector.d.ts +0 -108
- package/dist/src/core/trace/trace-detector.d.ts.map +0 -1
- package/dist/src/core/trace/trace-detector.demo.d.ts +0 -5
- package/dist/src/core/trace/trace-detector.demo.d.ts.map +0 -1
- package/dist/src/core/trace/trace-detector.demo.js +0 -145
- package/dist/src/core/trace/trace-detector.demo.js.map +0 -1
- package/dist/src/core/trace/trace-detector.js +0 -425
- package/dist/src/core/trace/trace-detector.js.map +0 -1
- package/dist/src/core/trace/trace-store.d.ts +0 -60
- package/dist/src/core/trace/trace-store.d.ts.map +0 -1
- package/dist/src/core/trace/trace-store.js +0 -323
- package/dist/src/core/trace/trace-store.js.map +0 -1
- package/dist/src/core/trace/types.d.ts +0 -81
- package/dist/src/core/trace/types.d.ts.map +0 -1
- package/dist/src/core/trace/types.js +0 -70
- package/dist/src/core/trace/types.js.map +0 -1
- package/dist/src/core/types.d.ts +0 -35
- package/dist/src/core/types.d.ts.map +0 -1
- package/dist/src/core/types.js +0 -2
- package/dist/src/core/types.js.map +0 -1
- package/dist/src/core/utils/update-checker.d.ts +0 -38
- package/dist/src/core/utils/update-checker.d.ts.map +0 -1
- package/dist/src/core/utils/update-checker.js +0 -213
- package/dist/src/core/utils/update-checker.js.map +0 -1
- package/dist/src/core/worktree/worktree-manager.d.ts +0 -110
- package/dist/src/core/worktree/worktree-manager.d.ts.map +0 -1
- package/dist/src/core/worktree/worktree-manager.js +0 -456
- package/dist/src/core/worktree/worktree-manager.js.map +0 -1
- package/dist/src/features/analytics/api/analytics-api.d.ts +0 -24
- package/dist/src/features/analytics/api/analytics-api.d.ts.map +0 -1
- package/dist/src/features/analytics/api/analytics-api.js +0 -289
- package/dist/src/features/analytics/api/analytics-api.js.map +0 -1
- package/dist/src/features/analytics/core/analytics-service.d.ts +0 -29
- package/dist/src/features/analytics/core/analytics-service.d.ts.map +0 -1
- package/dist/src/features/analytics/core/analytics-service.js +0 -275
- package/dist/src/features/analytics/core/analytics-service.js.map +0 -1
- package/dist/src/features/analytics/index.d.ts +0 -12
- package/dist/src/features/analytics/index.d.ts.map +0 -1
- package/dist/src/features/analytics/index.js +0 -11
- package/dist/src/features/analytics/index.js.map +0 -1
- package/dist/src/features/analytics/queries/metrics-queries.d.ts +0 -11
- package/dist/src/features/analytics/queries/metrics-queries.d.ts.map +0 -1
- package/dist/src/features/analytics/queries/metrics-queries.js +0 -240
- package/dist/src/features/analytics/queries/metrics-queries.js.map +0 -1
- package/dist/src/features/analytics/types/metrics.d.ts +0 -60
- package/dist/src/features/analytics/types/metrics.d.ts.map +0 -1
- package/dist/src/features/analytics/types/metrics.js +0 -2
- package/dist/src/features/analytics/types/metrics.js.map +0 -1
- package/dist/src/features/browser/browser-mcp.d.ts +0 -94
- package/dist/src/features/browser/browser-mcp.d.ts.map +0 -1
- package/dist/src/features/browser/browser-mcp.js +0 -459
- package/dist/src/features/browser/browser-mcp.js.map +0 -1
- package/dist/src/features/tasks/pebbles-task-store.d.ts +0 -128
- package/dist/src/features/tasks/pebbles-task-store.d.ts.map +0 -1
- package/dist/src/features/tasks/pebbles-task-store.js +0 -572
- package/dist/src/features/tasks/pebbles-task-store.js.map +0 -1
- package/dist/src/features/tasks/task-aware-context.d.ts +0 -103
- package/dist/src/features/tasks/task-aware-context.d.ts.map +0 -1
- package/dist/src/features/tasks/task-aware-context.js +0 -412
- package/dist/src/features/tasks/task-aware-context.js.map +0 -1
- package/dist/src/index.d.ts +0 -21
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -9
- package/dist/src/index.js.map +0 -1
- package/dist/src/integrations/linear/auth.d.ts +0 -99
- package/dist/src/integrations/linear/auth.d.ts.map +0 -1
- package/dist/src/integrations/linear/auth.js +0 -319
- package/dist/src/integrations/linear/auth.js.map +0 -1
- package/dist/src/integrations/linear/auto-sync.d.ts +0 -77
- package/dist/src/integrations/linear/auto-sync.d.ts.map +0 -1
- package/dist/src/integrations/linear/auto-sync.js +0 -268
- package/dist/src/integrations/linear/auto-sync.js.map +0 -1
- package/dist/src/integrations/linear/client.d.ts +0 -127
- package/dist/src/integrations/linear/client.d.ts.map +0 -1
- package/dist/src/integrations/linear/client.js +0 -446
- package/dist/src/integrations/linear/client.js.map +0 -1
- package/dist/src/integrations/linear/config.d.ts +0 -51
- package/dist/src/integrations/linear/config.d.ts.map +0 -1
- package/dist/src/integrations/linear/config.js +0 -103
- package/dist/src/integrations/linear/config.js.map +0 -1
- package/dist/src/integrations/linear/sync-manager.d.ts +0 -78
- package/dist/src/integrations/linear/sync-manager.d.ts.map +0 -1
- package/dist/src/integrations/linear/sync-manager.js +0 -235
- package/dist/src/integrations/linear/sync-manager.js.map +0 -1
- package/dist/src/integrations/linear/sync-service.d.ts +0 -46
- package/dist/src/integrations/linear/sync-service.d.ts.map +0 -1
- package/dist/src/integrations/linear/sync-service.js +0 -217
- package/dist/src/integrations/linear/sync-service.js.map +0 -1
- package/dist/src/integrations/linear/sync.d.ts +0 -125
- package/dist/src/integrations/linear/sync.d.ts.map +0 -1
- package/dist/src/integrations/linear/sync.js +0 -563
- package/dist/src/integrations/linear/sync.js.map +0 -1
- package/dist/src/integrations/linear/types.d.ts +0 -90
- package/dist/src/integrations/linear/types.d.ts.map +0 -1
- package/dist/src/integrations/linear/types.js +0 -2
- package/dist/src/integrations/linear/types.js.map +0 -1
- package/dist/src/integrations/linear/webhook-server.d.ts +0 -32
- package/dist/src/integrations/linear/webhook-server.d.ts.map +0 -1
- package/dist/src/integrations/linear/webhook-server.js +0 -190
- package/dist/src/integrations/linear/webhook-server.js.map +0 -1
- package/dist/src/integrations/linear/webhook.d.ts +0 -108
- package/dist/src/integrations/linear/webhook.d.ts.map +0 -1
- package/dist/src/integrations/linear/webhook.js +0 -291
- package/dist/src/integrations/linear/webhook.js.map +0 -1
- package/dist/src/integrations/mcp/handlers/context-handlers.d.ts +0 -39
- package/dist/src/integrations/mcp/handlers/context-handlers.d.ts.map +0 -1
- package/dist/src/integrations/mcp/handlers/context-handlers.js +0 -266
- package/dist/src/integrations/mcp/handlers/context-handlers.js.map +0 -1
- package/dist/src/integrations/mcp/handlers/index.d.ts +0 -37
- package/dist/src/integrations/mcp/handlers/index.d.ts.map +0 -1
- package/dist/src/integrations/mcp/handlers/index.js +0 -134
- package/dist/src/integrations/mcp/handlers/index.js.map +0 -1
- package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts +0 -33
- package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts.map +0 -1
- package/dist/src/integrations/mcp/handlers/linear-handlers.js +0 -251
- package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +0 -1
- package/dist/src/integrations/mcp/handlers/task-handlers.d.ts +0 -42
- package/dist/src/integrations/mcp/handlers/task-handlers.d.ts.map +0 -1
- package/dist/src/integrations/mcp/handlers/task-handlers.js +0 -238
- package/dist/src/integrations/mcp/handlers/task-handlers.js.map +0 -1
- package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts +0 -41
- package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts.map +0 -1
- package/dist/src/integrations/mcp/handlers/trace-handlers.js +0 -298
- package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +0 -1
- package/dist/src/integrations/mcp/index.d.ts +0 -13
- package/dist/src/integrations/mcp/index.d.ts.map +0 -1
- package/dist/src/integrations/mcp/index.js +0 -17
- package/dist/src/integrations/mcp/index.js.map +0 -1
- package/dist/src/integrations/mcp/refactored-server.d.ts +0 -76
- package/dist/src/integrations/mcp/refactored-server.d.ts.map +0 -1
- package/dist/src/integrations/mcp/refactored-server.js +0 -351
- package/dist/src/integrations/mcp/refactored-server.js.map +0 -1
- package/dist/src/integrations/mcp/server.d.ts +0 -54
- package/dist/src/integrations/mcp/server.d.ts.map +0 -1
- package/dist/src/integrations/mcp/server.js +0 -1616
- package/dist/src/integrations/mcp/server.js.map +0 -1
- package/dist/src/integrations/mcp/tool-definitions.d.ts +0 -44
- package/dist/src/integrations/mcp/tool-definitions.d.ts.map +0 -1
- package/dist/src/integrations/mcp/tool-definitions.js +0 -563
- package/dist/src/integrations/mcp/tool-definitions.js.map +0 -1
- package/dist/src/integrations/mcp/trace-test.d.ts +0 -5
- package/dist/src/integrations/mcp/trace-test.d.ts.map +0 -1
- package/dist/src/integrations/mcp/trace-test.js +0 -54
- package/dist/src/integrations/mcp/trace-test.js.map +0 -1
- package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts +0 -48
- package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts.map +0 -1
- package/dist/src/integrations/pg-aiguide/embedding-provider.js +0 -190
- package/dist/src/integrations/pg-aiguide/embedding-provider.js.map +0 -1
- package/dist/src/integrations/pg-aiguide/semantic-search.d.ts +0 -34
- package/dist/src/integrations/pg-aiguide/semantic-search.d.ts.map +0 -1
- package/dist/src/integrations/pg-aiguide/semantic-search.js +0 -176
- package/dist/src/integrations/pg-aiguide/semantic-search.js.map +0 -1
- package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts +0 -44
- package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts.map +0 -1
- package/dist/src/integrations/pg-aiguide/timescale-analytics.js +0 -215
- package/dist/src/integrations/pg-aiguide/timescale-analytics.js.map +0 -1
- package/dist/src/mcp/stackmemory-mcp-server.d.ts +0 -9
- package/dist/src/mcp/stackmemory-mcp-server.d.ts.map +0 -1
- package/dist/src/mcp/stackmemory-mcp-server.js +0 -519
- package/dist/src/mcp/stackmemory-mcp-server.js.map +0 -1
- package/dist/src/middleware/exponential-rate-limiter.d.ts +0 -78
- package/dist/src/middleware/exponential-rate-limiter.d.ts.map +0 -1
- package/dist/src/middleware/exponential-rate-limiter.js +0 -293
- package/dist/src/middleware/exponential-rate-limiter.js.map +0 -1
- package/dist/src/models/user.model.d.ts +0 -62
- package/dist/src/models/user.model.d.ts.map +0 -1
- package/dist/src/models/user.model.js +0 -311
- package/dist/src/models/user.model.js.map +0 -1
- package/dist/src/servers/production/auth-middleware.d.ts +0 -76
- package/dist/src/servers/production/auth-middleware.d.ts.map +0 -1
- package/dist/src/servers/production/auth-middleware.js +0 -558
- package/dist/src/servers/production/auth-middleware.js.map +0 -1
- package/dist/src/servers/railway/index.d.ts +0 -7
- package/dist/src/servers/railway/index.d.ts.map +0 -1
- package/dist/src/servers/railway/index.js +0 -401
- package/dist/src/servers/railway/index.js.map +0 -1
- package/dist/src/services/config-service.d.ts +0 -44
- package/dist/src/services/config-service.d.ts.map +0 -1
- package/dist/src/services/config-service.js +0 -61
- package/dist/src/services/config-service.js.map +0 -1
- package/dist/src/services/context-service.d.ts +0 -17
- package/dist/src/services/context-service.d.ts.map +0 -1
- package/dist/src/services/context-service.js +0 -173
- package/dist/src/services/context-service.js.map +0 -1
- package/dist/src/types/task.d.ts +0 -27
- package/dist/src/types/task.d.ts.map +0 -1
- package/dist/src/types/task.js +0 -2
- package/dist/src/types/task.js.map +0 -1
- package/dist/src/utils/logger.d.ts +0 -13
- package/dist/src/utils/logger.d.ts.map +0 -1
- package/dist/src/utils/logger.js +0 -52
- package/dist/src/utils/logger.js.map +0 -1
- package/dist/src/validation/schemas.d.ts +0 -633
- package/dist/src/validation/schemas.d.ts.map +0 -1
- package/dist/src/validation/schemas.js +0 -347
- package/dist/src/validation/schemas.js.map +0 -1
|
@@ -0,0 +1,514 @@
|
|
|
1
|
+
import { EventEmitter } from "events";
|
|
2
|
+
import { logger } from "../monitoring/logger.js";
|
|
3
|
+
class MigrationManager extends EventEmitter {
|
|
4
|
+
config;
|
|
5
|
+
progress;
|
|
6
|
+
isRunning = false;
|
|
7
|
+
isPaused = false;
|
|
8
|
+
abortController;
|
|
9
|
+
constructor(config) {
|
|
10
|
+
super();
|
|
11
|
+
this.validateConfig(config);
|
|
12
|
+
this.config = this.normalizeConfig(config);
|
|
13
|
+
this.progress = this.initializeProgress();
|
|
14
|
+
}
|
|
15
|
+
validateConfig(config) {
|
|
16
|
+
if (!config.sourceAdapter || !config.targetAdapter) {
|
|
17
|
+
throw new Error("Source and target adapters are required");
|
|
18
|
+
}
|
|
19
|
+
if (config.batchSize && (config.batchSize < 1 || config.batchSize > 1e4)) {
|
|
20
|
+
throw new Error("Batch size must be between 1 and 10000");
|
|
21
|
+
}
|
|
22
|
+
if (config.retryAttempts && (config.retryAttempts < 0 || config.retryAttempts > 10)) {
|
|
23
|
+
throw new Error("Retry attempts must be between 0 and 10");
|
|
24
|
+
}
|
|
25
|
+
if (config.retryDelayMs && (config.retryDelayMs < 0 || config.retryDelayMs > 3e4)) {
|
|
26
|
+
throw new Error("Retry delay must be between 0 and 30000ms");
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
normalizeConfig(config) {
|
|
30
|
+
return {
|
|
31
|
+
...config,
|
|
32
|
+
batchSize: config.batchSize ?? 1e3,
|
|
33
|
+
retryAttempts: config.retryAttempts ?? 3,
|
|
34
|
+
retryDelayMs: config.retryDelayMs ?? 1e3,
|
|
35
|
+
verifyData: config.verifyData ?? true,
|
|
36
|
+
enableDualWrite: config.enableDualWrite ?? true,
|
|
37
|
+
progressCallback: config.progressCallback ?? (() => {
|
|
38
|
+
})
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
initializeProgress() {
|
|
42
|
+
return {
|
|
43
|
+
phase: "initializing",
|
|
44
|
+
totalRecords: 0,
|
|
45
|
+
processedRecords: 0,
|
|
46
|
+
percentage: 0,
|
|
47
|
+
startTime: /* @__PURE__ */ new Date(),
|
|
48
|
+
errors: [],
|
|
49
|
+
warnings: []
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
async planMigration() {
|
|
53
|
+
logger.info("Planning migration strategy");
|
|
54
|
+
const plan = [];
|
|
55
|
+
const tables = ["frames", "events", "anchors"];
|
|
56
|
+
for (const table of tables) {
|
|
57
|
+
try {
|
|
58
|
+
const stats = await this.config.sourceAdapter.getStats();
|
|
59
|
+
const estimatedRows = this.estimateTableRows(table, stats);
|
|
60
|
+
plan.push({
|
|
61
|
+
table,
|
|
62
|
+
priority: this.getTablePriority(table),
|
|
63
|
+
estimatedRows,
|
|
64
|
+
dependencies: this.getTableDependencies(table),
|
|
65
|
+
strategy: "full"
|
|
66
|
+
});
|
|
67
|
+
} catch (error) {
|
|
68
|
+
logger.warn(`Failed to estimate rows for table ${table}:`, error);
|
|
69
|
+
plan.push({
|
|
70
|
+
table,
|
|
71
|
+
priority: this.getTablePriority(table),
|
|
72
|
+
estimatedRows: 0,
|
|
73
|
+
dependencies: this.getTableDependencies(table),
|
|
74
|
+
strategy: "skip"
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
plan.sort((a, b) => a.priority - b.priority);
|
|
79
|
+
const totalRecords = plan.reduce((sum, p) => sum + p.estimatedRows, 0);
|
|
80
|
+
this.progress.totalRecords = totalRecords;
|
|
81
|
+
logger.info(
|
|
82
|
+
`Migration plan: ${plan.length} tables, ~${totalRecords} records`
|
|
83
|
+
);
|
|
84
|
+
return plan;
|
|
85
|
+
}
|
|
86
|
+
estimateTableRows(table, stats) {
|
|
87
|
+
switch (table) {
|
|
88
|
+
case "frames":
|
|
89
|
+
return stats.totalFrames || 0;
|
|
90
|
+
case "events":
|
|
91
|
+
return stats.totalEvents || 0;
|
|
92
|
+
case "anchors":
|
|
93
|
+
return stats.totalAnchors || 0;
|
|
94
|
+
default:
|
|
95
|
+
return 0;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
getTablePriority(table) {
|
|
99
|
+
const priorities = { frames: 1, events: 2, anchors: 3 };
|
|
100
|
+
return priorities[table] || 99;
|
|
101
|
+
}
|
|
102
|
+
getTableDependencies(table) {
|
|
103
|
+
const dependencies = {
|
|
104
|
+
frames: [],
|
|
105
|
+
events: ["frames"],
|
|
106
|
+
anchors: ["frames"]
|
|
107
|
+
};
|
|
108
|
+
return dependencies[table] || [];
|
|
109
|
+
}
|
|
110
|
+
async migrate(strategy = {
|
|
111
|
+
type: "online",
|
|
112
|
+
allowWrites: true,
|
|
113
|
+
verifyIntegrity: true,
|
|
114
|
+
fallbackOnError: true
|
|
115
|
+
}) {
|
|
116
|
+
if (this.isRunning) {
|
|
117
|
+
throw new Error("Migration already in progress");
|
|
118
|
+
}
|
|
119
|
+
this.isRunning = true;
|
|
120
|
+
this.abortController = new AbortController();
|
|
121
|
+
try {
|
|
122
|
+
logger.info("Starting database migration", strategy);
|
|
123
|
+
this.updateProgress({ phase: "initializing" });
|
|
124
|
+
await this.validateAdapters();
|
|
125
|
+
const plan = await this.planMigration();
|
|
126
|
+
await this.initializeTargetSchema();
|
|
127
|
+
if (strategy.type === "dual-write" && this.config.enableDualWrite) {
|
|
128
|
+
await this.enableDualWrite();
|
|
129
|
+
}
|
|
130
|
+
this.updateProgress({ phase: "migrating" });
|
|
131
|
+
await this.executeMigrationPlan(plan, strategy);
|
|
132
|
+
if (strategy.verifyIntegrity) {
|
|
133
|
+
this.updateProgress({ phase: "verifying" });
|
|
134
|
+
await this.verifyDataIntegrity(plan);
|
|
135
|
+
}
|
|
136
|
+
this.updateProgress({ phase: "completing" });
|
|
137
|
+
await this.completeMigration(strategy);
|
|
138
|
+
this.updateProgress({ phase: "completed", percentage: 100 });
|
|
139
|
+
logger.info("Migration completed successfully");
|
|
140
|
+
this.emit("completed", this.progress);
|
|
141
|
+
} catch (error) {
|
|
142
|
+
this.updateProgress({ phase: "failed" });
|
|
143
|
+
const sanitizedError = this.sanitizeError(error);
|
|
144
|
+
logger.error("Migration failed:", sanitizedError);
|
|
145
|
+
if (strategy.fallbackOnError) {
|
|
146
|
+
try {
|
|
147
|
+
await this.rollbackMigration();
|
|
148
|
+
} catch (rollbackError) {
|
|
149
|
+
logger.error("Rollback failed:", this.sanitizeError(rollbackError));
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
const userError = new Error("Migration failed. Check logs for details.");
|
|
153
|
+
this.emit("failed", userError);
|
|
154
|
+
throw userError;
|
|
155
|
+
} finally {
|
|
156
|
+
this.isRunning = false;
|
|
157
|
+
this.abortController = void 0;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
async validateAdapters() {
|
|
161
|
+
logger.debug("Validating database adapters");
|
|
162
|
+
if (!this.config.sourceAdapter.isConnected()) {
|
|
163
|
+
await this.config.sourceAdapter.connect();
|
|
164
|
+
}
|
|
165
|
+
if (!await this.config.sourceAdapter.ping()) {
|
|
166
|
+
throw new Error("Source adapter is not responding");
|
|
167
|
+
}
|
|
168
|
+
if (!this.config.targetAdapter.isConnected()) {
|
|
169
|
+
await this.config.targetAdapter.connect();
|
|
170
|
+
}
|
|
171
|
+
if (!await this.config.targetAdapter.ping()) {
|
|
172
|
+
throw new Error("Target adapter is not responding");
|
|
173
|
+
}
|
|
174
|
+
const sourceVersion = await this.config.sourceAdapter.getSchemaVersion();
|
|
175
|
+
const targetVersion = await this.config.targetAdapter.getSchemaVersion();
|
|
176
|
+
if (sourceVersion !== targetVersion) {
|
|
177
|
+
logger.warn(
|
|
178
|
+
`Schema version mismatch: source=${sourceVersion}, target=${targetVersion}`
|
|
179
|
+
);
|
|
180
|
+
this.addWarning("Schema version mismatch detected");
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
async initializeTargetSchema() {
|
|
184
|
+
logger.debug("Initializing target schema");
|
|
185
|
+
try {
|
|
186
|
+
await this.config.targetAdapter.initializeSchema();
|
|
187
|
+
} catch (error) {
|
|
188
|
+
logger.error("Failed to initialize target schema:", error);
|
|
189
|
+
throw new Error(`Target schema initialization failed: ${error}`);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
async enableDualWrite() {
|
|
193
|
+
logger.info("Enabling dual-write mode");
|
|
194
|
+
this.addWarning(
|
|
195
|
+
"Dual-write mode enabled - ensure application routes writes to both adapters"
|
|
196
|
+
);
|
|
197
|
+
}
|
|
198
|
+
async executeMigrationPlan(plan, strategy) {
|
|
199
|
+
for (const tablePlan of plan) {
|
|
200
|
+
if (this.abortController?.signal.aborted) {
|
|
201
|
+
throw new Error("Migration aborted by user");
|
|
202
|
+
}
|
|
203
|
+
if (tablePlan.strategy === "skip") {
|
|
204
|
+
logger.info(`Skipping table: ${tablePlan.table}`);
|
|
205
|
+
continue;
|
|
206
|
+
}
|
|
207
|
+
this.updateProgress({ currentTable: tablePlan.table });
|
|
208
|
+
await this.migrateTable(tablePlan, strategy);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
async migrateTable(plan, strategy) {
|
|
212
|
+
logger.info(`Migrating table: ${plan.table} (~${plan.estimatedRows} rows)`);
|
|
213
|
+
let offset = 0;
|
|
214
|
+
let migratedRows = 0;
|
|
215
|
+
while (true) {
|
|
216
|
+
if (this.abortController?.signal.aborted || this.isPaused) {
|
|
217
|
+
break;
|
|
218
|
+
}
|
|
219
|
+
try {
|
|
220
|
+
const batch = await this.getBatch(
|
|
221
|
+
plan.table,
|
|
222
|
+
offset,
|
|
223
|
+
this.config.batchSize
|
|
224
|
+
);
|
|
225
|
+
if (batch.length === 0) {
|
|
226
|
+
break;
|
|
227
|
+
}
|
|
228
|
+
await this.migrateBatch(plan.table, batch);
|
|
229
|
+
migratedRows += batch.length;
|
|
230
|
+
offset += this.config.batchSize;
|
|
231
|
+
this.progress.processedRecords += batch.length;
|
|
232
|
+
this.updateProgressPercentage();
|
|
233
|
+
await this.sleep(this.calculateAdaptiveDelay());
|
|
234
|
+
} catch (error) {
|
|
235
|
+
this.addError(plan.table, `Batch migration failed: ${error}`);
|
|
236
|
+
if (this.config.retryAttempts > 0) {
|
|
237
|
+
await this.retryBatch(plan.table, offset, this.config.batchSize);
|
|
238
|
+
} else {
|
|
239
|
+
throw error;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
logger.info(
|
|
244
|
+
`Completed migrating table ${plan.table}: ${migratedRows} rows`
|
|
245
|
+
);
|
|
246
|
+
}
|
|
247
|
+
async getBatch(table, offset, limit) {
|
|
248
|
+
const allowedTables = ["frames", "events", "anchors"];
|
|
249
|
+
if (!allowedTables.includes(table)) {
|
|
250
|
+
throw new Error(`Invalid table name: ${table}`);
|
|
251
|
+
}
|
|
252
|
+
const safeLimit = Math.max(1, Math.min(limit, 1e4));
|
|
253
|
+
const safeOffset = Math.max(0, offset);
|
|
254
|
+
const options = {
|
|
255
|
+
limit: safeLimit,
|
|
256
|
+
offset: safeOffset,
|
|
257
|
+
orderBy: "created_at",
|
|
258
|
+
orderDirection: "ASC"
|
|
259
|
+
};
|
|
260
|
+
switch (table) {
|
|
261
|
+
case "frames":
|
|
262
|
+
return [];
|
|
263
|
+
// Placeholder
|
|
264
|
+
case "events":
|
|
265
|
+
return [];
|
|
266
|
+
// Placeholder
|
|
267
|
+
case "anchors":
|
|
268
|
+
return [];
|
|
269
|
+
// Placeholder
|
|
270
|
+
default:
|
|
271
|
+
throw new Error(`Unsupported table: ${table}`);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
async migrateBatch(table, batch) {
|
|
275
|
+
const allowedTables = ["frames", "events", "anchors"];
|
|
276
|
+
if (!allowedTables.includes(table)) {
|
|
277
|
+
throw new Error(`Invalid table name: ${table}`);
|
|
278
|
+
}
|
|
279
|
+
await this.config.targetAdapter.inTransaction(async (adapter) => {
|
|
280
|
+
const operations = batch.map((row) => ({
|
|
281
|
+
type: "insert",
|
|
282
|
+
table,
|
|
283
|
+
data: this.validateRowData(table, row)
|
|
284
|
+
}));
|
|
285
|
+
await adapter.executeBulk(operations);
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
validateRowData(table, row) {
|
|
289
|
+
if (!row || typeof row !== "object") {
|
|
290
|
+
throw new Error(`Invalid row data for table ${table}`);
|
|
291
|
+
}
|
|
292
|
+
switch (table) {
|
|
293
|
+
case "frames":
|
|
294
|
+
return this.validateFrameRow(row);
|
|
295
|
+
case "events":
|
|
296
|
+
return this.validateEventRow(row);
|
|
297
|
+
case "anchors":
|
|
298
|
+
return this.validateAnchorRow(row);
|
|
299
|
+
default:
|
|
300
|
+
throw new Error(`Unknown table: ${table}`);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
validateFrameRow(row) {
|
|
304
|
+
const required = [
|
|
305
|
+
"frame_id",
|
|
306
|
+
"project_id",
|
|
307
|
+
"run_id",
|
|
308
|
+
"type",
|
|
309
|
+
"name",
|
|
310
|
+
"state",
|
|
311
|
+
"depth"
|
|
312
|
+
];
|
|
313
|
+
for (const field of required) {
|
|
314
|
+
if (!(field in row)) {
|
|
315
|
+
throw new Error(`Missing required field ${field} in frame row`);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
return row;
|
|
319
|
+
}
|
|
320
|
+
validateEventRow(row) {
|
|
321
|
+
const required = ["event_id", "frame_id", "seq", "type", "text"];
|
|
322
|
+
for (const field of required) {
|
|
323
|
+
if (!(field in row)) {
|
|
324
|
+
throw new Error(`Missing required field ${field} in event row`);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
return row;
|
|
328
|
+
}
|
|
329
|
+
validateAnchorRow(row) {
|
|
330
|
+
const required = ["anchor_id", "frame_id", "type", "text", "priority"];
|
|
331
|
+
for (const field of required) {
|
|
332
|
+
if (!(field in row)) {
|
|
333
|
+
throw new Error(`Missing required field ${field} in anchor row`);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
return row;
|
|
337
|
+
}
|
|
338
|
+
async retryBatch(table, offset, batchSize) {
|
|
339
|
+
for (let attempt = 1; attempt <= this.config.retryAttempts; attempt++) {
|
|
340
|
+
try {
|
|
341
|
+
await this.sleep(this.config.retryDelayMs * attempt);
|
|
342
|
+
const batch = await this.getBatch(table, offset, batchSize);
|
|
343
|
+
await this.migrateBatch(table, batch);
|
|
344
|
+
logger.info(`Retry successful for table ${table} at offset ${offset}`);
|
|
345
|
+
return;
|
|
346
|
+
} catch (error) {
|
|
347
|
+
logger.warn(
|
|
348
|
+
`Retry ${attempt}/${this.config.retryAttempts} failed:`,
|
|
349
|
+
error
|
|
350
|
+
);
|
|
351
|
+
if (attempt === this.config.retryAttempts) {
|
|
352
|
+
throw new Error(
|
|
353
|
+
`Failed after ${this.config.retryAttempts} retries: ${error}`
|
|
354
|
+
);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
async verifyDataIntegrity(plan) {
|
|
360
|
+
logger.info("Verifying data integrity");
|
|
361
|
+
for (const tablePlan of plan) {
|
|
362
|
+
if (tablePlan.strategy === "skip") continue;
|
|
363
|
+
try {
|
|
364
|
+
const sourceStats = await this.config.sourceAdapter.getStats();
|
|
365
|
+
const targetStats = await this.config.targetAdapter.getStats();
|
|
366
|
+
const sourceCount = this.estimateTableRows(
|
|
367
|
+
tablePlan.table,
|
|
368
|
+
sourceStats
|
|
369
|
+
);
|
|
370
|
+
const targetCount = this.estimateTableRows(
|
|
371
|
+
tablePlan.table,
|
|
372
|
+
targetStats
|
|
373
|
+
);
|
|
374
|
+
if (sourceCount !== targetCount) {
|
|
375
|
+
this.addError(
|
|
376
|
+
tablePlan.table,
|
|
377
|
+
`Row count mismatch: source=${sourceCount}, target=${targetCount}`
|
|
378
|
+
);
|
|
379
|
+
} else {
|
|
380
|
+
logger.debug(
|
|
381
|
+
`Table ${tablePlan.table} verified: ${sourceCount} rows`
|
|
382
|
+
);
|
|
383
|
+
}
|
|
384
|
+
} catch (error) {
|
|
385
|
+
this.addError(tablePlan.table, `Verification failed: ${error}`);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
if (this.progress.errors.length > 0) {
|
|
389
|
+
throw new Error(
|
|
390
|
+
`Data integrity verification failed with ${this.progress.errors.length} errors`
|
|
391
|
+
);
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
async completeMigration(strategy) {
|
|
395
|
+
logger.info("Completing migration");
|
|
396
|
+
const sourceVersion = await this.config.sourceAdapter.getSchemaVersion();
|
|
397
|
+
await this.config.targetAdapter.migrateSchema(sourceVersion);
|
|
398
|
+
await this.config.targetAdapter.analyze();
|
|
399
|
+
logger.info("Migration completion tasks finished");
|
|
400
|
+
}
|
|
401
|
+
async rollbackMigration() {
|
|
402
|
+
logger.warn("Rolling back migration");
|
|
403
|
+
try {
|
|
404
|
+
logger.warn(
|
|
405
|
+
"Rollback would clean target database - implement based on strategy"
|
|
406
|
+
);
|
|
407
|
+
} catch (error) {
|
|
408
|
+
logger.error("Rollback failed:", error);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
updateProgress(updates) {
|
|
412
|
+
Object.assign(this.progress, updates);
|
|
413
|
+
this.updateProgressPercentage();
|
|
414
|
+
if (this.progress.totalRecords > 0) {
|
|
415
|
+
const elapsed = Date.now() - this.progress.startTime.getTime();
|
|
416
|
+
const rate = this.progress.processedRecords / (elapsed / 1e3);
|
|
417
|
+
const remaining = this.progress.totalRecords - this.progress.processedRecords;
|
|
418
|
+
if (rate > 0) {
|
|
419
|
+
this.progress.estimatedEndTime = new Date(
|
|
420
|
+
Date.now() + remaining / rate * 1e3
|
|
421
|
+
);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
this.config.progressCallback(this.progress);
|
|
425
|
+
this.emit("progress", this.progress);
|
|
426
|
+
}
|
|
427
|
+
updateProgressPercentage() {
|
|
428
|
+
if (this.progress.totalRecords > 0) {
|
|
429
|
+
this.progress.percentage = Math.min(
|
|
430
|
+
100,
|
|
431
|
+
this.progress.processedRecords / this.progress.totalRecords * 100
|
|
432
|
+
);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
addError(table, error) {
|
|
436
|
+
this.progress.errors.push({
|
|
437
|
+
table,
|
|
438
|
+
error,
|
|
439
|
+
timestamp: /* @__PURE__ */ new Date()
|
|
440
|
+
});
|
|
441
|
+
logger.error(`Migration error for table ${table}: ${error}`);
|
|
442
|
+
}
|
|
443
|
+
addWarning(warning, table) {
|
|
444
|
+
this.progress.warnings.push({
|
|
445
|
+
table: table || "general",
|
|
446
|
+
warning,
|
|
447
|
+
timestamp: /* @__PURE__ */ new Date()
|
|
448
|
+
});
|
|
449
|
+
logger.warn(`Migration warning: ${warning}`);
|
|
450
|
+
}
|
|
451
|
+
sanitizeError(error) {
|
|
452
|
+
if (error instanceof Error) {
|
|
453
|
+
return {
|
|
454
|
+
name: error.name,
|
|
455
|
+
message: error.message
|
|
456
|
+
// Exclude stack traces and sensitive data for security
|
|
457
|
+
};
|
|
458
|
+
}
|
|
459
|
+
return { message: "Unknown error occurred" };
|
|
460
|
+
}
|
|
461
|
+
calculateAdaptiveDelay() {
|
|
462
|
+
const memoryUsage = process.memoryUsage().heapUsed / 1024 / 1024;
|
|
463
|
+
if (memoryUsage > 400) return 100;
|
|
464
|
+
if (memoryUsage > 300) return 50;
|
|
465
|
+
return 10;
|
|
466
|
+
}
|
|
467
|
+
sleep(ms) {
|
|
468
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
469
|
+
}
|
|
470
|
+
pause() {
|
|
471
|
+
if (!this.isRunning) {
|
|
472
|
+
throw new Error("No migration in progress");
|
|
473
|
+
}
|
|
474
|
+
this.isPaused = true;
|
|
475
|
+
logger.info("Migration paused");
|
|
476
|
+
this.emit("paused");
|
|
477
|
+
}
|
|
478
|
+
resume() {
|
|
479
|
+
if (!this.isRunning) {
|
|
480
|
+
throw new Error("No migration in progress");
|
|
481
|
+
}
|
|
482
|
+
this.isPaused = false;
|
|
483
|
+
logger.info("Migration resumed");
|
|
484
|
+
this.emit("resumed");
|
|
485
|
+
}
|
|
486
|
+
abort() {
|
|
487
|
+
if (!this.isRunning) {
|
|
488
|
+
throw new Error("No migration in progress");
|
|
489
|
+
}
|
|
490
|
+
this.abortController?.abort();
|
|
491
|
+
logger.info("Migration aborted");
|
|
492
|
+
this.emit("aborted");
|
|
493
|
+
}
|
|
494
|
+
getProgress() {
|
|
495
|
+
return { ...this.progress };
|
|
496
|
+
}
|
|
497
|
+
isActive() {
|
|
498
|
+
return this.isRunning;
|
|
499
|
+
}
|
|
500
|
+
async estimateDuration() {
|
|
501
|
+
const plan = await this.planMigration();
|
|
502
|
+
const totalRecords = plan.reduce((sum, p) => sum + p.estimatedRows, 0);
|
|
503
|
+
const estimatedSeconds = totalRecords / 1e3;
|
|
504
|
+
const estimatedMinutes = Math.ceil(estimatedSeconds / 60);
|
|
505
|
+
let confidence = "medium";
|
|
506
|
+
if (totalRecords < 1e4) confidence = "high";
|
|
507
|
+
if (totalRecords > 1e5) confidence = "low";
|
|
508
|
+
return { estimatedMinutes, confidence };
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
export {
|
|
512
|
+
MigrationManager
|
|
513
|
+
};
|
|
514
|
+
//# sourceMappingURL=migration-manager.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/core/database/migration-manager.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Migration Manager for Dual-Write Strategy\n * Enables seamless migration between SQLite and ParadeDB with zero downtime\n */\n\nimport { EventEmitter } from 'events';\nimport { DatabaseAdapter } from './database-adapter.js';\nimport { logger } from '../monitoring/logger.js';\n\nexport interface MigrationConfig {\n sourceAdapter: DatabaseAdapter;\n targetAdapter: DatabaseAdapter;\n batchSize?: number;\n retryAttempts?: number;\n retryDelayMs?: number;\n verifyData?: boolean;\n enableDualWrite?: boolean;\n progressCallback?: (progress: MigrationProgress) => void;\n}\n\nexport interface MigrationProgress {\n phase:\n | 'initializing'\n | 'migrating'\n | 'verifying'\n | 'completing'\n | 'completed'\n | 'failed';\n totalRecords: number;\n processedRecords: number;\n percentage: number;\n startTime: Date;\n estimatedEndTime?: Date;\n currentTable?: string;\n errors: Array<{ table: string; error: string; timestamp: Date }>;\n warnings: Array<{ table: string; warning: string; timestamp: Date }>;\n}\n\nexport interface MigrationStrategy {\n type: 'online' | 'offline' | 'dual-write';\n allowWrites: boolean;\n verifyIntegrity: boolean;\n fallbackOnError: boolean;\n}\n\nexport interface TableMigrationPlan {\n table: string;\n priority: number;\n estimatedRows: number;\n dependencies: string[];\n strategy: 'full' | 'incremental' | 'skip';\n}\n\nexport class MigrationManager extends EventEmitter {\n private config: Required<MigrationConfig>;\n private progress: MigrationProgress;\n private isRunning = false;\n private isPaused = false;\n private abortController?: AbortController;\n\n constructor(config: MigrationConfig) {\n super();\n\n this.validateConfig(config);\n this.config = this.normalizeConfig(config);\n this.progress = this.initializeProgress();\n }\n\n private validateConfig(config: MigrationConfig): void {\n if (!config.sourceAdapter || !config.targetAdapter) {\n throw new Error('Source and target adapters are required');\n }\n\n if (\n config.batchSize &&\n (config.batchSize < 1 || config.batchSize > 10000)\n ) {\n throw new Error('Batch size must be between 1 and 10000');\n }\n\n if (\n config.retryAttempts &&\n (config.retryAttempts < 0 || config.retryAttempts > 10)\n ) {\n throw new Error('Retry attempts must be between 0 and 10');\n }\n\n if (\n config.retryDelayMs &&\n (config.retryDelayMs < 0 || config.retryDelayMs > 30000)\n ) {\n throw new Error('Retry delay must be between 0 and 30000ms');\n }\n }\n\n private normalizeConfig(config: MigrationConfig): Required<MigrationConfig> {\n return {\n ...config,\n batchSize: config.batchSize ?? 1000,\n retryAttempts: config.retryAttempts ?? 3,\n retryDelayMs: config.retryDelayMs ?? 1000,\n verifyData: config.verifyData ?? true,\n enableDualWrite: config.enableDualWrite ?? true,\n progressCallback: config.progressCallback ?? (() => {}),\n };\n }\n\n private initializeProgress(): MigrationProgress {\n return {\n phase: 'initializing',\n totalRecords: 0,\n processedRecords: 0,\n percentage: 0,\n startTime: new Date(),\n errors: [],\n warnings: [],\n };\n }\n\n async planMigration(): Promise<TableMigrationPlan[]> {\n logger.info('Planning migration strategy');\n\n const plan: TableMigrationPlan[] = [];\n const tables = ['frames', 'events', 'anchors'];\n\n for (const table of tables) {\n try {\n const stats = await this.config.sourceAdapter.getStats();\n const estimatedRows = this.estimateTableRows(table, stats);\n\n plan.push({\n table,\n priority: this.getTablePriority(table),\n estimatedRows,\n dependencies: this.getTableDependencies(table),\n strategy: 'full',\n });\n } catch (error) {\n logger.warn(`Failed to estimate rows for table ${table}:`, error);\n plan.push({\n table,\n priority: this.getTablePriority(table),\n estimatedRows: 0,\n dependencies: this.getTableDependencies(table),\n strategy: 'skip',\n });\n }\n }\n\n // Sort by priority (dependencies first)\n plan.sort((a, b) => a.priority - b.priority);\n\n const totalRecords = plan.reduce((sum, p) => sum + p.estimatedRows, 0);\n this.progress.totalRecords = totalRecords;\n\n logger.info(\n `Migration plan: ${plan.length} tables, ~${totalRecords} records`\n );\n return plan;\n }\n\n private estimateTableRows(table: string, stats: any): number {\n switch (table) {\n case 'frames':\n return stats.totalFrames || 0;\n case 'events':\n return stats.totalEvents || 0;\n case 'anchors':\n return stats.totalAnchors || 0;\n default:\n return 0;\n }\n }\n\n private getTablePriority(table: string): number {\n const priorities = { frames: 1, events: 2, anchors: 3 };\n return priorities[table as keyof typeof priorities] || 99;\n }\n\n private getTableDependencies(table: string): string[] {\n const dependencies = {\n frames: [],\n events: ['frames'],\n anchors: ['frames'],\n };\n return dependencies[table as keyof typeof dependencies] || [];\n }\n\n async migrate(\n strategy: MigrationStrategy = {\n type: 'online',\n allowWrites: true,\n verifyIntegrity: true,\n fallbackOnError: true,\n }\n ): Promise<void> {\n if (this.isRunning) {\n throw new Error('Migration already in progress');\n }\n\n this.isRunning = true;\n this.abortController = new AbortController();\n\n try {\n logger.info('Starting database migration', strategy);\n this.updateProgress({ phase: 'initializing' });\n\n // Validate adapters\n await this.validateAdapters();\n\n // Create migration plan\n const plan = await this.planMigration();\n\n // Initialize target schema\n await this.initializeTargetSchema();\n\n // Enable dual-write if requested\n if (strategy.type === 'dual-write' && this.config.enableDualWrite) {\n await this.enableDualWrite();\n }\n\n // Execute migration\n this.updateProgress({ phase: 'migrating' });\n await this.executeMigrationPlan(plan, strategy);\n\n // Verify data integrity\n if (strategy.verifyIntegrity) {\n this.updateProgress({ phase: 'verifying' });\n await this.verifyDataIntegrity(plan);\n }\n\n // Complete migration\n this.updateProgress({ phase: 'completing' });\n await this.completeMigration(strategy);\n\n this.updateProgress({ phase: 'completed', percentage: 100 });\n logger.info('Migration completed successfully');\n this.emit('completed', this.progress);\n } catch (error) {\n this.updateProgress({ phase: 'failed' });\n\n // Sanitize error for logging\n const sanitizedError = this.sanitizeError(error);\n logger.error('Migration failed:', sanitizedError);\n\n if (strategy.fallbackOnError) {\n try {\n await this.rollbackMigration();\n } catch (rollbackError) {\n logger.error('Rollback failed:', this.sanitizeError(rollbackError));\n }\n }\n\n // Create user-safe error message\n const userError = new Error('Migration failed. Check logs for details.');\n this.emit('failed', userError);\n throw userError;\n } finally {\n this.isRunning = false;\n this.abortController = undefined;\n }\n }\n\n private async validateAdapters(): Promise<void> {\n logger.debug('Validating database adapters');\n\n // Check source adapter\n if (!this.config.sourceAdapter.isConnected()) {\n await this.config.sourceAdapter.connect();\n }\n\n if (!(await this.config.sourceAdapter.ping())) {\n throw new Error('Source adapter is not responding');\n }\n\n // Check target adapter\n if (!this.config.targetAdapter.isConnected()) {\n await this.config.targetAdapter.connect();\n }\n\n if (!(await this.config.targetAdapter.ping())) {\n throw new Error('Target adapter is not responding');\n }\n\n // Verify schema compatibility\n const sourceVersion = await this.config.sourceAdapter.getSchemaVersion();\n const targetVersion = await this.config.targetAdapter.getSchemaVersion();\n\n if (sourceVersion !== targetVersion) {\n logger.warn(\n `Schema version mismatch: source=${sourceVersion}, target=${targetVersion}`\n );\n this.addWarning('Schema version mismatch detected');\n }\n }\n\n private async initializeTargetSchema(): Promise<void> {\n logger.debug('Initializing target schema');\n\n try {\n await this.config.targetAdapter.initializeSchema();\n } catch (error) {\n logger.error('Failed to initialize target schema:', error);\n throw new Error(`Target schema initialization failed: ${error}`);\n }\n }\n\n private async enableDualWrite(): Promise<void> {\n logger.info('Enabling dual-write mode');\n // This would typically involve configuring the application to write to both databases\n // For now, we'll just log the intention\n this.addWarning(\n 'Dual-write mode enabled - ensure application routes writes to both adapters'\n );\n }\n\n private async executeMigrationPlan(\n plan: TableMigrationPlan[],\n strategy: MigrationStrategy\n ): Promise<void> {\n for (const tablePlan of plan) {\n if (this.abortController?.signal.aborted) {\n throw new Error('Migration aborted by user');\n }\n\n if (tablePlan.strategy === 'skip') {\n logger.info(`Skipping table: ${tablePlan.table}`);\n continue;\n }\n\n this.updateProgress({ currentTable: tablePlan.table });\n await this.migrateTable(tablePlan, strategy);\n }\n }\n\n private async migrateTable(\n plan: TableMigrationPlan,\n strategy: MigrationStrategy\n ): Promise<void> {\n logger.info(`Migrating table: ${plan.table} (~${plan.estimatedRows} rows)`);\n\n let offset = 0;\n let migratedRows = 0;\n\n while (true) {\n if (this.abortController?.signal.aborted || this.isPaused) {\n break;\n }\n\n try {\n // Get batch of data from source\n const batch = await this.getBatch(\n plan.table,\n offset,\n this.config.batchSize\n );\n\n if (batch.length === 0) {\n break; // No more data\n }\n\n // Migrate batch to target\n await this.migrateBatch(plan.table, batch);\n\n migratedRows += batch.length;\n offset += this.config.batchSize;\n\n this.progress.processedRecords += batch.length;\n this.updateProgressPercentage();\n\n // Adaptive delay based on system resources\n await this.sleep(this.calculateAdaptiveDelay());\n } catch (error) {\n this.addError(plan.table, `Batch migration failed: ${error}`);\n\n if (this.config.retryAttempts > 0) {\n await this.retryBatch(plan.table, offset, this.config.batchSize);\n } else {\n throw error;\n }\n }\n }\n\n logger.info(\n `Completed migrating table ${plan.table}: ${migratedRows} rows`\n );\n }\n\n private async getBatch(\n table: string,\n offset: number,\n limit: number\n ): Promise<any[]> {\n // Validate table name against whitelist\n const allowedTables = ['frames', 'events', 'anchors'] as const;\n if (!allowedTables.includes(table as any)) {\n throw new Error(`Invalid table name: ${table}`);\n }\n\n // Validate and bound parameters\n const safeLimit = Math.max(1, Math.min(limit, 10000));\n const safeOffset = Math.max(0, offset);\n\n const options = {\n limit: safeLimit,\n offset: safeOffset,\n orderBy: 'created_at',\n orderDirection: 'ASC' as const,\n };\n\n switch (table) {\n case 'frames':\n // This would need to be implemented in the adapter\n return []; // Placeholder\n case 'events':\n return []; // Placeholder\n case 'anchors':\n return []; // Placeholder\n default:\n throw new Error(`Unsupported table: ${table}`);\n }\n }\n\n private async migrateBatch(table: string, batch: any[]): Promise<void> {\n // Validate table name\n const allowedTables = ['frames', 'events', 'anchors'] as const;\n if (!allowedTables.includes(table as any)) {\n throw new Error(`Invalid table name: ${table}`);\n }\n\n // Use transaction for batch safety\n await this.config.targetAdapter.inTransaction(async (adapter) => {\n const operations = batch.map((row) => ({\n type: 'insert' as const,\n table,\n data: this.validateRowData(table, row),\n }));\n\n await adapter.executeBulk(operations);\n });\n }\n\n private validateRowData(table: string, row: any): any {\n if (!row || typeof row !== 'object') {\n throw new Error(`Invalid row data for table ${table}`);\n }\n\n switch (table) {\n case 'frames':\n return this.validateFrameRow(row);\n case 'events':\n return this.validateEventRow(row);\n case 'anchors':\n return this.validateAnchorRow(row);\n default:\n throw new Error(`Unknown table: ${table}`);\n }\n }\n\n private validateFrameRow(row: any): any {\n const required = [\n 'frame_id',\n 'project_id',\n 'run_id',\n 'type',\n 'name',\n 'state',\n 'depth',\n ];\n for (const field of required) {\n if (!(field in row)) {\n throw new Error(`Missing required field ${field} in frame row`);\n }\n }\n return row;\n }\n\n private validateEventRow(row: any): any {\n const required = ['event_id', 'frame_id', 'seq', 'type', 'text'];\n for (const field of required) {\n if (!(field in row)) {\n throw new Error(`Missing required field ${field} in event row`);\n }\n }\n return row;\n }\n\n private validateAnchorRow(row: any): any {\n const required = ['anchor_id', 'frame_id', 'type', 'text', 'priority'];\n for (const field of required) {\n if (!(field in row)) {\n throw new Error(`Missing required field ${field} in anchor row`);\n }\n }\n return row;\n }\n\n private async retryBatch(\n table: string,\n offset: number,\n batchSize: number\n ): Promise<void> {\n for (let attempt = 1; attempt <= this.config.retryAttempts; attempt++) {\n try {\n await this.sleep(this.config.retryDelayMs * attempt);\n\n const batch = await this.getBatch(table, offset, batchSize);\n await this.migrateBatch(table, batch);\n\n logger.info(`Retry successful for table ${table} at offset ${offset}`);\n return;\n } catch (error) {\n logger.warn(\n `Retry ${attempt}/${this.config.retryAttempts} failed:`,\n error\n );\n\n if (attempt === this.config.retryAttempts) {\n throw new Error(\n `Failed after ${this.config.retryAttempts} retries: ${error}`\n );\n }\n }\n }\n }\n\n private async verifyDataIntegrity(plan: TableMigrationPlan[]): Promise<void> {\n logger.info('Verifying data integrity');\n\n for (const tablePlan of plan) {\n if (tablePlan.strategy === 'skip') continue;\n\n try {\n const sourceStats = await this.config.sourceAdapter.getStats();\n const targetStats = await this.config.targetAdapter.getStats();\n\n const sourceCount = this.estimateTableRows(\n tablePlan.table,\n sourceStats\n );\n const targetCount = this.estimateTableRows(\n tablePlan.table,\n targetStats\n );\n\n if (sourceCount !== targetCount) {\n this.addError(\n tablePlan.table,\n `Row count mismatch: source=${sourceCount}, target=${targetCount}`\n );\n } else {\n logger.debug(\n `Table ${tablePlan.table} verified: ${sourceCount} rows`\n );\n }\n } catch (error) {\n this.addError(tablePlan.table, `Verification failed: ${error}`);\n }\n }\n\n if (this.progress.errors.length > 0) {\n throw new Error(\n `Data integrity verification failed with ${this.progress.errors.length} errors`\n );\n }\n }\n\n private async completeMigration(strategy: MigrationStrategy): Promise<void> {\n logger.info('Completing migration');\n\n // Update target schema version if needed\n const sourceVersion = await this.config.sourceAdapter.getSchemaVersion();\n await this.config.targetAdapter.migrateSchema(sourceVersion);\n\n // Analyze target database for optimal performance\n await this.config.targetAdapter.analyze();\n\n logger.info('Migration completion tasks finished');\n }\n\n private async rollbackMigration(): Promise<void> {\n logger.warn('Rolling back migration');\n\n try {\n // This would typically involve cleaning up the target database\n // For now, we'll just log the intention\n logger.warn(\n 'Rollback would clean target database - implement based on strategy'\n );\n } catch (error) {\n logger.error('Rollback failed:', error);\n }\n }\n\n private updateProgress(updates: Partial<MigrationProgress>): void {\n Object.assign(this.progress, updates);\n this.updateProgressPercentage();\n\n if (this.progress.totalRecords > 0) {\n const elapsed = Date.now() - this.progress.startTime.getTime();\n const rate = this.progress.processedRecords / (elapsed / 1000);\n const remaining =\n this.progress.totalRecords - this.progress.processedRecords;\n\n if (rate > 0) {\n this.progress.estimatedEndTime = new Date(\n Date.now() + (remaining / rate) * 1000\n );\n }\n }\n\n this.config.progressCallback(this.progress);\n this.emit('progress', this.progress);\n }\n\n private updateProgressPercentage(): void {\n if (this.progress.totalRecords > 0) {\n this.progress.percentage = Math.min(\n 100,\n (this.progress.processedRecords / this.progress.totalRecords) * 100\n );\n }\n }\n\n private addError(table: string, error: string): void {\n this.progress.errors.push({\n table,\n error,\n timestamp: new Date(),\n });\n\n logger.error(`Migration error for table ${table}: ${error}`);\n }\n\n private addWarning(warning: string, table?: string): void {\n this.progress.warnings.push({\n table: table || 'general',\n warning,\n timestamp: new Date(),\n });\n\n logger.warn(`Migration warning: ${warning}`);\n }\n\n private sanitizeError(error: any): any {\n if (error instanceof Error) {\n return {\n name: error.name,\n message: error.message,\n // Exclude stack traces and sensitive data for security\n };\n }\n return { message: 'Unknown error occurred' };\n }\n\n private calculateAdaptiveDelay(): number {\n const memoryUsage = process.memoryUsage().heapUsed / 1024 / 1024;\n\n // Adaptive delay based on system resources\n if (memoryUsage > 400) return 100;\n if (memoryUsage > 300) return 50;\n return 10;\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n pause(): void {\n if (!this.isRunning) {\n throw new Error('No migration in progress');\n }\n\n this.isPaused = true;\n logger.info('Migration paused');\n this.emit('paused');\n }\n\n resume(): void {\n if (!this.isRunning) {\n throw new Error('No migration in progress');\n }\n\n this.isPaused = false;\n logger.info('Migration resumed');\n this.emit('resumed');\n }\n\n abort(): void {\n if (!this.isRunning) {\n throw new Error('No migration in progress');\n }\n\n this.abortController?.abort();\n logger.info('Migration aborted');\n this.emit('aborted');\n }\n\n getProgress(): MigrationProgress {\n return { ...this.progress };\n }\n\n isActive(): boolean {\n return this.isRunning;\n }\n\n async estimateDuration(): Promise<{\n estimatedMinutes: number;\n confidence: 'low' | 'medium' | 'high';\n }> {\n const plan = await this.planMigration();\n const totalRecords = plan.reduce((sum, p) => sum + p.estimatedRows, 0);\n\n // Rough estimate: 1000 records per second\n const estimatedSeconds = totalRecords / 1000;\n const estimatedMinutes = Math.ceil(estimatedSeconds / 60);\n\n let confidence: 'low' | 'medium' | 'high' = 'medium';\n if (totalRecords < 10000) confidence = 'high';\n if (totalRecords > 100000) confidence = 'low';\n\n return { estimatedMinutes, confidence };\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|