@stackmemoryai/stackmemory 0.2.6 → 0.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +262 -83
- package/dist/scripts/cancel-duplicate-tasks.d.ts +7 -0
- package/dist/scripts/cancel-duplicate-tasks.d.ts.map +1 -0
- package/dist/scripts/cancel-duplicate-tasks.js +172 -0
- package/dist/scripts/cancel-duplicate-tasks.js.map +1 -0
- package/dist/scripts/list-linear-tasks.d.ts +6 -0
- package/dist/scripts/list-linear-tasks.d.ts.map +1 -0
- package/dist/scripts/list-linear-tasks.js +121 -0
- package/dist/scripts/list-linear-tasks.js.map +1 -0
- package/dist/scripts/merge-linear-duplicates-safe.d.ts +7 -0
- package/dist/scripts/merge-linear-duplicates-safe.d.ts.map +1 -0
- package/dist/scripts/merge-linear-duplicates-safe.js +267 -0
- package/dist/scripts/merge-linear-duplicates-safe.js.map +1 -0
- package/dist/scripts/show-linear-summary.d.ts +6 -0
- package/dist/scripts/show-linear-summary.d.ts.map +1 -0
- package/dist/scripts/show-linear-summary.js +120 -0
- package/dist/scripts/show-linear-summary.js.map +1 -0
- package/dist/scripts/status.js +6 -2
- package/dist/scripts/status.js.map +1 -1
- package/dist/src/cli/auto-detect.d.ts +61 -0
- package/dist/src/cli/auto-detect.d.ts.map +1 -0
- package/dist/src/cli/auto-detect.js +350 -0
- package/dist/src/cli/auto-detect.js.map +1 -0
- package/dist/src/cli/claude-sm.d.ts +7 -0
- package/dist/src/cli/claude-sm.d.ts.map +1 -0
- package/dist/src/cli/claude-sm.js +357 -0
- package/dist/src/cli/claude-sm.js.map +1 -0
- package/dist/src/cli/commands/config.d.ts +6 -0
- package/dist/src/cli/commands/config.d.ts.map +1 -0
- package/dist/src/cli/commands/config.js +224 -0
- package/dist/src/cli/commands/config.js.map +1 -0
- package/dist/src/cli/commands/context.d.ts +7 -0
- package/dist/src/cli/commands/context.d.ts.map +1 -0
- package/dist/src/cli/commands/context.js +365 -0
- package/dist/src/cli/commands/context.js.map +1 -0
- package/dist/src/cli/commands/linear-test.d.ts +6 -0
- package/dist/src/cli/commands/linear-test.d.ts.map +1 -0
- package/dist/src/cli/commands/linear-test.js +123 -0
- package/dist/src/cli/commands/linear-test.js.map +1 -0
- package/dist/src/cli/commands/linear.d.ts +6 -0
- package/dist/src/cli/commands/linear.d.ts.map +1 -0
- package/dist/src/cli/commands/linear.js +393 -0
- package/dist/src/cli/commands/linear.js.map +1 -0
- package/dist/src/cli/commands/log.d.ts +7 -0
- package/dist/src/cli/commands/log.d.ts.map +1 -0
- package/dist/src/cli/commands/log.js +168 -0
- package/dist/src/cli/commands/log.js.map +1 -0
- package/dist/src/cli/commands/onboard.d.ts +8 -0
- package/dist/src/cli/commands/onboard.d.ts.map +1 -0
- package/dist/src/cli/commands/onboard.js +363 -0
- package/dist/src/cli/commands/onboard.js.map +1 -0
- package/dist/src/cli/commands/projects.js +1 -1
- package/dist/src/cli/commands/projects.js.map +1 -1
- package/dist/src/cli/commands/search.d.ts +7 -0
- package/dist/src/cli/commands/search.d.ts.map +1 -0
- package/dist/src/cli/commands/search.js +162 -0
- package/dist/src/cli/commands/search.js.map +1 -0
- package/dist/src/cli/commands/session.d.ts +7 -0
- package/dist/src/cli/commands/session.d.ts.map +1 -0
- package/dist/src/cli/commands/session.js +222 -0
- package/dist/src/cli/commands/session.js.map +1 -0
- package/dist/src/cli/commands/tasks.d.ts +7 -0
- package/dist/src/cli/commands/tasks.d.ts.map +1 -0
- package/dist/src/cli/commands/tasks.js +229 -0
- package/dist/src/cli/commands/tasks.js.map +1 -0
- package/dist/src/cli/commands/webhook.d.ts +3 -0
- package/dist/src/cli/commands/webhook.d.ts.map +1 -0
- package/dist/src/cli/commands/webhook.js +157 -0
- package/dist/src/cli/commands/webhook.js.map +1 -0
- package/dist/src/cli/commands/worktree.d.ts +8 -0
- package/dist/src/cli/commands/worktree.d.ts.map +1 -0
- package/dist/src/cli/commands/worktree.js +339 -0
- package/dist/src/cli/commands/worktree.js.map +1 -0
- package/dist/src/cli/index.d.ts +2 -1
- package/dist/src/cli/index.d.ts.map +1 -1
- package/dist/src/cli/index.js +337 -50
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/utils/viewer.d.ts.map +1 -1
- package/dist/src/cli/utils/viewer.js +3 -1
- package/dist/src/cli/utils/viewer.js.map +1 -1
- package/dist/src/core/config/config-manager.d.ts +95 -0
- package/dist/src/core/config/config-manager.d.ts.map +1 -0
- package/dist/src/core/config/config-manager.js +359 -0
- package/dist/src/core/config/config-manager.js.map +1 -0
- package/dist/src/core/config/types.d.ts +72 -0
- package/dist/src/core/config/types.d.ts.map +1 -0
- package/dist/src/core/config/types.js +127 -0
- package/dist/src/core/config/types.js.map +1 -0
- package/dist/src/core/context/auto-context.d.ts +22 -0
- package/dist/src/core/context/auto-context.d.ts.map +1 -0
- package/dist/src/core/context/auto-context.js +77 -0
- package/dist/src/core/context/auto-context.js.map +1 -0
- package/dist/src/core/context/compaction-handler.d.ts +119 -0
- package/dist/src/core/context/compaction-handler.d.ts.map +1 -0
- package/dist/src/core/context/compaction-handler.js +306 -0
- package/dist/src/core/context/compaction-handler.js.map +1 -0
- package/dist/src/core/context/frame-manager.d.ts +4 -0
- package/dist/src/core/context/frame-manager.d.ts.map +1 -1
- package/dist/src/core/context/frame-manager.js +350 -144
- package/dist/src/core/context/frame-manager.js.map +1 -1
- package/dist/src/core/context/model-aware-compaction.d.ts +101 -0
- package/dist/src/core/context/model-aware-compaction.d.ts.map +1 -0
- package/dist/src/core/context/model-aware-compaction.js +616 -0
- package/dist/src/core/context/model-aware-compaction.js.map +1 -0
- package/dist/src/core/errors/index.d.ts +135 -0
- package/dist/src/core/errors/index.d.ts.map +1 -0
- package/dist/src/core/errors/index.js +274 -0
- package/dist/src/core/errors/index.js.map +1 -0
- package/dist/src/core/errors/recovery.d.ts +86 -0
- package/dist/src/core/errors/recovery.d.ts.map +1 -0
- package/dist/src/core/errors/recovery.js +274 -0
- package/dist/src/core/errors/recovery.js.map +1 -0
- package/dist/src/core/projects/project-manager.d.ts.map +1 -1
- package/dist/src/core/projects/project-manager.js +240 -122
- package/dist/src/core/projects/project-manager.js.map +1 -1
- package/dist/src/core/query/query-parser.d.ts +104 -0
- package/dist/src/core/query/query-parser.d.ts.map +1 -0
- package/dist/src/core/query/query-parser.js +347 -0
- package/dist/src/core/query/query-parser.js.map +1 -0
- package/dist/src/core/retrieval/index.d.ts +8 -0
- package/dist/src/core/retrieval/index.d.ts.map +1 -0
- package/dist/src/core/retrieval/index.js +8 -0
- package/dist/src/core/retrieval/index.js.map +1 -0
- package/dist/src/core/retrieval/llm-context-retrieval.d.ts +71 -0
- package/dist/src/core/retrieval/llm-context-retrieval.d.ts.map +1 -0
- package/dist/src/core/retrieval/llm-context-retrieval.js +545 -0
- package/dist/src/core/retrieval/llm-context-retrieval.js.map +1 -0
- package/dist/src/core/retrieval/summary-generator.d.ts +63 -0
- package/dist/src/core/retrieval/summary-generator.d.ts.map +1 -0
- package/dist/src/core/retrieval/summary-generator.js +622 -0
- package/dist/src/core/retrieval/summary-generator.js.map +1 -0
- package/dist/src/core/retrieval/types.d.ts +257 -0
- package/dist/src/core/retrieval/types.d.ts.map +1 -0
- package/dist/src/core/retrieval/types.js +18 -0
- package/dist/src/core/retrieval/types.js.map +1 -0
- package/dist/src/core/session/index.d.ts +2 -0
- package/dist/src/core/session/index.d.ts.map +1 -0
- package/dist/src/core/session/index.js +2 -0
- package/dist/src/core/session/index.js.map +1 -0
- package/dist/src/core/session/session-manager.d.ts +69 -0
- package/dist/src/core/session/session-manager.d.ts.map +1 -0
- package/dist/src/core/session/session-manager.js +311 -0
- package/dist/src/core/session/session-manager.js.map +1 -0
- package/dist/src/core/trace/trace-detector.d.ts +108 -0
- package/dist/src/core/trace/trace-detector.d.ts.map +1 -0
- package/dist/src/core/trace/trace-detector.demo.d.ts +5 -0
- package/dist/src/core/trace/trace-detector.demo.d.ts.map +1 -0
- package/dist/src/core/trace/trace-detector.demo.js +145 -0
- package/dist/src/core/trace/trace-detector.demo.js.map +1 -0
- package/dist/src/core/trace/trace-detector.js +425 -0
- package/dist/src/core/trace/trace-detector.js.map +1 -0
- package/dist/src/core/trace/trace-store.d.ts +60 -0
- package/dist/src/core/trace/trace-store.d.ts.map +1 -0
- package/dist/src/core/trace/trace-store.js +323 -0
- package/dist/src/core/trace/trace-store.js.map +1 -0
- package/dist/src/core/trace/types.d.ts +81 -0
- package/dist/src/core/trace/types.d.ts.map +1 -0
- package/dist/src/core/trace/types.js +70 -0
- package/dist/src/core/trace/types.js.map +1 -0
- package/dist/src/core/utils/update-checker.d.ts.map +1 -1
- package/dist/src/core/utils/update-checker.js +82 -25
- package/dist/src/core/utils/update-checker.js.map +1 -1
- package/dist/src/core/worktree/worktree-manager.d.ts +110 -0
- package/dist/src/core/worktree/worktree-manager.d.ts.map +1 -0
- package/dist/src/core/worktree/worktree-manager.js +456 -0
- package/dist/src/core/worktree/worktree-manager.js.map +1 -0
- package/dist/src/features/analytics/core/analytics-service.d.ts +6 -0
- package/dist/src/features/analytics/core/analytics-service.d.ts.map +1 -1
- package/dist/src/features/analytics/core/analytics-service.js +125 -10
- package/dist/src/features/analytics/core/analytics-service.js.map +1 -1
- package/dist/src/features/analytics/queries/metrics-queries.d.ts.map +1 -1
- package/dist/src/features/analytics/queries/metrics-queries.js +220 -163
- package/dist/src/features/analytics/queries/metrics-queries.js.map +1 -1
- package/dist/src/features/browser/browser-mcp.d.ts.map +1 -1
- package/dist/src/features/browser/browser-mcp.js +3 -0
- package/dist/src/features/browser/browser-mcp.js.map +1 -1
- package/dist/src/features/tasks/pebbles-task-store.d.ts +4 -0
- package/dist/src/features/tasks/pebbles-task-store.d.ts.map +1 -1
- package/dist/src/features/tasks/pebbles-task-store.js +299 -141
- package/dist/src/features/tasks/pebbles-task-store.js.map +1 -1
- package/dist/src/integrations/linear/client.d.ts +28 -1
- package/dist/src/integrations/linear/client.d.ts.map +1 -1
- package/dist/src/integrations/linear/client.js +87 -0
- package/dist/src/integrations/linear/client.js.map +1 -1
- package/dist/src/integrations/linear/sync-manager.d.ts +76 -0
- package/dist/src/integrations/linear/sync-manager.d.ts.map +1 -0
- package/dist/src/integrations/linear/sync-manager.js +223 -0
- package/dist/src/integrations/linear/sync-manager.js.map +1 -0
- package/dist/src/integrations/linear/sync-service.d.ts +25 -0
- package/dist/src/integrations/linear/sync-service.d.ts.map +1 -0
- package/dist/src/integrations/linear/sync-service.js +198 -0
- package/dist/src/integrations/linear/sync-service.js.map +1 -0
- package/dist/src/integrations/linear/sync.d.ts +23 -1
- package/dist/src/integrations/linear/sync.d.ts.map +1 -1
- package/dist/src/integrations/linear/sync.js +156 -9
- package/dist/src/integrations/linear/sync.js.map +1 -1
- package/dist/src/integrations/linear/types.d.ts +75 -0
- package/dist/src/integrations/linear/types.d.ts.map +1 -0
- package/dist/src/integrations/linear/types.js +2 -0
- package/dist/src/integrations/linear/types.js.map +1 -0
- package/dist/src/integrations/linear/webhook-server.d.ts +32 -0
- package/dist/src/integrations/linear/webhook-server.d.ts.map +1 -0
- package/dist/src/integrations/linear/webhook-server.js +188 -0
- package/dist/src/integrations/linear/webhook-server.js.map +1 -0
- package/dist/src/integrations/linear/webhook.d.ts +95 -0
- package/dist/src/integrations/linear/webhook.d.ts.map +1 -0
- package/dist/src/integrations/linear/webhook.js +204 -0
- package/dist/src/integrations/linear/webhook.js.map +1 -0
- package/dist/src/integrations/mcp/server.d.ts +14 -0
- package/dist/src/integrations/mcp/server.d.ts.map +1 -1
- package/dist/src/integrations/mcp/server.js +849 -61
- package/dist/src/integrations/mcp/server.js.map +1 -1
- package/dist/src/integrations/mcp/trace-test.d.ts +5 -0
- package/dist/src/integrations/mcp/trace-test.d.ts.map +1 -0
- package/dist/src/integrations/mcp/trace-test.js +54 -0
- package/dist/src/integrations/mcp/trace-test.js.map +1 -0
- package/dist/src/servers/production/auth-middleware.d.ts +2 -2
- package/dist/src/servers/production/auth-middleware.d.ts.map +1 -1
- package/dist/src/servers/production/auth-middleware.js +1 -1
- package/dist/src/servers/production/auth-middleware.js.map +1 -1
- package/dist/src/services/config-service.d.ts +44 -0
- package/dist/src/services/config-service.d.ts.map +1 -0
- package/dist/src/services/config-service.js +61 -0
- package/dist/src/services/config-service.js.map +1 -0
- package/dist/src/services/context-service.d.ts +17 -0
- package/dist/src/services/context-service.d.ts.map +1 -0
- package/dist/src/services/context-service.js +88 -0
- package/dist/src/services/context-service.js.map +1 -0
- package/dist/src/types/task.d.ts +27 -0
- package/dist/src/types/task.d.ts.map +1 -0
- package/dist/src/types/task.js +2 -0
- package/dist/src/types/task.js.map +1 -0
- package/dist/src/utils/logger.d.ts +13 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.js +52 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/package.json +24 -10
- package/dist/attention-scoring/src/attention-tracker.d.ts +0 -79
- package/dist/attention-scoring/src/attention-tracker.d.ts.map +0 -1
- package/dist/attention-scoring/src/attention-tracker.js +0 -488
- package/dist/attention-scoring/src/attention-tracker.js.map +0 -1
- package/dist/attention-scoring/src/mcp-integration.d.ts +0 -56
- package/dist/attention-scoring/src/mcp-integration.d.ts.map +0 -1
- package/dist/attention-scoring/src/mcp-integration.js +0 -369
- package/dist/attention-scoring/src/mcp-integration.js.map +0 -1
- package/dist/index.js +0 -382
- package/dist/p2p-sync/src/p2p-sync.d.ts +0 -81
- package/dist/p2p-sync/src/p2p-sync.d.ts.map +0 -1
- package/dist/p2p-sync/src/p2p-sync.js +0 -457
- package/dist/p2p-sync/src/p2p-sync.js.map +0 -1
- package/dist/p2p-sync/src/team-context-sync.d.ts +0 -99
- package/dist/p2p-sync/src/team-context-sync.d.ts.map +0 -1
- package/dist/p2p-sync/src/team-context-sync.js +0 -491
- package/dist/p2p-sync/src/team-context-sync.js.map +0 -1
- package/dist/src/analytics/api/analytics-api.d.ts +0 -24
- package/dist/src/analytics/api/analytics-api.d.ts.map +0 -1
- package/dist/src/analytics/api/analytics-api.js +0 -279
- package/dist/src/analytics/api/analytics-api.js.map +0 -1
- package/dist/src/analytics/core/analytics-service.d.ts +0 -23
- package/dist/src/analytics/core/analytics-service.d.ts.map +0 -1
- package/dist/src/analytics/core/analytics-service.js +0 -160
- package/dist/src/analytics/core/analytics-service.js.map +0 -1
- package/dist/src/analytics/index.d.ts +0 -12
- package/dist/src/analytics/index.d.ts.map +0 -1
- package/dist/src/analytics/index.js +0 -11
- package/dist/src/analytics/index.js.map +0 -1
- package/dist/src/analytics/queries/metrics-queries.d.ts +0 -11
- package/dist/src/analytics/queries/metrics-queries.d.ts.map +0 -1
- package/dist/src/analytics/queries/metrics-queries.js +0 -179
- package/dist/src/analytics/queries/metrics-queries.js.map +0 -1
- package/dist/src/analytics/types/metrics.d.ts +0 -60
- package/dist/src/analytics/types/metrics.d.ts.map +0 -1
- package/dist/src/analytics/types/metrics.js +0 -2
- package/dist/src/analytics/types/metrics.js.map +0 -1
- package/dist/src/beads/beads-task-store.d.ts +0 -117
- package/dist/src/beads/beads-task-store.d.ts.map +0 -1
- package/dist/src/beads/beads-task-store.js +0 -318
- package/dist/src/beads/beads-task-store.js.map +0 -1
- package/dist/src/beads/task-aware-context.d.ts +0 -103
- package/dist/src/beads/task-aware-context.d.ts.map +0 -1
- package/dist/src/beads/task-aware-context.js +0 -395
- package/dist/src/beads/task-aware-context.js.map +0 -1
- package/dist/src/beads-task-store.d.ts +0 -117
- package/dist/src/beads-task-store.d.ts.map +0 -1
- package/dist/src/beads-task-store.js +0 -318
- package/dist/src/beads-task-store.js.map +0 -1
- package/dist/src/cli/analytics-viewer.d.ts +0 -3
- package/dist/src/cli/analytics-viewer.d.ts.map +0 -1
- package/dist/src/cli/analytics-viewer.js +0 -89
- package/dist/src/cli/analytics-viewer.js.map +0 -1
- package/dist/src/cli/cli.d.ts +0 -7
- package/dist/src/cli/cli.d.ts.map +0 -1
- package/dist/src/cli/cli.js +0 -704
- package/dist/src/cli/cli.js.map +0 -1
- package/dist/src/cli/project-commands.d.ts +0 -8
- package/dist/src/cli/project-commands.d.ts.map +0 -1
- package/dist/src/cli/project-commands.js +0 -212
- package/dist/src/cli/project-commands.js.map +0 -1
- package/dist/src/cli.d.ts +0 -7
- package/dist/src/cli.d.ts.map +0 -1
- package/dist/src/cli.js +0 -73
- package/dist/src/cli.js.map +0 -1
- package/dist/src/core/error-handler.d.ts +0 -46
- package/dist/src/core/error-handler.d.ts.map +0 -1
- package/dist/src/core/error-handler.js +0 -212
- package/dist/src/core/error-handler.js.map +0 -1
- package/dist/src/core/frame-manager.d.ts +0 -106
- package/dist/src/core/frame-manager.d.ts.map +0 -1
- package/dist/src/core/frame-manager.js +0 -387
- package/dist/src/core/frame-manager.js.map +0 -1
- package/dist/src/core/logger.d.ts +0 -24
- package/dist/src/core/logger.d.ts.map +0 -1
- package/dist/src/core/logger.js +0 -121
- package/dist/src/core/logger.js.map +0 -1
- package/dist/src/core/logger.test.d.ts +0 -2
- package/dist/src/core/logger.test.d.ts.map +0 -1
- package/dist/src/core/logger.test.js +0 -31
- package/dist/src/core/logger.test.js.map +0 -1
- package/dist/src/core/progress-tracker.d.ts +0 -95
- package/dist/src/core/progress-tracker.d.ts.map +0 -1
- package/dist/src/core/progress-tracker.js +0 -178
- package/dist/src/core/progress-tracker.js.map +0 -1
- package/dist/src/core/project-manager.d.ts +0 -130
- package/dist/src/core/project-manager.d.ts.map +0 -1
- package/dist/src/core/project-manager.js +0 -582
- package/dist/src/core/project-manager.js.map +0 -1
- package/dist/src/core/update-checker.d.ts +0 -38
- package/dist/src/core/update-checker.d.ts.map +0 -1
- package/dist/src/core/update-checker.js +0 -156
- package/dist/src/core/update-checker.js.map +0 -1
- package/dist/src/error-handler.d.ts +0 -42
- package/dist/src/error-handler.d.ts.map +0 -1
- package/dist/src/error-handler.js +0 -155
- package/dist/src/error-handler.js.map +0 -1
- package/dist/src/frame-manager.d.ts +0 -106
- package/dist/src/frame-manager.d.ts.map +0 -1
- package/dist/src/frame-manager.js +0 -361
- package/dist/src/frame-manager.js.map +0 -1
- package/dist/src/integrations/browser-mcp.d.ts +0 -94
- package/dist/src/integrations/browser-mcp.d.ts.map +0 -1
- package/dist/src/integrations/browser-mcp.js +0 -431
- package/dist/src/integrations/browser-mcp.js.map +0 -1
- package/dist/src/integrations/linear-auth.d.ts +0 -99
- package/dist/src/integrations/linear-auth.d.ts.map +0 -1
- package/dist/src/integrations/linear-auth.js +0 -319
- package/dist/src/integrations/linear-auth.js.map +0 -1
- package/dist/src/integrations/linear-auto-sync.d.ts +0 -77
- package/dist/src/integrations/linear-auto-sync.d.ts.map +0 -1
- package/dist/src/integrations/linear-auto-sync.js +0 -268
- package/dist/src/integrations/linear-auto-sync.js.map +0 -1
- package/dist/src/integrations/linear-client.d.ts +0 -86
- package/dist/src/integrations/linear-client.d.ts.map +0 -1
- package/dist/src/integrations/linear-client.js +0 -277
- package/dist/src/integrations/linear-client.js.map +0 -1
- package/dist/src/integrations/linear-config.d.ts +0 -51
- package/dist/src/integrations/linear-config.d.ts.map +0 -1
- package/dist/src/integrations/linear-config.js +0 -103
- package/dist/src/integrations/linear-config.js.map +0 -1
- package/dist/src/integrations/linear-sync.d.ts +0 -97
- package/dist/src/integrations/linear-sync.d.ts.map +0 -1
- package/dist/src/integrations/linear-sync.js +0 -391
- package/dist/src/integrations/linear-sync.js.map +0 -1
- package/dist/src/logger.d.ts +0 -24
- package/dist/src/logger.d.ts.map +0 -1
- package/dist/src/logger.js +0 -120
- package/dist/src/logger.js.map +0 -1
- package/dist/src/mcp/mcp-server.d.ts +0 -40
- package/dist/src/mcp/mcp-server.d.ts.map +0 -1
- package/dist/src/mcp/mcp-server.js +0 -828
- package/dist/src/mcp/mcp-server.js.map +0 -1
- package/dist/src/mcp-server.d.ts +0 -32
- package/dist/src/mcp-server.d.ts.map +0 -1
- package/dist/src/mcp-server.js +0 -441
- package/dist/src/mcp-server.js.map +0 -1
- package/dist/src/pebbles/pebbles-task-store.d.ts +0 -117
- package/dist/src/pebbles/pebbles-task-store.d.ts.map +0 -1
- package/dist/src/pebbles/pebbles-task-store.js +0 -335
- package/dist/src/pebbles/pebbles-task-store.js.map +0 -1
- package/dist/src/pebbles/task-aware-context.d.ts +0 -103
- package/dist/src/pebbles/task-aware-context.d.ts.map +0 -1
- package/dist/src/pebbles/task-aware-context.js +0 -412
- package/dist/src/pebbles/task-aware-context.js.map +0 -1
- package/dist/src/railway/index.d.ts +0 -7
- package/dist/src/railway/index.d.ts.map +0 -1
- package/dist/src/railway/index.js +0 -401
- package/dist/src/railway/index.js.map +0 -1
- package/dist/src/runway/auth/auth-middleware.d.ts +0 -66
- package/dist/src/runway/auth/auth-middleware.d.ts.map +0 -1
- package/dist/src/runway/auth/auth-middleware.js +0 -337
- package/dist/src/runway/auth/auth-middleware.js.map +0 -1
- package/dist/src/runway/server/runway-mcp-server.d.ts +0 -46
- package/dist/src/runway/server/runway-mcp-server.d.ts.map +0 -1
- package/dist/src/runway/server/runway-mcp-server.js +0 -601
- package/dist/src/runway/server/runway-mcp-server.js.map +0 -1
- package/dist/src/runway.bak/auth/auth-middleware.d.ts +0 -66
- package/dist/src/runway.bak/auth/auth-middleware.d.ts.map +0 -1
- package/dist/src/runway.bak/auth/auth-middleware.js +0 -337
- package/dist/src/runway.bak/auth/auth-middleware.js.map +0 -1
- package/dist/src/runway.bak/server/runway-mcp-server.d.ts +0 -46
- package/dist/src/runway.bak/server/runway-mcp-server.d.ts.map +0 -1
- package/dist/src/runway.bak/server/runway-mcp-server.js +0 -601
- package/dist/src/runway.bak/server/runway-mcp-server.js.map +0 -1
- package/dist/src/task-aware-context.d.ts +0 -103
- package/dist/src/task-aware-context.d.ts.map +0 -1
- package/dist/src/task-aware-context.js +0 -395
- package/dist/src/task-aware-context.js.map +0 -1
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for LLM-Driven Context Retrieval System
|
|
3
|
+
* Implements intelligent context selection based on compressed summaries
|
|
4
|
+
*/
|
|
5
|
+
import { Frame, Anchor, Event } from '../context/frame-manager.js';
|
|
6
|
+
import { StackMemoryQuery } from '../query/query-parser.js';
|
|
7
|
+
/**
|
|
8
|
+
* Compressed summary of recent session activity
|
|
9
|
+
*/
|
|
10
|
+
export interface RecentSessionSummary {
|
|
11
|
+
/** Recent frames with their key attributes */
|
|
12
|
+
frames: FrameSummary[];
|
|
13
|
+
/** Dominant operations performed */
|
|
14
|
+
dominantOperations: OperationSummary[];
|
|
15
|
+
/** Files that were touched */
|
|
16
|
+
filesTouched: FileSummary[];
|
|
17
|
+
/** Errors encountered */
|
|
18
|
+
errorsEncountered: ErrorSummary[];
|
|
19
|
+
/** Time range covered */
|
|
20
|
+
timeRange: {
|
|
21
|
+
start: number;
|
|
22
|
+
end: number;
|
|
23
|
+
durationMs: number;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export interface FrameSummary {
|
|
27
|
+
frameId: string;
|
|
28
|
+
name: string;
|
|
29
|
+
type: string;
|
|
30
|
+
depth: number;
|
|
31
|
+
eventCount: number;
|
|
32
|
+
anchorCount: number;
|
|
33
|
+
score: number;
|
|
34
|
+
createdAt: number;
|
|
35
|
+
closedAt?: number;
|
|
36
|
+
digestPreview?: string;
|
|
37
|
+
}
|
|
38
|
+
export interface OperationSummary {
|
|
39
|
+
operation: string;
|
|
40
|
+
count: number;
|
|
41
|
+
lastOccurrence: number;
|
|
42
|
+
successRate: number;
|
|
43
|
+
}
|
|
44
|
+
export interface FileSummary {
|
|
45
|
+
path: string;
|
|
46
|
+
operationCount: number;
|
|
47
|
+
lastModified: number;
|
|
48
|
+
operations: string[];
|
|
49
|
+
}
|
|
50
|
+
export interface ErrorSummary {
|
|
51
|
+
errorType: string;
|
|
52
|
+
message: string;
|
|
53
|
+
count: number;
|
|
54
|
+
lastOccurrence: number;
|
|
55
|
+
resolved: boolean;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Historical patterns extracted from memory
|
|
59
|
+
*/
|
|
60
|
+
export interface HistoricalPatterns {
|
|
61
|
+
/** Frame counts by topic */
|
|
62
|
+
topicFrameCounts: Record<string, number>;
|
|
63
|
+
/** Key decisions made */
|
|
64
|
+
keyDecisions: DecisionSummary[];
|
|
65
|
+
/** Recurring issues */
|
|
66
|
+
recurringIssues: IssueSummary[];
|
|
67
|
+
/** Common tool sequences */
|
|
68
|
+
commonToolSequences: ToolSequence[];
|
|
69
|
+
/** Time-based activity patterns */
|
|
70
|
+
activityPatterns: ActivityPattern[];
|
|
71
|
+
}
|
|
72
|
+
export interface DecisionSummary {
|
|
73
|
+
id: string;
|
|
74
|
+
text: string;
|
|
75
|
+
frameId: string;
|
|
76
|
+
timestamp: number;
|
|
77
|
+
impact: 'low' | 'medium' | 'high';
|
|
78
|
+
relatedFiles?: string[];
|
|
79
|
+
}
|
|
80
|
+
export interface IssueSummary {
|
|
81
|
+
issueType: string;
|
|
82
|
+
occurrenceCount: number;
|
|
83
|
+
lastSeen: number;
|
|
84
|
+
resolutionRate: number;
|
|
85
|
+
commonFixes?: string[];
|
|
86
|
+
}
|
|
87
|
+
export interface ToolSequence {
|
|
88
|
+
pattern: string;
|
|
89
|
+
frequency: number;
|
|
90
|
+
avgDuration: number;
|
|
91
|
+
successRate: number;
|
|
92
|
+
}
|
|
93
|
+
export interface ActivityPattern {
|
|
94
|
+
periodType: 'hourly' | 'daily' | 'weekly';
|
|
95
|
+
peakPeriods: string[];
|
|
96
|
+
avgEventsPerPeriod: number;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Queryable indices for fast retrieval
|
|
100
|
+
*/
|
|
101
|
+
export interface QueryableIndices {
|
|
102
|
+
/** Index by error type */
|
|
103
|
+
byErrorType: Record<string, string[]>;
|
|
104
|
+
/** Index by timeframe */
|
|
105
|
+
byTimeframe: Record<string, string[]>;
|
|
106
|
+
/** Index by contributor */
|
|
107
|
+
byContributor: Record<string, string[]>;
|
|
108
|
+
/** Index by topic */
|
|
109
|
+
byTopic: Record<string, string[]>;
|
|
110
|
+
/** Index by file */
|
|
111
|
+
byFile: Record<string, string[]>;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Complete compressed summary for LLM analysis
|
|
115
|
+
*/
|
|
116
|
+
export interface CompressedSummary {
|
|
117
|
+
/** Project identifier */
|
|
118
|
+
projectId: string;
|
|
119
|
+
/** Generation timestamp */
|
|
120
|
+
generatedAt: number;
|
|
121
|
+
/** Recent session summary */
|
|
122
|
+
recentSession: RecentSessionSummary;
|
|
123
|
+
/** Historical patterns */
|
|
124
|
+
historicalPatterns: HistoricalPatterns;
|
|
125
|
+
/** Queryable indices */
|
|
126
|
+
queryableIndices: QueryableIndices;
|
|
127
|
+
/** Summary statistics */
|
|
128
|
+
stats: SummaryStats;
|
|
129
|
+
}
|
|
130
|
+
export interface SummaryStats {
|
|
131
|
+
totalFrames: number;
|
|
132
|
+
totalEvents: number;
|
|
133
|
+
totalAnchors: number;
|
|
134
|
+
totalDecisions: number;
|
|
135
|
+
oldestFrame: number;
|
|
136
|
+
newestFrame: number;
|
|
137
|
+
avgFrameDepth: number;
|
|
138
|
+
avgEventsPerFrame: number;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* LLM analysis request
|
|
142
|
+
*/
|
|
143
|
+
export interface LLMAnalysisRequest {
|
|
144
|
+
/** Current user query */
|
|
145
|
+
currentQuery: string;
|
|
146
|
+
/** Parsed structured query */
|
|
147
|
+
parsedQuery?: StackMemoryQuery;
|
|
148
|
+
/** Compressed summary */
|
|
149
|
+
compressedSummary: CompressedSummary;
|
|
150
|
+
/** Token budget for context */
|
|
151
|
+
tokenBudget: number;
|
|
152
|
+
/** Optional hints for retrieval */
|
|
153
|
+
hints?: RetrievalHints;
|
|
154
|
+
}
|
|
155
|
+
export interface RetrievalHints {
|
|
156
|
+
/** Prefer recent frames */
|
|
157
|
+
preferRecent?: boolean;
|
|
158
|
+
/** Focus on specific topics */
|
|
159
|
+
focusTopics?: string[];
|
|
160
|
+
/** Include error context */
|
|
161
|
+
includeErrors?: boolean;
|
|
162
|
+
/** Include decision history */
|
|
163
|
+
includeDecisions?: boolean;
|
|
164
|
+
/** Minimum relevance score */
|
|
165
|
+
minRelevance?: number;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* LLM analysis response
|
|
169
|
+
*/
|
|
170
|
+
export interface LLMAnalysisResponse {
|
|
171
|
+
/** Reasoning for the retrieval decision (auditable) */
|
|
172
|
+
reasoning: string;
|
|
173
|
+
/** Frames to retrieve with priority order */
|
|
174
|
+
framesToRetrieve: FrameRetrievalPlan[];
|
|
175
|
+
/** Confidence score (0.0 - 1.0) */
|
|
176
|
+
confidenceScore: number;
|
|
177
|
+
/** Additional context recommendations */
|
|
178
|
+
recommendations: ContextRecommendation[];
|
|
179
|
+
/** Analysis metadata */
|
|
180
|
+
metadata: AnalysisMetadata;
|
|
181
|
+
}
|
|
182
|
+
export interface FrameRetrievalPlan {
|
|
183
|
+
frameId: string;
|
|
184
|
+
priority: number;
|
|
185
|
+
reason: string;
|
|
186
|
+
includeEvents: boolean;
|
|
187
|
+
includeAnchors: boolean;
|
|
188
|
+
includeDigest: boolean;
|
|
189
|
+
estimatedTokens: number;
|
|
190
|
+
}
|
|
191
|
+
export interface ContextRecommendation {
|
|
192
|
+
type: 'include' | 'exclude' | 'summarize';
|
|
193
|
+
target: string;
|
|
194
|
+
reason: string;
|
|
195
|
+
impact: 'low' | 'medium' | 'high';
|
|
196
|
+
}
|
|
197
|
+
export interface AnalysisMetadata {
|
|
198
|
+
analysisTimeMs: number;
|
|
199
|
+
summaryTokens: number;
|
|
200
|
+
queryComplexity: 'simple' | 'moderate' | 'complex';
|
|
201
|
+
matchedPatterns: string[];
|
|
202
|
+
fallbackUsed: boolean;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Retrieved context result
|
|
206
|
+
*/
|
|
207
|
+
export interface RetrievedContext {
|
|
208
|
+
/** Assembled context string */
|
|
209
|
+
context: string;
|
|
210
|
+
/** Frames included */
|
|
211
|
+
frames: Frame[];
|
|
212
|
+
/** Anchors included */
|
|
213
|
+
anchors: Anchor[];
|
|
214
|
+
/** Events included */
|
|
215
|
+
events: Event[];
|
|
216
|
+
/** LLM analysis that drove retrieval */
|
|
217
|
+
analysis: LLMAnalysisResponse;
|
|
218
|
+
/** Token usage */
|
|
219
|
+
tokenUsage: {
|
|
220
|
+
budget: number;
|
|
221
|
+
used: number;
|
|
222
|
+
remaining: number;
|
|
223
|
+
};
|
|
224
|
+
/** Retrieval metadata */
|
|
225
|
+
metadata: RetrievalMetadata;
|
|
226
|
+
}
|
|
227
|
+
export interface RetrievalMetadata {
|
|
228
|
+
retrievalTimeMs: number;
|
|
229
|
+
cacheHit: boolean;
|
|
230
|
+
framesScanned: number;
|
|
231
|
+
framesIncluded: number;
|
|
232
|
+
compressionRatio: number;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Configuration for the retrieval system
|
|
236
|
+
*/
|
|
237
|
+
export interface RetrievalConfig {
|
|
238
|
+
/** Maximum frames to include in summary */
|
|
239
|
+
maxSummaryFrames: number;
|
|
240
|
+
/** Default token budget */
|
|
241
|
+
defaultTokenBudget: number;
|
|
242
|
+
/** Cache TTL in seconds */
|
|
243
|
+
cacheTtlSeconds: number;
|
|
244
|
+
/** Minimum confidence to use LLM suggestions */
|
|
245
|
+
minConfidenceThreshold: number;
|
|
246
|
+
/** Enable fallback to heuristic retrieval */
|
|
247
|
+
enableFallback: boolean;
|
|
248
|
+
/** LLM provider configuration */
|
|
249
|
+
llmConfig: {
|
|
250
|
+
provider: 'anthropic' | 'openai' | 'local';
|
|
251
|
+
model: string;
|
|
252
|
+
maxTokens: number;
|
|
253
|
+
temperature: number;
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
export declare const DEFAULT_RETRIEVAL_CONFIG: RetrievalConfig;
|
|
257
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/retrieval/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,oCAAoC;IACpC,kBAAkB,EAAE,gBAAgB,EAAE,CAAC;IACvC,8BAA8B;IAC9B,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,yBAAyB;IACzB,iBAAiB,EAAE,YAAY,EAAE,CAAC;IAClC,yBAAyB;IACzB,SAAS,EAAE;QACT,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,4BAA4B;IAC5B,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,yBAAyB;IACzB,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,uBAAuB;IACvB,eAAe,EAAE,YAAY,EAAE,CAAC;IAChC,4BAA4B;IAC5B,mBAAmB,EAAE,YAAY,EAAE,CAAC;IACpC,mCAAmC;IACnC,gBAAgB,EAAE,eAAe,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC1C,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACtC,yBAAyB;IACzB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACtC,2BAA2B;IAC3B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACxC,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAClC,oBAAoB;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,aAAa,EAAE,oBAAoB,CAAC;IACpC,0BAA0B;IAC1B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,wBAAwB;IACxB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,yBAAyB;IACzB,KAAK,EAAE,YAAY,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,yBAAyB;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,8BAA8B;IAC9B,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,yBAAyB;IACzB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,2BAA2B;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,4BAA4B;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,+BAA+B;IAC/B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,8BAA8B;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,gBAAgB,EAAE,kBAAkB,EAAE,CAAC;IACvC,mCAAmC;IACnC,eAAe,EAAE,MAAM,CAAC;IACxB,yCAAyC;IACzC,eAAe,EAAE,qBAAqB,EAAE,CAAC;IACzC,wBAAwB;IACxB,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;IACnD,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB;IACtB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,uBAAuB;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,sBAAsB;IACtB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,wCAAwC;IACxC,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,kBAAkB;IAClB,UAAU,EAAE;QACV,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,yBAAyB;IACzB,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,2CAA2C;IAC3C,gBAAgB,EAAE,MAAM,CAAC;IACzB,2BAA2B;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,2BAA2B;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,gDAAgD;IAChD,sBAAsB,EAAE,MAAM,CAAC;IAC/B,6CAA6C;IAC7C,cAAc,EAAE,OAAO,CAAC;IACxB,iCAAiC;IACjC,SAAS,EAAE;QACT,QAAQ,EAAE,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAC;QAC3C,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED,eAAO,MAAM,wBAAwB,EAAE,eAYtC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for LLM-Driven Context Retrieval System
|
|
3
|
+
* Implements intelligent context selection based on compressed summaries
|
|
4
|
+
*/
|
|
5
|
+
export const DEFAULT_RETRIEVAL_CONFIG = {
|
|
6
|
+
maxSummaryFrames: 15,
|
|
7
|
+
defaultTokenBudget: 8000,
|
|
8
|
+
cacheTtlSeconds: 300,
|
|
9
|
+
minConfidenceThreshold: 0.6,
|
|
10
|
+
enableFallback: true,
|
|
11
|
+
llmConfig: {
|
|
12
|
+
provider: 'anthropic',
|
|
13
|
+
model: 'claude-3-haiku-20240307',
|
|
14
|
+
maxTokens: 1024,
|
|
15
|
+
temperature: 0.3,
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/core/retrieval/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoRH,MAAM,CAAC,MAAM,wBAAwB,GAAoB;IACvD,gBAAgB,EAAE,EAAE;IACpB,kBAAkB,EAAE,IAAI;IACxB,eAAe,EAAE,GAAG;IACpB,sBAAsB,EAAE,GAAG;IAC3B,cAAc,EAAE,IAAI;IACpB,SAAS,EAAE;QACT,QAAQ,EAAE,WAAW;QACrB,KAAK,EAAE,yBAAyB;QAChC,SAAS,EAAE,IAAI;QACf,WAAW,EAAE,GAAG;KACjB;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/session/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,cAAc,EACd,KAAK,OAAO,EACZ,KAAK,cAAc,EACnB,cAAc,EACf,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/session/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,cAAc,EAGd,cAAc,EACf,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Management for StackMemory
|
|
3
|
+
* Provides session persistence and recovery across CLI invocations
|
|
4
|
+
*/
|
|
5
|
+
export interface Session {
|
|
6
|
+
sessionId: string;
|
|
7
|
+
runId: string;
|
|
8
|
+
projectId: string;
|
|
9
|
+
branch?: string;
|
|
10
|
+
startedAt: number;
|
|
11
|
+
lastActiveAt: number;
|
|
12
|
+
metadata: {
|
|
13
|
+
user?: string;
|
|
14
|
+
environment?: string;
|
|
15
|
+
tags?: string[];
|
|
16
|
+
cliVersion?: string;
|
|
17
|
+
};
|
|
18
|
+
state: 'active' | 'suspended' | 'closed';
|
|
19
|
+
}
|
|
20
|
+
export interface SessionOptions {
|
|
21
|
+
sessionId?: string;
|
|
22
|
+
projectPath?: string;
|
|
23
|
+
branch?: string;
|
|
24
|
+
metadata?: Session['metadata'];
|
|
25
|
+
}
|
|
26
|
+
export declare enum FrameQueryMode {
|
|
27
|
+
CURRENT_SESSION = "current",
|
|
28
|
+
PROJECT_ACTIVE = "project",
|
|
29
|
+
ALL_ACTIVE = "all",
|
|
30
|
+
HISTORICAL = "historical"
|
|
31
|
+
}
|
|
32
|
+
export declare class SessionManager {
|
|
33
|
+
private static instance;
|
|
34
|
+
private sessionsDir;
|
|
35
|
+
private currentSession;
|
|
36
|
+
private readonly STALE_THRESHOLD;
|
|
37
|
+
private constructor();
|
|
38
|
+
static getInstance(): SessionManager;
|
|
39
|
+
initialize(): Promise<void>;
|
|
40
|
+
getOrCreateSession(options?: SessionOptions): Promise<Session>;
|
|
41
|
+
createSession(params: {
|
|
42
|
+
projectId: string;
|
|
43
|
+
branch?: string;
|
|
44
|
+
metadata?: Session['metadata'];
|
|
45
|
+
}): Promise<Session>;
|
|
46
|
+
loadSession(sessionId: string): Promise<Session | null>;
|
|
47
|
+
saveSession(session: Session): Promise<void>;
|
|
48
|
+
suspendSession(sessionId?: string): Promise<void>;
|
|
49
|
+
resumeSession(sessionId: string): Promise<Session>;
|
|
50
|
+
closeSession(sessionId?: string): Promise<void>;
|
|
51
|
+
listSessions(filter?: {
|
|
52
|
+
projectId?: string;
|
|
53
|
+
state?: Session['state'];
|
|
54
|
+
branch?: string;
|
|
55
|
+
}): Promise<Session[]>;
|
|
56
|
+
mergeSessions(sourceId: string, targetId: string): Promise<Session>;
|
|
57
|
+
cleanupStaleSessions(maxAge?: number): Promise<number>;
|
|
58
|
+
getCurrentSession(): Session | null;
|
|
59
|
+
getSessionRunId(): string;
|
|
60
|
+
private getProjectHash;
|
|
61
|
+
private getGitBranch;
|
|
62
|
+
private findProjectBranchSession;
|
|
63
|
+
private findLastActiveSession;
|
|
64
|
+
private setProjectActiveSession;
|
|
65
|
+
private isSessionRecent;
|
|
66
|
+
private touchSession;
|
|
67
|
+
}
|
|
68
|
+
export declare const sessionManager: SessionManager;
|
|
69
|
+
//# sourceMappingURL=session-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../../../src/core/session/session-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,KAAK,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;CAC1C;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;CAChC;AAED,oBAAY,cAAc;IACxB,eAAe,YAAY;IAC3B,cAAc,YAAY;IAC1B,UAAU,QAAQ;IAClB,UAAU,eAAe;CAC1B;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiB;IACxC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAuB;IAEvD,OAAO;IAKP,MAAM,CAAC,WAAW,IAAI,cAAc;IAO9B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAc3B,kBAAkB,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAqD9D,aAAa,CAAC,MAAM,EAAE;QAC1B,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;KAChC,GAAG,OAAO,CAAC,OAAO,CAAC;IAgCd,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAiBvD,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5C,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYjD,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAkBlD,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB/C,YAAY,CAAC,MAAM,CAAC,EAAE;QAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACzB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAuBhB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAkCnE,oBAAoB,CAAC,MAAM,GAAE,MAAiC,GAAG,OAAO,CAAC,MAAM,CAAC;IAsBtF,iBAAiB,IAAI,OAAO,GAAG,IAAI;IAInC,eAAe,IAAI,MAAM;YAIX,cAAc;YAsBd,YAAY;YAcZ,wBAAwB;YAexB,qBAAqB;YASrB,uBAAuB;IASrC,OAAO,CAAC,eAAe;YAIT,YAAY;CAI3B;AAED,eAAO,MAAM,cAAc,gBAA+B,CAAC"}
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Management for StackMemory
|
|
3
|
+
* Provides session persistence and recovery across CLI invocations
|
|
4
|
+
*/
|
|
5
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
6
|
+
import * as fs from 'fs/promises';
|
|
7
|
+
import * as path from 'path';
|
|
8
|
+
import * as crypto from 'crypto';
|
|
9
|
+
import { logger } from '../monitoring/logger.js';
|
|
10
|
+
import { SystemError, ErrorCode } from '../errors/index.js';
|
|
11
|
+
export var FrameQueryMode;
|
|
12
|
+
(function (FrameQueryMode) {
|
|
13
|
+
FrameQueryMode["CURRENT_SESSION"] = "current";
|
|
14
|
+
FrameQueryMode["PROJECT_ACTIVE"] = "project";
|
|
15
|
+
FrameQueryMode["ALL_ACTIVE"] = "all";
|
|
16
|
+
FrameQueryMode["HISTORICAL"] = "historical";
|
|
17
|
+
})(FrameQueryMode || (FrameQueryMode = {}));
|
|
18
|
+
export class SessionManager {
|
|
19
|
+
static instance;
|
|
20
|
+
sessionsDir;
|
|
21
|
+
currentSession = null;
|
|
22
|
+
STALE_THRESHOLD = 24 * 60 * 60 * 1000; // 24 hours
|
|
23
|
+
constructor() {
|
|
24
|
+
const homeDir = process.env.HOME || process.env.USERPROFILE || '';
|
|
25
|
+
this.sessionsDir = path.join(homeDir, '.stackmemory', 'sessions');
|
|
26
|
+
}
|
|
27
|
+
static getInstance() {
|
|
28
|
+
if (!SessionManager.instance) {
|
|
29
|
+
SessionManager.instance = new SessionManager();
|
|
30
|
+
}
|
|
31
|
+
return SessionManager.instance;
|
|
32
|
+
}
|
|
33
|
+
async initialize() {
|
|
34
|
+
try {
|
|
35
|
+
await fs.mkdir(this.sessionsDir, { recursive: true });
|
|
36
|
+
await fs.mkdir(path.join(this.sessionsDir, 'projects'), { recursive: true });
|
|
37
|
+
await fs.mkdir(path.join(this.sessionsDir, 'history'), { recursive: true });
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
throw new SystemError('Failed to initialize session directories', ErrorCode.INITIALIZATION_ERROR, { error, sessionsDir: this.sessionsDir });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
async getOrCreateSession(options) {
|
|
44
|
+
// 1. Check explicit session ID
|
|
45
|
+
if (options?.sessionId) {
|
|
46
|
+
const session = await this.loadSession(options.sessionId);
|
|
47
|
+
if (session) {
|
|
48
|
+
this.currentSession = session;
|
|
49
|
+
return session;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// 2. Check environment variable
|
|
53
|
+
const envSessionId = process.env.STACKMEMORY_SESSION;
|
|
54
|
+
if (envSessionId) {
|
|
55
|
+
const session = await this.loadSession(envSessionId);
|
|
56
|
+
if (session) {
|
|
57
|
+
this.currentSession = session;
|
|
58
|
+
return session;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// 3. Check project + branch context
|
|
62
|
+
const projectHash = await this.getProjectHash(options?.projectPath);
|
|
63
|
+
const branch = options?.branch || await this.getGitBranch(options?.projectPath);
|
|
64
|
+
if (projectHash) {
|
|
65
|
+
// Try project+branch session
|
|
66
|
+
const branchSession = await this.findProjectBranchSession(projectHash, branch);
|
|
67
|
+
if (branchSession && this.isSessionRecent(branchSession)) {
|
|
68
|
+
await this.touchSession(branchSession);
|
|
69
|
+
this.currentSession = branchSession;
|
|
70
|
+
return branchSession;
|
|
71
|
+
}
|
|
72
|
+
// Try last active for project
|
|
73
|
+
const lastActive = await this.findLastActiveSession(projectHash);
|
|
74
|
+
if (lastActive && this.isSessionRecent(lastActive)) {
|
|
75
|
+
await this.touchSession(lastActive);
|
|
76
|
+
this.currentSession = lastActive;
|
|
77
|
+
return lastActive;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// 4. Create new session
|
|
81
|
+
const newSession = await this.createSession({
|
|
82
|
+
projectId: projectHash || 'global',
|
|
83
|
+
branch,
|
|
84
|
+
metadata: options?.metadata
|
|
85
|
+
});
|
|
86
|
+
this.currentSession = newSession;
|
|
87
|
+
return newSession;
|
|
88
|
+
}
|
|
89
|
+
async createSession(params) {
|
|
90
|
+
const session = {
|
|
91
|
+
sessionId: uuidv4(),
|
|
92
|
+
runId: uuidv4(),
|
|
93
|
+
projectId: params.projectId,
|
|
94
|
+
branch: params.branch,
|
|
95
|
+
startedAt: Date.now(),
|
|
96
|
+
lastActiveAt: Date.now(),
|
|
97
|
+
metadata: {
|
|
98
|
+
...params.metadata,
|
|
99
|
+
user: process.env.USER,
|
|
100
|
+
environment: process.env.NODE_ENV || 'development',
|
|
101
|
+
cliVersion: process.env.npm_package_version
|
|
102
|
+
},
|
|
103
|
+
state: 'active'
|
|
104
|
+
};
|
|
105
|
+
await this.saveSession(session);
|
|
106
|
+
await this.setProjectActiveSession(params.projectId, session.sessionId);
|
|
107
|
+
// Set as current session
|
|
108
|
+
this.currentSession = session;
|
|
109
|
+
logger.info('Created new session', {
|
|
110
|
+
sessionId: session.sessionId,
|
|
111
|
+
projectId: session.projectId,
|
|
112
|
+
branch: session.branch
|
|
113
|
+
});
|
|
114
|
+
return session;
|
|
115
|
+
}
|
|
116
|
+
async loadSession(sessionId) {
|
|
117
|
+
try {
|
|
118
|
+
const sessionPath = path.join(this.sessionsDir, `${sessionId}.json`);
|
|
119
|
+
const data = await fs.readFile(sessionPath, 'utf-8');
|
|
120
|
+
return JSON.parse(data);
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
// Check history
|
|
124
|
+
try {
|
|
125
|
+
const historyPath = path.join(this.sessionsDir, 'history', `${sessionId}.json`);
|
|
126
|
+
const data = await fs.readFile(historyPath, 'utf-8');
|
|
127
|
+
return JSON.parse(data);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
async saveSession(session) {
|
|
135
|
+
const sessionPath = path.join(this.sessionsDir, `${session.sessionId}.json`);
|
|
136
|
+
await fs.writeFile(sessionPath, JSON.stringify(session, null, 2));
|
|
137
|
+
}
|
|
138
|
+
async suspendSession(sessionId) {
|
|
139
|
+
const id = sessionId || this.currentSession?.sessionId;
|
|
140
|
+
if (!id)
|
|
141
|
+
return;
|
|
142
|
+
const session = await this.loadSession(id);
|
|
143
|
+
if (session) {
|
|
144
|
+
session.state = 'suspended';
|
|
145
|
+
session.lastActiveAt = Date.now();
|
|
146
|
+
await this.saveSession(session);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
async resumeSession(sessionId) {
|
|
150
|
+
const session = await this.loadSession(sessionId);
|
|
151
|
+
if (!session) {
|
|
152
|
+
throw new SystemError('Session not found', ErrorCode.NOT_FOUND, { sessionId });
|
|
153
|
+
}
|
|
154
|
+
session.state = 'active';
|
|
155
|
+
session.lastActiveAt = Date.now();
|
|
156
|
+
await this.saveSession(session);
|
|
157
|
+
this.currentSession = session;
|
|
158
|
+
return session;
|
|
159
|
+
}
|
|
160
|
+
async closeSession(sessionId) {
|
|
161
|
+
const id = sessionId || this.currentSession?.sessionId;
|
|
162
|
+
if (!id)
|
|
163
|
+
return;
|
|
164
|
+
const session = await this.loadSession(id);
|
|
165
|
+
if (session) {
|
|
166
|
+
session.state = 'closed';
|
|
167
|
+
session.lastActiveAt = Date.now();
|
|
168
|
+
// Move to history
|
|
169
|
+
const sessionPath = path.join(this.sessionsDir, `${session.sessionId}.json`);
|
|
170
|
+
const historyPath = path.join(this.sessionsDir, 'history', `${session.sessionId}.json`);
|
|
171
|
+
await fs.rename(sessionPath, historyPath);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
async listSessions(filter) {
|
|
175
|
+
const sessions = [];
|
|
176
|
+
// Load active sessions
|
|
177
|
+
const files = await fs.readdir(this.sessionsDir);
|
|
178
|
+
for (const file of files) {
|
|
179
|
+
if (file.endsWith('.json')) {
|
|
180
|
+
const session = await this.loadSession(file.replace('.json', ''));
|
|
181
|
+
if (session) {
|
|
182
|
+
sessions.push(session);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
// Apply filters
|
|
187
|
+
return sessions.filter(s => {
|
|
188
|
+
if (filter?.projectId && s.projectId !== filter.projectId)
|
|
189
|
+
return false;
|
|
190
|
+
if (filter?.state && s.state !== filter.state)
|
|
191
|
+
return false;
|
|
192
|
+
if (filter?.branch && s.branch !== filter.branch)
|
|
193
|
+
return false;
|
|
194
|
+
return true;
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
async mergeSessions(sourceId, targetId) {
|
|
198
|
+
const source = await this.loadSession(sourceId);
|
|
199
|
+
const target = await this.loadSession(targetId);
|
|
200
|
+
if (!source || !target) {
|
|
201
|
+
throw new SystemError('Session not found for merge', ErrorCode.NOT_FOUND, { sourceId, targetId });
|
|
202
|
+
}
|
|
203
|
+
// Merge metadata
|
|
204
|
+
target.metadata = {
|
|
205
|
+
...target.metadata,
|
|
206
|
+
...source.metadata,
|
|
207
|
+
tags: [...(target.metadata.tags || []), ...(source.metadata.tags || [])]
|
|
208
|
+
};
|
|
209
|
+
// Update timestamps
|
|
210
|
+
target.lastActiveAt = Date.now();
|
|
211
|
+
// Close source session
|
|
212
|
+
await this.closeSession(sourceId);
|
|
213
|
+
await this.saveSession(target);
|
|
214
|
+
logger.info('Merged sessions', {
|
|
215
|
+
source: sourceId,
|
|
216
|
+
target: targetId
|
|
217
|
+
});
|
|
218
|
+
return target;
|
|
219
|
+
}
|
|
220
|
+
async cleanupStaleSessions(maxAge = 30 * 24 * 60 * 60 * 1000) {
|
|
221
|
+
const historyDir = path.join(this.sessionsDir, 'history');
|
|
222
|
+
const files = await fs.readdir(historyDir);
|
|
223
|
+
const cutoff = Date.now() - maxAge;
|
|
224
|
+
let cleaned = 0;
|
|
225
|
+
for (const file of files) {
|
|
226
|
+
if (file.endsWith('.json')) {
|
|
227
|
+
const filePath = path.join(historyDir, file);
|
|
228
|
+
const stats = await fs.stat(filePath);
|
|
229
|
+
if (stats.mtimeMs < cutoff) {
|
|
230
|
+
await fs.unlink(filePath);
|
|
231
|
+
cleaned++;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
logger.info(`Cleaned up ${cleaned} stale sessions`);
|
|
236
|
+
return cleaned;
|
|
237
|
+
}
|
|
238
|
+
getCurrentSession() {
|
|
239
|
+
return this.currentSession;
|
|
240
|
+
}
|
|
241
|
+
getSessionRunId() {
|
|
242
|
+
return this.currentSession?.runId || uuidv4();
|
|
243
|
+
}
|
|
244
|
+
async getProjectHash(projectPath) {
|
|
245
|
+
try {
|
|
246
|
+
const cwd = projectPath || process.cwd();
|
|
247
|
+
// Try to use the basename of the directory as project ID
|
|
248
|
+
const path = await import('path');
|
|
249
|
+
const projectName = path.basename(cwd);
|
|
250
|
+
// Check if it looks like a demo/development project
|
|
251
|
+
if (projectName === 'stackmemory') {
|
|
252
|
+
return 'stackmemory-demo';
|
|
253
|
+
}
|
|
254
|
+
// Otherwise use hash for consistency
|
|
255
|
+
const hash = crypto.createHash('sha256');
|
|
256
|
+
hash.update(cwd);
|
|
257
|
+
return hash.digest('hex').substring(0, 12);
|
|
258
|
+
}
|
|
259
|
+
catch {
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
async getGitBranch(projectPath) {
|
|
264
|
+
try {
|
|
265
|
+
const { execSync } = await import('child_process');
|
|
266
|
+
const cwd = projectPath || process.cwd();
|
|
267
|
+
const branch = execSync('git rev-parse --abbrev-ref HEAD', {
|
|
268
|
+
cwd,
|
|
269
|
+
encoding: 'utf-8'
|
|
270
|
+
}).trim();
|
|
271
|
+
return branch;
|
|
272
|
+
}
|
|
273
|
+
catch {
|
|
274
|
+
return undefined;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
async findProjectBranchSession(projectHash, branch) {
|
|
278
|
+
if (!branch)
|
|
279
|
+
return null;
|
|
280
|
+
const sessions = await this.listSessions({
|
|
281
|
+
projectId: projectHash,
|
|
282
|
+
state: 'active',
|
|
283
|
+
branch
|
|
284
|
+
});
|
|
285
|
+
return sessions.sort((a, b) => b.lastActiveAt - a.lastActiveAt)[0] || null;
|
|
286
|
+
}
|
|
287
|
+
async findLastActiveSession(projectHash) {
|
|
288
|
+
const sessions = await this.listSessions({
|
|
289
|
+
projectId: projectHash,
|
|
290
|
+
state: 'active'
|
|
291
|
+
});
|
|
292
|
+
return sessions.sort((a, b) => b.lastActiveAt - a.lastActiveAt)[0] || null;
|
|
293
|
+
}
|
|
294
|
+
async setProjectActiveSession(projectId, sessionId) {
|
|
295
|
+
const projectFile = path.join(this.sessionsDir, 'projects', `${projectId}.json`);
|
|
296
|
+
await fs.writeFile(projectFile, JSON.stringify({
|
|
297
|
+
projectId,
|
|
298
|
+
activeSessionId: sessionId,
|
|
299
|
+
updatedAt: Date.now()
|
|
300
|
+
}, null, 2));
|
|
301
|
+
}
|
|
302
|
+
isSessionRecent(session) {
|
|
303
|
+
return Date.now() - session.lastActiveAt < this.STALE_THRESHOLD;
|
|
304
|
+
}
|
|
305
|
+
async touchSession(session) {
|
|
306
|
+
session.lastActiveAt = Date.now();
|
|
307
|
+
await this.saveSession(session);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
export const sessionManager = SessionManager.getInstance();
|
|
311
|
+
//# sourceMappingURL=session-manager.js.map
|