@stackmemoryai/stackmemory 0.5.5 → 0.5.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/core/agent-task-manager.js +4 -0
- package/dist/agents/core/agent-task-manager.js.map +1 -1
- package/dist/agents/testing-agent.js +4 -0
- package/dist/agents/testing-agent.js.map +1 -1
- package/dist/agents/verifiers/base-verifier.js +4 -0
- package/dist/agents/verifiers/base-verifier.js.map +1 -1
- package/dist/agents/verifiers/formatter-verifier.js +4 -0
- package/dist/agents/verifiers/formatter-verifier.js.map +1 -1
- package/dist/agents/verifiers/llm-judge.js +4 -0
- package/dist/agents/verifiers/llm-judge.js.map +1 -1
- package/dist/cli/auto-detect.js +4 -0
- package/dist/cli/auto-detect.js.map +1 -1
- package/dist/cli/browser-test.js +4 -0
- package/dist/cli/browser-test.js.map +1 -1
- package/dist/cli/claude-sm-danger.js +4 -3
- package/dist/cli/claude-sm-danger.js.map +2 -2
- package/dist/cli/claude-sm.js +4 -0
- package/dist/cli/claude-sm.js.map +2 -2
- package/dist/cli/codex-sm.js +4 -0
- package/dist/cli/codex-sm.js.map +1 -1
- package/dist/cli/commands/api.js +4 -0
- package/dist/cli/commands/api.js.map +1 -1
- package/dist/cli/commands/cleanup-processes.js +4 -0
- package/dist/cli/commands/cleanup-processes.js.map +1 -1
- package/dist/cli/commands/clear.js +4 -0
- package/dist/cli/commands/clear.js.map +1 -1
- package/dist/cli/commands/config.js +4 -0
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/context-rehydrate.js +4 -0
- package/dist/cli/commands/context-rehydrate.js.map +1 -1
- package/dist/cli/commands/context.js +4 -0
- package/dist/cli/commands/context.js.map +1 -1
- package/dist/cli/commands/dashboard.js +4 -0
- package/dist/cli/commands/dashboard.js.map +1 -1
- package/dist/cli/commands/db.js +4 -0
- package/dist/cli/commands/db.js.map +1 -1
- package/dist/cli/commands/decision.js +4 -0
- package/dist/cli/commands/decision.js.map +1 -1
- package/dist/cli/commands/handoff.js +4 -0
- package/dist/cli/commands/handoff.js.map +1 -1
- package/dist/cli/commands/hooks.js +4 -0
- package/dist/cli/commands/hooks.js.map +1 -1
- package/dist/cli/commands/linear-unified.js +4 -0
- package/dist/cli/commands/linear-unified.js.map +1 -1
- package/dist/cli/commands/linear.js +4 -0
- package/dist/cli/commands/linear.js.map +1 -1
- package/dist/cli/commands/log.js +4 -0
- package/dist/cli/commands/log.js.map +1 -1
- package/dist/cli/commands/login.js +4 -0
- package/dist/cli/commands/login.js.map +1 -1
- package/dist/cli/commands/migrate.js +4 -0
- package/dist/cli/commands/migrate.js.map +1 -1
- package/dist/cli/commands/monitor.js +4 -0
- package/dist/cli/commands/monitor.js.map +1 -1
- package/dist/cli/commands/onboard.js +4 -0
- package/dist/cli/commands/onboard.js.map +1 -1
- package/dist/cli/commands/projects.js +4 -0
- package/dist/cli/commands/projects.js.map +1 -1
- package/dist/cli/commands/quality.js +4 -0
- package/dist/cli/commands/quality.js.map +1 -1
- package/dist/cli/commands/ralph.js +4 -0
- package/dist/cli/commands/ralph.js.map +1 -1
- package/dist/cli/commands/search.js +4 -0
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/service.js +4 -0
- package/dist/cli/commands/service.js.map +1 -1
- package/dist/cli/commands/session.js +4 -0
- package/dist/cli/commands/session.js.map +1 -1
- package/dist/cli/commands/shell.js +5 -4
- package/dist/cli/commands/shell.js.map +2 -2
- package/dist/cli/commands/signup.js +4 -0
- package/dist/cli/commands/signup.js.map +1 -1
- package/dist/cli/commands/skills.js +4 -0
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/storage-tier.js +4 -0
- package/dist/cli/commands/storage-tier.js.map +1 -1
- package/dist/cli/commands/storage.js +4 -0
- package/dist/cli/commands/storage.js.map +1 -1
- package/dist/cli/commands/sweep.js +5 -4
- package/dist/cli/commands/sweep.js.map +2 -2
- package/dist/cli/commands/tasks.js +4 -0
- package/dist/cli/commands/tasks.js.map +1 -1
- package/dist/cli/commands/test.js +4 -0
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/commands/workflow.js +4 -0
- package/dist/cli/commands/workflow.js.map +1 -1
- package/dist/cli/commands/worktree.js +4 -0
- package/dist/cli/commands/worktree.js.map +1 -1
- package/dist/cli/index.js +4 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/utils/viewer.js +4 -0
- package/dist/cli/utils/viewer.js.map +1 -1
- package/dist/core/analytics/team-analytics.js +4 -0
- package/dist/core/analytics/team-analytics.js.map +1 -1
- package/dist/core/config/config-manager.js +4 -0
- package/dist/core/config/config-manager.js.map +1 -1
- package/dist/core/config/storage-config.js +4 -0
- package/dist/core/config/storage-config.js.map +1 -1
- package/dist/core/config/types.js +4 -0
- package/dist/core/config/types.js.map +1 -1
- package/dist/core/context/auto-context.js +4 -0
- package/dist/core/context/auto-context.js.map +1 -1
- package/dist/core/context/compaction-handler.js +4 -0
- package/dist/core/context/compaction-handler.js.map +1 -1
- package/dist/core/context/context-bridge.js +4 -0
- package/dist/core/context/context-bridge.js.map +1 -1
- package/dist/core/context/dual-stack-manager.js +4 -0
- package/dist/core/context/dual-stack-manager.js.map +1 -1
- package/dist/core/context/enhanced-rehydration.js +4 -0
- package/dist/core/context/enhanced-rehydration.js.map +1 -1
- package/dist/core/context/frame-database.js +4 -0
- package/dist/core/context/frame-database.js.map +1 -1
- package/dist/core/context/frame-digest.js +4 -0
- package/dist/core/context/frame-digest.js.map +1 -1
- package/dist/core/context/frame-handoff-manager.js +4 -0
- package/dist/core/context/frame-handoff-manager.js.map +1 -1
- package/dist/core/context/frame-manager.js +4 -0
- package/dist/core/context/frame-manager.js.map +1 -1
- package/dist/core/context/frame-stack.js +4 -0
- package/dist/core/context/frame-stack.js.map +1 -1
- package/dist/core/context/frame-types.js +4 -0
- package/dist/core/context/incremental-gc.js +4 -0
- package/dist/core/context/incremental-gc.js.map +1 -1
- package/dist/core/context/index.js +4 -0
- package/dist/core/context/index.js.map +1 -1
- package/dist/core/context/model-aware-compaction.js +4 -0
- package/dist/core/context/model-aware-compaction.js.map +1 -1
- package/dist/core/context/permission-manager.js +4 -0
- package/dist/core/context/permission-manager.js.map +1 -1
- package/dist/core/context/recursive-context-manager.js +4 -0
- package/dist/core/context/recursive-context-manager.js.map +1 -1
- package/dist/core/context/refactored-frame-manager.js +4 -0
- package/dist/core/context/refactored-frame-manager.js.map +1 -1
- package/dist/core/context/shared-context-layer.js +4 -0
- package/dist/core/context/shared-context-layer.js.map +1 -1
- package/dist/core/context/stack-merge-resolver.js +4 -0
- package/dist/core/context/stack-merge-resolver.js.map +1 -1
- package/dist/core/context/validation.js +4 -0
- package/dist/core/context/validation.js.map +1 -1
- package/dist/core/database/batch-operations.js +4 -0
- package/dist/core/database/batch-operations.js.map +1 -1
- package/dist/core/database/connection-pool.js +4 -0
- package/dist/core/database/connection-pool.js.map +1 -1
- package/dist/core/database/database-adapter.js +4 -0
- package/dist/core/database/database-adapter.js.map +1 -1
- package/dist/core/database/migration-manager.js +4 -0
- package/dist/core/database/migration-manager.js.map +1 -1
- package/dist/core/database/paradedb-adapter.js +4 -0
- package/dist/core/database/paradedb-adapter.js.map +1 -1
- package/dist/core/database/query-cache.js +4 -0
- package/dist/core/database/query-cache.js.map +1 -1
- package/dist/core/database/query-router.js +4 -0
- package/dist/core/database/query-router.js.map +1 -1
- package/dist/core/database/sqlite-adapter.js +4 -0
- package/dist/core/database/sqlite-adapter.js.map +1 -1
- package/dist/core/digest/enhanced-hybrid-digest.js +4 -0
- package/dist/core/digest/enhanced-hybrid-digest.js.map +1 -1
- package/dist/core/digest/frame-digest-integration.js +4 -0
- package/dist/core/digest/frame-digest-integration.js.map +1 -1
- package/dist/core/digest/hybrid-digest-generator.js +4 -0
- package/dist/core/digest/hybrid-digest-generator.js.map +1 -1
- package/dist/core/digest/index.js +4 -0
- package/dist/core/digest/index.js.map +1 -1
- package/dist/core/digest/types.js +4 -0
- package/dist/core/digest/types.js.map +1 -1
- package/dist/core/errors/index.js +4 -0
- package/dist/core/errors/index.js.map +1 -1
- package/dist/core/errors/recovery.js +4 -0
- package/dist/core/errors/recovery.js.map +1 -1
- package/dist/core/execution/parallel-executor.js +4 -0
- package/dist/core/execution/parallel-executor.js.map +1 -1
- package/dist/core/frame/workflow-templates.js +4 -0
- package/dist/core/frame/workflow-templates.js.map +1 -1
- package/dist/core/merge/conflict-detector.js +4 -0
- package/dist/core/merge/conflict-detector.js.map +1 -1
- package/dist/core/merge/index.js +4 -0
- package/dist/core/merge/index.js.map +1 -1
- package/dist/core/merge/resolution-engine.js +4 -0
- package/dist/core/merge/resolution-engine.js.map +1 -1
- package/dist/core/merge/stack-diff.js +4 -0
- package/dist/core/merge/stack-diff.js.map +1 -1
- package/dist/core/merge/types.js +4 -0
- package/dist/core/monitoring/error-handler.js +4 -0
- package/dist/core/monitoring/error-handler.js.map +1 -1
- package/dist/core/monitoring/logger.js +4 -0
- package/dist/core/monitoring/logger.js.map +1 -1
- package/dist/core/monitoring/metrics.js +4 -0
- package/dist/core/monitoring/metrics.js.map +1 -1
- package/dist/core/monitoring/progress-tracker.js +4 -0
- package/dist/core/monitoring/progress-tracker.js.map +1 -1
- package/dist/core/monitoring/session-monitor.js +4 -0
- package/dist/core/monitoring/session-monitor.js.map +1 -1
- package/dist/core/performance/context-cache.js +4 -0
- package/dist/core/performance/context-cache.js.map +1 -1
- package/dist/core/performance/index.js +4 -0
- package/dist/core/performance/index.js.map +1 -1
- package/dist/core/performance/lazy-context-loader.js +4 -0
- package/dist/core/performance/lazy-context-loader.js.map +1 -1
- package/dist/core/performance/monitor.js +4 -0
- package/dist/core/performance/monitor.js.map +1 -1
- package/dist/core/performance/optimized-frame-context.js +4 -0
- package/dist/core/performance/optimized-frame-context.js.map +1 -1
- package/dist/core/performance/performance-benchmark.js +4 -0
- package/dist/core/performance/performance-benchmark.js.map +1 -1
- package/dist/core/performance/performance-profiler.js +4 -0
- package/dist/core/performance/performance-profiler.js.map +1 -1
- package/dist/core/performance/streaming-jsonl-parser.js +4 -0
- package/dist/core/performance/streaming-jsonl-parser.js.map +1 -1
- package/dist/core/persistence/postgres-adapter.js +4 -0
- package/dist/core/persistence/postgres-adapter.js.map +1 -1
- package/dist/core/projects/project-isolation.js +4 -0
- package/dist/core/projects/project-isolation.js.map +1 -1
- package/dist/core/projects/project-manager.js +4 -0
- package/dist/core/projects/project-manager.js.map +1 -1
- package/dist/core/query/query-parser.js +4 -0
- package/dist/core/query/query-parser.js.map +1 -1
- package/dist/core/query/query-templates.js +4 -0
- package/dist/core/query/query-templates.js.map +1 -1
- package/dist/core/retrieval/context-retriever.js +4 -0
- package/dist/core/retrieval/context-retriever.js.map +1 -1
- package/dist/core/retrieval/graph-retrieval.js +4 -0
- package/dist/core/retrieval/graph-retrieval.js.map +1 -1
- package/dist/core/retrieval/hierarchical-retrieval.js +4 -0
- package/dist/core/retrieval/hierarchical-retrieval.js.map +1 -1
- package/dist/core/retrieval/index.js +4 -0
- package/dist/core/retrieval/index.js.map +1 -1
- package/dist/core/retrieval/llm-context-retrieval.js +4 -0
- package/dist/core/retrieval/llm-context-retrieval.js.map +1 -1
- package/dist/core/retrieval/retrieval-benchmarks.js +4 -0
- package/dist/core/retrieval/retrieval-benchmarks.js.map +1 -1
- package/dist/core/retrieval/summary-generator.js +4 -0
- package/dist/core/retrieval/summary-generator.js.map +1 -1
- package/dist/core/retrieval/types.js +4 -0
- package/dist/core/retrieval/types.js.map +1 -1
- package/dist/core/session/clear-survival.js +4 -0
- package/dist/core/session/clear-survival.js.map +1 -1
- package/dist/core/session/enhanced-handoff.js +4 -0
- package/dist/core/session/enhanced-handoff.js.map +1 -1
- package/dist/core/session/handoff-generator.js +4 -0
- package/dist/core/session/handoff-generator.js.map +1 -1
- package/dist/core/session/index.js +4 -0
- package/dist/core/session/index.js.map +1 -1
- package/dist/core/session/session-manager.js +4 -0
- package/dist/core/session/session-manager.js.map +1 -1
- package/dist/core/skills/index.js +4 -0
- package/dist/core/skills/index.js.map +1 -1
- package/dist/core/skills/skill-storage.js +4 -0
- package/dist/core/skills/skill-storage.js.map +1 -1
- package/dist/core/skills/types.js +4 -0
- package/dist/core/skills/types.js.map +1 -1
- package/dist/core/storage/chromadb-adapter.js +4 -0
- package/dist/core/storage/chromadb-adapter.js.map +1 -1
- package/dist/core/storage/infinite-storage.js +4 -0
- package/dist/core/storage/infinite-storage.js.map +1 -1
- package/dist/core/storage/railway-optimized-storage.js +4 -0
- package/dist/core/storage/railway-optimized-storage.js.map +1 -1
- package/dist/core/storage/remote-storage.js +4 -0
- package/dist/core/storage/remote-storage.js.map +1 -1
- package/dist/core/storage/two-tier-storage.js +4 -0
- package/dist/core/storage/two-tier-storage.js.map +1 -1
- package/dist/core/trace/cli-trace-wrapper.js +4 -0
- package/dist/core/trace/cli-trace-wrapper.js.map +1 -1
- package/dist/core/trace/db-trace-wrapper.js +4 -0
- package/dist/core/trace/db-trace-wrapper.js.map +1 -1
- package/dist/core/trace/debug-trace.js +4 -0
- package/dist/core/trace/debug-trace.js.map +1 -1
- package/dist/core/trace/index.js +4 -0
- package/dist/core/trace/index.js.map +1 -1
- package/dist/core/trace/linear-api-wrapper.js +4 -0
- package/dist/core/trace/linear-api-wrapper.js.map +1 -1
- package/dist/core/trace/trace-demo.js +4 -0
- package/dist/core/trace/trace-demo.js.map +1 -1
- package/dist/core/trace/trace-detector.demo.js +4 -0
- package/dist/core/trace/trace-detector.demo.js.map +1 -1
- package/dist/core/trace/trace-detector.js +4 -0
- package/dist/core/trace/trace-detector.js.map +1 -1
- package/dist/core/trace/trace-store.js +4 -0
- package/dist/core/trace/trace-store.js.map +1 -1
- package/dist/core/trace/types.js +4 -0
- package/dist/core/trace/types.js.map +1 -1
- package/dist/core/types.js +4 -0
- package/dist/core/utils/compression.js +4 -0
- package/dist/core/utils/compression.js.map +1 -1
- package/dist/core/utils/update-checker.js +4 -0
- package/dist/core/utils/update-checker.js.map +1 -1
- package/dist/core/worktree/worktree-manager.js +4 -0
- package/dist/core/worktree/worktree-manager.js.map +1 -1
- package/dist/daemon/session-daemon.js +4 -0
- package/dist/daemon/session-daemon.js.map +1 -1
- package/dist/features/analytics/api/analytics-api.js +4 -0
- package/dist/features/analytics/api/analytics-api.js.map +1 -1
- package/dist/features/analytics/core/analytics-service.js +4 -0
- package/dist/features/analytics/core/analytics-service.js.map +1 -1
- package/dist/features/analytics/index.js +4 -0
- package/dist/features/analytics/index.js.map +1 -1
- package/dist/features/analytics/queries/metrics-queries.js +4 -0
- package/dist/features/analytics/queries/metrics-queries.js.map +1 -1
- package/dist/features/analytics/types/metrics.js +4 -0
- package/dist/features/browser/browser-mcp.js +4 -0
- package/dist/features/browser/browser-mcp.js.map +1 -1
- package/dist/features/tasks/linear-task-manager.js +4 -0
- package/dist/features/tasks/linear-task-manager.js.map +1 -1
- package/dist/features/tasks/task-aware-context.js +4 -0
- package/dist/features/tasks/task-aware-context.js.map +1 -1
- package/dist/features/tui/simple-monitor.js +4 -0
- package/dist/features/tui/simple-monitor.js.map +1 -1
- package/dist/features/tui/swarm-monitor.js +4 -0
- package/dist/features/tui/swarm-monitor.js.map +1 -1
- package/dist/features/web/client/stores/task-store.js +4 -0
- package/dist/features/web/client/stores/task-store.js.map +1 -1
- package/dist/features/web/server/index.js +4 -0
- package/dist/features/web/server/index.js.map +1 -1
- package/dist/hooks/config.js +4 -0
- package/dist/hooks/config.js.map +1 -1
- package/dist/hooks/daemon.js +4 -0
- package/dist/hooks/daemon.js.map +1 -1
- package/dist/hooks/events.js +4 -0
- package/dist/hooks/events.js.map +1 -1
- package/dist/hooks/index.js +4 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/integrations/anthropic/client.js +4 -0
- package/dist/integrations/anthropic/client.js.map +1 -1
- package/dist/integrations/claude-code/agent-bridge.js +4 -0
- package/dist/integrations/claude-code/agent-bridge.js.map +1 -1
- package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js +4 -0
- package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js.map +1 -1
- package/dist/integrations/claude-code/lifecycle-hooks.js +4 -0
- package/dist/integrations/claude-code/lifecycle-hooks.js.map +1 -1
- package/dist/integrations/claude-code/post-task-hooks.js +4 -0
- package/dist/integrations/claude-code/post-task-hooks.js.map +1 -1
- package/dist/integrations/claude-code/subagent-client-stub.js +4 -0
- package/dist/integrations/claude-code/subagent-client-stub.js.map +1 -1
- package/dist/integrations/claude-code/subagent-client.js +4 -0
- package/dist/integrations/claude-code/subagent-client.js.map +1 -1
- package/dist/integrations/claude-code/task-coordinator.js +4 -0
- package/dist/integrations/claude-code/task-coordinator.js.map +1 -1
- package/dist/integrations/linear/auth.js +4 -0
- package/dist/integrations/linear/auth.js.map +1 -1
- package/dist/integrations/linear/auto-sync.js +4 -0
- package/dist/integrations/linear/auto-sync.js.map +1 -1
- package/dist/integrations/linear/client.js +4 -0
- package/dist/integrations/linear/client.js.map +1 -1
- package/dist/integrations/linear/config.js +4 -0
- package/dist/integrations/linear/config.js.map +1 -1
- package/dist/integrations/linear/migration.js +4 -0
- package/dist/integrations/linear/migration.js.map +1 -1
- package/dist/integrations/linear/oauth-server.js +4 -0
- package/dist/integrations/linear/oauth-server.js.map +1 -1
- package/dist/integrations/linear/rest-client.js +4 -0
- package/dist/integrations/linear/rest-client.js.map +1 -1
- package/dist/integrations/linear/sync-manager.js +4 -0
- package/dist/integrations/linear/sync-manager.js.map +1 -1
- package/dist/integrations/linear/sync-service.js +4 -0
- package/dist/integrations/linear/sync-service.js.map +1 -1
- package/dist/integrations/linear/sync.js +4 -0
- package/dist/integrations/linear/sync.js.map +1 -1
- package/dist/integrations/linear/types.js +4 -0
- package/dist/integrations/linear/unified-sync.js +4 -0
- package/dist/integrations/linear/unified-sync.js.map +1 -1
- package/dist/integrations/linear/webhook-handler.js +4 -0
- package/dist/integrations/linear/webhook-handler.js.map +1 -1
- package/dist/integrations/linear/webhook-server.js +4 -0
- package/dist/integrations/linear/webhook-server.js.map +1 -1
- package/dist/integrations/linear/webhook.js +4 -0
- package/dist/integrations/linear/webhook.js.map +1 -1
- package/dist/integrations/mcp/handlers/code-execution-handlers.js +4 -0
- package/dist/integrations/mcp/handlers/code-execution-handlers.js.map +1 -1
- package/dist/integrations/mcp/handlers/context-handlers.js +4 -0
- package/dist/integrations/mcp/handlers/context-handlers.js.map +1 -1
- package/dist/integrations/mcp/handlers/index.js +4 -0
- package/dist/integrations/mcp/handlers/index.js.map +1 -1
- package/dist/integrations/mcp/handlers/linear-handlers.js +4 -0
- package/dist/integrations/mcp/handlers/linear-handlers.js.map +1 -1
- package/dist/integrations/mcp/handlers/skill-handlers.js +4 -0
- package/dist/integrations/mcp/handlers/skill-handlers.js.map +1 -1
- package/dist/integrations/mcp/handlers/task-handlers.js +4 -0
- package/dist/integrations/mcp/handlers/task-handlers.js.map +1 -1
- package/dist/integrations/mcp/handlers/trace-handlers.js +4 -0
- package/dist/integrations/mcp/handlers/trace-handlers.js.map +1 -1
- package/dist/integrations/mcp/index.js +4 -0
- package/dist/integrations/mcp/index.js.map +1 -1
- package/dist/integrations/mcp/middleware/tool-scoring.js +4 -0
- package/dist/integrations/mcp/middleware/tool-scoring.js.map +1 -1
- package/dist/integrations/mcp/refactored-server.js +4 -0
- package/dist/integrations/mcp/refactored-server.js.map +1 -1
- package/dist/integrations/mcp/server.js +4 -0
- package/dist/integrations/mcp/server.js.map +1 -1
- package/dist/integrations/mcp/tool-definitions-code.js +4 -0
- package/dist/integrations/mcp/tool-definitions-code.js.map +1 -1
- package/dist/integrations/mcp/tool-definitions.js +4 -0
- package/dist/integrations/mcp/tool-definitions.js.map +1 -1
- package/dist/integrations/mcp/trace-test.js +4 -0
- package/dist/integrations/mcp/trace-test.js.map +1 -1
- package/dist/integrations/pg-aiguide/embedding-provider.js +4 -0
- package/dist/integrations/pg-aiguide/embedding-provider.js.map +1 -1
- package/dist/integrations/pg-aiguide/semantic-search.js +4 -0
- package/dist/integrations/pg-aiguide/semantic-search.js.map +1 -1
- package/dist/integrations/pg-aiguide/timescale-analytics.js +4 -0
- package/dist/integrations/pg-aiguide/timescale-analytics.js.map +1 -1
- package/dist/integrations/ralph/bridge/ralph-stackmemory-bridge.js +4 -0
- package/dist/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +1 -1
- package/dist/integrations/ralph/context/context-budget-manager.js +4 -0
- package/dist/integrations/ralph/context/context-budget-manager.js.map +1 -1
- package/dist/integrations/ralph/context/stackmemory-context-loader.js +4 -0
- package/dist/integrations/ralph/context/stackmemory-context-loader.js.map +1 -1
- package/dist/integrations/ralph/coordination/enhanced-coordination.js +4 -0
- package/dist/integrations/ralph/coordination/enhanced-coordination.js.map +1 -1
- package/dist/integrations/ralph/index.js +4 -0
- package/dist/integrations/ralph/index.js.map +1 -1
- package/dist/integrations/ralph/learning/pattern-learner.js +4 -0
- package/dist/integrations/ralph/learning/pattern-learner.js.map +1 -1
- package/dist/integrations/ralph/lifecycle/iteration-lifecycle.js +4 -0
- package/dist/integrations/ralph/lifecycle/iteration-lifecycle.js.map +1 -1
- package/dist/integrations/ralph/monitoring/swarm-dashboard.js +4 -0
- package/dist/integrations/ralph/monitoring/swarm-dashboard.js.map +1 -1
- package/dist/integrations/ralph/monitoring/swarm-registry.js +4 -0
- package/dist/integrations/ralph/monitoring/swarm-registry.js.map +1 -1
- package/dist/integrations/ralph/orchestration/multi-loop-orchestrator.js +4 -0
- package/dist/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +1 -1
- package/dist/integrations/ralph/patterns/compounding-engineering-pattern.js +4 -0
- package/dist/integrations/ralph/patterns/compounding-engineering-pattern.js.map +1 -1
- package/dist/integrations/ralph/patterns/extended-coherence-sessions.js +4 -0
- package/dist/integrations/ralph/patterns/extended-coherence-sessions.js.map +1 -1
- package/dist/integrations/ralph/patterns/oracle-worker-pattern.js +4 -0
- package/dist/integrations/ralph/patterns/oracle-worker-pattern.js.map +1 -1
- package/dist/integrations/ralph/performance/performance-optimizer.js +4 -0
- package/dist/integrations/ralph/performance/performance-optimizer.js.map +1 -1
- package/dist/integrations/ralph/ralph-integration-demo.js +4 -0
- package/dist/integrations/ralph/ralph-integration-demo.js.map +1 -1
- package/dist/integrations/ralph/recovery/crash-recovery.js +4 -0
- package/dist/integrations/ralph/recovery/crash-recovery.js.map +1 -1
- package/dist/integrations/ralph/state/state-reconciler.js +4 -0
- package/dist/integrations/ralph/state/state-reconciler.js.map +1 -1
- package/dist/integrations/ralph/swarm/git-workflow-manager.js +4 -0
- package/dist/integrations/ralph/swarm/git-workflow-manager.js.map +1 -1
- package/dist/integrations/ralph/swarm/swarm-coordinator.js +4 -0
- package/dist/integrations/ralph/swarm/swarm-coordinator.js.map +1 -1
- package/dist/integrations/ralph/types.js +4 -0
- package/dist/integrations/ralph/visualization/ralph-debugger.js +4 -0
- package/dist/integrations/ralph/visualization/ralph-debugger.js.map +1 -1
- package/dist/mcp/stackmemory-mcp-server.js +4 -0
- package/dist/mcp/stackmemory-mcp-server.js.map +1 -1
- package/dist/middleware/exponential-rate-limiter.js +4 -0
- package/dist/middleware/exponential-rate-limiter.js.map +1 -1
- package/dist/models/user.model.js +4 -0
- package/dist/models/user.model.js.map +1 -1
- package/dist/servers/production/auth-middleware.js +4 -0
- package/dist/servers/production/auth-middleware.js.map +1 -1
- package/dist/servers/railway/config.js +4 -0
- package/dist/servers/railway/config.js.map +1 -1
- package/dist/servers/railway/index-enhanced.js +4 -0
- package/dist/servers/railway/index-enhanced.js.map +1 -1
- package/dist/servers/railway/index.js +4 -0
- package/dist/servers/railway/index.js.map +1 -1
- package/dist/servers/railway/simple.js +4 -0
- package/dist/servers/railway/simple.js.map +1 -1
- package/dist/servers/railway/storage-test.js +4 -0
- package/dist/servers/railway/storage-test.js.map +1 -1
- package/dist/services/config-service.js +4 -0
- package/dist/services/config-service.js.map +1 -1
- package/dist/services/context-service.js +4 -0
- package/dist/services/context-service.js.map +1 -1
- package/dist/skills/api-discovery.js +4 -0
- package/dist/skills/api-discovery.js.map +1 -1
- package/dist/skills/api-skill.js +4 -0
- package/dist/skills/api-skill.js.map +1 -1
- package/dist/skills/claude-skills.js +4 -0
- package/dist/skills/claude-skills.js.map +1 -1
- package/dist/skills/dashboard-launcher.js +4 -0
- package/dist/skills/dashboard-launcher.js.map +1 -1
- package/dist/skills/recursive-agent-orchestrator.js +4 -0
- package/dist/skills/recursive-agent-orchestrator.js.map +1 -1
- package/dist/skills/repo-ingestion-skill.js +4 -0
- package/dist/skills/repo-ingestion-skill.js.map +1 -1
- package/dist/skills/security-secrets-scanner.js +4 -0
- package/dist/skills/security-secrets-scanner.js.map +1 -1
- package/dist/skills/unified-rlm-orchestrator.js +4 -0
- package/dist/skills/unified-rlm-orchestrator.js.map +1 -1
- package/dist/types/task.js +4 -0
- package/dist/utils/env.js +4 -0
- package/dist/utils/env.js.map +1 -1
- package/dist/utils/formatting.js +4 -0
- package/dist/utils/formatting.js.map +1 -1
- package/dist/utils/process-cleanup.js +4 -0
- package/dist/utils/process-cleanup.js.map +1 -1
- package/dist/validation/schemas.js +4 -0
- package/dist/validation/schemas.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/core/skills/skill-storage.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * Skill Storage Service\n * Redis-backed persistent storage for agent learnings and skills\n * All skills are namespaced by userId for multi-user support\n */\n\nimport 'dotenv/config';\nimport Redis from 'ioredis';\nimport { v4 as uuidv4 } from 'uuid';\nimport { logger } from '../monitoring/logger.js';\n\n// Type-safe environment variable access\nfunction getEnv(key: string, defaultValue?: string): string {\n const value = process.env[key];\n if (value === undefined) {\n if (defaultValue !== undefined) return defaultValue;\n throw new Error(`Environment variable ${key} is required`);\n }\n return value;\n}\n\nfunction getOptionalEnv(key: string): string | undefined {\n return process.env[key];\n}\n\nimport {\n Skill,\n CreateSkillInput,\n UpdateSkillInput,\n SkillQuery,\n JournalEntry,\n JournalEntryType,\n SessionSummary,\n SkillCategory,\n SkillPriority,\n REDIS_KEYS,\n CACHE_TTL,\n calculateSkillTTL,\n SkillSchema,\n JournalEntrySchema,\n} from './types.js';\n\nexport interface SkillStorageConfig {\n redisUrl: string;\n userId: string; // Required: user namespace for skills\n keyPrefix?: string;\n enableMetrics?: boolean;\n}\n\nexport interface SkillStorageMetrics {\n userId: string;\n skillsTotal: number;\n skillsByCategory: Record<SkillCategory, number>;\n journalEntriesTotal: number;\n sessionsTracked: number;\n cacheHits: number;\n cacheMisses: number;\n}\n\nexport class SkillStorageService {\n private redis: Redis;\n private userId: string;\n private keyPrefix: string;\n private enableMetrics: boolean;\n\n // Metrics tracking\n private metrics = {\n cacheHits: 0,\n cacheMisses: 0,\n };\n\n constructor(config: SkillStorageConfig) {\n this.redis = new Redis(config.redisUrl);\n this.userId = config.userId;\n this.keyPrefix = config.keyPrefix || 'sm:skills';\n this.enableMetrics = config.enableMetrics ?? true;\n\n this.redis.on('error', (err) => {\n logger.error('Redis connection error in SkillStorage', err);\n });\n\n this.redis.on('connect', () => {\n logger.info('SkillStorage connected to Redis');\n });\n\n logger.info('SkillStorageService initialized', {\n userId: this.userId,\n keyPrefix: this.keyPrefix,\n enableMetrics: this.enableMetrics,\n });\n }\n\n private key(pattern: string): string {\n return `${this.keyPrefix}:${pattern}`;\n }\n\n /**\n * Get the current user ID\n */\n getUserId(): string {\n return this.userId;\n }\n\n // ============================================================\n // SKILL CRUD OPERATIONS\n // ============================================================\n\n /**\n * Create a new skill\n */\n async createSkill(input: CreateSkillInput): Promise<Skill> {\n const now = new Date().toISOString();\n const skill: Skill = {\n ...input,\n id: uuidv4(),\n createdAt: now,\n updatedAt: now,\n validatedCount: 0,\n };\n\n // Validate\n SkillSchema.parse(skill);\n\n const pipeline = this.redis.pipeline();\n const skillKey = this.key(REDIS_KEYS.skill(this.userId, skill.id));\n\n // Store skill\n pipeline.setex(\n skillKey,\n calculateSkillTTL(skill.validatedCount),\n JSON.stringify(skill)\n );\n\n // Index by tool\n if (skill.tool) {\n pipeline.zadd(\n this.key(REDIS_KEYS.skillsByTool(this.userId, skill.tool)),\n Date.now(),\n skill.id\n );\n }\n\n // Index by category\n pipeline.zadd(\n this.key(REDIS_KEYS.skillsByCategory(this.userId, skill.category)),\n this.priorityScore(skill.priority),\n skill.id\n );\n\n // Index by tags\n for (const tag of skill.tags) {\n pipeline.zadd(\n this.key(REDIS_KEYS.skillsByTag(this.userId, tag)),\n Date.now(),\n skill.id\n );\n }\n\n // Add to recent skills\n pipeline.zadd(\n this.key(REDIS_KEYS.skillsRecent(this.userId)),\n Date.now(),\n skill.id\n );\n pipeline.zremrangebyrank(\n this.key(REDIS_KEYS.skillsRecent(this.userId)),\n 0,\n -1001\n ); // Keep last 1000\n\n await pipeline.exec();\n\n logger.info('Created skill', {\n userId: this.userId,\n id: skill.id,\n category: skill.category,\n tool: skill.tool,\n });\n\n return skill;\n }\n\n /**\n * Get skill by ID\n */\n async getSkill(id: string): Promise<Skill | null> {\n const skillKey = this.key(REDIS_KEYS.skill(this.userId, id));\n const data = await this.redis.get(skillKey);\n\n if (!data) {\n this.metrics.cacheMisses++;\n return null;\n }\n\n this.metrics.cacheHits++;\n return JSON.parse(data) as Skill;\n }\n\n /**\n * Update an existing skill\n */\n async updateSkill(input: UpdateSkillInput): Promise<Skill | null> {\n const existing = await this.getSkill(input.id);\n if (!existing) {\n return null;\n }\n\n const updated: Skill = {\n ...existing,\n ...input,\n updatedAt: new Date().toISOString(),\n };\n\n // Validate\n SkillSchema.parse(updated);\n\n const skillKey = this.key(REDIS_KEYS.skill(this.userId, updated.id));\n await this.redis.setex(\n skillKey,\n calculateSkillTTL(updated.validatedCount),\n JSON.stringify(updated)\n );\n\n logger.info('Updated skill', { userId: this.userId, id: updated.id });\n\n return updated;\n }\n\n /**\n * Validate a skill (increment validation count)\n */\n async validateSkill(id: string): Promise<Skill | null> {\n const skill = await this.getSkill(id);\n if (!skill) {\n return null;\n }\n\n skill.validatedCount++;\n skill.lastValidated = new Date().toISOString();\n skill.updatedAt = new Date().toISOString();\n\n const skillKey = this.key(REDIS_KEYS.skill(this.userId, id));\n // TTL increases with validation count: 7 days base + 7 days per validation, max 90 days\n await this.redis.setex(\n skillKey,\n calculateSkillTTL(skill.validatedCount),\n JSON.stringify(skill)\n );\n\n // Update validated index\n await this.redis.zadd(\n this.key(REDIS_KEYS.skillsValidated(this.userId)),\n skill.validatedCount,\n id\n );\n\n // Check for promotion eligibility\n if (skill.validatedCount >= 3 && skill.priority !== 'critical') {\n await this.redis.sadd(\n this.key(REDIS_KEYS.promotionCandidates(this.userId)),\n id\n );\n }\n\n logger.info('Validated skill', {\n userId: this.userId,\n id,\n validatedCount: skill.validatedCount,\n });\n\n return skill;\n }\n\n /**\n * Delete a skill\n */\n async deleteSkill(id: string): Promise<boolean> {\n const skill = await this.getSkill(id);\n if (!skill) {\n return false;\n }\n\n const pipeline = this.redis.pipeline();\n const skillKey = this.key(REDIS_KEYS.skill(this.userId, id));\n\n // Remove skill\n pipeline.del(skillKey);\n\n // Remove from indexes\n if (skill.tool) {\n pipeline.zrem(\n this.key(REDIS_KEYS.skillsByTool(this.userId, skill.tool)),\n id\n );\n }\n\n pipeline.zrem(\n this.key(REDIS_KEYS.skillsByCategory(this.userId, skill.category)),\n id\n );\n\n for (const tag of skill.tags) {\n pipeline.zrem(this.key(REDIS_KEYS.skillsByTag(this.userId, tag)), id);\n }\n\n pipeline.zrem(this.key(REDIS_KEYS.skillsRecent(this.userId)), id);\n pipeline.zrem(this.key(REDIS_KEYS.skillsValidated(this.userId)), id);\n pipeline.srem(this.key(REDIS_KEYS.promotionCandidates(this.userId)), id);\n\n await pipeline.exec();\n\n logger.info('Deleted skill', { userId: this.userId, id });\n\n return true;\n }\n\n // ============================================================\n // SKILL QUERIES\n // ============================================================\n\n /**\n * Query skills with filters\n */\n async querySkills(query: SkillQuery): Promise<Skill[]> {\n let skillIds: string[] = [];\n\n // Determine which index to use\n if (query.tool) {\n skillIds = await this.redis.zrevrange(\n this.key(REDIS_KEYS.skillsByTool(this.userId, query.tool)),\n 0,\n -1\n );\n } else if (query.categories && query.categories.length === 1) {\n skillIds = await this.redis.zrevrange(\n this.key(REDIS_KEYS.skillsByCategory(this.userId, query.categories[0])),\n 0,\n -1\n );\n } else if (query.tags && query.tags.length === 1) {\n skillIds = await this.redis.zrevrange(\n this.key(REDIS_KEYS.skillsByTag(this.userId, query.tags[0])),\n 0,\n -1\n );\n } else {\n // Default to recent skills\n skillIds = await this.redis.zrevrange(\n this.key(REDIS_KEYS.skillsRecent(this.userId)),\n 0,\n query.limit + query.offset\n );\n }\n\n if (skillIds.length === 0) {\n return [];\n }\n\n // Fetch skills\n const pipeline = this.redis.pipeline();\n for (const id of skillIds) {\n pipeline.get(this.key(REDIS_KEYS.skill(this.userId, id)));\n }\n\n const results = await pipeline.exec();\n if (!results) {\n return [];\n }\n\n let skills: Skill[] = results\n .map(([err, data]) => {\n if (err || !data) return null;\n try {\n return JSON.parse(data as string) as Skill;\n } catch {\n return null;\n }\n })\n .filter((s): s is Skill => s !== null);\n\n // Apply additional filters\n if (query.categories && query.categories.length > 0) {\n skills = skills.filter((s) => query.categories!.includes(s.category));\n }\n\n if (query.priorities && query.priorities.length > 0) {\n skills = skills.filter((s) => query.priorities!.includes(s.priority));\n }\n\n if (query.minValidatedCount !== undefined) {\n skills = skills.filter(\n (s) => s.validatedCount >= query.minValidatedCount!\n );\n }\n\n if (query.language) {\n skills = skills.filter((s) => s.language === query.language);\n }\n\n if (query.framework) {\n skills = skills.filter((s) => s.framework === query.framework);\n }\n\n // Sort\n skills.sort((a, b) => {\n let aVal: number, bVal: number;\n\n switch (query.sortBy) {\n case 'priority':\n aVal = this.priorityScore(a.priority);\n bVal = this.priorityScore(b.priority);\n break;\n case 'validatedCount':\n aVal = a.validatedCount;\n bVal = b.validatedCount;\n break;\n case 'createdAt':\n aVal = new Date(a.createdAt).getTime();\n bVal = new Date(b.createdAt).getTime();\n break;\n case 'updatedAt':\n aVal = new Date(a.updatedAt).getTime();\n bVal = new Date(b.updatedAt).getTime();\n break;\n default:\n aVal = this.priorityScore(a.priority);\n bVal = this.priorityScore(b.priority);\n }\n\n return query.sortOrder === 'desc' ? bVal - aVal : aVal - bVal;\n });\n\n // Apply pagination\n return skills.slice(query.offset, query.offset + query.limit);\n }\n\n /**\n * Get skills relevant to current context\n */\n async getRelevantSkills(context: {\n tool?: string;\n language?: string;\n framework?: string;\n tags?: string[];\n }): Promise<Skill[]> {\n const skills: Skill[] = [];\n const seenIds = new Set<string>();\n\n // Always include critical skills\n const criticalIds = await this.redis.zrevrange(\n this.key(REDIS_KEYS.skillsByCategory(this.userId, 'correction')),\n 0,\n -1\n );\n\n for (const id of criticalIds) {\n const skill = await this.getSkill(id);\n if (skill && skill.priority === 'critical' && !seenIds.has(id)) {\n skills.push(skill);\n seenIds.add(id);\n }\n }\n\n // Get tool-specific skills\n if (context.tool) {\n const toolSkills = await this.querySkills({\n tool: context.tool,\n limit: 20,\n offset: 0,\n sortBy: 'priority',\n sortOrder: 'desc',\n });\n\n for (const skill of toolSkills) {\n if (!seenIds.has(skill.id)) {\n skills.push(skill);\n seenIds.add(skill.id);\n }\n }\n }\n\n // Get highly validated skills\n const validatedIds = await this.redis.zrevrange(\n this.key(REDIS_KEYS.skillsValidated(this.userId)),\n 0,\n 10\n );\n\n for (const id of validatedIds) {\n if (!seenIds.has(id)) {\n const skill = await this.getSkill(id);\n if (skill) {\n skills.push(skill);\n seenIds.add(id);\n }\n }\n }\n\n return skills.slice(0, 50); // Cap at 50 skills\n }\n\n // ============================================================\n // SESSION JOURNAL\n // ============================================================\n\n /**\n * Create a journal entry\n */\n async createJournalEntry(\n sessionId: string,\n type: JournalEntryType,\n title: string,\n content: string,\n context?: JournalEntry['context']\n ): Promise<JournalEntry> {\n const entry: JournalEntry = {\n id: uuidv4(),\n sessionId,\n type,\n title,\n content,\n context,\n createdAt: new Date().toISOString(),\n };\n\n // Validate\n JournalEntrySchema.parse(entry);\n\n const pipeline = this.redis.pipeline();\n\n // Store entry\n pipeline.setex(\n this.key(REDIS_KEYS.journalEntry(this.userId, entry.id)),\n CACHE_TTL.journal,\n JSON.stringify(entry)\n );\n\n // Index by session\n pipeline.zadd(\n this.key(REDIS_KEYS.journalSession(this.userId, sessionId)),\n Date.now(),\n entry.id\n );\n\n // Add to recent journal\n pipeline.zadd(\n this.key(REDIS_KEYS.journalRecent(this.userId)),\n Date.now(),\n entry.id\n );\n pipeline.zremrangebyrank(\n this.key(REDIS_KEYS.journalRecent(this.userId)),\n 0,\n -501\n ); // Keep last 500\n\n await pipeline.exec();\n\n logger.info('Created journal entry', {\n userId: this.userId,\n id: entry.id,\n sessionId,\n type,\n title,\n });\n\n return entry;\n }\n\n /**\n * Get journal entries for a session\n */\n async getSessionJournal(sessionId: string): Promise<JournalEntry[]> {\n const entryIds = await this.redis.zrevrange(\n this.key(REDIS_KEYS.journalSession(this.userId, sessionId)),\n 0,\n -1\n );\n\n if (entryIds.length === 0) {\n return [];\n }\n\n const pipeline = this.redis.pipeline();\n for (const id of entryIds) {\n pipeline.get(this.key(REDIS_KEYS.journalEntry(this.userId, id)));\n }\n\n const results = await pipeline.exec();\n if (!results) {\n return [];\n }\n\n return results\n .map(([err, data]) => {\n if (err || !data) return null;\n try {\n return JSON.parse(data as string) as JournalEntry;\n } catch {\n return null;\n }\n })\n .filter((e): e is JournalEntry => e !== null);\n }\n\n /**\n * Promote a journal entry to a skill\n */\n async promoteToSkill(\n entryId: string,\n category: SkillCategory,\n priority: SkillPriority = 'medium'\n ): Promise<Skill | null> {\n const entryData = await this.redis.get(\n this.key(REDIS_KEYS.journalEntry(this.userId, entryId))\n );\n\n if (!entryData) {\n return null;\n }\n\n const entry = JSON.parse(entryData) as JournalEntry;\n\n const skill = await this.createSkill({\n content: entry.content,\n summary: entry.title,\n category,\n priority,\n tags: [],\n tool: entry.context?.tool,\n source: 'observation',\n sessionId: entry.sessionId,\n });\n\n // Update entry with promotion reference\n entry.promotedToSkillId = skill.id;\n await this.redis.setex(\n this.key(REDIS_KEYS.journalEntry(this.userId, entryId)),\n CACHE_TTL.journal,\n JSON.stringify(entry)\n );\n\n logger.info('Promoted journal entry to skill', {\n userId: this.userId,\n entryId,\n skillId: skill.id,\n });\n\n return skill;\n }\n\n // ============================================================\n // SESSION MANAGEMENT\n // ============================================================\n\n /**\n * Start tracking a new session\n */\n async startSession(sessionId: string): Promise<void> {\n const summary: SessionSummary = {\n sessionId,\n startedAt: new Date().toISOString(),\n entriesCount: 0,\n correctionsCount: 0,\n decisionsCount: 0,\n keyLearnings: [],\n promotedSkillIds: [],\n };\n\n await this.redis.setex(\n this.key(REDIS_KEYS.sessionSummary(this.userId, sessionId)),\n CACHE_TTL.session,\n JSON.stringify(summary)\n );\n\n await this.redis.sadd(\n this.key(REDIS_KEYS.sessionsActive(this.userId)),\n sessionId\n );\n\n logger.info('Started session tracking', { userId: this.userId, sessionId });\n }\n\n /**\n * End a session and generate summary\n */\n async endSession(sessionId: string): Promise<SessionSummary | null> {\n const summaryData = await this.redis.get(\n this.key(REDIS_KEYS.sessionSummary(this.userId, sessionId))\n );\n\n if (!summaryData) {\n return null;\n }\n\n const summary = JSON.parse(summaryData) as SessionSummary;\n summary.endedAt = new Date().toISOString();\n\n // Count entries by type\n const entries = await this.getSessionJournal(sessionId);\n summary.entriesCount = entries.length;\n summary.correctionsCount = entries.filter(\n (e) => e.type === 'correction'\n ).length;\n summary.decisionsCount = entries.filter(\n (e) => e.type === 'decision'\n ).length;\n\n // Extract key learnings\n summary.keyLearnings = entries\n .filter((e) => e.type === 'correction' || e.type === 'resolution')\n .slice(0, 5)\n .map((e) => e.title);\n\n // Get promoted skills\n summary.promotedSkillIds = entries\n .filter((e) => e.promotedToSkillId)\n .map((e) => e.promotedToSkillId!);\n\n await this.redis.setex(\n this.key(REDIS_KEYS.sessionSummary(this.userId, sessionId)),\n CACHE_TTL.session,\n JSON.stringify(summary)\n );\n\n await this.redis.srem(\n this.key(REDIS_KEYS.sessionsActive(this.userId)),\n sessionId\n );\n\n logger.info('Ended session', {\n userId: this.userId,\n sessionId,\n entriesCount: summary.entriesCount,\n keyLearnings: summary.keyLearnings.length,\n });\n\n return summary;\n }\n\n /**\n * Get session summary\n */\n async getSessionSummary(sessionId: string): Promise<SessionSummary | null> {\n const data = await this.redis.get(\n this.key(REDIS_KEYS.sessionSummary(this.userId, sessionId))\n );\n\n if (!data) {\n return null;\n }\n\n return JSON.parse(data) as SessionSummary;\n }\n\n // ============================================================\n // KNOWLEDGE HYGIENE\n // ============================================================\n\n /**\n * Get skills eligible for promotion\n */\n async getPromotionCandidates(): Promise<Skill[]> {\n const ids = await this.redis.smembers(\n this.key(REDIS_KEYS.promotionCandidates(this.userId))\n );\n\n const skills: Skill[] = [];\n for (const id of ids) {\n const skill = await this.getSkill(id);\n if (skill && skill.validatedCount >= 3) {\n skills.push(skill);\n }\n }\n\n return skills;\n }\n\n /**\n * Promote a skill (increase priority)\n */\n async promoteSkill(id: string): Promise<Skill | null> {\n const skill = await this.getSkill(id);\n if (!skill) {\n return null;\n }\n\n const priorityOrder: SkillPriority[] = [\n 'low',\n 'medium',\n 'high',\n 'critical',\n ];\n const currentIndex = priorityOrder.indexOf(skill.priority);\n\n if (currentIndex < priorityOrder.length - 1) {\n skill.priority = priorityOrder[currentIndex + 1];\n skill.updatedAt = new Date().toISOString();\n\n await this.redis.setex(\n this.key(REDIS_KEYS.skill(this.userId, id)),\n calculateSkillTTL(skill.validatedCount),\n JSON.stringify(skill)\n );\n\n // Update category index with new score\n await this.redis.zadd(\n this.key(REDIS_KEYS.skillsByCategory(this.userId, skill.category)),\n this.priorityScore(skill.priority),\n id\n );\n\n // Remove from promotion candidates if now critical\n if (skill.priority === 'critical') {\n await this.redis.srem(\n this.key(REDIS_KEYS.promotionCandidates(this.userId)),\n id\n );\n }\n\n logger.info('Promoted skill', {\n userId: this.userId,\n id,\n newPriority: skill.priority,\n });\n }\n\n return skill;\n }\n\n /**\n * Archive stale skills (not validated in 90 days)\n */\n async archiveStaleSkills(daysThreshold: number = 90): Promise<number> {\n const cutoff = Date.now() - daysThreshold * 24 * 60 * 60 * 1000;\n let archivedCount = 0;\n\n // Get all recent skills\n const skillIds = await this.redis.zrangebyscore(\n this.key(REDIS_KEYS.skillsRecent(this.userId)),\n 0,\n cutoff\n );\n\n for (const id of skillIds) {\n const skill = await this.getSkill(id);\n if (skill && skill.priority !== 'critical') {\n // Check if it was validated recently\n if (\n !skill.lastValidated ||\n new Date(skill.lastValidated).getTime() < cutoff\n ) {\n // Downgrade to low priority instead of deleting\n if (skill.priority !== 'low') {\n skill.priority = 'low';\n skill.updatedAt = new Date().toISOString();\n await this.redis.setex(\n this.key(REDIS_KEYS.skill(this.userId, id)),\n calculateSkillTTL(skill.validatedCount),\n JSON.stringify(skill)\n );\n archivedCount++;\n }\n }\n }\n }\n\n logger.info('Archived stale skills', {\n userId: this.userId,\n archivedCount,\n daysThreshold,\n });\n\n return archivedCount;\n }\n\n // ============================================================\n // METRICS & UTILITIES\n // ============================================================\n\n /**\n * Get storage metrics\n */\n async getMetrics(): Promise<SkillStorageMetrics> {\n const [\n skillsTotal,\n toolSkills,\n workflowSkills,\n correctionSkills,\n patternSkills,\n preferenceSkills,\n pitfallSkills,\n optimizationSkills,\n journalTotal,\n sessionsActive,\n ] = await Promise.all([\n this.redis.zcard(this.key(REDIS_KEYS.skillsRecent(this.userId))),\n this.redis.zcard(\n this.key(REDIS_KEYS.skillsByCategory(this.userId, 'tool'))\n ),\n this.redis.zcard(\n this.key(REDIS_KEYS.skillsByCategory(this.userId, 'workflow'))\n ),\n this.redis.zcard(\n this.key(REDIS_KEYS.skillsByCategory(this.userId, 'correction'))\n ),\n this.redis.zcard(\n this.key(REDIS_KEYS.skillsByCategory(this.userId, 'pattern'))\n ),\n this.redis.zcard(\n this.key(REDIS_KEYS.skillsByCategory(this.userId, 'preference'))\n ),\n this.redis.zcard(\n this.key(REDIS_KEYS.skillsByCategory(this.userId, 'pitfall'))\n ),\n this.redis.zcard(\n this.key(REDIS_KEYS.skillsByCategory(this.userId, 'optimization'))\n ),\n this.redis.zcard(this.key(REDIS_KEYS.journalRecent(this.userId))),\n this.redis.scard(this.key(REDIS_KEYS.sessionsActive(this.userId))),\n ]);\n\n return {\n userId: this.userId,\n skillsTotal,\n skillsByCategory: {\n tool: toolSkills,\n workflow: workflowSkills,\n correction: correctionSkills,\n pattern: patternSkills,\n preference: preferenceSkills,\n pitfall: pitfallSkills,\n optimization: optimizationSkills,\n },\n journalEntriesTotal: journalTotal,\n sessionsTracked: sessionsActive,\n cacheHits: this.metrics.cacheHits,\n cacheMisses: this.metrics.cacheMisses,\n };\n }\n\n /**\n * Priority to numeric score for sorting\n */\n private priorityScore(priority: SkillPriority): number {\n const scores: Record<SkillPriority, number> = {\n critical: 1000,\n high: 100,\n medium: 10,\n low: 1,\n };\n return scores[priority];\n }\n\n /**\n * Close Redis connection\n */\n async close(): Promise<void> {\n await this.redis.quit();\n logger.info('SkillStorageService closed');\n }\n}\n\n// ============================================================\n// SINGLETON INSTANCES (per user)\n// ============================================================\n\nconst userStorageInstances = new Map<string, SkillStorageService>();\n\n/**\n * Get or create skill storage instance for a user\n */\nexport function getSkillStorage(\n config: SkillStorageConfig\n): SkillStorageService {\n const existing = userStorageInstances.get(config.userId);\n if (existing) {\n return existing;\n }\n\n const instance = new SkillStorageService(config);\n userStorageInstances.set(config.userId, instance);\n return instance;\n}\n\n/**\n * Initialize skill storage with Redis URL from environment\n */\nexport function initializeSkillStorage(\n userId: string,\n redisUrl?: string\n): SkillStorageService {\n const url = redisUrl || process.env['REDIS_URL'];\n\n if (!url) {\n throw new Error('REDIS_URL environment variable not set');\n }\n\n return getSkillStorage({ redisUrl: url, userId });\n}\n\n/**\n * Get default user ID from environment or generate one\n */\nexport function getDefaultUserId(): string {\n return (\n process.env['STACKMEMORY_USER_ID'] ||\n process.env['USER'] ||\n process.env['USERNAME'] ||\n 'default'\n );\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,3 +1,7 @@
|
|
|
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);
|
|
1
5
|
import { z } from "zod";
|
|
2
6
|
const SkillCategorySchema = z.enum([
|
|
3
7
|
"tool",
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/core/skills/types.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * Skill Storage Types\n * Types for persistent agent learning and skill memory\n */\n\nimport { z } from 'zod';\n\n// ============================================================\n// SKILL SCHEMAS\n// ============================================================\n\n/**\n * Skill category for organization\n */\nexport const SkillCategorySchema = z.enum([\n 'tool', // Tool-specific patterns\n 'workflow', // Process/workflow improvements\n 'correction', // User corrections to remember\n 'pattern', // Code/architecture patterns\n 'preference', // User preferences\n 'pitfall', // Things to avoid\n 'optimization', // Performance/efficiency tips\n]);\n\nexport type SkillCategory = z.infer<typeof SkillCategorySchema>;\n\n/**\n * Skill priority for retrieval ordering\n */\nexport const SkillPrioritySchema = z.enum([\n 'critical', // Always include in context\n 'high', // Include when relevant\n 'medium', // Include if space permits\n 'low', // Archive/reference only\n]);\n\nexport type SkillPriority = z.infer<typeof SkillPrioritySchema>;\n\n/**\n * Individual skill/learning entry\n */\nexport const SkillSchema = z.object({\n id: z.string().uuid(),\n\n // Content\n content: z.string().min(1).max(5000),\n summary: z.string().max(500).optional(),\n\n // Classification\n category: SkillCategorySchema,\n priority: SkillPrioritySchema.default('medium'),\n tags: z.array(z.string()).default([]),\n\n // Context\n tool: z.string().optional(), // Related tool name\n project: z.string().optional(), // Project context\n language: z.string().optional(), // Programming language\n framework: z.string().optional(), // Framework context\n\n // Validation tracking\n validatedCount: z.number().int().min(0).default(0),\n lastValidated: z.string().datetime().optional(),\n\n // Lifecycle\n createdAt: z.string().datetime(),\n updatedAt: z.string().datetime(),\n expiresAt: z.string().datetime().optional(),\n\n // Source tracking\n source: z.enum(['correction', 'observation', 'explicit', 'inferred']),\n sessionId: z.string().optional(),\n});\n\nexport type Skill = z.infer<typeof SkillSchema>;\n\n/**\n * Skill creation input\n */\nexport const CreateSkillSchema = SkillSchema.omit({\n id: true,\n createdAt: true,\n updatedAt: true,\n validatedCount: true,\n});\n\nexport type CreateSkillInput = z.infer<typeof CreateSkillSchema>;\n\n/**\n * Skill update input\n */\nexport const UpdateSkillSchema = SkillSchema.partial().extend({\n id: z.string().uuid(),\n});\n\nexport type UpdateSkillInput = z.infer<typeof UpdateSkillSchema>;\n\n// ============================================================\n// SESSION JOURNAL SCHEMAS\n// ============================================================\n\n/**\n * Session journal entry type\n */\nexport const JournalEntryTypeSchema = z.enum([\n 'decision', // Architectural/design decision\n 'correction', // User corrected agent behavior\n 'blocker', // Issue encountered\n 'resolution', // How an issue was resolved\n 'observation', // Noticed pattern or behavior\n 'outcome', // Result of an action\n]);\n\nexport type JournalEntryType = z.infer<typeof JournalEntryTypeSchema>;\n\n/**\n * Session journal entry\n */\nexport const JournalEntrySchema = z.object({\n id: z.string().uuid(),\n sessionId: z.string(),\n type: JournalEntryTypeSchema,\n\n // Content\n title: z.string().max(200),\n content: z.string().max(5000),\n\n // Context\n context: z\n .object({\n file: z.string().optional(),\n tool: z.string().optional(),\n command: z.string().optional(),\n })\n .optional(),\n\n // Outcome tracking\n outcome: z.enum(['success', 'failure', 'partial', 'pending']).optional(),\n\n // Timestamps\n createdAt: z.string().datetime(),\n\n // Link to promoted skill\n promotedToSkillId: z.string().uuid().optional(),\n});\n\nexport type JournalEntry = z.infer<typeof JournalEntrySchema>;\n\n/**\n * Session summary\n */\nexport const SessionSummarySchema = z.object({\n sessionId: z.string(),\n startedAt: z.string().datetime(),\n endedAt: z.string().datetime().optional(),\n\n // Stats\n entriesCount: z.number().int().min(0),\n correctionsCount: z.number().int().min(0),\n decisionsCount: z.number().int().min(0),\n\n // Key learnings from this session\n keyLearnings: z.array(z.string()).default([]),\n\n // Skills promoted from this session\n promotedSkillIds: z.array(z.string().uuid()).default([]),\n});\n\nexport type SessionSummary = z.infer<typeof SessionSummarySchema>;\n\n// ============================================================\n// QUERY SCHEMAS\n// ============================================================\n\n/**\n * Skill query filters\n */\nexport const SkillQuerySchema = z.object({\n // Filter by classification\n categories: z.array(SkillCategorySchema).optional(),\n priorities: z.array(SkillPrioritySchema).optional(),\n tags: z.array(z.string()).optional(),\n\n // Filter by context\n tool: z.string().optional(),\n project: z.string().optional(),\n language: z.string().optional(),\n framework: z.string().optional(),\n\n // Filter by validation\n minValidatedCount: z.number().int().min(0).optional(),\n\n // Pagination\n limit: z.number().int().min(1).max(100).default(50),\n offset: z.number().int().min(0).default(0),\n\n // Sorting\n sortBy: z\n .enum(['priority', 'validatedCount', 'createdAt', 'updatedAt'])\n .default('priority'),\n sortOrder: z.enum(['asc', 'desc']).default('desc'),\n});\n\nexport type SkillQuery = z.infer<typeof SkillQuerySchema>;\n\n// ============================================================\n// REDIS KEY PATTERNS\n// ============================================================\n\n/**\n * Redis key generators - all keys are namespaced by userId\n * Use 'global' as userId for shared/team skills\n */\nexport const REDIS_KEYS = {\n // Skills (namespaced by user)\n skill: (userId: string, id: string) => `user:${userId}:skill:${id}`,\n skillsByTool: (userId: string, tool: string) =>\n `user:${userId}:skills:tool:${tool}`,\n skillsByCategory: (userId: string, category: SkillCategory) =>\n `user:${userId}:skills:category:${category}`,\n skillsByTag: (userId: string, tag: string) =>\n `user:${userId}:skills:tag:${tag}`,\n skillsRecent: (userId: string) => `user:${userId}:skills:recent`,\n skillsValidated: (userId: string) => `user:${userId}:skills:validated`,\n\n // Session journal (namespaced by user)\n journalEntry: (userId: string, id: string) =>\n `user:${userId}:journal:entry:${id}`,\n journalSession: (userId: string, sessionId: string) =>\n `user:${userId}:journal:session:${sessionId}`,\n journalRecent: (userId: string) => `user:${userId}:journal:recent`,\n\n // Session tracking (namespaced by user)\n sessionSummary: (userId: string, sessionId: string) =>\n `user:${userId}:session:summary:${sessionId}`,\n sessionsActive: (userId: string) => `user:${userId}:sessions:active`,\n\n // Promotion tracking (namespaced by user)\n promotionCandidates: (userId: string) =>\n `user:${userId}:skills:promotion:candidates`,\n\n // Locks (global)\n syncLock: (resource: string) => `lock:skill:${resource}`,\n} as const;\n\n// ============================================================\n// CACHE TTL CONSTANTS (in seconds)\n// ============================================================\n\nexport const CACHE_TTL = {\n // Base skill TTL: 7 days minimum\n skillBase: 604800, // 7 days\n // Max skill TTL: 90 days for frequently used skills\n skillMax: 7776000, // 90 days\n // TTL increment per validation/use: +7 days\n skillIncrement: 604800, // 7 days\n\n skillIndex: 86400, // 1 day (was 1 hour)\n session: 604800, // 7 days\n journal: 2592000, // 30 days\n lock: 30, // 30 seconds\n} as const;\n\n/**\n * Calculate TTL for a skill based on usage\n * Base: 7 days, +7 days per validation, max 90 days\n */\nexport function calculateSkillTTL(validatedCount: number): number {\n const ttl = CACHE_TTL.skillBase + validatedCount * CACHE_TTL.skillIncrement;\n return Math.min(ttl, CACHE_TTL.skillMax);\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,3 +1,7 @@
|
|
|
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);
|
|
1
5
|
import { CloudClient } from "chromadb";
|
|
2
6
|
import { v4 as uuidv4 } from "uuid";
|
|
3
7
|
import { Logger } from "../monitoring/logger.js";
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/core/storage/chromadb-adapter.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * ChromaDB Storage Adapter for StackMemory\n *\n * Provides vector storage and semantic search capabilities for context data\n * using ChromaDB cloud service with user and team segmentation.\n */\n\nimport { CloudClient, Collection } from 'chromadb';\nimport { v4 as uuidv4 } from 'uuid';\nimport { Frame } from '../context/frame-manager.js';\nimport { Logger } from '../monitoring/logger.js';\n\ninterface ChromaDocument {\n id: string;\n document: string;\n metadata: {\n user_id: string;\n team_id?: string;\n frame_id: string;\n session_id: string;\n project_name: string;\n timestamp: number;\n type: 'frame' | 'decision' | 'observation' | 'context';\n score?: number;\n tags?: string[];\n };\n}\n\ninterface ChromaConfig {\n apiKey: string;\n tenant: string;\n database: string;\n collectionName?: string;\n}\n\nexport class ChromaDBAdapter {\n private client: CloudClient;\n private collection: Collection | null = null;\n private logger: Logger;\n private config: ChromaConfig;\n private userId: string;\n private teamId?: string;\n\n constructor(config: ChromaConfig, userId: string, teamId?: string) {\n this.config = config;\n this.userId = userId;\n this.teamId = teamId;\n this.logger = new Logger('ChromaDBAdapter');\n\n // Initialize ChromaDB client\n this.client = new CloudClient({\n apiKey: config.apiKey,\n tenant: config.tenant,\n database: config.database,\n });\n }\n\n async initialize(): Promise<void> {\n try {\n const collectionName =\n this.config.collectionName || 'stackmemory_contexts';\n\n // Get or create collection with metadata for filtering\n this.collection = await this.client.getOrCreateCollection({\n name: collectionName,\n metadata: {\n description: 'StackMemory context storage',\n version: '1.0.0',\n created_at: new Date().toISOString(),\n },\n });\n\n this.logger.info(`ChromaDB collection '${collectionName}' initialized`);\n } catch (error: unknown) {\n this.logger.error('Failed to initialize ChromaDB collection', error);\n throw error;\n }\n }\n\n /**\n * Store a frame in ChromaDB\n */\n async storeFrame(frame: Frame): Promise<void> {\n if (!this.collection) {\n throw new Error('ChromaDB not initialized');\n }\n\n try {\n // Prepare document from frame\n const frameMetadata: any = {\n user_id: this.userId,\n frame_id: frame.frameId,\n session_id: frame.sessionId || 'unknown',\n project_name: frame.projectName || 'default',\n timestamp: frame.timestamp,\n type: 'frame',\n score: frame.score,\n tags: frame.tags || [],\n };\n\n // Only add team_id if it exists\n if (this.teamId) {\n frameMetadata.team_id = this.teamId;\n }\n\n const document: ChromaDocument = {\n id: `frame_${frame.frameId}_${this.userId}`,\n document: this.frameToDocument(frame),\n metadata: frameMetadata,\n };\n\n // Add to ChromaDB\n await this.collection.add({\n ids: [document.id],\n documents: [document.document],\n metadatas: [document.metadata],\n });\n\n this.logger.debug(\n `Stored frame ${frame.frameId} for user ${this.userId}`\n );\n } catch (error: unknown) {\n this.logger.error(`Failed to store frame ${frame.frameId}`, error);\n throw error;\n }\n }\n\n /**\n * Store a decision or observation\n */\n async storeContext(\n type: 'decision' | 'observation',\n content: string,\n metadata?: Record<string, any>\n ): Promise<void> {\n if (!this.collection) {\n throw new Error('ChromaDB not initialized');\n }\n\n try {\n const contextId = `${type}_${uuidv4()}_${this.userId}`;\n\n const documentMetadata: any = {\n user_id: this.userId,\n frame_id: metadata?.frame_id || 'none',\n session_id: metadata?.session_id || 'unknown',\n project_name: metadata?.project_name || 'default',\n timestamp: Date.now(),\n type,\n ...metadata,\n };\n\n // Only add team_id if it exists (ChromaDB doesn't accept undefined values)\n if (this.teamId) {\n documentMetadata.team_id = this.teamId;\n }\n\n const document: ChromaDocument = {\n id: contextId,\n document: content,\n metadata: documentMetadata,\n };\n\n await this.collection.add({\n ids: [document.id],\n documents: [document.document],\n metadatas: [document.metadata],\n });\n\n this.logger.debug(`Stored ${type} for user ${this.userId}`);\n } catch (error: unknown) {\n this.logger.error(`Failed to store ${type}`, error);\n throw error;\n }\n }\n\n /**\n * Query contexts by semantic similarity\n */\n async queryContexts(\n query: string,\n limit: number = 10,\n filters?: {\n type?: string[];\n projectName?: string;\n sessionId?: string;\n startTime?: number;\n endTime?: number;\n }\n ): Promise<Array<{ content: string; metadata: any; distance: number }>> {\n if (!this.collection) {\n throw new Error('ChromaDB not initialized');\n }\n\n try {\n // Build where clause for filtering\n const whereClause: any = {\n user_id: this.userId,\n };\n\n // Add team filter if applicable\n if (this.teamId) {\n whereClause['$or'] = [\n { team_id: this.teamId },\n { user_id: this.userId },\n ];\n }\n\n // Add additional filters\n if (filters?.type && filters.type.length > 0) {\n whereClause.type = { $in: filters.type };\n }\n\n if (filters?.projectName) {\n whereClause.project_name = filters.projectName;\n }\n\n if (filters?.sessionId) {\n whereClause.session_id = filters.sessionId;\n }\n\n if (filters?.startTime || filters?.endTime) {\n whereClause.timestamp = {};\n if (filters.startTime) {\n whereClause.timestamp.$gte = filters.startTime;\n }\n if (filters.endTime) {\n whereClause.timestamp.$lte = filters.endTime;\n }\n }\n\n // Query ChromaDB\n const results = await this.collection.query({\n queryTexts: [query],\n nResults: limit,\n where: whereClause,\n include: ['documents', 'metadatas', 'distances'],\n });\n\n // Format results\n const contexts: Array<{\n content: string;\n metadata: any;\n distance: number;\n }> = [];\n\n if (results.documents && results.documents[0]) {\n for (let i = 0; i < results.documents[0].length; i++) {\n contexts.push({\n content: results.documents[0][i] || '',\n metadata: results.metadatas?.[0]?.[i] || {},\n distance: results.distances?.[0]?.[i] || 0,\n });\n }\n }\n\n this.logger.debug(`Found ${contexts.length} contexts for query`);\n return contexts;\n } catch (error: unknown) {\n this.logger.error('Failed to query contexts', error);\n throw error;\n }\n }\n\n /**\n * Get user's recent contexts\n */\n async getRecentContexts(\n limit: number = 20,\n type?: string\n ): Promise<Array<{ content: string; metadata: any }>> {\n if (!this.collection) {\n throw new Error('ChromaDB not initialized');\n }\n\n try {\n const whereClause: any = {\n user_id: this.userId,\n };\n\n if (type) {\n whereClause.type = type;\n }\n\n // Get all documents for the user (ChromaDB doesn't support direct ordering)\n const results = await this.collection.get({\n where: whereClause,\n include: ['documents', 'metadatas'],\n });\n\n // Sort by timestamp and limit\n const contexts: Array<{ content: string; metadata: any }> = [];\n\n if (results.documents) {\n const indexed = results.documents.map((doc, i) => ({\n content: doc || '',\n metadata: results.metadatas?.[i] || {},\n }));\n\n // Sort by timestamp descending\n indexed.sort(\n (a, b) => (b.metadata.timestamp || 0) - (a.metadata.timestamp || 0)\n );\n\n // Take limit\n contexts.push(...indexed.slice(0, limit));\n }\n\n return contexts;\n } catch (error: unknown) {\n this.logger.error('Failed to get recent contexts', error);\n throw error;\n }\n }\n\n /**\n * Delete old contexts (retention policy)\n */\n async deleteOldContexts(olderThanDays: number = 30): Promise<number> {\n if (!this.collection) {\n throw new Error('ChromaDB not initialized');\n }\n\n try {\n const cutoffTime = Date.now() - olderThanDays * 24 * 60 * 60 * 1000;\n\n // Get old documents\n const results = await this.collection.get({\n where: {\n user_id: this.userId,\n timestamp: { $lt: cutoffTime },\n },\n include: ['ids'],\n });\n\n if (!results.ids || results.ids.length === 0) {\n return 0;\n }\n\n // Delete old documents\n await this.collection.delete({\n ids: results.ids,\n });\n\n this.logger.info(`Deleted ${results.ids.length} old contexts`);\n return results.ids.length;\n } catch (error: unknown) {\n this.logger.error('Failed to delete old contexts', error);\n throw error;\n }\n }\n\n /**\n * Get team contexts (if user is part of a team)\n */\n async getTeamContexts(\n limit: number = 20\n ): Promise<Array<{ content: string; metadata: any }>> {\n if (!this.collection || !this.teamId) {\n return [];\n }\n\n try {\n const results = await this.collection.get({\n where: {\n team_id: this.teamId,\n },\n include: ['documents', 'metadatas'],\n limit,\n });\n\n const contexts: Array<{ content: string; metadata: any }> = [];\n\n if (results.documents) {\n for (let i = 0; i < results.documents.length; i++) {\n contexts.push({\n content: results.documents[i] || '',\n metadata: results.metadatas?.[i] || {},\n });\n }\n }\n\n return contexts;\n } catch (error: unknown) {\n this.logger.error('Failed to get team contexts', error);\n return [];\n }\n }\n\n /**\n * Convert frame to searchable document\n */\n private frameToDocument(frame: Frame): string {\n const parts = [\n `Frame: ${frame.title}`,\n `Type: ${frame.type}`,\n `Status: ${frame.status}`,\n ];\n\n if (frame.description) {\n parts.push(`Description: ${frame.description}`);\n }\n\n if (frame.inputs && frame.inputs.length > 0) {\n parts.push(`Inputs: ${frame.inputs.join(', ')}`);\n }\n\n if (frame.outputs && frame.outputs.length > 0) {\n parts.push(`Outputs: ${frame.outputs.join(', ')}`);\n }\n\n if (frame.tags && frame.tags.length > 0) {\n parts.push(`Tags: ${frame.tags.join(', ')}`);\n }\n\n if (frame.digest_json) {\n try {\n const digest = JSON.parse(frame.digest_json);\n if (digest.summary) {\n parts.push(`Summary: ${digest.summary}`);\n }\n if (digest.keyDecisions) {\n parts.push(`Decisions: ${digest.keyDecisions.join('. ')}`);\n }\n } catch {\n // Ignore parse errors\n }\n }\n\n return parts.join('\\n');\n }\n\n /**\n * Update team ID for a user\n */\n async updateTeamId(newTeamId: string): Promise<void> {\n this.teamId = newTeamId;\n this.logger.info(`Updated team ID to ${newTeamId} for user ${this.userId}`);\n }\n\n /**\n * Get storage statistics\n */\n async getStats(): Promise<{\n totalDocuments: number;\n userDocuments: number;\n teamDocuments?: number;\n documentsByType: Record<string, number>;\n }> {\n if (!this.collection) {\n throw new Error('ChromaDB not initialized');\n }\n\n try {\n // Get user documents\n const userResults = await this.collection.get({\n where: { user_id: this.userId },\n include: ['metadatas'],\n });\n\n const stats: any = {\n totalDocuments: 0,\n userDocuments: userResults.ids?.length || 0,\n documentsByType: {},\n };\n\n // Count by type\n if (userResults.metadatas) {\n for (const metadata of userResults.metadatas) {\n const type = metadata?.type || 'unknown';\n stats.documentsByType[type] = (stats.documentsByType[type] || 0) + 1;\n }\n }\n\n // Get team documents if applicable\n if (this.teamId) {\n const teamResults = await this.collection.get({\n where: { team_id: this.teamId },\n include: ['ids'],\n });\n stats.teamDocuments = teamResults.ids?.length || 0;\n }\n\n stats.totalDocuments = stats.userDocuments + (stats.teamDocuments || 0);\n\n return stats;\n } catch (error: unknown) {\n this.logger.error('Failed to get stats', error);\n throw error;\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/core/storage/infinite-storage.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * Infinite Storage System for StackMemory\n * Implements STA-287: Remote storage with TimeSeries DB + S3 + Redis\n *\n * Storage Tiers:\n * - Hot: Redis (< 1 hour, frequently accessed)\n * - Warm: TimeSeries DB (1 hour - 7 days)\n * - Cold: S3 Standard (7 days - 30 days)\n * - Archive: S3 Glacier (> 30 days)\n */\n\nimport {\n S3Client,\n PutObjectCommand,\n GetObjectCommand,\n ListObjectsV2Command,\n} from '@aws-sdk/client-s3';\nimport { createClient as createRedisClient } from 'redis';\nimport { Pool } from 'pg';\nimport { Logger } from '../monitoring/logger.js';\nimport { Frame } from '../context/frame-manager.js';\nimport { v4 as uuidv4 } from 'uuid';\nimport { compress, decompress } from '../utils/compression.js';\n\nexport interface StorageTier {\n name: 'hot' | 'warm' | 'cold' | 'archive';\n ageThresholdHours: number;\n storageClass: string;\n accessLatencyMs: number;\n}\n\nexport interface StorageConfig {\n redis: {\n url: string;\n ttlSeconds: number;\n maxMemoryMB: number;\n };\n timeseries: {\n connectionString: string;\n retentionDays: number;\n };\n s3: {\n bucket: string;\n region: string;\n accessKeyId?: string;\n secretAccessKey?: string;\n };\n tiers: StorageTier[];\n}\n\nexport interface StorageMetrics {\n totalObjects: number;\n tierDistribution: Record<string, number>;\n storageBytes: number;\n avgLatencyMs: number;\n p50LatencyMs: number;\n p99LatencyMs: number;\n}\n\nexport class InfiniteStorageSystem {\n private redisClient: any;\n private timeseriesPool: Pool;\n private s3Client: S3Client;\n private logger: Logger;\n private config: StorageConfig;\n private latencies: number[] = [];\n private migrationWorker: NodeJS.Timeout | null = null;\n\n constructor(config: StorageConfig) {\n this.config = config;\n this.logger = new Logger('InfiniteStorage');\n\n // Default storage tiers\n if (!config.tiers || config.tiers.length === 0) {\n this.config.tiers = [\n {\n name: 'hot',\n ageThresholdHours: 1,\n storageClass: 'MEMORY',\n accessLatencyMs: 5,\n },\n {\n name: 'warm',\n ageThresholdHours: 168,\n storageClass: 'TIMESERIES',\n accessLatencyMs: 50,\n },\n {\n name: 'cold',\n ageThresholdHours: 720,\n storageClass: 'S3_STANDARD',\n accessLatencyMs: 100,\n },\n {\n name: 'archive',\n ageThresholdHours: Infinity,\n storageClass: 'S3_GLACIER',\n accessLatencyMs: 3600000,\n },\n ];\n }\n }\n\n async initialize(): Promise<void> {\n try {\n // Initialize Redis (hot tier)\n if (this.config.redis?.url) {\n this.redisClient = createRedisClient({\n url: this.config.redis.url,\n });\n\n await this.redisClient.connect();\n\n // Configure Redis memory policy\n await this.redisClient.configSet('maxmemory-policy', 'allkeys-lru');\n if (this.config.redis.maxMemoryMB) {\n await this.redisClient.configSet(\n 'maxmemory',\n `${this.config.redis.maxMemoryMB}mb`\n );\n }\n\n this.logger.info('Redis client initialized for hot tier');\n }\n\n // Initialize TimeSeries DB (warm tier)\n if (this.config.timeseries?.connectionString) {\n this.timeseriesPool = new Pool({\n connectionString: this.config.timeseries.connectionString,\n max: 10,\n idleTimeoutMillis: 30000,\n });\n\n // Create TimeSeries tables if not exists\n await this.createTimeSeriesTables();\n this.logger.info('TimeSeries DB initialized for warm tier');\n }\n\n // Initialize S3 (cold/archive tiers)\n if (this.config.s3?.bucket) {\n this.s3Client = new S3Client({\n region: this.config.s3.region || 'us-east-1',\n credentials: this.config.s3.accessKeyId\n ? {\n accessKeyId: this.config.s3.accessKeyId,\n secretAccessKey: this.config.s3.secretAccessKey!,\n }\n : undefined,\n });\n\n this.logger.info('S3 client initialized for cold/archive tiers');\n }\n\n // Start background migration worker\n this.startMigrationWorker();\n\n this.logger.info('Infinite Storage System initialized');\n } catch (error: unknown) {\n this.logger.error('Failed to initialize storage system', error);\n throw error;\n }\n }\n\n /**\n * Create TimeSeries tables for warm tier storage\n */\n private async createTimeSeriesTables(): Promise<void> {\n const client = await this.timeseriesPool.connect();\n\n try {\n // Create hypertable for time-series data\n await client.query(`\n CREATE TABLE IF NOT EXISTS frame_timeseries (\n time TIMESTAMPTZ NOT NULL,\n frame_id TEXT NOT NULL,\n user_id TEXT NOT NULL,\n project_name TEXT,\n type TEXT,\n data JSONB,\n compressed_data BYTEA,\n storage_tier TEXT DEFAULT 'warm',\n access_count INTEGER DEFAULT 0,\n last_accessed TIMESTAMPTZ DEFAULT NOW(),\n PRIMARY KEY (time, frame_id)\n )\n `);\n\n // Create hypertable if using TimescaleDB\n await client\n .query(\n `\n SELECT create_hypertable('frame_timeseries', 'time', \n chunk_time_interval => INTERVAL '1 day',\n if_not_exists => TRUE)\n `\n )\n .catch(() => {\n // Fallback to regular partitioning if not TimescaleDB\n this.logger.info('Using standard PostgreSQL partitioning');\n });\n\n // Create indexes\n await client.query(`\n CREATE INDEX IF NOT EXISTS idx_frame_user ON frame_timeseries (user_id, time DESC);\n CREATE INDEX IF NOT EXISTS idx_frame_project ON frame_timeseries (project_name, time DESC);\n CREATE INDEX IF NOT EXISTS idx_frame_tier ON frame_timeseries (storage_tier);\n `);\n\n // Create compression policy (TimescaleDB specific)\n await client\n .query(\n `\n SELECT add_compression_policy('frame_timeseries', INTERVAL '7 days', if_not_exists => TRUE)\n `\n )\n .catch(() => {\n this.logger.info('Compression policy not available');\n });\n } finally {\n client.release();\n }\n }\n\n /**\n * Store a frame with automatic tier selection\n */\n async storeFrame(frame: Frame, userId: string): Promise<void> {\n const startTime = Date.now();\n\n try {\n const frameData = JSON.stringify(frame);\n const compressedData = await compress(frameData);\n const frameKey = `frame:${userId}:${frame.frameId}`;\n\n // Always store in hot tier first (Redis)\n if (this.redisClient) {\n await this.redisClient.setEx(\n frameKey,\n this.config.redis.ttlSeconds || 3600,\n compressedData\n );\n\n // Store metadata for quick lookups\n await this.redisClient.hSet(`meta:${frameKey}`, {\n userId,\n projectName: frame.projectName || 'default',\n type: frame.type,\n timestamp: frame.timestamp,\n tier: 'hot',\n });\n }\n\n // Also store in warm tier for durability\n if (this.timeseriesPool) {\n const client = await this.timeseriesPool.connect();\n\n try {\n await client.query(\n `\n INSERT INTO frame_timeseries (time, frame_id, user_id, project_name, type, data, compressed_data, storage_tier)\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8)\n ON CONFLICT (time, frame_id) DO UPDATE\n SET data = EXCLUDED.data,\n compressed_data = EXCLUDED.compressed_data,\n last_accessed = NOW(),\n access_count = frame_timeseries.access_count + 1\n `,\n [\n new Date(frame.timestamp),\n frame.frameId,\n userId,\n frame.projectName || 'default',\n frame.type,\n frame,\n compressedData,\n 'warm',\n ]\n );\n } finally {\n client.release();\n }\n }\n\n // Track latency\n const latency = Date.now() - startTime;\n this.trackLatency(latency);\n\n this.logger.debug(`Stored frame ${frame.frameId} in ${latency}ms`);\n } catch (error: unknown) {\n this.logger.error(`Failed to store frame ${frame.frameId}`, error);\n throw error;\n }\n }\n\n /**\n * Retrieve a frame with intelligent caching\n */\n async retrieveFrame(frameId: string, userId: string): Promise<Frame | null> {\n const startTime = Date.now();\n const frameKey = `frame:${userId}:${frameId}`;\n\n try {\n // Try hot tier first (Redis)\n if (this.redisClient) {\n const cached = await this.redisClient.get(frameKey);\n if (cached) {\n const decompressed = await decompress(cached);\n const frame = JSON.parse(decompressed);\n\n // Refresh TTL on access\n await this.redisClient.expire(\n frameKey,\n this.config.redis.ttlSeconds || 3600\n );\n\n const latency = Date.now() - startTime;\n this.trackLatency(latency);\n this.logger.debug(\n `Retrieved frame ${frameId} from hot tier in ${latency}ms`\n );\n\n return frame;\n }\n }\n\n // Try warm tier (TimeSeries DB)\n if (this.timeseriesPool) {\n const client = await this.timeseriesPool.connect();\n\n try {\n const result = await client.query(\n `\n SELECT data, compressed_data, storage_tier \n FROM frame_timeseries \n WHERE frame_id = $1 AND user_id = $2\n ORDER BY time DESC\n LIMIT 1\n `,\n [frameId, userId]\n );\n\n if (result.rows.length > 0) {\n const row = result.rows[0];\n let frame: Frame;\n\n if (row.compressed_data) {\n const decompressed = await decompress(row.compressed_data);\n frame = JSON.parse(decompressed);\n } else {\n frame = row.data;\n }\n\n // Update access stats\n await client.query(\n `\n UPDATE frame_timeseries \n SET last_accessed = NOW(), access_count = access_count + 1\n WHERE frame_id = $1 AND user_id = $2\n `,\n [frameId, userId]\n );\n\n // Promote to hot tier if frequently accessed\n if (this.redisClient) {\n await this.promoteToHotTier(frame, userId);\n }\n\n const latency = Date.now() - startTime;\n this.trackLatency(latency);\n this.logger.debug(\n `Retrieved frame ${frameId} from warm tier in ${latency}ms`\n );\n\n return frame;\n }\n } finally {\n client.release();\n }\n }\n\n // Try cold/archive tiers (S3)\n if (this.s3Client && this.config.s3.bucket) {\n const key = `frames/${userId}/${frameId}.json.gz`;\n\n try {\n const command = new GetObjectCommand({\n Bucket: this.config.s3.bucket,\n Key: key,\n });\n\n const response = await this.s3Client.send(command);\n const compressedData = await response.Body!.transformToByteArray();\n const decompressed = await decompress(Buffer.from(compressedData));\n const frame = JSON.parse(decompressed);\n\n // Promote to warmer tiers for future access\n await this.promoteFrame(frame, userId);\n\n const latency = Date.now() - startTime;\n this.trackLatency(latency);\n this.logger.debug(\n `Retrieved frame ${frameId} from cold tier in ${latency}ms`\n );\n\n return frame;\n } catch (error: any) {\n if (error.Code !== 'NoSuchKey') {\n throw error;\n }\n }\n }\n\n this.logger.debug(`Frame ${frameId} not found in any tier`);\n return null;\n } catch (error: unknown) {\n this.logger.error(`Failed to retrieve frame ${frameId}`, error);\n throw error;\n }\n }\n\n /**\n * Promote frame to hot tier for fast access\n */\n private async promoteToHotTier(frame: Frame, userId: string): Promise<void> {\n if (!this.redisClient) return;\n\n try {\n const frameKey = `frame:${userId}:${frame.frameId}`;\n const frameData = JSON.stringify(frame);\n const compressedData = await compress(frameData);\n\n await this.redisClient.setEx(\n frameKey,\n this.config.redis.ttlSeconds || 3600,\n compressedData\n );\n\n this.logger.debug(`Promoted frame ${frame.frameId} to hot tier`);\n } catch (error: unknown) {\n this.logger.error(`Failed to promote frame ${frame.frameId}`, error);\n }\n }\n\n /**\n * Promote frame through storage tiers\n */\n private async promoteFrame(frame: Frame, userId: string): Promise<void> {\n // Promote to warm tier\n if (this.timeseriesPool) {\n const client = await this.timeseriesPool.connect();\n\n try {\n const compressedData = await compress(JSON.stringify(frame));\n\n await client.query(\n `\n INSERT INTO frame_timeseries (time, frame_id, user_id, data, compressed_data, storage_tier)\n VALUES ($1, $2, $3, $4, $5, $6)\n ON CONFLICT (time, frame_id) DO UPDATE\n SET storage_tier = 'warm',\n last_accessed = NOW(),\n access_count = frame_timeseries.access_count + 1\n `,\n [\n new Date(frame.timestamp),\n frame.frameId,\n userId,\n frame,\n compressedData,\n 'warm',\n ]\n );\n } finally {\n client.release();\n }\n }\n\n // Also promote to hot tier\n await this.promoteToHotTier(frame, userId);\n }\n\n /**\n * Start background worker for tier migration\n */\n private startMigrationWorker(): void {\n // Run migration every hour\n this.migrationWorker = setInterval(\n async () => {\n await this.migrateAgedData();\n },\n 60 * 60 * 1000\n );\n\n this.logger.info('Migration worker started');\n }\n\n /**\n * Migrate aged data to appropriate storage tiers\n */\n private async migrateAgedData(): Promise<void> {\n this.logger.info('Starting tier migration...');\n\n if (!this.timeseriesPool) return;\n\n const client = await this.timeseriesPool.connect();\n\n try {\n // Find data eligible for cold storage (> 7 days old)\n const coldEligible = await client.query(`\n SELECT frame_id, user_id, data, compressed_data\n FROM frame_timeseries\n WHERE storage_tier = 'warm'\n AND time < NOW() - INTERVAL '7 days'\n AND last_accessed < NOW() - INTERVAL '7 days'\n LIMIT 1000\n `);\n\n // Migrate to S3 cold storage\n for (const row of coldEligible.rows) {\n await this.migrateToS3(row, 'STANDARD');\n\n // Update tier in database\n await client.query(\n `\n UPDATE frame_timeseries\n SET storage_tier = 'cold'\n WHERE frame_id = $1 AND user_id = $2\n `,\n [row.frame_id, row.user_id]\n );\n }\n\n // Find data eligible for archive (> 30 days old)\n const archiveEligible = await client.query(`\n SELECT frame_id, user_id, data, compressed_data\n FROM frame_timeseries\n WHERE storage_tier = 'cold'\n AND time < NOW() - INTERVAL '30 days'\n AND last_accessed < NOW() - INTERVAL '30 days'\n LIMIT 1000\n `);\n\n // Migrate to S3 Glacier\n for (const row of archiveEligible.rows) {\n await this.migrateToS3(row, 'GLACIER');\n\n // Update tier in database\n await client.query(\n `\n UPDATE frame_timeseries\n SET storage_tier = 'archive'\n WHERE frame_id = $1 AND user_id = $2\n `,\n [row.frame_id, row.user_id]\n );\n }\n\n this.logger.info(\n `Migration completed: ${coldEligible.rows.length} to cold, ${archiveEligible.rows.length} to archive`\n );\n } finally {\n client.release();\n }\n }\n\n /**\n * Migrate data to S3 storage\n */\n private async migrateToS3(row: any, storageClass: string): Promise<void> {\n if (!this.s3Client || !this.config.s3.bucket) return;\n\n try {\n const key = `frames/${row.user_id}/${row.frame_id}.json.gz`;\n const data =\n row.compressed_data || (await compress(JSON.stringify(row.data)));\n\n const command = new PutObjectCommand({\n Bucket: this.config.s3.bucket,\n Key: key,\n Body: data,\n StorageClass: storageClass,\n Metadata: {\n userId: row.user_id,\n frameId: row.frame_id,\n migratedAt: new Date().toISOString(),\n },\n });\n\n await this.s3Client.send(command);\n\n this.logger.debug(`Migrated frame ${row.frame_id} to S3 ${storageClass}`);\n } catch (error: unknown) {\n this.logger.error(`Failed to migrate frame ${row.frame_id} to S3`, error);\n throw error;\n }\n }\n\n /**\n * Track latency for performance monitoring\n */\n private trackLatency(latencyMs: number): void {\n this.latencies.push(latencyMs);\n\n // Keep only last 1000 measurements\n if (this.latencies.length > 1000) {\n this.latencies.shift();\n }\n }\n\n /**\n * Get storage metrics\n */\n async getMetrics(): Promise<StorageMetrics> {\n const metrics: StorageMetrics = {\n totalObjects: 0,\n tierDistribution: {},\n storageBytes: 0,\n avgLatencyMs: 0,\n p50LatencyMs: 0,\n p99LatencyMs: 0,\n };\n\n // Calculate latency percentiles\n if (this.latencies.length > 0) {\n const sorted = [...this.latencies].sort((a, b) => a - b);\n metrics.avgLatencyMs = sorted.reduce((a, b) => a + b, 0) / sorted.length;\n metrics.p50LatencyMs = sorted[Math.floor(sorted.length * 0.5)];\n metrics.p99LatencyMs = sorted[Math.floor(sorted.length * 0.99)];\n }\n\n // Get tier distribution from TimeSeries DB\n if (this.timeseriesPool) {\n const client = await this.timeseriesPool.connect();\n\n try {\n const result = await client.query(`\n SELECT \n storage_tier,\n COUNT(*) as count,\n SUM(pg_column_size(compressed_data)) as bytes\n FROM frame_timeseries\n GROUP BY storage_tier\n `);\n\n for (const row of result.rows) {\n metrics.tierDistribution[row.storage_tier] = parseInt(row.count);\n metrics.storageBytes += parseInt(row.bytes || 0);\n metrics.totalObjects += parseInt(row.count);\n }\n } finally {\n client.release();\n }\n }\n\n return metrics;\n }\n\n /**\n * Cleanup and shutdown\n */\n async shutdown(): Promise<void> {\n if (this.migrationWorker) {\n clearInterval(this.migrationWorker);\n }\n\n if (this.redisClient) {\n await this.redisClient.quit();\n }\n\n if (this.timeseriesPool) {\n await this.timeseriesPool.end();\n }\n\n this.logger.info('Infinite Storage System shut down');\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,3 +1,7 @@
|
|
|
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);
|
|
1
5
|
import { createClient } from "redis";
|
|
2
6
|
import {
|
|
3
7
|
S3Client,
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/core/storage/railway-optimized-storage.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * Railway-Optimized 3-Tier Storage System\n * Tier 1: Redis (Hot) - Last 24 hours, instant access\n * Tier 2: Railway Buckets (Warm) - 1-30 days, S3-compatible\n * Tier 3: GCS (Cold) - 30+ days, cost-effective archive\n */\n\nimport { createClient, RedisClientType } from 'redis';\nimport {\n S3Client,\n PutObjectCommand,\n GetObjectCommand,\n DeleteObjectCommand,\n HeadObjectCommand,\n} from '@aws-sdk/client-s3';\nimport { Storage } from '@google-cloud/storage';\nimport Database from 'better-sqlite3';\nimport { logger } from '../monitoring/logger.js';\nimport { Trace, CompressedTrace, ToolCall } from '../trace/types.js';\nimport { ConfigManager } from '../config/config-manager.js';\nimport * as zlib from 'zlib';\nimport { promisify } from 'util';\n// Type-safe environment variable access\nfunction getEnv(key: string, defaultValue?: string): string {\n const value = process.env[key];\n if (value === undefined) {\n if (defaultValue !== undefined) return defaultValue;\n throw new Error(`Environment variable ${key} is required`);\n }\n return value;\n}\n\nfunction getOptionalEnv(key: string): string | undefined {\n return process.env[key];\n}\n\nconst gzipAsync = promisify(zlib.gzip);\nconst gunzipAsync = promisify(zlib.gunzip);\n\nexport enum StorageTier {\n HOT = 'hot', // Redis: < 24 hours\n WARM = 'warm', // Railway Buckets: 1-30 days\n COLD = 'cold', // GCS: 30+ days\n}\n\nexport interface RailwayStorageConfig {\n redis: {\n url: string;\n ttlSeconds: number;\n maxMemoryMb: number;\n };\n railwayBuckets: {\n endpoint: string;\n bucket: string;\n accessKeyId: string;\n secretAccessKey: string;\n region: string;\n };\n gcs: {\n bucketName: string;\n projectId: string;\n keyFilename?: string;\n };\n tiers: {\n hotHours: number; // Hours to keep in Redis\n warmDays: number; // Days to keep in Railway Buckets\n compressionScore: number; // Score threshold for early compression\n };\n}\n\nexport const DEFAULT_RAILWAY_CONFIG: RailwayStorageConfig = {\n redis: {\n url: process.env['REDIS_URL'] || 'redis://localhost:6379',\n ttlSeconds: 86400, // 24 hours\n maxMemoryMb: 100, // 100MB Redis limit\n },\n railwayBuckets: {\n endpoint:\n process.env['RAILWAY_BUCKET_ENDPOINT'] || 'https://buckets.railway.app',\n bucket: process.env['RAILWAY_BUCKET_NAME'] || 'stackmemory-warm',\n accessKeyId: process.env['RAILWAY_BUCKET_ACCESS_KEY'] || '',\n secretAccessKey: process.env['RAILWAY_BUCKET_SECRET_KEY'] || '',\n region: 'us-east-1',\n },\n gcs: {\n bucketName: process.env['GCS_BUCKET'] || 'stackmemory-cold',\n projectId: process.env['GCP_PROJECT_ID'] || 'stackmemory',\n keyFilename: process.env['GCP_KEY_FILE'],\n },\n tiers: {\n hotHours: 24,\n warmDays: 30,\n compressionScore: 0.4,\n },\n};\n\ninterface StorageMetrics {\n tier: StorageTier;\n originalSize: number;\n compressedSize: number;\n compressionRatio: number;\n accessCount: number;\n lastAccessed: number;\n migrationTime?: number;\n}\n\n/**\n * Railway-optimized storage manager with 3-tier architecture\n */\nexport class RailwayOptimizedStorage {\n private redisClient?: RedisClientType;\n private railwayS3?: S3Client;\n private gcsStorage?: Storage;\n private localDb: Database.Database;\n private config: RailwayStorageConfig;\n private configManager: ConfigManager;\n private metricsCache: Map<string, StorageMetrics> = new Map();\n\n private initialized: Promise<void>;\n\n constructor(\n localDb: Database.Database,\n configManager: ConfigManager,\n config?: Partial<RailwayStorageConfig>\n ) {\n this.localDb = localDb;\n this.configManager = configManager;\n this.config = { ...DEFAULT_RAILWAY_CONFIG, ...config };\n\n this.initializeSchema();\n this.initialized = this.initializeClients();\n }\n\n /**\n * Initialize storage clients\n */\n private async initializeClients(): Promise<void> {\n // Initialize Redis\n if (this.config.redis.url) {\n try {\n this.redisClient = createClient({ url: this.config.redis.url });\n\n this.redisClient.on('error', (err) => {\n logger.error('Redis client error', err);\n });\n\n await this.redisClient.connect();\n\n // Configure Redis memory policy\n await this.redisClient.configSet('maxmemory-policy', 'allkeys-lru');\n\n logger.info('Redis connected for hot tier storage');\n } catch (error: unknown) {\n logger.warn(\n 'Redis connection failed, falling back to SQLite only',\n error\n );\n }\n }\n\n // Initialize Railway S3-compatible buckets\n if (this.config.railwayBuckets.accessKeyId) {\n this.railwayS3 = new S3Client({\n endpoint: this.config.railwayBuckets.endpoint,\n region: this.config.railwayBuckets.region,\n credentials: {\n accessKeyId: this.config.railwayBuckets.accessKeyId,\n secretAccessKey: this.config.railwayBuckets.secretAccessKey,\n },\n forcePathStyle: true, // Required for Railway buckets\n });\n\n logger.info('Railway Buckets configured for warm tier');\n }\n\n // Initialize GCS for cold storage\n if (this.config.gcs.projectId) {\n try {\n this.gcsStorage = new Storage({\n projectId: this.config.gcs.projectId,\n keyFilename: this.config.gcs.keyFilename,\n });\n\n logger.info('GCS configured for cold tier storage');\n } catch (error: unknown) {\n logger.warn('GCS setup failed, will use Railway buckets only', error);\n }\n }\n }\n\n /**\n * Initialize database schema for tracking\n */\n private initializeSchema(): void {\n this.localDb.exec(`\n CREATE TABLE IF NOT EXISTS storage_tiers (\n trace_id TEXT PRIMARY KEY,\n tier TEXT NOT NULL,\n location TEXT NOT NULL,\n original_size INTEGER,\n compressed_size INTEGER,\n compression_ratio REAL,\n access_count INTEGER DEFAULT 0,\n last_accessed INTEGER,\n created_at INTEGER,\n migrated_at INTEGER,\n score REAL,\n FOREIGN KEY (trace_id) REFERENCES traces(id) ON DELETE CASCADE\n )\n `);\n\n this.localDb.exec(`\n CREATE INDEX IF NOT EXISTS idx_storage_tier ON storage_tiers(tier);\n CREATE INDEX IF NOT EXISTS idx_storage_created ON storage_tiers(created_at);\n CREATE INDEX IF NOT EXISTS idx_storage_accessed ON storage_tiers(last_accessed);\n `);\n }\n\n /**\n * Store a trace in the appropriate tier\n */\n async storeTrace(trace: Trace): Promise<StorageTier> {\n // Ensure clients are initialized\n await this.initialized;\n\n const score = trace.score;\n const age = Date.now() - trace.metadata.startTime;\n const ageHours = age / (1000 * 60 * 60);\n\n // Determine tier based on age and score\n let tier: StorageTier;\n if (\n ageHours < this.config.tiers.hotHours &&\n score > this.config.tiers.compressionScore\n ) {\n tier = StorageTier.HOT;\n } else if (ageHours < this.config.tiers.warmDays * 24) {\n tier = StorageTier.WARM;\n } else {\n tier = StorageTier.COLD;\n }\n\n // Store in appropriate tier\n switch (tier) {\n case StorageTier.HOT:\n await this.storeInRedis(trace);\n break;\n case StorageTier.WARM:\n await this.storeInRailwayBuckets(trace);\n break;\n case StorageTier.COLD:\n await this.storeInGCS(trace);\n break;\n }\n\n // Track in database\n this.trackStorage(trace.id, tier, trace);\n\n return tier;\n }\n\n /**\n * Store trace in Redis (hot tier)\n */\n private async storeInRedis(trace: Trace): Promise<void> {\n if (!this.redisClient) {\n // Fallback to local SQLite if Redis unavailable\n return;\n }\n\n try {\n const key = `trace:${trace.id}`;\n const data = JSON.stringify(trace);\n\n // Compress if large\n let storedData: string;\n if (data.length > 10000) {\n const compressed = await gzipAsync(data);\n storedData = compressed.toString('base64');\n await this.redisClient.hSet(key, {\n data: storedData,\n compressed: 'true',\n score: trace.score.toString(),\n type: trace.type,\n timestamp: trace.metadata.startTime.toString(),\n });\n } else {\n storedData = data;\n await this.redisClient.hSet(key, {\n data: storedData,\n compressed: 'false',\n score: trace.score.toString(),\n type: trace.type,\n timestamp: trace.metadata.startTime.toString(),\n });\n }\n\n // Set TTL\n await this.redisClient.expire(key, this.config.redis.ttlSeconds);\n\n // Add to sorted set for efficient retrieval\n await this.redisClient.zAdd('traces:by_score', {\n score: trace.score,\n value: trace.id,\n });\n\n await this.redisClient.zAdd('traces:by_time', {\n score: trace.metadata.startTime,\n value: trace.id,\n });\n\n logger.debug('Stored trace in Redis', {\n traceId: trace.id,\n size: data.length,\n compressed: data.length > 10000,\n });\n } catch (error: unknown) {\n logger.error('Failed to store in Redis', error);\n throw error;\n }\n }\n\n /**\n * Store trace in Railway Buckets (warm tier)\n */\n private async storeInRailwayBuckets(trace: Trace): Promise<void> {\n if (!this.railwayS3) {\n throw new Error('Railway Buckets not configured');\n }\n\n try {\n // Compress trace\n const data = JSON.stringify(trace);\n const compressed = await gzipAsync(data);\n\n // Generate key with date partitioning\n const date = new Date(trace.metadata.startTime);\n const key = `traces/${date.getFullYear()}/${String(date.getMonth() + 1).padStart(2, '0')}/${String(date.getDate()).padStart(2, '0')}/${trace.id}.json.gz`;\n\n // Upload to Railway Bucket\n const command = new PutObjectCommand({\n Bucket: this.config.railwayBuckets.bucket,\n Key: key,\n Body: compressed,\n ContentType: 'application/gzip',\n Metadata: {\n 'trace-id': trace.id,\n 'trace-type': trace.type,\n 'trace-score': trace.score.toString(),\n 'original-size': data.length.toString(),\n 'compressed-size': compressed.length.toString(),\n },\n });\n\n await this.railwayS3.send(command);\n\n // Remove from Redis if exists\n if (this.redisClient) {\n await this.redisClient.del(`trace:${trace.id}`);\n }\n\n logger.info('Stored trace in Railway Buckets', {\n traceId: trace.id,\n key,\n originalSize: data.length,\n compressedSize: compressed.length,\n compressionRatio: (1 - compressed.length / data.length).toFixed(2),\n });\n } catch (error: unknown) {\n logger.error('Failed to store in Railway Buckets', error);\n throw error;\n }\n }\n\n /**\n * Store trace in GCS (cold tier)\n */\n private async storeInGCS(trace: Trace): Promise<void> {\n if (!this.gcsStorage) {\n // Fallback to Railway Buckets if GCS not available\n return this.storeInRailwayBuckets(trace);\n }\n\n try {\n // Heavy compression for cold storage\n const minimal = this.createMinimalTrace(trace);\n const data = JSON.stringify(minimal);\n const compressed = await gzipAsync(data);\n\n // Generate key with year/month partitioning\n const date = new Date(trace.metadata.startTime);\n const key = `archive/${date.getFullYear()}/${String(date.getMonth() + 1).padStart(2, '0')}/${trace.id}.json.gz`;\n\n // Upload to GCS with Coldline storage class\n const bucket = this.gcsStorage.bucket(this.config.gcs.bucketName);\n const file = bucket.file(key);\n\n await file.save(compressed, {\n metadata: {\n contentType: 'application/gzip',\n metadata: {\n traceId: trace.id,\n traceType: trace.type,\n score: trace.score.toString(),\n originalTools: trace.tools.length.toString(),\n },\n },\n storageClass: 'COLDLINE', // Use Coldline for cost optimization\n });\n\n // Remove from warm tier if exists\n if (this.railwayS3) {\n try {\n const warmKey = this.getWarmTierKey(trace);\n await this.railwayS3.send(\n new DeleteObjectCommand({\n Bucket: this.config.railwayBuckets.bucket,\n Key: warmKey,\n })\n );\n } catch (error: unknown) {\n // Ignore deletion errors\n }\n }\n\n logger.info('Archived trace to GCS', {\n traceId: trace.id,\n key,\n originalSize: JSON.stringify(trace).length,\n compressedSize: compressed.length,\n });\n } catch (error: unknown) {\n logger.error('Failed to store in GCS', error);\n throw error;\n }\n }\n\n /**\n * Create minimal trace for cold storage\n */\n private createMinimalTrace(trace: Trace): any {\n // Keep only essential information\n return {\n id: trace.id,\n type: trace.type,\n score: trace.score,\n summary: trace.summary,\n metadata: {\n startTime: trace.metadata.startTime,\n endTime: trace.metadata.endTime,\n filesModified: trace.metadata.filesModified.length,\n errorsCount: trace.metadata.errorsEncountered.length,\n decisionsCount: trace.metadata.decisionsRecorded.length,\n causalChain: trace.metadata.causalChain,\n },\n toolSummary: {\n count: trace.tools.length,\n types: [...new Set(trace.tools.map((t: any) => t.tool))],\n firstTool: trace.tools[0]?.tool,\n lastTool: trace.tools[trace.tools.length - 1]?.tool,\n },\n compressed: trace.compressed,\n };\n }\n\n /**\n * Retrieve a trace from any tier\n */\n async retrieveTrace(traceId: string): Promise<Trace | null> {\n // Ensure clients are initialized\n await this.initialized;\n\n // Check tier location\n const location = this.localDb\n .prepare('SELECT tier, location FROM storage_tiers WHERE trace_id = ?')\n .get(traceId) as any;\n\n if (!location) {\n return null;\n }\n\n // Update access metrics\n this.localDb\n .prepare(\n 'UPDATE storage_tiers SET access_count = access_count + 1, last_accessed = ? WHERE trace_id = ?'\n )\n .run(Date.now(), traceId);\n\n // Retrieve based on tier\n switch (location.tier) {\n case StorageTier.HOT:\n return this.retrieveFromRedis(traceId);\n case StorageTier.WARM:\n return this.retrieveFromRailwayBuckets(traceId, location.location);\n case StorageTier.COLD:\n return this.retrieveFromGCS(traceId, location.location);\n default:\n return null;\n }\n }\n\n /**\n * Retrieve from Redis\n */\n private async retrieveFromRedis(traceId: string): Promise<Trace | null> {\n if (!this.redisClient) return null;\n\n try {\n const key = `trace:${traceId}`;\n const data = await this.redisClient.hGetAll(key);\n\n if (!data || !data.data) return null;\n\n let traceData: string;\n if (data.compressed === 'true') {\n const compressed = Buffer.from(data.data, 'base64');\n const decompressed = await gunzipAsync(compressed);\n traceData = decompressed.toString();\n } else {\n traceData = data.data;\n }\n\n return JSON.parse(traceData);\n } catch (error: unknown) {\n logger.error('Failed to retrieve from Redis', error);\n return null;\n }\n }\n\n /**\n * Retrieve from Railway Buckets\n */\n private async retrieveFromRailwayBuckets(\n traceId: string,\n key: string\n ): Promise<Trace | null> {\n if (!this.railwayS3) return null;\n\n try {\n const command = new GetObjectCommand({\n Bucket: this.config.railwayBuckets.bucket,\n Key: key,\n });\n\n const response = await this.railwayS3.send(command);\n const compressed = await response.Body?.transformToByteArray();\n\n if (!compressed) return null;\n\n const decompressed = await gunzipAsync(Buffer.from(compressed));\n return JSON.parse(decompressed.toString());\n } catch (error: unknown) {\n logger.error('Failed to retrieve from Railway Buckets', error);\n return null;\n }\n }\n\n /**\n * Retrieve from GCS\n */\n private async retrieveFromGCS(\n traceId: string,\n key: string\n ): Promise<Trace | null> {\n if (!this.gcsStorage) return null;\n\n try {\n const bucket = this.gcsStorage.bucket(this.config.gcs.bucketName);\n const file = bucket.file(key);\n\n const [compressed] = await file.download();\n const decompressed = await gunzipAsync(compressed);\n\n // Note: Returns minimal trace from cold storage\n return JSON.parse(decompressed.toString());\n } catch (error: unknown) {\n logger.error('Failed to retrieve from GCS', error);\n return null;\n }\n }\n\n /**\n * Track storage in database\n */\n private trackStorage(traceId: string, tier: StorageTier, trace: Trace): void {\n const originalSize = JSON.stringify(trace).length;\n const compressedSize = Math.floor(originalSize * 0.3); // Estimate\n\n this.localDb\n .prepare(\n `\n INSERT OR REPLACE INTO storage_tiers (\n trace_id, tier, location, original_size, compressed_size,\n compression_ratio, access_count, last_accessed, created_at,\n migrated_at, score\n ) VALUES (?, ?, ?, ?, ?, ?, 0, ?, ?, ?, ?)\n `\n )\n .run(\n traceId,\n tier,\n this.getStorageLocation(trace, tier),\n originalSize,\n compressedSize,\n 1 - compressedSize / originalSize,\n Date.now(),\n trace.metadata.startTime,\n Date.now(),\n trace.score\n );\n }\n\n /**\n * Get storage location key\n */\n private getStorageLocation(trace: Trace, tier: StorageTier): string {\n const date = new Date(trace.metadata.startTime);\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n\n switch (tier) {\n case StorageTier.HOT:\n return `redis:trace:${trace.id}`;\n case StorageTier.WARM:\n return `traces/${year}/${month}/${day}/${trace.id}.json.gz`;\n case StorageTier.COLD:\n return `archive/${year}/${month}/${trace.id}.json.gz`;\n }\n }\n\n /**\n * Get warm tier key for a trace\n */\n private getWarmTierKey(trace: Trace): string {\n const date = new Date(trace.metadata.startTime);\n return `traces/${date.getFullYear()}/${String(date.getMonth() + 1).padStart(2, '0')}/${String(date.getDate()).padStart(2, '0')}/${trace.id}.json.gz`;\n }\n\n /**\n * Migrate traces between tiers based on age\n */\n async migrateTiers(): Promise<{\n hotToWarm: number;\n warmToCold: number;\n errors: string[];\n }> {\n const results = {\n hotToWarm: 0,\n warmToCold: 0,\n errors: [] as string[],\n };\n\n const now = Date.now();\n\n // Find traces to migrate\n const candidates = this.localDb\n .prepare(\n `\n SELECT trace_id, tier, created_at, score\n FROM storage_tiers\n WHERE tier != 'cold'\n ORDER BY created_at ASC\n `\n )\n .all() as any[];\n\n for (const candidate of candidates) {\n const ageHours = (now - candidate.created_at) / (1000 * 60 * 60);\n\n try {\n if (\n candidate.tier === StorageTier.HOT &&\n ageHours > this.config.tiers.hotHours\n ) {\n // Migrate hot \u2192 warm\n const trace = await this.retrieveTrace(candidate.trace_id);\n if (trace) {\n await this.storeInRailwayBuckets(trace);\n this.trackStorage(candidate.trace_id, StorageTier.WARM, trace);\n results.hotToWarm++;\n }\n } else if (\n candidate.tier === StorageTier.WARM &&\n ageHours > this.config.tiers.warmDays * 24\n ) {\n // Migrate warm \u2192 cold\n const trace = await this.retrieveTrace(candidate.trace_id);\n if (trace) {\n await this.storeInGCS(trace);\n this.trackStorage(candidate.trace_id, StorageTier.COLD, trace);\n results.warmToCold++;\n }\n }\n } catch (error: unknown) {\n results.errors.push(\n `Failed to migrate ${candidate.trace_id}: ${error}`\n );\n }\n }\n\n logger.info('Tier migration completed', results);\n return results;\n }\n\n /**\n * Get storage statistics\n */\n getStorageStats(): any {\n const tierStats = this.localDb\n .prepare(\n `\n SELECT \n tier,\n COUNT(*) as count,\n SUM(original_size) as total_original,\n SUM(compressed_size) as total_compressed,\n AVG(compression_ratio) as avg_compression,\n AVG(access_count) as avg_access\n FROM storage_tiers\n GROUP BY tier\n `\n )\n .all();\n\n const ageDistribution = this.localDb\n .prepare(\n `\n SELECT \n CASE \n WHEN (? - created_at) / 3600000 < 24 THEN '< 24h'\n WHEN (? - created_at) / 86400000 < 7 THEN '1-7d'\n WHEN (? - created_at) / 86400000 < 30 THEN '7-30d'\n ELSE '30d+'\n END as age_group,\n COUNT(*) as count\n FROM storage_tiers\n GROUP BY age_group\n `\n )\n .all(Date.now(), Date.now(), Date.now());\n\n return {\n byTier: tierStats,\n byAge: ageDistribution,\n totalTraces: tierStats.reduce((sum: number, t: any) => sum + t.count, 0),\n totalSize: tierStats.reduce(\n (sum: number, t: any) => sum + t.total_original,\n 0\n ),\n compressedSize: tierStats.reduce(\n (sum: number, t: any) => sum + t.total_compressed,\n 0\n ),\n };\n }\n\n /**\n * Clean up expired data\n */\n async cleanup(): Promise<number> {\n let cleaned = 0;\n\n // Remove old entries from storage_tiers table\n const cutoff = Date.now() - 90 * 24 * 60 * 60 * 1000; // 90 days\n\n const result = this.localDb\n .prepare(\n `\n DELETE FROM storage_tiers\n WHERE tier = 'cold' AND created_at < ? AND access_count = 0\n `\n )\n .run(cutoff);\n\n cleaned = result.changes;\n\n logger.info('Cleanup completed', { removed: cleaned });\n return cleaned;\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["StorageTier"]
|
|
7
7
|
}
|