@stackmemoryai/stackmemory 0.5.57 → 0.5.59
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/codex-smd +6 -0
- package/dist/cli/codex-sm-danger.js +21 -0
- package/dist/cli/codex-sm-danger.js.map +7 -0
- package/dist/cli/commands/handoff.js +33 -3
- package/dist/cli/commands/handoff.js.map +2 -2
- package/dist/cli/commands/search.js +20 -3
- package/dist/cli/commands/search.js.map +2 -2
- package/dist/core/database/sqlite-adapter.js +13 -3
- package/dist/core/database/sqlite-adapter.js.map +2 -2
- package/dist/core/errors/error-utils.js +208 -0
- package/dist/core/errors/error-utils.js.map +7 -0
- package/dist/core/errors/index.js +13 -4
- package/dist/core/errors/index.js.map +2 -2
- package/dist/core/merge/unified-merge-resolver.js +303 -0
- package/dist/core/merge/unified-merge-resolver.js.map +7 -0
- package/dist/core/monitoring/logger.js +61 -9
- package/dist/core/monitoring/logger.js.map +2 -2
- package/dist/core/security/index.js +35 -0
- package/dist/core/security/index.js.map +7 -0
- package/dist/core/security/input-sanitizer.js +321 -0
- package/dist/core/security/input-sanitizer.js.map +7 -0
- package/dist/core/session/enhanced-handoff.js +136 -2
- package/dist/core/session/enhanced-handoff.js.map +3 -3
- package/dist/integrations/linear/client.js +5 -1
- package/dist/integrations/linear/client.js.map +2 -2
- package/dist/integrations/mcp/remote-server.js +27 -36
- package/dist/integrations/mcp/remote-server.js.map +2 -2
- package/dist/integrations/mcp/server.js +44 -29
- package/dist/integrations/mcp/server.js.map +3 -3
- package/dist/scripts/benchmark-performance.js +48 -0
- package/dist/scripts/benchmark-performance.js.map +7 -0
- package/dist/scripts/check-redis.js +42 -0
- package/dist/scripts/check-redis.js.map +7 -0
- package/dist/scripts/initialize.js +116 -0
- package/dist/scripts/initialize.js.map +7 -0
- package/dist/scripts/list-linear-tasks.js +124 -0
- package/dist/scripts/list-linear-tasks.js.map +7 -0
- package/dist/scripts/measure-handoff-impact.js +340 -0
- package/dist/scripts/measure-handoff-impact.js.map +7 -0
- package/dist/scripts/query-chromadb.js +160 -0
- package/dist/scripts/query-chromadb.js.map +7 -0
- package/dist/scripts/show-linear-summary.js +119 -0
- package/dist/scripts/show-linear-summary.js.map +7 -0
- package/dist/scripts/simple-swarm-demo.js +90 -0
- package/dist/scripts/simple-swarm-demo.js.map +7 -0
- package/dist/scripts/status.js +155 -0
- package/dist/scripts/status.js.map +7 -0
- package/dist/scripts/test-chromadb-sync.js +192 -0
- package/dist/scripts/test-chromadb-sync.js.map +7 -0
- package/dist/scripts/test-ralph-iteration-fix.js +86 -0
- package/dist/scripts/test-ralph-iteration-fix.js.map +7 -0
- package/dist/scripts/test-ralph-iterations.js +121 -0
- package/dist/scripts/test-ralph-iterations.js.map +7 -0
- package/dist/scripts/test-redis-storage.js +389 -0
- package/dist/scripts/test-redis-storage.js.map +7 -0
- package/dist/scripts/test-simple-ralph-state-sync.js +115 -0
- package/dist/scripts/test-simple-ralph-state-sync.js.map +7 -0
- package/dist/scripts/test-swarm-fixes.js +125 -0
- package/dist/scripts/test-swarm-fixes.js.map +7 -0
- package/dist/scripts/test-swarm-tui.js +23 -0
- package/dist/scripts/test-swarm-tui.js.map +7 -0
- package/dist/scripts/test-tui-shortcuts.js +52 -0
- package/dist/scripts/test-tui-shortcuts.js.map +7 -0
- package/dist/scripts/validate-tui-shortcuts.js +60 -0
- package/dist/scripts/validate-tui-shortcuts.js.map +7 -0
- package/dist/src/agents/core/agent-task-manager.js +527 -0
- package/dist/src/agents/core/agent-task-manager.js.map +7 -0
- package/dist/src/agents/verifiers/base-verifier.js +133 -0
- package/dist/src/agents/verifiers/base-verifier.js.map +7 -0
- package/dist/src/agents/verifiers/formatter-verifier.js +130 -0
- package/dist/src/agents/verifiers/formatter-verifier.js.map +7 -0
- package/dist/src/agents/verifiers/llm-judge.js +252 -0
- package/dist/src/agents/verifiers/llm-judge.js.map +7 -0
- package/dist/src/cli/auto-detect.js +321 -0
- package/dist/src/cli/auto-detect.js.map +7 -0
- package/dist/src/cli/claude-sm-danger.js +21 -0
- package/dist/src/cli/claude-sm-danger.js.map +7 -0
- package/dist/src/cli/claude-sm.js +1156 -0
- package/dist/src/cli/claude-sm.js.map +7 -0
- package/dist/src/cli/codex-sm-danger.js +21 -0
- package/dist/src/cli/codex-sm-danger.js.map +7 -0
- package/dist/src/cli/codex-sm.js +349 -0
- package/dist/src/cli/codex-sm.js.map +7 -0
- package/dist/src/cli/commands/api.js +232 -0
- package/dist/src/cli/commands/api.js.map +7 -0
- package/dist/src/cli/commands/auto-background.js +180 -0
- package/dist/src/cli/commands/auto-background.js.map +7 -0
- package/dist/src/cli/commands/cleanup-processes.js +68 -0
- package/dist/src/cli/commands/cleanup-processes.js.map +7 -0
- package/dist/src/cli/commands/clear.js +202 -0
- package/dist/src/cli/commands/clear.js.map +7 -0
- package/dist/src/cli/commands/config.js +445 -0
- package/dist/src/cli/commands/config.js.map +7 -0
- package/dist/src/cli/commands/context-rehydrate.js +751 -0
- package/dist/src/cli/commands/context-rehydrate.js.map +7 -0
- package/dist/src/cli/commands/context.js +343 -0
- package/dist/src/cli/commands/context.js.map +7 -0
- package/dist/src/cli/commands/daemon.js +392 -0
- package/dist/src/cli/commands/daemon.js.map +7 -0
- package/dist/src/cli/commands/dashboard.js +210 -0
- package/dist/src/cli/commands/dashboard.js.map +7 -0
- package/dist/src/cli/commands/db.js +147 -0
- package/dist/src/cli/commands/db.js.map +7 -0
- package/dist/src/cli/commands/decision.js +266 -0
- package/dist/src/cli/commands/decision.js.map +7 -0
- package/dist/src/cli/commands/discovery.js +279 -0
- package/dist/src/cli/commands/discovery.js.map +7 -0
- package/dist/src/cli/commands/handoff.js +624 -0
- package/dist/src/cli/commands/handoff.js.map +7 -0
- package/dist/src/cli/commands/hooks.js +298 -0
- package/dist/src/cli/commands/hooks.js.map +7 -0
- package/dist/src/cli/commands/linear.js +529 -0
- package/dist/src/cli/commands/linear.js.map +7 -0
- package/dist/src/cli/commands/log.js +169 -0
- package/dist/src/cli/commands/log.js.map +7 -0
- package/dist/src/cli/commands/login.js +172 -0
- package/dist/src/cli/commands/login.js.map +7 -0
- package/dist/src/cli/commands/migrate.js +240 -0
- package/dist/src/cli/commands/migrate.js.map +7 -0
- package/dist/src/cli/commands/model.js +533 -0
- package/dist/src/cli/commands/model.js.map +7 -0
- package/dist/src/cli/commands/onboard.js +536 -0
- package/dist/src/cli/commands/onboard.js.map +7 -0
- package/dist/src/cli/commands/projects.js +199 -0
- package/dist/src/cli/commands/projects.js.map +7 -0
- package/dist/src/cli/commands/ralph.js +909 -0
- package/dist/src/cli/commands/ralph.js.map +7 -0
- package/dist/src/cli/commands/retrieval.js +248 -0
- package/dist/src/cli/commands/retrieval.js.map +7 -0
- package/dist/src/cli/commands/search.js +173 -0
- package/dist/src/cli/commands/search.js.map +7 -0
- package/dist/src/cli/commands/service.js +749 -0
- package/dist/src/cli/commands/service.js.map +7 -0
- package/dist/src/cli/commands/session.js +200 -0
- package/dist/src/cli/commands/session.js.map +7 -0
- package/dist/src/cli/commands/settings.js +306 -0
- package/dist/src/cli/commands/settings.js.map +7 -0
- package/dist/src/cli/commands/setup.js +701 -0
- package/dist/src/cli/commands/setup.js.map +7 -0
- package/dist/src/cli/commands/shell.js +249 -0
- package/dist/src/cli/commands/shell.js.map +7 -0
- package/dist/src/cli/commands/signup.js +50 -0
- package/dist/src/cli/commands/signup.js.map +7 -0
- package/dist/src/cli/commands/skills.js +470 -0
- package/dist/src/cli/commands/skills.js.map +7 -0
- package/dist/src/cli/commands/sms-notify.js +795 -0
- package/dist/src/cli/commands/sms-notify.js.map +7 -0
- package/dist/src/cli/commands/storage-tier.js +183 -0
- package/dist/src/cli/commands/storage-tier.js.map +7 -0
- package/dist/src/cli/commands/sweep.js +249 -0
- package/dist/src/cli/commands/sweep.js.map +7 -0
- package/dist/src/cli/commands/tasks.js +213 -0
- package/dist/src/cli/commands/tasks.js.map +7 -0
- package/dist/src/cli/commands/worktree.js +319 -0
- package/dist/src/cli/commands/worktree.js.map +7 -0
- package/dist/src/cli/index.js +594 -0
- package/dist/src/cli/index.js.map +7 -0
- package/dist/src/cli/opencode-sm.js +448 -0
- package/dist/src/cli/opencode-sm.js.map +7 -0
- package/dist/src/cli/utils/viewer.js +96 -0
- package/dist/src/cli/utils/viewer.js.map +7 -0
- package/dist/src/core/config/config-manager.js +398 -0
- package/dist/src/core/config/config-manager.js.map +7 -0
- package/dist/src/core/config/feature-flags.js +76 -0
- package/dist/src/core/config/feature-flags.js.map +7 -0
- package/dist/src/core/config/storage-config.js +115 -0
- package/dist/src/core/config/storage-config.js.map +7 -0
- package/dist/src/core/config/types.js +144 -0
- package/dist/src/core/config/types.js.map +7 -0
- package/dist/src/core/context/auto-context.js +80 -0
- package/dist/src/core/context/auto-context.js.map +7 -0
- package/dist/src/core/context/dual-stack-manager.js +870 -0
- package/dist/src/core/context/dual-stack-manager.js.map +7 -0
- package/dist/src/core/context/enhanced-rehydration.js +994 -0
- package/dist/src/core/context/enhanced-rehydration.js.map +7 -0
- package/dist/src/core/context/frame-database.js +479 -0
- package/dist/src/core/context/frame-database.js.map +7 -0
- package/dist/src/core/context/frame-digest.js +250 -0
- package/dist/src/core/context/frame-digest.js.map +7 -0
- package/dist/src/core/context/frame-handoff-manager.js +778 -0
- package/dist/src/core/context/frame-handoff-manager.js.map +7 -0
- package/dist/src/core/context/frame-lifecycle-hooks.js +119 -0
- package/dist/src/core/context/frame-lifecycle-hooks.js.map +7 -0
- package/dist/src/core/context/frame-recovery.js +302 -0
- package/dist/src/core/context/frame-recovery.js.map +7 -0
- package/dist/src/core/context/frame-stack.js +314 -0
- package/dist/src/core/context/frame-stack.js.map +7 -0
- package/dist/src/core/context/frame-types.js +5 -0
- package/dist/src/core/context/frame-types.js.map +7 -0
- package/dist/src/core/context/index.js +25 -0
- package/dist/src/core/context/index.js.map +7 -0
- package/dist/src/core/context/permission-manager.js +185 -0
- package/dist/src/core/context/permission-manager.js.map +7 -0
- package/dist/src/core/context/recursive-context-manager.js +592 -0
- package/dist/src/core/context/recursive-context-manager.js.map +7 -0
- package/dist/src/core/context/refactored-frame-manager.js +754 -0
- package/dist/src/core/context/refactored-frame-manager.js.map +7 -0
- package/dist/src/core/context/shared-context-layer.js +621 -0
- package/dist/src/core/context/shared-context-layer.js.map +7 -0
- package/dist/src/core/context/stack-merge-resolver.js +749 -0
- package/dist/src/core/context/stack-merge-resolver.js.map +7 -0
- package/dist/src/core/context/validation.js +130 -0
- package/dist/src/core/context/validation.js.map +7 -0
- package/dist/src/core/database/batch-operations.js +384 -0
- package/dist/src/core/database/batch-operations.js.map +7 -0
- package/dist/src/core/database/connection-pool.js +330 -0
- package/dist/src/core/database/connection-pool.js.map +7 -0
- package/dist/src/core/database/database-adapter.js +60 -0
- package/dist/src/core/database/database-adapter.js.map +7 -0
- package/dist/src/core/database/migration-manager.js +614 -0
- package/dist/src/core/database/migration-manager.js.map +7 -0
- package/dist/src/core/database/query-cache.js +298 -0
- package/dist/src/core/database/query-cache.js.map +7 -0
- package/dist/src/core/database/query-router.js +430 -0
- package/dist/src/core/database/query-router.js.map +7 -0
- package/dist/src/core/database/sqlite-adapter.js +738 -0
- package/dist/src/core/database/sqlite-adapter.js.map +7 -0
- package/dist/src/core/digest/enhanced-hybrid-digest.js +277 -0
- package/dist/src/core/digest/enhanced-hybrid-digest.js.map +7 -0
- package/dist/src/core/digest/frame-digest-integration.js +176 -0
- package/dist/src/core/digest/frame-digest-integration.js.map +7 -0
- package/dist/src/core/digest/hybrid-digest-generator.js +553 -0
- package/dist/src/core/digest/hybrid-digest-generator.js.map +7 -0
- package/dist/src/core/digest/index.js +9 -0
- package/dist/src/core/digest/index.js.map +7 -0
- package/dist/src/core/digest/types.js +25 -0
- package/dist/src/core/digest/types.js.map +7 -0
- package/dist/src/core/errors/error-utils.js +208 -0
- package/dist/src/core/errors/error-utils.js.map +7 -0
- package/dist/src/core/errors/index.js +521 -0
- package/dist/src/core/errors/index.js.map +7 -0
- package/dist/src/core/errors/recovery.js +269 -0
- package/dist/src/core/errors/recovery.js.map +7 -0
- package/dist/src/core/execution/parallel-executor.js +258 -0
- package/dist/src/core/execution/parallel-executor.js.map +7 -0
- package/dist/src/core/frame/workflow-templates.js +319 -0
- package/dist/src/core/frame/workflow-templates.js.map +7 -0
- package/dist/src/core/merge/conflict-detector.js +431 -0
- package/dist/src/core/merge/conflict-detector.js.map +7 -0
- package/dist/src/core/merge/index.js +9 -0
- package/dist/src/core/merge/index.js.map +7 -0
- package/dist/src/core/merge/resolution-engine.js +558 -0
- package/dist/src/core/merge/resolution-engine.js.map +7 -0
- package/dist/src/core/merge/stack-diff.js +532 -0
- package/dist/src/core/merge/stack-diff.js.map +7 -0
- package/dist/src/core/merge/types.js +5 -0
- package/dist/src/core/merge/types.js.map +7 -0
- package/dist/src/core/merge/unified-merge-resolver.js +303 -0
- package/dist/src/core/merge/unified-merge-resolver.js.map +7 -0
- package/dist/src/core/models/fallback-monitor.js +232 -0
- package/dist/src/core/models/fallback-monitor.js.map +7 -0
- package/dist/src/core/models/model-router.js +340 -0
- package/dist/src/core/models/model-router.js.map +7 -0
- package/dist/src/core/monitoring/error-handler.js +49 -0
- package/dist/src/core/monitoring/error-handler.js.map +7 -0
- package/dist/src/core/monitoring/logger.js +202 -0
- package/dist/src/core/monitoring/logger.js.map +7 -0
- package/dist/src/core/monitoring/metrics.js +172 -0
- package/dist/src/core/monitoring/metrics.js.map +7 -0
- package/dist/src/core/monitoring/progress-tracker.js +189 -0
- package/dist/src/core/monitoring/progress-tracker.js.map +7 -0
- package/dist/src/core/monitoring/session-monitor.js +300 -0
- package/dist/src/core/monitoring/session-monitor.js.map +7 -0
- package/dist/src/core/performance/context-cache.js +273 -0
- package/dist/src/core/performance/context-cache.js.map +7 -0
- package/dist/src/core/performance/index.js +11 -0
- package/dist/src/core/performance/index.js.map +7 -0
- package/dist/src/core/performance/lazy-context-loader.js +327 -0
- package/dist/src/core/performance/lazy-context-loader.js.map +7 -0
- package/dist/src/core/performance/monitor.js +221 -0
- package/dist/src/core/performance/monitor.js.map +7 -0
- package/dist/src/core/performance/optimized-frame-context.js +345 -0
- package/dist/src/core/performance/optimized-frame-context.js.map +7 -0
- package/dist/src/core/performance/performance-benchmark.js +277 -0
- package/dist/src/core/performance/performance-benchmark.js.map +7 -0
- package/dist/src/core/performance/performance-profiler.js +370 -0
- package/dist/src/core/performance/performance-profiler.js.map +7 -0
- package/dist/src/core/performance/streaming-jsonl-parser.js +195 -0
- package/dist/src/core/performance/streaming-jsonl-parser.js.map +7 -0
- package/dist/src/core/persistence/postgres-adapter.js +349 -0
- package/dist/src/core/persistence/postgres-adapter.js.map +7 -0
- package/dist/src/core/projects/project-isolation.js +201 -0
- package/dist/src/core/projects/project-isolation.js.map +7 -0
- package/dist/src/core/projects/project-manager.js +697 -0
- package/dist/src/core/projects/project-manager.js.map +7 -0
- package/dist/src/core/query/query-parser.js +370 -0
- package/dist/src/core/query/query-parser.js.map +7 -0
- package/dist/src/core/query/query-templates.js +321 -0
- package/dist/src/core/query/query-templates.js.map +7 -0
- package/dist/src/core/retrieval/context-retriever.js +479 -0
- package/dist/src/core/retrieval/context-retriever.js.map +7 -0
- package/dist/src/core/retrieval/index.js +8 -0
- package/dist/src/core/retrieval/index.js.map +7 -0
- package/dist/src/core/retrieval/llm-context-retrieval.js +613 -0
- package/dist/src/core/retrieval/llm-context-retrieval.js.map +7 -0
- package/dist/src/core/retrieval/llm-provider.js +151 -0
- package/dist/src/core/retrieval/llm-provider.js.map +7 -0
- package/dist/src/core/retrieval/retrieval-audit.js +236 -0
- package/dist/src/core/retrieval/retrieval-audit.js.map +7 -0
- package/dist/src/core/retrieval/summary-generator.js +589 -0
- package/dist/src/core/retrieval/summary-generator.js.map +7 -0
- package/dist/src/core/retrieval/types.js +21 -0
- package/dist/src/core/retrieval/types.js.map +7 -0
- package/dist/src/core/security/index.js +35 -0
- package/dist/src/core/security/index.js.map +7 -0
- package/dist/src/core/security/input-sanitizer.js +321 -0
- package/dist/src/core/security/input-sanitizer.js.map +7 -0
- package/dist/src/core/session/clear-survival.js +465 -0
- package/dist/src/core/session/clear-survival.js.map +7 -0
- package/dist/src/core/session/enhanced-handoff.js +792 -0
- package/dist/src/core/session/enhanced-handoff.js.map +7 -0
- package/dist/src/core/session/handoff-generator.js +343 -0
- package/dist/src/core/session/handoff-generator.js.map +7 -0
- package/dist/src/core/session/index.js +15 -0
- package/dist/src/core/session/index.js.map +7 -0
- package/dist/src/core/session/session-manager.js +347 -0
- package/dist/src/core/session/session-manager.js.map +7 -0
- package/dist/src/core/skills/index.js +7 -0
- package/dist/src/core/skills/index.js.map +7 -0
- package/dist/src/core/skills/skill-storage.js +764 -0
- package/dist/src/core/skills/skill-storage.js.map +7 -0
- package/dist/src/core/skills/types.js +193 -0
- package/dist/src/core/skills/types.js.map +7 -0
- package/dist/src/core/storage/chromadb-adapter.js +354 -0
- package/dist/src/core/storage/chromadb-adapter.js.map +7 -0
- package/dist/src/core/storage/infinite-storage.js +510 -0
- package/dist/src/core/storage/infinite-storage.js.map +7 -0
- package/dist/src/core/storage/remote-storage.js +489 -0
- package/dist/src/core/storage/remote-storage.js.map +7 -0
- package/dist/src/core/storage/two-tier-storage.js +766 -0
- package/dist/src/core/storage/two-tier-storage.js.map +7 -0
- package/dist/src/core/trace/cli-trace-wrapper.js +132 -0
- package/dist/src/core/trace/cli-trace-wrapper.js.map +7 -0
- package/dist/src/core/trace/db-trace-wrapper.js +247 -0
- package/dist/src/core/trace/db-trace-wrapper.js.map +7 -0
- package/dist/src/core/trace/debug-trace.js +417 -0
- package/dist/src/core/trace/debug-trace.js.map +7 -0
- package/dist/src/core/trace/index.js +109 -0
- package/dist/src/core/trace/index.js.map +7 -0
- package/dist/src/core/trace/linear-api-wrapper.js +178 -0
- package/dist/src/core/trace/linear-api-wrapper.js.map +7 -0
- package/dist/src/core/trace/trace-detector.js +528 -0
- package/dist/src/core/trace/trace-detector.js.map +7 -0
- package/dist/src/core/trace/trace-store.js +345 -0
- package/dist/src/core/trace/trace-store.js.map +7 -0
- package/dist/src/core/trace/types.js +77 -0
- package/dist/src/core/trace/types.js.map +7 -0
- package/dist/src/core/types.js +5 -0
- package/dist/src/core/types.js.map +7 -0
- package/dist/src/core/utils/async-mutex.js +114 -0
- package/dist/src/core/utils/async-mutex.js.map +7 -0
- package/dist/src/core/utils/compression.js +83 -0
- package/dist/src/core/utils/compression.js.map +7 -0
- package/dist/src/core/utils/update-checker.js +218 -0
- package/dist/src/core/utils/update-checker.js.map +7 -0
- package/dist/src/core/worktree/worktree-manager.js +465 -0
- package/dist/src/core/worktree/worktree-manager.js.map +7 -0
- package/dist/src/daemon/daemon-config.js +149 -0
- package/dist/src/daemon/daemon-config.js.map +7 -0
- package/dist/src/daemon/services/context-service.js +122 -0
- package/dist/src/daemon/services/context-service.js.map +7 -0
- package/dist/src/daemon/services/linear-service.js +136 -0
- package/dist/src/daemon/services/linear-service.js.map +7 -0
- package/dist/src/daemon/session-daemon.js +312 -0
- package/dist/src/daemon/session-daemon.js.map +7 -0
- package/dist/src/daemon/unified-daemon.js +276 -0
- package/dist/src/daemon/unified-daemon.js.map +7 -0
- package/dist/src/features/analytics/api/analytics-api.js +287 -0
- package/dist/src/features/analytics/api/analytics-api.js.map +7 -0
- package/dist/src/features/analytics/core/analytics-service.js +282 -0
- package/dist/src/features/analytics/core/analytics-service.js.map +7 -0
- package/dist/src/features/analytics/index.js +18 -0
- package/dist/src/features/analytics/index.js.map +7 -0
- package/dist/src/features/analytics/queries/metrics-queries.js +277 -0
- package/dist/src/features/analytics/queries/metrics-queries.js.map +7 -0
- package/dist/src/features/analytics/types/metrics.js +5 -0
- package/dist/src/features/analytics/types/metrics.js.map +7 -0
- package/dist/src/features/browser/browser-mcp.js +492 -0
- package/dist/src/features/browser/browser-mcp.js.map +7 -0
- package/dist/src/features/sweep/index.js +20 -0
- package/dist/src/features/sweep/index.js.map +7 -0
- package/dist/src/features/sweep/prediction-client.js +155 -0
- package/dist/src/features/sweep/prediction-client.js.map +7 -0
- package/dist/src/features/sweep/prompt-builder.js +85 -0
- package/dist/src/features/sweep/prompt-builder.js.map +7 -0
- package/dist/src/features/sweep/pty-wrapper.js +171 -0
- package/dist/src/features/sweep/pty-wrapper.js.map +7 -0
- package/dist/src/features/sweep/state-watcher.js +87 -0
- package/dist/src/features/sweep/state-watcher.js.map +7 -0
- package/dist/src/features/sweep/status-bar.js +88 -0
- package/dist/src/features/sweep/status-bar.js.map +7 -0
- package/dist/src/features/sweep/sweep-server-manager.js +226 -0
- package/dist/src/features/sweep/sweep-server-manager.js.map +7 -0
- package/dist/src/features/sweep/tab-interceptor.js +38 -0
- package/dist/src/features/sweep/tab-interceptor.js.map +7 -0
- package/dist/src/features/sweep/types.js +18 -0
- package/dist/src/features/sweep/types.js.map +7 -0
- package/dist/src/features/tasks/linear-task-manager.js +487 -0
- package/dist/src/features/tasks/linear-task-manager.js.map +7 -0
- package/dist/src/features/tasks/task-aware-context.js +410 -0
- package/dist/src/features/tasks/task-aware-context.js.map +7 -0
- package/dist/src/features/tui/simple-monitor.js +116 -0
- package/dist/src/features/tui/simple-monitor.js.map +7 -0
- package/dist/src/features/tui/swarm-monitor.js +648 -0
- package/dist/src/features/tui/swarm-monitor.js.map +7 -0
- package/dist/src/features/web/client/stores/task-store.js +26 -0
- package/dist/src/features/web/client/stores/task-store.js.map +7 -0
- package/dist/src/features/web/server/index.js +194 -0
- package/dist/src/features/web/server/index.js.map +7 -0
- package/dist/src/hooks/auto-background.js +151 -0
- package/dist/src/hooks/auto-background.js.map +7 -0
- package/dist/src/hooks/claude-code-whatsapp-hook.js +197 -0
- package/dist/src/hooks/claude-code-whatsapp-hook.js.map +7 -0
- package/dist/src/hooks/config.js +150 -0
- package/dist/src/hooks/config.js.map +7 -0
- package/dist/src/hooks/daemon.js +364 -0
- package/dist/src/hooks/daemon.js.map +7 -0
- package/dist/src/hooks/events.js +58 -0
- package/dist/src/hooks/events.js.map +7 -0
- package/dist/src/hooks/index.js +12 -0
- package/dist/src/hooks/index.js.map +7 -0
- package/dist/src/hooks/linear-task-picker.js +186 -0
- package/dist/src/hooks/linear-task-picker.js.map +7 -0
- package/dist/src/hooks/schemas.js +197 -0
- package/dist/src/hooks/schemas.js.map +7 -0
- package/dist/src/hooks/secure-fs.js +49 -0
- package/dist/src/hooks/secure-fs.js.map +7 -0
- package/dist/src/hooks/security-logger.js +155 -0
- package/dist/src/hooks/security-logger.js.map +7 -0
- package/dist/src/hooks/session-summary.js +222 -0
- package/dist/src/hooks/session-summary.js.map +7 -0
- package/dist/src/hooks/sms-action-runner.js +371 -0
- package/dist/src/hooks/sms-action-runner.js.map +7 -0
- package/dist/src/hooks/sms-notify.js +506 -0
- package/dist/src/hooks/sms-notify.js.map +7 -0
- package/dist/src/hooks/sms-watcher.js +93 -0
- package/dist/src/hooks/sms-watcher.js.map +7 -0
- package/dist/src/hooks/sms-webhook.js +555 -0
- package/dist/src/hooks/sms-webhook.js.map +7 -0
- package/dist/src/hooks/whatsapp-commands.js +479 -0
- package/dist/src/hooks/whatsapp-commands.js.map +7 -0
- package/dist/src/hooks/whatsapp-scheduler.js +317 -0
- package/dist/src/hooks/whatsapp-scheduler.js.map +7 -0
- package/dist/src/hooks/whatsapp-sync.js +409 -0
- package/dist/src/hooks/whatsapp-sync.js.map +7 -0
- package/dist/src/index.js +25 -0
- package/dist/src/index.js.map +7 -0
- package/dist/src/integrations/anthropic/client.js +263 -0
- package/dist/src/integrations/anthropic/client.js.map +7 -0
- package/dist/src/integrations/claude-code/agent-bridge.js +768 -0
- package/dist/src/integrations/claude-code/agent-bridge.js.map +7 -0
- package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js +459 -0
- package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
- package/dist/src/integrations/claude-code/lifecycle-hooks.js +254 -0
- package/dist/src/integrations/claude-code/lifecycle-hooks.js.map +7 -0
- package/dist/src/integrations/claude-code/post-task-hooks.js +545 -0
- package/dist/src/integrations/claude-code/post-task-hooks.js.map +7 -0
- package/dist/src/integrations/claude-code/subagent-client-stub.js +20 -0
- package/dist/src/integrations/claude-code/subagent-client-stub.js.map +7 -0
- package/dist/src/integrations/claude-code/subagent-client.js +511 -0
- package/dist/src/integrations/claude-code/subagent-client.js.map +7 -0
- package/dist/src/integrations/claude-code/task-coordinator.js +360 -0
- package/dist/src/integrations/claude-code/task-coordinator.js.map +7 -0
- package/dist/src/integrations/linear/auth.js +337 -0
- package/dist/src/integrations/linear/auth.js.map +7 -0
- package/dist/src/integrations/linear/auto-sync.js +258 -0
- package/dist/src/integrations/linear/auto-sync.js.map +7 -0
- package/dist/src/integrations/linear/client.js +634 -0
- package/dist/src/integrations/linear/client.js.map +7 -0
- package/dist/src/integrations/linear/config.js +130 -0
- package/dist/src/integrations/linear/config.js.map +7 -0
- package/dist/src/integrations/linear/migration.js +361 -0
- package/dist/src/integrations/linear/migration.js.map +7 -0
- package/dist/src/integrations/linear/oauth-server.js +454 -0
- package/dist/src/integrations/linear/oauth-server.js.map +7 -0
- package/dist/src/integrations/linear/rest-client.js +213 -0
- package/dist/src/integrations/linear/rest-client.js.map +7 -0
- package/dist/src/integrations/linear/sync-manager.js +236 -0
- package/dist/src/integrations/linear/sync-manager.js.map +7 -0
- package/dist/src/integrations/linear/sync-service.js +231 -0
- package/dist/src/integrations/linear/sync-service.js.map +7 -0
- package/dist/src/integrations/linear/sync.js +782 -0
- package/dist/src/integrations/linear/sync.js.map +7 -0
- package/dist/src/integrations/linear/types.js +5 -0
- package/dist/src/integrations/linear/types.js.map +7 -0
- package/dist/src/integrations/linear/unified-sync.js +589 -0
- package/dist/src/integrations/linear/unified-sync.js.map +7 -0
- package/dist/src/integrations/linear/webhook-handler.js +219 -0
- package/dist/src/integrations/linear/webhook-handler.js.map +7 -0
- package/dist/src/integrations/linear/webhook-server.js +218 -0
- package/dist/src/integrations/linear/webhook-server.js.map +7 -0
- package/dist/src/integrations/linear/webhook.js +291 -0
- package/dist/src/integrations/linear/webhook.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/code-execution-handlers.js +266 -0
- package/dist/src/integrations/mcp/handlers/code-execution-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/context-handlers.js +257 -0
- package/dist/src/integrations/mcp/handlers/context-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/discovery-handlers.js +497 -0
- package/dist/src/integrations/mcp/handlers/discovery-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/index.js +166 -0
- package/dist/src/integrations/mcp/handlers/index.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/linear-handlers.js +247 -0
- package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/skill-handlers.js +529 -0
- package/dist/src/integrations/mcp/handlers/skill-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/task-handlers.js +239 -0
- package/dist/src/integrations/mcp/handlers/task-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/handlers/trace-handlers.js +308 -0
- package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +7 -0
- package/dist/src/integrations/mcp/index.js +23 -0
- package/dist/src/integrations/mcp/index.js.map +7 -0
- package/dist/src/integrations/mcp/middleware/tool-scoring.js +356 -0
- package/dist/src/integrations/mcp/middleware/tool-scoring.js.map +7 -0
- package/dist/src/integrations/mcp/refactored-server.js +374 -0
- package/dist/src/integrations/mcp/refactored-server.js.map +7 -0
- package/dist/src/integrations/mcp/remote-server.js +682 -0
- package/dist/src/integrations/mcp/remote-server.js.map +7 -0
- package/dist/src/integrations/mcp/schemas.js +147 -0
- package/dist/src/integrations/mcp/schemas.js.map +7 -0
- package/dist/src/integrations/mcp/server.js +1975 -0
- package/dist/src/integrations/mcp/server.js.map +7 -0
- package/dist/src/integrations/mcp/tool-definitions-code.js +125 -0
- package/dist/src/integrations/mcp/tool-definitions-code.js.map +7 -0
- package/dist/src/integrations/mcp/tool-definitions.js +702 -0
- package/dist/src/integrations/mcp/tool-definitions.js.map +7 -0
- package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js +860 -0
- package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +7 -0
- package/dist/src/integrations/ralph/context/context-budget-manager.js +301 -0
- package/dist/src/integrations/ralph/context/context-budget-manager.js.map +7 -0
- package/dist/src/integrations/ralph/context/stackmemory-context-loader.js +360 -0
- package/dist/src/integrations/ralph/context/stackmemory-context-loader.js.map +7 -0
- package/dist/src/integrations/ralph/coordination/enhanced-coordination.js +410 -0
- package/dist/src/integrations/ralph/coordination/enhanced-coordination.js.map +7 -0
- package/dist/src/integrations/ralph/index.js +18 -0
- package/dist/src/integrations/ralph/index.js.map +7 -0
- package/dist/src/integrations/ralph/learning/pattern-learner.js +401 -0
- package/dist/src/integrations/ralph/learning/pattern-learner.js.map +7 -0
- package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js +448 -0
- package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js.map +7 -0
- package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js +294 -0
- package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js.map +7 -0
- package/dist/src/integrations/ralph/monitoring/swarm-registry.js +108 -0
- package/dist/src/integrations/ralph/monitoring/swarm-registry.js.map +7 -0
- package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js +463 -0
- package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +7 -0
- package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js +400 -0
- package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js.map +7 -0
- package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js +473 -0
- package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js.map +7 -0
- package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js +388 -0
- package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js.map +7 -0
- package/dist/src/integrations/ralph/performance/performance-optimizer.js +358 -0
- package/dist/src/integrations/ralph/performance/performance-optimizer.js.map +7 -0
- package/dist/src/integrations/ralph/recovery/crash-recovery.js +462 -0
- package/dist/src/integrations/ralph/recovery/crash-recovery.js.map +7 -0
- package/dist/src/integrations/ralph/state/state-reconciler.js +404 -0
- package/dist/src/integrations/ralph/state/state-reconciler.js.map +7 -0
- package/dist/src/integrations/ralph/swarm/git-workflow-manager.js +428 -0
- package/dist/src/integrations/ralph/swarm/git-workflow-manager.js.map +7 -0
- package/dist/src/integrations/ralph/swarm/swarm-coordinator.js +996 -0
- package/dist/src/integrations/ralph/swarm/swarm-coordinator.js.map +7 -0
- package/dist/src/integrations/ralph/types.js +5 -0
- package/dist/src/integrations/ralph/types.js.map +7 -0
- package/dist/src/integrations/ralph/visualization/ralph-debugger.js +585 -0
- package/dist/src/integrations/ralph/visualization/ralph-debugger.js.map +7 -0
- package/dist/src/mcp/stackmemory-mcp-server.js +554 -0
- package/dist/src/mcp/stackmemory-mcp-server.js.map +7 -0
- package/dist/src/middleware/exponential-rate-limiter.js +289 -0
- package/dist/src/middleware/exponential-rate-limiter.js.map +7 -0
- package/dist/src/models/user.model.js +358 -0
- package/dist/src/models/user.model.js.map +7 -0
- package/dist/src/servers/production/auth-middleware.js +528 -0
- package/dist/src/servers/production/auth-middleware.js.map +7 -0
- package/dist/src/services/config-service.js +65 -0
- package/dist/src/services/config-service.js.map +7 -0
- package/dist/src/services/context-service.js +194 -0
- package/dist/src/services/context-service.js.map +7 -0
- package/dist/src/skills/api-discovery.js +354 -0
- package/dist/src/skills/api-discovery.js.map +7 -0
- package/dist/src/skills/api-skill.js +475 -0
- package/dist/src/skills/api-skill.js.map +7 -0
- package/dist/src/skills/claude-skills.js +1061 -0
- package/dist/src/skills/claude-skills.js.map +7 -0
- package/dist/src/skills/dashboard-launcher.js +216 -0
- package/dist/src/skills/dashboard-launcher.js.map +7 -0
- package/dist/src/skills/recursive-agent-orchestrator.js +575 -0
- package/dist/src/skills/recursive-agent-orchestrator.js.map +7 -0
- package/dist/src/skills/repo-ingestion-skill.js +609 -0
- package/dist/src/skills/repo-ingestion-skill.js.map +7 -0
- package/dist/src/skills/unified-rlm-orchestrator.js +404 -0
- package/dist/src/skills/unified-rlm-orchestrator.js.map +7 -0
- package/dist/src/types/task.js +5 -0
- package/dist/src/types/task.js.map +7 -0
- package/dist/src/utils/env.js +50 -0
- package/dist/src/utils/env.js.map +7 -0
- package/dist/src/utils/formatting.js +62 -0
- package/dist/src/utils/formatting.js.map +7 -0
- package/dist/src/utils/process-cleanup.js +136 -0
- package/dist/src/utils/process-cleanup.js.map +7 -0
- package/package.json +4 -3
- package/scripts/create-cleanup-issues.js +302 -0
- package/scripts/demos/browser-test.ts +39 -0
- package/scripts/demos/ralph-integration-demo.ts +244 -0
- package/scripts/demos/trace-demo.ts +214 -0
- package/scripts/demos/trace-detector.demo.ts +171 -0
- package/scripts/demos/trace-test.ts +67 -0
- package/scripts/initialize.ts +16 -7
- package/scripts/install.sh +14 -62
- package/scripts/status.ts +111 -46
- package/scripts/test-claude-config.sh +123 -0
- package/scripts/validate-claude-config.sh +155 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/core/skills/skill-storage.ts"],
|
|
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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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
2
|
+
import { dirname as __pathDirname } from 'path';
|
|
3
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
4
|
+
const __dirname = __pathDirname(__filename);
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
const SkillCategorySchema = z.enum([
|
|
7
|
+
"tool",
|
|
8
|
+
// Tool-specific patterns
|
|
9
|
+
"workflow",
|
|
10
|
+
// Process/workflow improvements
|
|
11
|
+
"correction",
|
|
12
|
+
// User corrections to remember
|
|
13
|
+
"pattern",
|
|
14
|
+
// Code/architecture patterns
|
|
15
|
+
"preference",
|
|
16
|
+
// User preferences
|
|
17
|
+
"pitfall",
|
|
18
|
+
// Things to avoid
|
|
19
|
+
"optimization"
|
|
20
|
+
// Performance/efficiency tips
|
|
21
|
+
]);
|
|
22
|
+
const SkillPrioritySchema = z.enum([
|
|
23
|
+
"critical",
|
|
24
|
+
// Always include in context
|
|
25
|
+
"high",
|
|
26
|
+
// Include when relevant
|
|
27
|
+
"medium",
|
|
28
|
+
// Include if space permits
|
|
29
|
+
"low"
|
|
30
|
+
// Archive/reference only
|
|
31
|
+
]);
|
|
32
|
+
const SkillSchema = z.object({
|
|
33
|
+
id: z.string().uuid(),
|
|
34
|
+
// Content
|
|
35
|
+
content: z.string().min(1).max(5e3),
|
|
36
|
+
summary: z.string().max(500).optional(),
|
|
37
|
+
// Classification
|
|
38
|
+
category: SkillCategorySchema,
|
|
39
|
+
priority: SkillPrioritySchema.default("medium"),
|
|
40
|
+
tags: z.array(z.string()).default([]),
|
|
41
|
+
// Context
|
|
42
|
+
tool: z.string().optional(),
|
|
43
|
+
// Related tool name
|
|
44
|
+
project: z.string().optional(),
|
|
45
|
+
// Project context
|
|
46
|
+
language: z.string().optional(),
|
|
47
|
+
// Programming language
|
|
48
|
+
framework: z.string().optional(),
|
|
49
|
+
// Framework context
|
|
50
|
+
// Validation tracking
|
|
51
|
+
validatedCount: z.number().int().min(0).default(0),
|
|
52
|
+
lastValidated: z.string().datetime().optional(),
|
|
53
|
+
// Lifecycle
|
|
54
|
+
createdAt: z.string().datetime(),
|
|
55
|
+
updatedAt: z.string().datetime(),
|
|
56
|
+
expiresAt: z.string().datetime().optional(),
|
|
57
|
+
// Source tracking
|
|
58
|
+
source: z.enum(["correction", "observation", "explicit", "inferred"]),
|
|
59
|
+
sessionId: z.string().optional()
|
|
60
|
+
});
|
|
61
|
+
const CreateSkillSchema = SkillSchema.omit({
|
|
62
|
+
id: true,
|
|
63
|
+
createdAt: true,
|
|
64
|
+
updatedAt: true,
|
|
65
|
+
validatedCount: true
|
|
66
|
+
});
|
|
67
|
+
const UpdateSkillSchema = SkillSchema.partial().extend({
|
|
68
|
+
id: z.string().uuid()
|
|
69
|
+
});
|
|
70
|
+
const JournalEntryTypeSchema = z.enum([
|
|
71
|
+
"decision",
|
|
72
|
+
// Architectural/design decision
|
|
73
|
+
"correction",
|
|
74
|
+
// User corrected agent behavior
|
|
75
|
+
"blocker",
|
|
76
|
+
// Issue encountered
|
|
77
|
+
"resolution",
|
|
78
|
+
// How an issue was resolved
|
|
79
|
+
"observation",
|
|
80
|
+
// Noticed pattern or behavior
|
|
81
|
+
"outcome"
|
|
82
|
+
// Result of an action
|
|
83
|
+
]);
|
|
84
|
+
const JournalEntrySchema = z.object({
|
|
85
|
+
id: z.string().uuid(),
|
|
86
|
+
sessionId: z.string(),
|
|
87
|
+
type: JournalEntryTypeSchema,
|
|
88
|
+
// Content
|
|
89
|
+
title: z.string().max(200),
|
|
90
|
+
content: z.string().max(5e3),
|
|
91
|
+
// Context
|
|
92
|
+
context: z.object({
|
|
93
|
+
file: z.string().optional(),
|
|
94
|
+
tool: z.string().optional(),
|
|
95
|
+
command: z.string().optional()
|
|
96
|
+
}).optional(),
|
|
97
|
+
// Outcome tracking
|
|
98
|
+
outcome: z.enum(["success", "failure", "partial", "pending"]).optional(),
|
|
99
|
+
// Timestamps
|
|
100
|
+
createdAt: z.string().datetime(),
|
|
101
|
+
// Link to promoted skill
|
|
102
|
+
promotedToSkillId: z.string().uuid().optional()
|
|
103
|
+
});
|
|
104
|
+
const SessionSummarySchema = z.object({
|
|
105
|
+
sessionId: z.string(),
|
|
106
|
+
startedAt: z.string().datetime(),
|
|
107
|
+
endedAt: z.string().datetime().optional(),
|
|
108
|
+
// Stats
|
|
109
|
+
entriesCount: z.number().int().min(0),
|
|
110
|
+
correctionsCount: z.number().int().min(0),
|
|
111
|
+
decisionsCount: z.number().int().min(0),
|
|
112
|
+
// Key learnings from this session
|
|
113
|
+
keyLearnings: z.array(z.string()).default([]),
|
|
114
|
+
// Skills promoted from this session
|
|
115
|
+
promotedSkillIds: z.array(z.string().uuid()).default([])
|
|
116
|
+
});
|
|
117
|
+
const SkillQuerySchema = z.object({
|
|
118
|
+
// Filter by classification
|
|
119
|
+
categories: z.array(SkillCategorySchema).optional(),
|
|
120
|
+
priorities: z.array(SkillPrioritySchema).optional(),
|
|
121
|
+
tags: z.array(z.string()).optional(),
|
|
122
|
+
// Filter by context
|
|
123
|
+
tool: z.string().optional(),
|
|
124
|
+
project: z.string().optional(),
|
|
125
|
+
language: z.string().optional(),
|
|
126
|
+
framework: z.string().optional(),
|
|
127
|
+
// Filter by validation
|
|
128
|
+
minValidatedCount: z.number().int().min(0).optional(),
|
|
129
|
+
// Pagination
|
|
130
|
+
limit: z.number().int().min(1).max(100).default(50),
|
|
131
|
+
offset: z.number().int().min(0).default(0),
|
|
132
|
+
// Sorting
|
|
133
|
+
sortBy: z.enum(["priority", "validatedCount", "createdAt", "updatedAt"]).default("priority"),
|
|
134
|
+
sortOrder: z.enum(["asc", "desc"]).default("desc")
|
|
135
|
+
});
|
|
136
|
+
const REDIS_KEYS = {
|
|
137
|
+
// Skills (namespaced by user)
|
|
138
|
+
skill: (userId, id) => `user:${userId}:skill:${id}`,
|
|
139
|
+
skillsByTool: (userId, tool) => `user:${userId}:skills:tool:${tool}`,
|
|
140
|
+
skillsByCategory: (userId, category) => `user:${userId}:skills:category:${category}`,
|
|
141
|
+
skillsByTag: (userId, tag) => `user:${userId}:skills:tag:${tag}`,
|
|
142
|
+
skillsRecent: (userId) => `user:${userId}:skills:recent`,
|
|
143
|
+
skillsValidated: (userId) => `user:${userId}:skills:validated`,
|
|
144
|
+
// Session journal (namespaced by user)
|
|
145
|
+
journalEntry: (userId, id) => `user:${userId}:journal:entry:${id}`,
|
|
146
|
+
journalSession: (userId, sessionId) => `user:${userId}:journal:session:${sessionId}`,
|
|
147
|
+
journalRecent: (userId) => `user:${userId}:journal:recent`,
|
|
148
|
+
// Session tracking (namespaced by user)
|
|
149
|
+
sessionSummary: (userId, sessionId) => `user:${userId}:session:summary:${sessionId}`,
|
|
150
|
+
sessionsActive: (userId) => `user:${userId}:sessions:active`,
|
|
151
|
+
// Promotion tracking (namespaced by user)
|
|
152
|
+
promotionCandidates: (userId) => `user:${userId}:skills:promotion:candidates`,
|
|
153
|
+
// Locks (global)
|
|
154
|
+
syncLock: (resource) => `lock:skill:${resource}`
|
|
155
|
+
};
|
|
156
|
+
const CACHE_TTL = {
|
|
157
|
+
// Base skill TTL: 7 days minimum
|
|
158
|
+
skillBase: 604800,
|
|
159
|
+
// 7 days
|
|
160
|
+
// Max skill TTL: 90 days for frequently used skills
|
|
161
|
+
skillMax: 7776e3,
|
|
162
|
+
// 90 days
|
|
163
|
+
// TTL increment per validation/use: +7 days
|
|
164
|
+
skillIncrement: 604800,
|
|
165
|
+
// 7 days
|
|
166
|
+
skillIndex: 86400,
|
|
167
|
+
// 1 day (was 1 hour)
|
|
168
|
+
session: 604800,
|
|
169
|
+
// 7 days
|
|
170
|
+
journal: 2592e3,
|
|
171
|
+
// 30 days
|
|
172
|
+
lock: 30
|
|
173
|
+
// 30 seconds
|
|
174
|
+
};
|
|
175
|
+
function calculateSkillTTL(validatedCount) {
|
|
176
|
+
const ttl = CACHE_TTL.skillBase + validatedCount * CACHE_TTL.skillIncrement;
|
|
177
|
+
return Math.min(ttl, CACHE_TTL.skillMax);
|
|
178
|
+
}
|
|
179
|
+
export {
|
|
180
|
+
CACHE_TTL,
|
|
181
|
+
CreateSkillSchema,
|
|
182
|
+
JournalEntrySchema,
|
|
183
|
+
JournalEntryTypeSchema,
|
|
184
|
+
REDIS_KEYS,
|
|
185
|
+
SessionSummarySchema,
|
|
186
|
+
SkillCategorySchema,
|
|
187
|
+
SkillPrioritySchema,
|
|
188
|
+
SkillQuerySchema,
|
|
189
|
+
SkillSchema,
|
|
190
|
+
UpdateSkillSchema,
|
|
191
|
+
calculateSkillTTL
|
|
192
|
+
};
|
|
193
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/core/skills/types.ts"],
|
|
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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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|