@stackmemoryai/stackmemory 0.2.8 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/core/agent-task-manager.js +512 -0
- package/dist/agents/core/agent-task-manager.js.map +7 -0
- package/dist/agents/verifiers/base-verifier.js +129 -0
- package/dist/agents/verifiers/base-verifier.js.map +7 -0
- package/dist/agents/verifiers/formatter-verifier.js +126 -0
- package/dist/agents/verifiers/formatter-verifier.js.map +7 -0
- package/dist/agents/verifiers/llm-judge.js +248 -0
- package/dist/agents/verifiers/llm-judge.js.map +7 -0
- package/dist/cli/__tests__/index.test.js +290 -0
- package/dist/cli/__tests__/index.test.js.map +7 -0
- package/dist/cli/auto-detect.js +317 -0
- package/dist/cli/auto-detect.js.map +7 -0
- package/dist/cli/browser-test.js +29 -0
- package/dist/cli/browser-test.js.map +7 -0
- package/dist/cli/claude-sm.js +369 -0
- package/dist/cli/claude-sm.js.map +7 -0
- package/dist/cli/codex-sm.js +283 -0
- package/dist/cli/codex-sm.js.map +7 -0
- package/dist/cli/commands/agent.js +286 -0
- package/dist/cli/commands/agent.js.map +7 -0
- package/dist/cli/commands/config.js +199 -0
- package/dist/cli/commands/config.js.map +7 -0
- package/dist/cli/commands/context.js +327 -0
- package/dist/cli/commands/context.js.map +7 -0
- package/dist/cli/commands/handoff.js +191 -0
- package/dist/cli/commands/handoff.js.map +7 -0
- package/dist/cli/commands/linear-test.js +115 -0
- package/dist/cli/commands/linear-test.js.map +7 -0
- package/dist/cli/commands/linear.js +378 -0
- package/dist/cli/commands/linear.js.map +7 -0
- package/dist/cli/commands/log.js +165 -0
- package/dist/cli/commands/log.js.map +7 -0
- package/dist/cli/commands/onboard.js +349 -0
- package/dist/cli/commands/onboard.js.map +7 -0
- package/dist/cli/commands/projects.js +195 -0
- package/dist/cli/commands/projects.js.map +7 -0
- package/dist/cli/commands/search.js +152 -0
- package/dist/cli/commands/search.js.map +7 -0
- package/dist/cli/commands/session.js +179 -0
- package/dist/cli/commands/session.js.map +7 -0
- package/dist/cli/commands/tasks.js +205 -0
- package/dist/cli/commands/tasks.js.map +7 -0
- package/dist/cli/commands/webhook.js +131 -0
- package/dist/cli/commands/webhook.js.map +7 -0
- package/dist/cli/commands/worktree.js +276 -0
- package/dist/cli/commands/worktree.js.map +7 -0
- package/dist/cli/index.js +953 -0
- package/dist/cli/index.js.map +7 -0
- package/dist/cli/utils/viewer.js +92 -0
- package/dist/cli/utils/viewer.js.map +7 -0
- package/dist/core/config/__tests__/config-manager.test.js +248 -0
- package/dist/core/config/__tests__/config-manager.test.js.map +7 -0
- package/dist/core/config/config-manager.js +368 -0
- package/dist/core/config/config-manager.js.map +7 -0
- package/dist/core/config/types.js +140 -0
- package/dist/core/config/types.js.map +7 -0
- package/dist/core/context/__tests__/frame-manager.test.js +879 -0
- package/dist/core/context/__tests__/frame-manager.test.js.map +7 -0
- package/dist/core/context/auto-context.js +72 -0
- package/dist/core/context/auto-context.js.map +7 -0
- package/dist/core/context/compaction-handler.js +326 -0
- package/dist/core/context/compaction-handler.js.map +7 -0
- package/dist/core/context/frame-database.js +376 -0
- package/dist/core/context/frame-database.js.map +7 -0
- package/dist/core/context/frame-digest.js +239 -0
- package/dist/core/context/frame-digest.js.map +7 -0
- package/dist/core/context/frame-manager.js +682 -0
- package/dist/core/context/frame-manager.js.map +7 -0
- package/dist/core/context/frame-stack.js +270 -0
- package/dist/core/context/frame-stack.js.map +7 -0
- package/dist/core/context/frame-types.js +1 -0
- package/dist/core/context/frame-types.js.map +7 -0
- package/dist/core/context/index.js +33 -0
- package/dist/core/context/index.js.map +7 -0
- package/dist/core/context/model-aware-compaction.js +619 -0
- package/dist/core/context/model-aware-compaction.js.map +7 -0
- package/dist/core/context/refactored-frame-manager.js +393 -0
- package/dist/core/context/refactored-frame-manager.js.map +7 -0
- package/dist/core/database/batch-operations.js +329 -0
- package/dist/core/database/batch-operations.js.map +7 -0
- package/dist/core/database/connection-pool.js +224 -0
- package/dist/core/database/connection-pool.js.map +7 -0
- package/dist/core/database/query-cache.js +284 -0
- package/dist/core/database/query-cache.js.map +7 -0
- package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js +379 -0
- package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js.map +7 -0
- package/dist/core/digest/__tests__/frame-digest-integration.test.js +230 -0
- package/dist/core/digest/__tests__/frame-digest-integration.test.js.map +7 -0
- package/dist/core/digest/enhanced-hybrid-digest.js +267 -0
- package/dist/core/digest/enhanced-hybrid-digest.js.map +7 -0
- package/dist/core/digest/frame-digest-integration.js +172 -0
- package/dist/core/digest/frame-digest-integration.js.map +7 -0
- package/dist/core/digest/hybrid-digest-generator.js +549 -0
- package/dist/core/digest/hybrid-digest-generator.js.map +7 -0
- package/dist/core/digest/index.js +5 -0
- package/dist/core/digest/index.js.map +7 -0
- package/dist/core/digest/types.js +21 -0
- package/dist/core/digest/types.js.map +7 -0
- package/dist/core/errors/__tests__/error-handling.test.js +270 -0
- package/dist/core/errors/__tests__/error-handling.test.js.map +7 -0
- package/dist/core/errors/index.js +239 -0
- package/dist/core/errors/index.js.map +7 -0
- package/dist/core/errors/recovery.js +258 -0
- package/dist/core/errors/recovery.js.map +7 -0
- package/dist/core/merge/__tests__/conflict-scenarios.test.js +414 -0
- package/dist/core/merge/__tests__/conflict-scenarios.test.js.map +7 -0
- package/dist/core/merge/conflict-detector.js +424 -0
- package/dist/core/merge/conflict-detector.js.map +7 -0
- package/dist/core/merge/index.js +5 -0
- package/dist/core/merge/index.js.map +7 -0
- package/dist/core/merge/resolution-engine.js +565 -0
- package/dist/core/merge/resolution-engine.js.map +7 -0
- package/dist/core/merge/stack-diff.js +528 -0
- package/dist/core/merge/stack-diff.js.map +7 -0
- package/dist/core/merge/types.js +1 -0
- package/dist/core/merge/types.js.map +7 -0
- package/dist/core/monitoring/error-handler.js +278 -0
- package/dist/core/monitoring/error-handler.js.map +7 -0
- package/dist/core/monitoring/logger.js +115 -0
- package/dist/core/monitoring/logger.js.map +7 -0
- package/dist/core/monitoring/metrics.js +157 -0
- package/dist/core/monitoring/metrics.js.map +7 -0
- package/dist/core/monitoring/progress-tracker.js +174 -0
- package/dist/core/monitoring/progress-tracker.js.map +7 -0
- package/dist/core/performance/context-cache.js +269 -0
- package/dist/core/performance/context-cache.js.map +7 -0
- package/dist/core/performance/index.js +7 -0
- package/dist/core/performance/index.js.map +7 -0
- package/dist/core/performance/lazy-context-loader.js +319 -0
- package/dist/core/performance/lazy-context-loader.js.map +7 -0
- package/dist/core/performance/monitor.js +217 -0
- package/dist/core/performance/monitor.js.map +7 -0
- package/dist/core/performance/optimized-frame-context.js +326 -0
- package/dist/core/performance/optimized-frame-context.js.map +7 -0
- package/dist/core/performance/performance-benchmark.js +269 -0
- package/dist/core/performance/performance-benchmark.js.map +7 -0
- package/dist/core/performance/performance-profiler.js +318 -0
- package/dist/core/performance/performance-profiler.js.map +7 -0
- package/dist/core/performance/streaming-jsonl-parser.js +187 -0
- package/dist/core/performance/streaming-jsonl-parser.js.map +7 -0
- package/dist/core/persistence/postgres-adapter.js +345 -0
- package/dist/core/persistence/postgres-adapter.js.map +7 -0
- package/dist/core/projects/project-manager.js +699 -0
- package/dist/core/projects/project-manager.js.map +7 -0
- package/dist/core/query/__tests__/query-parser.test.js +301 -0
- package/dist/core/query/__tests__/query-parser.test.js.map +7 -0
- package/dist/core/query/__tests__/query-templates.test.js +210 -0
- package/dist/core/query/__tests__/query-templates.test.js.map +7 -0
- package/dist/core/query/query-parser.js +366 -0
- package/dist/core/query/query-parser.js.map +7 -0
- package/dist/core/query/query-templates.js +317 -0
- package/dist/core/query/query-templates.js.map +7 -0
- package/dist/core/retrieval/index.js +4 -0
- package/dist/core/retrieval/index.js.map +7 -0
- package/dist/core/retrieval/llm-context-retrieval.js +577 -0
- package/dist/core/retrieval/llm-context-retrieval.js.map +7 -0
- package/dist/core/retrieval/summary-generator.js +585 -0
- package/dist/core/retrieval/summary-generator.js.map +7 -0
- package/dist/core/retrieval/types.js +17 -0
- package/dist/core/retrieval/types.js.map +7 -0
- package/dist/core/session/index.js +11 -0
- package/dist/core/session/index.js.map +7 -0
- package/dist/core/session/session-manager.js +297 -0
- package/dist/core/session/session-manager.js.map +7 -0
- package/dist/core/trace/cli-trace-wrapper.js +110 -0
- package/dist/core/trace/cli-trace-wrapper.js.map +7 -0
- package/dist/core/trace/db-trace-wrapper.js +215 -0
- package/dist/core/trace/db-trace-wrapper.js.map +7 -0
- package/dist/core/trace/debug-trace.js +385 -0
- package/dist/core/trace/debug-trace.js.map +7 -0
- package/dist/core/trace/index.js +158 -0
- package/dist/core/trace/index.js.map +7 -0
- package/dist/core/trace/linear-api-wrapper.js +169 -0
- package/dist/core/trace/linear-api-wrapper.js.map +7 -0
- package/dist/core/trace/trace-demo.js +135 -0
- package/dist/core/trace/trace-demo.js.map +7 -0
- package/dist/core/trace/trace-detector.demo.js +138 -0
- package/dist/core/trace/trace-detector.demo.js.map +7 -0
- package/dist/core/trace/trace-detector.js +386 -0
- package/dist/core/trace/trace-detector.js.map +7 -0
- package/dist/core/trace/trace-detector.test.js +401 -0
- package/dist/core/trace/trace-detector.test.js.map +7 -0
- package/dist/core/trace/trace-store.js +341 -0
- package/dist/core/trace/trace-store.js.map +7 -0
- package/dist/core/trace/types.js +73 -0
- package/dist/core/trace/types.js.map +7 -0
- package/dist/core/types.js +1 -0
- package/dist/core/types.js.map +7 -0
- package/dist/core/utils/update-checker.js +214 -0
- package/dist/core/utils/update-checker.js.map +7 -0
- package/dist/core/worktree/worktree-manager.js +450 -0
- package/dist/core/worktree/worktree-manager.js.map +7 -0
- package/dist/features/analytics/api/analytics-api.js +283 -0
- package/dist/features/analytics/api/analytics-api.js.map +7 -0
- package/dist/features/analytics/core/analytics-service.js +267 -0
- package/dist/features/analytics/core/analytics-service.js.map +7 -0
- package/dist/features/analytics/index.js +14 -0
- package/dist/features/analytics/index.js.map +7 -0
- package/dist/features/analytics/queries/metrics-queries.js +273 -0
- package/dist/features/analytics/queries/metrics-queries.js.map +7 -0
- package/dist/features/analytics/types/metrics.js +1 -0
- package/dist/features/analytics/types/metrics.js.map +7 -0
- package/dist/features/browser/browser-mcp.js +488 -0
- package/dist/features/browser/browser-mcp.js.map +7 -0
- package/dist/features/tasks/__tests__/pebbles-task-store.test.js +747 -0
- package/dist/features/tasks/__tests__/pebbles-task-store.test.js.map +7 -0
- package/dist/features/tasks/pebbles-task-store.js +647 -0
- package/dist/features/tasks/pebbles-task-store.js.map +7 -0
- package/dist/features/tasks/task-aware-context.js +406 -0
- package/dist/features/tasks/task-aware-context.js.map +7 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +7 -0
- package/dist/integrations/linear/__tests__/auth.test.js +558 -0
- package/dist/integrations/linear/__tests__/auth.test.js.map +7 -0
- package/dist/integrations/linear/__tests__/sync-service.test.js +760 -0
- package/dist/integrations/linear/__tests__/sync-service.test.js.map +7 -0
- package/dist/integrations/linear/auth.js +308 -0
- package/dist/integrations/linear/auth.js.map +7 -0
- package/dist/integrations/linear/auto-sync.js +244 -0
- package/dist/integrations/linear/auto-sync.js.map +7 -0
- package/dist/integrations/linear/client.js +448 -0
- package/dist/integrations/linear/client.js.map +7 -0
- package/dist/integrations/linear/config.js +115 -0
- package/dist/integrations/linear/config.js.map +7 -0
- package/dist/integrations/linear/sync-manager.js +233 -0
- package/dist/integrations/linear/sync-manager.js.map +7 -0
- package/dist/integrations/linear/sync-service.js +214 -0
- package/dist/integrations/linear/sync-service.js.map +7 -0
- package/dist/integrations/linear/sync.js +565 -0
- package/dist/integrations/linear/sync.js.map +7 -0
- package/dist/integrations/linear/types.js +1 -0
- package/dist/integrations/linear/types.js.map +7 -0
- package/dist/integrations/linear/webhook-server.js +204 -0
- package/dist/integrations/linear/webhook-server.js.map +7 -0
- package/dist/integrations/linear/webhook.js +269 -0
- package/dist/integrations/linear/webhook.js.map +7 -0
- package/dist/integrations/mcp/__tests__/server.test.js +798 -0
- package/dist/integrations/mcp/__tests__/server.test.js.map +7 -0
- package/dist/integrations/mcp/handlers/context-handlers.js +253 -0
- package/dist/integrations/mcp/handlers/context-handlers.js.map +7 -0
- package/dist/integrations/mcp/handlers/index.js +134 -0
- package/dist/integrations/mcp/handlers/index.js.map +7 -0
- package/dist/integrations/mcp/handlers/linear-handlers.js +243 -0
- package/dist/integrations/mcp/handlers/linear-handlers.js.map +7 -0
- package/dist/integrations/mcp/handlers/task-handlers.js +235 -0
- package/dist/integrations/mcp/handlers/task-handlers.js.map +7 -0
- package/dist/integrations/mcp/handlers/trace-handlers.js +304 -0
- package/dist/integrations/mcp/handlers/trace-handlers.js.map +7 -0
- package/dist/integrations/mcp/index.js +19 -0
- package/dist/integrations/mcp/index.js.map +7 -0
- package/dist/integrations/mcp/refactored-server.js +331 -0
- package/dist/integrations/mcp/refactored-server.js.map +7 -0
- package/dist/integrations/mcp/server.js +1621 -0
- package/dist/integrations/mcp/server.js.map +7 -0
- package/dist/integrations/mcp/tool-definitions.js +562 -0
- package/dist/integrations/mcp/tool-definitions.js.map +7 -0
- package/dist/integrations/mcp/trace-test.js +44 -0
- package/dist/integrations/mcp/trace-test.js.map +7 -0
- package/dist/integrations/pg-aiguide/embedding-provider.js +174 -0
- package/dist/integrations/pg-aiguide/embedding-provider.js.map +7 -0
- package/dist/integrations/pg-aiguide/semantic-search.js +183 -0
- package/dist/integrations/pg-aiguide/semantic-search.js.map +7 -0
- package/dist/integrations/pg-aiguide/timescale-analytics.js +220 -0
- package/dist/integrations/pg-aiguide/timescale-analytics.js.map +7 -0
- package/dist/mcp/stackmemory-mcp-server.js +550 -0
- package/dist/mcp/stackmemory-mcp-server.js.map +7 -0
- package/dist/middleware/exponential-rate-limiter.js +285 -0
- package/dist/middleware/exponential-rate-limiter.js.map +7 -0
- package/dist/models/user.model.js +351 -0
- package/dist/models/user.model.js.map +7 -0
- package/dist/scripts/benchmark-performance.d.ts +7 -0
- package/dist/scripts/benchmark-performance.d.ts.map +1 -0
- package/dist/scripts/benchmark-performance.js +44 -0
- package/dist/scripts/benchmark-performance.js.map +1 -0
- package/dist/scripts/cleanup-duplicate-tasks.d.ts +12 -0
- package/dist/scripts/cleanup-duplicate-tasks.d.ts.map +1 -0
- package/dist/scripts/cleanup-duplicate-tasks.js +215 -0
- package/dist/scripts/cleanup-duplicate-tasks.js.map +1 -0
- package/dist/servers/production/auth-middleware.js +513 -0
- package/dist/servers/production/auth-middleware.js.map +7 -0
- package/dist/servers/railway/index.js +390 -0
- package/dist/servers/railway/index.js.map +7 -0
- package/dist/services/config-service.js +62 -0
- package/dist/services/config-service.js.map +7 -0
- package/dist/services/context-service.js +191 -0
- package/dist/services/context-service.js.map +7 -0
- package/dist/src/agents/core/agent-task-manager.d.ts +154 -0
- package/dist/src/agents/core/agent-task-manager.d.ts.map +1 -0
- package/dist/src/agents/core/agent-task-manager.js +504 -0
- package/dist/src/agents/core/agent-task-manager.js.map +1 -0
- package/dist/src/agents/verifiers/base-verifier.d.ts +112 -0
- package/dist/src/agents/verifiers/base-verifier.d.ts.map +1 -0
- package/dist/src/agents/verifiers/base-verifier.js +130 -0
- package/dist/src/agents/verifiers/base-verifier.js.map +1 -0
- package/dist/src/agents/verifiers/formatter-verifier.d.ts +14 -0
- package/dist/src/agents/verifiers/formatter-verifier.d.ts.map +1 -0
- package/dist/src/agents/verifiers/formatter-verifier.js +107 -0
- package/dist/src/agents/verifiers/formatter-verifier.js.map +1 -0
- package/dist/src/agents/verifiers/llm-judge.d.ts +46 -0
- package/dist/src/agents/verifiers/llm-judge.d.ts.map +1 -0
- package/dist/src/agents/verifiers/llm-judge.js +248 -0
- package/dist/src/agents/verifiers/llm-judge.js.map +1 -0
- package/dist/src/cli/claude-sm.js +55 -0
- package/dist/src/cli/claude-sm.js.map +1 -1
- package/dist/src/cli/commands/agent.d.ts +9 -0
- package/dist/src/cli/commands/agent.d.ts.map +1 -0
- package/dist/src/cli/commands/agent.js +303 -0
- package/dist/src/cli/commands/agent.js.map +1 -0
- package/dist/src/cli/commands/handoff.d.ts +6 -0
- package/dist/src/cli/commands/handoff.d.ts.map +1 -0
- package/dist/src/cli/commands/handoff.js +212 -0
- package/dist/src/cli/commands/handoff.js.map +1 -0
- package/dist/src/cli/index.d.ts.map +1 -1
- package/dist/src/cli/index.js +4 -0
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/core/context/compaction-handler.d.ts.map +1 -1
- package/dist/src/core/context/compaction-handler.js +1 -1
- package/dist/src/core/context/compaction-handler.js.map +1 -1
- package/dist/src/core/context/frame-database.d.ts +59 -0
- package/dist/src/core/context/frame-database.d.ts.map +1 -0
- package/dist/src/core/context/frame-database.js +333 -0
- package/dist/src/core/context/frame-database.js.map +1 -0
- package/dist/src/core/context/frame-digest.d.ts +59 -0
- package/dist/src/core/context/frame-digest.d.ts.map +1 -0
- package/dist/src/core/context/frame-digest.js +264 -0
- package/dist/src/core/context/frame-digest.js.map +1 -0
- package/dist/src/core/context/frame-manager.d.ts +2 -0
- package/dist/src/core/context/frame-manager.d.ts.map +1 -1
- package/dist/src/core/context/frame-manager.js +7 -0
- package/dist/src/core/context/frame-manager.js.map +1 -1
- package/dist/src/core/context/frame-stack.d.ts +85 -0
- package/dist/src/core/context/frame-stack.d.ts.map +1 -0
- package/dist/src/core/context/frame-stack.js +287 -0
- package/dist/src/core/context/frame-stack.js.map +1 -0
- package/dist/src/core/context/frame-types.d.ts +67 -0
- package/dist/src/core/context/frame-types.d.ts.map +1 -0
- package/dist/src/core/context/frame-types.js +6 -0
- package/dist/src/core/context/frame-types.js.map +1 -0
- package/dist/src/core/context/index.d.ts +11 -0
- package/dist/src/core/context/index.d.ts.map +1 -0
- package/dist/src/core/context/index.js +14 -0
- package/dist/src/core/context/index.js.map +1 -0
- package/dist/src/core/context/refactored-frame-manager.d.ts +99 -0
- package/dist/src/core/context/refactored-frame-manager.d.ts.map +1 -0
- package/dist/src/core/context/refactored-frame-manager.js +340 -0
- package/dist/src/core/context/refactored-frame-manager.js.map +1 -0
- package/dist/src/core/database/batch-operations.d.ts +118 -0
- package/dist/src/core/database/batch-operations.d.ts.map +1 -0
- package/dist/src/core/database/batch-operations.js +339 -0
- package/dist/src/core/database/batch-operations.js.map +1 -0
- package/dist/src/core/database/connection-pool.d.ts +79 -0
- package/dist/src/core/database/connection-pool.d.ts.map +1 -0
- package/dist/src/core/database/connection-pool.js +236 -0
- package/dist/src/core/database/connection-pool.js.map +1 -0
- package/dist/src/core/database/query-cache.d.ts +135 -0
- package/dist/src/core/database/query-cache.d.ts.map +1 -0
- package/dist/src/core/database/query-cache.js +294 -0
- package/dist/src/core/database/query-cache.js.map +1 -0
- package/dist/src/core/digest/enhanced-hybrid-digest.d.ts +125 -0
- package/dist/src/core/digest/enhanced-hybrid-digest.d.ts.map +1 -0
- package/dist/src/core/digest/enhanced-hybrid-digest.js +282 -0
- package/dist/src/core/digest/enhanced-hybrid-digest.js.map +1 -0
- package/dist/src/core/digest/frame-digest-integration.d.ts +67 -0
- package/dist/src/core/digest/frame-digest-integration.d.ts.map +1 -0
- package/dist/src/core/digest/frame-digest-integration.js +198 -0
- package/dist/src/core/digest/frame-digest-integration.js.map +1 -0
- package/dist/src/core/digest/hybrid-digest-generator.d.ts +76 -0
- package/dist/src/core/digest/hybrid-digest-generator.d.ts.map +1 -0
- package/dist/src/core/digest/hybrid-digest-generator.js +629 -0
- package/dist/src/core/digest/hybrid-digest-generator.js.map +1 -0
- package/dist/src/core/digest/index.d.ts +9 -0
- package/dist/src/core/digest/index.d.ts.map +1 -0
- package/dist/src/core/digest/index.js +9 -0
- package/dist/src/core/digest/index.js.map +1 -0
- package/dist/src/core/digest/types.d.ts +154 -0
- package/dist/src/core/digest/types.d.ts.map +1 -0
- package/dist/src/core/digest/types.js +18 -0
- package/dist/src/core/digest/types.js.map +1 -0
- package/dist/src/core/errors/index.d.ts +13 -5
- package/dist/src/core/errors/index.d.ts.map +1 -1
- package/dist/src/core/errors/index.js +13 -5
- package/dist/src/core/errors/index.js.map +1 -1
- package/dist/src/core/merge/conflict-detector.d.ts +122 -0
- package/dist/src/core/merge/conflict-detector.d.ts.map +1 -0
- package/dist/src/core/merge/conflict-detector.js +468 -0
- package/dist/src/core/merge/conflict-detector.js.map +1 -0
- package/dist/src/core/merge/index.d.ts +9 -0
- package/dist/src/core/merge/index.d.ts.map +1 -0
- package/dist/src/core/merge/index.js +9 -0
- package/dist/src/core/merge/index.js.map +1 -0
- package/dist/src/core/merge/resolution-engine.d.ts +120 -0
- package/dist/src/core/merge/resolution-engine.d.ts.map +1 -0
- package/dist/src/core/merge/resolution-engine.js +573 -0
- package/dist/src/core/merge/resolution-engine.js.map +1 -0
- package/dist/src/core/merge/stack-diff.d.ts +97 -0
- package/dist/src/core/merge/stack-diff.d.ts.map +1 -0
- package/dist/src/core/merge/stack-diff.js +516 -0
- package/dist/src/core/merge/stack-diff.js.map +1 -0
- package/dist/src/core/merge/types.d.ts +110 -0
- package/dist/src/core/merge/types.d.ts.map +1 -0
- package/dist/src/core/merge/types.js +6 -0
- package/dist/src/core/merge/types.js.map +1 -0
- package/dist/src/core/monitoring/logger.d.ts +2 -2
- package/dist/src/core/monitoring/logger.d.ts.map +1 -1
- package/dist/src/core/monitoring/logger.js +10 -5
- package/dist/src/core/monitoring/logger.js.map +1 -1
- package/dist/src/core/monitoring/metrics.d.ts +3 -0
- package/dist/src/core/monitoring/metrics.d.ts.map +1 -1
- package/dist/src/core/monitoring/metrics.js +142 -3
- package/dist/src/core/monitoring/metrics.js.map +1 -1
- package/dist/src/core/performance/context-cache.d.ts +109 -0
- package/dist/src/core/performance/context-cache.d.ts.map +1 -0
- package/dist/src/core/performance/context-cache.js +280 -0
- package/dist/src/core/performance/context-cache.js.map +1 -0
- package/dist/src/core/performance/index.d.ts +3 -0
- package/dist/src/core/performance/index.d.ts.map +1 -0
- package/dist/src/core/performance/index.js +3 -0
- package/dist/src/core/performance/index.js.map +1 -0
- package/dist/src/core/performance/lazy-context-loader.d.ts +93 -0
- package/dist/src/core/performance/lazy-context-loader.d.ts.map +1 -0
- package/dist/src/core/performance/lazy-context-loader.js +332 -0
- package/dist/src/core/performance/lazy-context-loader.js.map +1 -0
- package/dist/src/core/performance/monitor.d.ts +48 -0
- package/dist/src/core/performance/monitor.d.ts.map +1 -0
- package/dist/src/core/performance/monitor.js +226 -0
- package/dist/src/core/performance/monitor.js.map +1 -0
- package/dist/src/core/performance/optimized-frame-context.d.ts +74 -0
- package/dist/src/core/performance/optimized-frame-context.d.ts.map +1 -0
- package/dist/src/core/performance/optimized-frame-context.js +330 -0
- package/dist/src/core/performance/optimized-frame-context.js.map +1 -0
- package/dist/src/core/performance/performance-benchmark.d.ts +50 -0
- package/dist/src/core/performance/performance-benchmark.d.ts.map +1 -0
- package/dist/src/core/performance/performance-benchmark.js +290 -0
- package/dist/src/core/performance/performance-benchmark.js.map +1 -0
- package/dist/src/core/performance/performance-profiler.d.ts +151 -0
- package/dist/src/core/performance/performance-profiler.d.ts.map +1 -0
- package/dist/src/core/performance/performance-profiler.js +346 -0
- package/dist/src/core/performance/performance-profiler.js.map +1 -0
- package/dist/src/core/performance/streaming-jsonl-parser.d.ts +41 -0
- package/dist/src/core/performance/streaming-jsonl-parser.d.ts.map +1 -0
- package/dist/src/core/performance/streaming-jsonl-parser.js +193 -0
- package/dist/src/core/performance/streaming-jsonl-parser.js.map +1 -0
- package/dist/src/core/persistence/postgres-adapter.d.ts +31 -0
- package/dist/src/core/persistence/postgres-adapter.d.ts.map +1 -0
- package/dist/src/core/persistence/postgres-adapter.js +330 -0
- package/dist/src/core/persistence/postgres-adapter.js.map +1 -0
- package/dist/src/core/query/query-parser.d.ts +5 -0
- package/dist/src/core/query/query-parser.d.ts.map +1 -1
- package/dist/src/core/query/query-parser.js +86 -18
- package/dist/src/core/query/query-parser.js.map +1 -1
- package/dist/src/core/query/query-templates.d.ts +44 -0
- package/dist/src/core/query/query-templates.d.ts.map +1 -0
- package/dist/src/core/query/query-templates.js +326 -0
- package/dist/src/core/query/query-templates.js.map +1 -0
- package/dist/src/core/retrieval/llm-context-retrieval.d.ts +5 -3
- package/dist/src/core/retrieval/llm-context-retrieval.d.ts.map +1 -1
- package/dist/src/core/retrieval/llm-context-retrieval.js +73 -21
- package/dist/src/core/retrieval/llm-context-retrieval.js.map +1 -1
- package/dist/src/core/trace/cli-trace-wrapper.d.ts +23 -0
- package/dist/src/core/trace/cli-trace-wrapper.d.ts.map +1 -0
- package/dist/src/core/trace/cli-trace-wrapper.js +141 -0
- package/dist/src/core/trace/cli-trace-wrapper.js.map +1 -0
- package/dist/src/core/trace/db-trace-wrapper.d.ts +36 -0
- package/dist/src/core/trace/db-trace-wrapper.d.ts.map +1 -0
- package/dist/src/core/trace/db-trace-wrapper.js +252 -0
- package/dist/src/core/trace/db-trace-wrapper.js.map +1 -0
- package/dist/src/core/trace/debug-trace.d.ts +84 -0
- package/dist/src/core/trace/debug-trace.d.ts.map +1 -0
- package/dist/src/core/trace/debug-trace.js +402 -0
- package/dist/src/core/trace/debug-trace.js.map +1 -0
- package/dist/src/core/trace/error-test.d.ts +6 -0
- package/dist/src/core/trace/error-test.d.ts.map +1 -0
- package/dist/src/core/trace/error-test.js +128 -0
- package/dist/src/core/trace/error-test.js.map +1 -0
- package/dist/src/core/trace/index.d.ts +25 -0
- package/dist/src/core/trace/index.d.ts.map +1 -0
- package/dist/src/core/trace/index.js +121 -0
- package/dist/src/core/trace/index.js.map +1 -0
- package/dist/src/core/trace/linear-api-wrapper.d.ts +17 -0
- package/dist/src/core/trace/linear-api-wrapper.d.ts.map +1 -0
- package/dist/src/core/trace/linear-api-wrapper.js +205 -0
- package/dist/src/core/trace/linear-api-wrapper.js.map +1 -0
- package/dist/src/core/trace/performance-test.d.ts +6 -0
- package/dist/src/core/trace/performance-test.d.ts.map +1 -0
- package/dist/src/core/trace/performance-test.js +111 -0
- package/dist/src/core/trace/performance-test.js.map +1 -0
- package/dist/src/core/trace/trace-demo.d.ts +8 -0
- package/dist/src/core/trace/trace-demo.d.ts.map +1 -0
- package/dist/src/core/trace/trace-demo.js +154 -0
- package/dist/src/core/trace/trace-demo.js.map +1 -0
- package/dist/src/core/trace/trace-detector.d.ts +2 -2
- package/dist/src/core/trace/trace-detector.d.ts.map +1 -1
- package/dist/src/core/trace/trace-detector.demo.js +6 -6
- package/dist/src/core/trace/trace-detector.demo.js.map +1 -1
- package/dist/src/core/trace/trace-detector.js +3 -3
- package/dist/src/core/trace/trace-detector.js.map +1 -1
- package/dist/src/core/types.d.ts +35 -0
- package/dist/src/core/types.d.ts.map +1 -0
- package/dist/src/core/types.js +2 -0
- package/dist/src/core/types.js.map +1 -0
- package/dist/src/features/tasks/pebbles-task-store.d.ts +9 -2
- package/dist/src/features/tasks/pebbles-task-store.d.ts.map +1 -1
- package/dist/src/features/tasks/pebbles-task-store.js +97 -18
- package/dist/src/features/tasks/pebbles-task-store.js.map +1 -1
- package/dist/src/integrations/linear/auth.d.ts.map +1 -1
- package/dist/src/integrations/linear/auth.js.map +1 -1
- package/dist/src/integrations/linear/client.d.ts +15 -1
- package/dist/src/integrations/linear/client.d.ts.map +1 -1
- package/dist/src/integrations/linear/client.js +85 -3
- package/dist/src/integrations/linear/client.js.map +1 -1
- package/dist/src/integrations/linear/sync-manager.d.ts +2 -0
- package/dist/src/integrations/linear/sync-manager.d.ts.map +1 -1
- package/dist/src/integrations/linear/sync-manager.js +16 -4
- package/dist/src/integrations/linear/sync-manager.js.map +1 -1
- package/dist/src/integrations/linear/sync-service.d.ts +23 -2
- package/dist/src/integrations/linear/sync-service.d.ts.map +1 -1
- package/dist/src/integrations/linear/sync-service.js +44 -25
- package/dist/src/integrations/linear/sync-service.js.map +1 -1
- package/dist/src/integrations/linear/sync.d.ts +6 -0
- package/dist/src/integrations/linear/sync.d.ts.map +1 -1
- package/dist/src/integrations/linear/sync.js +27 -2
- package/dist/src/integrations/linear/sync.js.map +1 -1
- package/dist/src/integrations/linear/types.d.ts +16 -1
- package/dist/src/integrations/linear/types.d.ts.map +1 -1
- package/dist/src/integrations/linear/webhook-server.d.ts.map +1 -1
- package/dist/src/integrations/linear/webhook-server.js +10 -8
- package/dist/src/integrations/linear/webhook-server.js.map +1 -1
- package/dist/src/integrations/linear/webhook.d.ts +13 -0
- package/dist/src/integrations/linear/webhook.d.ts.map +1 -1
- package/dist/src/integrations/linear/webhook.js +101 -14
- package/dist/src/integrations/linear/webhook.js.map +1 -1
- package/dist/src/integrations/mcp/handlers/context-handlers.d.ts +39 -0
- package/dist/src/integrations/mcp/handlers/context-handlers.d.ts.map +1 -0
- package/dist/src/integrations/mcp/handlers/context-handlers.js +266 -0
- package/dist/src/integrations/mcp/handlers/context-handlers.js.map +1 -0
- package/dist/src/integrations/mcp/handlers/index.d.ts +37 -0
- package/dist/src/integrations/mcp/handlers/index.d.ts.map +1 -0
- package/dist/src/integrations/mcp/handlers/index.js +134 -0
- package/dist/src/integrations/mcp/handlers/index.js.map +1 -0
- package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts +33 -0
- package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts.map +1 -0
- package/dist/src/integrations/mcp/handlers/linear-handlers.js +251 -0
- package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +1 -0
- package/dist/src/integrations/mcp/handlers/task-handlers.d.ts +42 -0
- package/dist/src/integrations/mcp/handlers/task-handlers.d.ts.map +1 -0
- package/dist/src/integrations/mcp/handlers/task-handlers.js +238 -0
- package/dist/src/integrations/mcp/handlers/task-handlers.js.map +1 -0
- package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts +41 -0
- package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts.map +1 -0
- package/dist/src/integrations/mcp/handlers/trace-handlers.js +298 -0
- package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +1 -0
- package/dist/src/integrations/mcp/index.d.ts +13 -0
- package/dist/src/integrations/mcp/index.d.ts.map +1 -0
- package/dist/src/integrations/mcp/index.js +17 -0
- package/dist/src/integrations/mcp/index.js.map +1 -0
- package/dist/src/integrations/mcp/refactored-server.d.ts +76 -0
- package/dist/src/integrations/mcp/refactored-server.d.ts.map +1 -0
- package/dist/src/integrations/mcp/refactored-server.js +351 -0
- package/dist/src/integrations/mcp/refactored-server.js.map +1 -0
- package/dist/src/integrations/mcp/server.js +2 -2
- package/dist/src/integrations/mcp/server.js.map +1 -1
- package/dist/src/integrations/mcp/tool-definitions.d.ts +44 -0
- package/dist/src/integrations/mcp/tool-definitions.d.ts.map +1 -0
- package/dist/src/integrations/mcp/tool-definitions.js +563 -0
- package/dist/src/integrations/mcp/tool-definitions.js.map +1 -0
- package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts +48 -0
- package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts.map +1 -0
- package/dist/src/integrations/pg-aiguide/embedding-provider.js +190 -0
- package/dist/src/integrations/pg-aiguide/embedding-provider.js.map +1 -0
- package/dist/src/integrations/pg-aiguide/semantic-search.d.ts +34 -0
- package/dist/src/integrations/pg-aiguide/semantic-search.d.ts.map +1 -0
- package/dist/src/integrations/pg-aiguide/semantic-search.js +176 -0
- package/dist/src/integrations/pg-aiguide/semantic-search.js.map +1 -0
- package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts +44 -0
- package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts.map +1 -0
- package/dist/src/integrations/pg-aiguide/timescale-analytics.js +215 -0
- package/dist/src/integrations/pg-aiguide/timescale-analytics.js.map +1 -0
- package/dist/src/mcp/stackmemory-mcp-server.d.ts +9 -0
- package/dist/src/mcp/stackmemory-mcp-server.d.ts.map +1 -0
- package/dist/src/mcp/stackmemory-mcp-server.js +519 -0
- package/dist/src/mcp/stackmemory-mcp-server.js.map +1 -0
- package/dist/src/middleware/exponential-rate-limiter.d.ts +78 -0
- package/dist/src/middleware/exponential-rate-limiter.d.ts.map +1 -0
- package/dist/src/middleware/exponential-rate-limiter.js +293 -0
- package/dist/src/middleware/exponential-rate-limiter.js.map +1 -0
- package/dist/src/models/user.model.d.ts +62 -0
- package/dist/src/models/user.model.d.ts.map +1 -0
- package/dist/src/models/user.model.js +311 -0
- package/dist/src/models/user.model.js.map +1 -0
- package/dist/src/servers/production/auth-middleware.d.ts +12 -2
- package/dist/src/servers/production/auth-middleware.d.ts.map +1 -1
- package/dist/src/servers/production/auth-middleware.js +240 -28
- package/dist/src/servers/production/auth-middleware.js.map +1 -1
- package/dist/src/servers/railway/index.js.map +1 -1
- package/dist/src/services/context-service.d.ts.map +1 -1
- package/dist/src/services/context-service.js +86 -1
- package/dist/src/services/context-service.js.map +1 -1
- package/dist/src/validation/schemas.d.ts +633 -0
- package/dist/src/validation/schemas.d.ts.map +1 -0
- package/dist/src/validation/schemas.js +347 -0
- package/dist/src/validation/schemas.js.map +1 -0
- package/dist/types/task.js +1 -0
- package/dist/types/task.js.map +7 -0
- package/dist/utils/logger.js +52 -0
- package/dist/utils/logger.js.map +7 -0
- package/dist/validation/schemas.js +218 -0
- package/dist/validation/schemas.js.map +7 -0
- package/package.json +12 -3
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { execSync } from "child_process";
|
|
3
|
+
import { existsSync, readFileSync, writeFileSync } from "fs";
|
|
4
|
+
import { join } from "path";
|
|
5
|
+
import Database from "better-sqlite3";
|
|
6
|
+
import { FrameManager } from "../../core/context/frame-manager.js";
|
|
7
|
+
import { PebblesTaskStore } from "../../features/tasks/pebbles-task-store.js";
|
|
8
|
+
import { logger } from "../../core/monitoring/logger.js";
|
|
9
|
+
function createHandoffCommand() {
|
|
10
|
+
const cmd = new Command("handoff");
|
|
11
|
+
cmd.description("Commit current work and generate a handoff prompt for the next session").option("-m, --message <message>", "Custom commit message").option("--no-commit", "Skip git commit").option("--copy", "Copy the handoff prompt to clipboard").action(async (options) => {
|
|
12
|
+
try {
|
|
13
|
+
const projectRoot = process.cwd();
|
|
14
|
+
const dbPath = join(projectRoot, ".stackmemory", "context.db");
|
|
15
|
+
let gitStatus = "";
|
|
16
|
+
let hasChanges = false;
|
|
17
|
+
try {
|
|
18
|
+
gitStatus = execSync("git status --short", { encoding: "utf-8", cwd: projectRoot });
|
|
19
|
+
hasChanges = gitStatus.trim().length > 0;
|
|
20
|
+
} catch (err) {
|
|
21
|
+
console.log("\u26A0\uFE0F Not in a git repository");
|
|
22
|
+
}
|
|
23
|
+
if (hasChanges && options.commit !== false) {
|
|
24
|
+
try {
|
|
25
|
+
const currentBranch = execSync("git rev-parse --abbrev-ref HEAD", {
|
|
26
|
+
encoding: "utf-8",
|
|
27
|
+
cwd: projectRoot
|
|
28
|
+
}).trim();
|
|
29
|
+
execSync("git add -A", { cwd: projectRoot });
|
|
30
|
+
const commitMessage = options.message || `chore: handoff checkpoint on ${currentBranch}`;
|
|
31
|
+
execSync(`git commit -m "${commitMessage}"`, { cwd: projectRoot });
|
|
32
|
+
console.log(`\u2705 Committed changes: "${commitMessage}"`);
|
|
33
|
+
console.log(` Branch: ${currentBranch}`);
|
|
34
|
+
} catch (err) {
|
|
35
|
+
console.error("\u274C Failed to commit changes:", err.message);
|
|
36
|
+
}
|
|
37
|
+
} else if (!hasChanges) {
|
|
38
|
+
console.log("\u2139\uFE0F No changes to commit");
|
|
39
|
+
}
|
|
40
|
+
let contextSummary = "";
|
|
41
|
+
let tasksSummary = "";
|
|
42
|
+
let recentWork = "";
|
|
43
|
+
if (existsSync(dbPath)) {
|
|
44
|
+
const db = new Database(dbPath);
|
|
45
|
+
const frameManager = new FrameManager(db, "cli-project");
|
|
46
|
+
const activeFrames = frameManager.getActiveFramePath();
|
|
47
|
+
if (activeFrames.length > 0) {
|
|
48
|
+
contextSummary = "Active context frames:\n";
|
|
49
|
+
activeFrames.forEach((frame) => {
|
|
50
|
+
contextSummary += ` - ${frame.name} [${frame.type}]
|
|
51
|
+
`;
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
const taskStore = new PebblesTaskStore(projectRoot, db);
|
|
55
|
+
const activeTasks = taskStore.getActiveTasks();
|
|
56
|
+
const inProgress = activeTasks.filter((t) => t.status === "in_progress");
|
|
57
|
+
const todo = activeTasks.filter((t) => t.status === "pending");
|
|
58
|
+
const recentlyCompleted = activeTasks.filter((t) => t.status === "completed" && t.completed_at).sort((a, b) => (b.completed_at || 0) - (a.completed_at || 0)).slice(0, 3);
|
|
59
|
+
if (inProgress.length > 0 || todo.length > 0) {
|
|
60
|
+
tasksSummary = "\nTasks:\n";
|
|
61
|
+
if (inProgress.length > 0) {
|
|
62
|
+
tasksSummary += "In Progress:\n";
|
|
63
|
+
inProgress.forEach((t) => {
|
|
64
|
+
const externalId = t.external_refs?.linear?.id;
|
|
65
|
+
tasksSummary += ` - ${t.title}${externalId ? ` [${externalId}]` : ""}
|
|
66
|
+
`;
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
if (todo.length > 0) {
|
|
70
|
+
tasksSummary += "TODO:\n";
|
|
71
|
+
todo.slice(0, 5).forEach((t) => {
|
|
72
|
+
const externalId = t.external_refs?.linear?.id;
|
|
73
|
+
tasksSummary += ` - ${t.title}${externalId ? ` [${externalId}]` : ""}
|
|
74
|
+
`;
|
|
75
|
+
});
|
|
76
|
+
if (todo.length > 5) {
|
|
77
|
+
tasksSummary += ` ... and ${todo.length - 5} more
|
|
78
|
+
`;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (recentlyCompleted.length > 0) {
|
|
83
|
+
recentWork = "\nRecently Completed:\n";
|
|
84
|
+
recentlyCompleted.forEach((t) => {
|
|
85
|
+
recentWork += ` \u2713 ${t.title}
|
|
86
|
+
`;
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
const recentEvents = db.prepare(`
|
|
90
|
+
SELECT event_type as type, payload as data, datetime(ts, 'unixepoch') as time
|
|
91
|
+
FROM events
|
|
92
|
+
ORDER BY ts DESC
|
|
93
|
+
LIMIT 5
|
|
94
|
+
`).all();
|
|
95
|
+
if (recentEvents.length > 0) {
|
|
96
|
+
recentWork += "\nRecent Activity:\n";
|
|
97
|
+
recentEvents.forEach((event) => {
|
|
98
|
+
const data = JSON.parse(event.data);
|
|
99
|
+
recentWork += ` - ${event.type}: ${data.message || data.name || "activity"}
|
|
100
|
+
`;
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
db.close();
|
|
104
|
+
}
|
|
105
|
+
let gitInfo = "";
|
|
106
|
+
try {
|
|
107
|
+
const branch = execSync("git rev-parse --abbrev-ref HEAD", {
|
|
108
|
+
encoding: "utf-8",
|
|
109
|
+
cwd: projectRoot
|
|
110
|
+
}).trim();
|
|
111
|
+
const lastCommit = execSync("git log -1 --oneline", {
|
|
112
|
+
encoding: "utf-8",
|
|
113
|
+
cwd: projectRoot
|
|
114
|
+
}).trim();
|
|
115
|
+
gitInfo = `
|
|
116
|
+
Git Status:
|
|
117
|
+
Branch: ${branch}
|
|
118
|
+
Last commit: ${lastCommit}
|
|
119
|
+
`;
|
|
120
|
+
} catch (err) {
|
|
121
|
+
}
|
|
122
|
+
let notes = "";
|
|
123
|
+
const notesPath = join(projectRoot, ".stackmemory", "handoff.md");
|
|
124
|
+
if (existsSync(notesPath)) {
|
|
125
|
+
const handoffNotes = readFileSync(notesPath, "utf-8");
|
|
126
|
+
if (handoffNotes.trim()) {
|
|
127
|
+
notes = `
|
|
128
|
+
Notes from previous handoff:
|
|
129
|
+
${handoffNotes}
|
|
130
|
+
`;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
const timestamp = (/* @__PURE__ */ new Date()).toISOString();
|
|
134
|
+
const handoffPrompt = `# Session Handoff - ${timestamp}
|
|
135
|
+
|
|
136
|
+
## Project: ${projectRoot.split("/").pop()}
|
|
137
|
+
|
|
138
|
+
${gitInfo}
|
|
139
|
+
${contextSummary}
|
|
140
|
+
${tasksSummary}
|
|
141
|
+
${recentWork}
|
|
142
|
+
${notes}
|
|
143
|
+
|
|
144
|
+
## Continue from here:
|
|
145
|
+
|
|
146
|
+
1. Run \`stackmemory status\` to check the current state
|
|
147
|
+
2. Review any in-progress tasks above
|
|
148
|
+
3. Check for any uncommitted changes with \`git status\`
|
|
149
|
+
4. Resume work on the active context
|
|
150
|
+
|
|
151
|
+
## Quick Commands:
|
|
152
|
+
- \`stackmemory context load --recent\` - Load recent context
|
|
153
|
+
- \`stackmemory task list --state in_progress\` - Show in-progress tasks
|
|
154
|
+
- \`stackmemory linear sync\` - Sync with Linear if configured
|
|
155
|
+
- \`stackmemory log recent\` - View recent activity
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
Generated by stackmemory handoff at ${timestamp}
|
|
159
|
+
`;
|
|
160
|
+
const handoffPath = join(projectRoot, ".stackmemory", "last-handoff.md");
|
|
161
|
+
writeFileSync(handoffPath, handoffPrompt);
|
|
162
|
+
console.log("\n" + "=".repeat(60));
|
|
163
|
+
console.log(handoffPrompt);
|
|
164
|
+
console.log("=".repeat(60));
|
|
165
|
+
if (options.copy) {
|
|
166
|
+
try {
|
|
167
|
+
const copyCommand = process.platform === "darwin" ? "pbcopy" : process.platform === "win32" ? "clip" : "xclip -selection clipboard";
|
|
168
|
+
execSync(copyCommand, {
|
|
169
|
+
input: handoffPrompt,
|
|
170
|
+
cwd: projectRoot
|
|
171
|
+
});
|
|
172
|
+
console.log("\n\u2705 Handoff prompt copied to clipboard!");
|
|
173
|
+
} catch (err) {
|
|
174
|
+
console.log("\n\u26A0\uFE0F Could not copy to clipboard");
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
console.log(`
|
|
178
|
+
\u{1F4BE} Handoff saved to: ${handoffPath}`);
|
|
179
|
+
console.log("\u{1F4CB} Use this prompt when starting your next session");
|
|
180
|
+
} catch (error) {
|
|
181
|
+
logger.error("Handoff command failed", error);
|
|
182
|
+
console.error("\u274C Handoff failed:", error.message);
|
|
183
|
+
process.exit(1);
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
return cmd;
|
|
187
|
+
}
|
|
188
|
+
export {
|
|
189
|
+
createHandoffCommand
|
|
190
|
+
};
|
|
191
|
+
//# sourceMappingURL=handoff.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/cli/commands/handoff.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Handoff command - Commits work and generates a prompt for the next session\n */\n\nimport { Command } from 'commander';\nimport { execSync } from 'child_process';\nimport { existsSync, readFileSync, writeFileSync } from 'fs';\nimport { join } from 'path';\nimport Database from 'better-sqlite3';\nimport { FrameManager } from '../../core/context/frame-manager.js';\nimport { PebblesTaskStore } from '../../features/tasks/pebbles-task-store.js';\nimport { logger } from '../../core/monitoring/logger.js';\n\nexport function createHandoffCommand(): Command {\n const cmd = new Command('handoff');\n \n cmd\n .description('Commit current work and generate a handoff prompt for the next session')\n .option('-m, --message <message>', 'Custom commit message')\n .option('--no-commit', 'Skip git commit')\n .option('--copy', 'Copy the handoff prompt to clipboard')\n .action(async (options) => {\n try {\n const projectRoot = process.cwd();\n const dbPath = join(projectRoot, '.stackmemory', 'context.db');\n \n // 1. Check git status\n let gitStatus = '';\n let hasChanges = false;\n \n try {\n gitStatus = execSync('git status --short', { encoding: 'utf-8', cwd: projectRoot });\n hasChanges = gitStatus.trim().length > 0;\n } catch (err) {\n console.log('\u26A0\uFE0F Not in a git repository');\n }\n \n // 2. Commit if there are changes and not skipped\n if (hasChanges && options.commit !== false) {\n try {\n // Get current branch\n const currentBranch = execSync('git rev-parse --abbrev-ref HEAD', { \n encoding: 'utf-8', \n cwd: projectRoot \n }).trim();\n \n // Stage all changes\n execSync('git add -A', { cwd: projectRoot });\n \n // Generate or use custom commit message\n const commitMessage = options.message || `chore: handoff checkpoint on ${currentBranch}`;\n \n // Commit\n execSync(`git commit -m \"${commitMessage}\"`, { cwd: projectRoot });\n \n console.log(`\u2705 Committed changes: \"${commitMessage}\"`);\n console.log(` Branch: ${currentBranch}`);\n } catch (err) {\n console.error('\u274C Failed to commit changes:', (err as Error).message);\n }\n } else if (!hasChanges) {\n console.log('\u2139\uFE0F No changes to commit');\n }\n \n // 3. Gather context for handoff prompt\n let contextSummary = '';\n let tasksSummary = '';\n let recentWork = '';\n \n if (existsSync(dbPath)) {\n const db = new Database(dbPath);\n \n // Get recent context\n const frameManager = new FrameManager(db, 'cli-project');\n const activeFrames = frameManager.getActiveFramePath();\n \n if (activeFrames.length > 0) {\n contextSummary = 'Active context frames:\\n';\n activeFrames.forEach(frame => {\n contextSummary += ` - ${frame.name} [${frame.type}]\\n`;\n });\n }\n \n // Get task status\n const taskStore = new PebblesTaskStore(projectRoot, db);\n const activeTasks = taskStore.getActiveTasks();\n \n const inProgress = activeTasks.filter((t: any) => t.status === 'in_progress');\n const todo = activeTasks.filter((t: any) => t.status === 'pending');\n const recentlyCompleted = activeTasks\n .filter((t: any) => t.status === 'completed' && t.completed_at)\n .sort((a: any, b: any) => (b.completed_at || 0) - (a.completed_at || 0))\n .slice(0, 3);\n \n if (inProgress.length > 0 || todo.length > 0) {\n tasksSummary = '\\nTasks:\\n';\n \n if (inProgress.length > 0) {\n tasksSummary += 'In Progress:\\n';\n inProgress.forEach((t: any) => {\n const externalId = t.external_refs?.linear?.id;\n tasksSummary += ` - ${t.title}${externalId ? ` [${externalId}]` : ''}\\n`;\n });\n }\n \n if (todo.length > 0) {\n tasksSummary += 'TODO:\\n';\n todo.slice(0, 5).forEach((t: any) => {\n const externalId = t.external_refs?.linear?.id;\n tasksSummary += ` - ${t.title}${externalId ? ` [${externalId}]` : ''}\\n`;\n });\n if (todo.length > 5) {\n tasksSummary += ` ... and ${todo.length - 5} more\\n`;\n }\n }\n }\n \n if (recentlyCompleted.length > 0) {\n recentWork = '\\nRecently Completed:\\n';\n recentlyCompleted.forEach((t: any) => {\n recentWork += ` \u2713 ${t.title}\\n`;\n });\n }\n \n // Get recent events\n const recentEvents = db.prepare(`\n SELECT event_type as type, payload as data, datetime(ts, 'unixepoch') as time\n FROM events\n ORDER BY ts DESC\n LIMIT 5\n `).all() as any[];\n \n if (recentEvents.length > 0) {\n recentWork += '\\nRecent Activity:\\n';\n recentEvents.forEach(event => {\n const data = JSON.parse(event.data);\n recentWork += ` - ${event.type}: ${data.message || data.name || 'activity'}\\n`;\n });\n }\n \n db.close();\n }\n \n // 4. Get current git info\n let gitInfo = '';\n try {\n const branch = execSync('git rev-parse --abbrev-ref HEAD', { \n encoding: 'utf-8', \n cwd: projectRoot \n }).trim();\n \n const lastCommit = execSync('git log -1 --oneline', { \n encoding: 'utf-8', \n cwd: projectRoot \n }).trim();\n \n gitInfo = `\\nGit Status:\\n Branch: ${branch}\\n Last commit: ${lastCommit}\\n`;\n } catch (err) {\n // Ignore git errors\n }\n \n // 5. Check for any blockers or notes\n let notes = '';\n const notesPath = join(projectRoot, '.stackmemory', 'handoff.md');\n if (existsSync(notesPath)) {\n const handoffNotes = readFileSync(notesPath, 'utf-8');\n if (handoffNotes.trim()) {\n notes = `\\nNotes from previous handoff:\\n${handoffNotes}\\n`;\n }\n }\n \n // 6. Generate the handoff prompt\n const timestamp = new Date().toISOString();\n const handoffPrompt = `# Session Handoff - ${timestamp}\n\n## Project: ${projectRoot.split('/').pop()}\n\n${gitInfo}\n${contextSummary}\n${tasksSummary}\n${recentWork}\n${notes}\n\n## Continue from here:\n\n1. Run \\`stackmemory status\\` to check the current state\n2. Review any in-progress tasks above\n3. Check for any uncommitted changes with \\`git status\\`\n4. Resume work on the active context\n\n## Quick Commands:\n- \\`stackmemory context load --recent\\` - Load recent context\n- \\`stackmemory task list --state in_progress\\` - Show in-progress tasks\n- \\`stackmemory linear sync\\` - Sync with Linear if configured\n- \\`stackmemory log recent\\` - View recent activity\n\n---\nGenerated by stackmemory handoff at ${timestamp}\n`;\n \n // 7. Save handoff prompt\n const handoffPath = join(projectRoot, '.stackmemory', 'last-handoff.md');\n writeFileSync(handoffPath, handoffPrompt);\n \n // 8. Display the prompt\n console.log('\\n' + '='.repeat(60));\n console.log(handoffPrompt);\n console.log('='.repeat(60));\n \n // 9. Copy to clipboard if requested\n if (options.copy) {\n try {\n const copyCommand = process.platform === 'darwin' \n ? 'pbcopy' \n : process.platform === 'win32' \n ? 'clip' \n : 'xclip -selection clipboard';\n \n execSync(copyCommand, { \n input: handoffPrompt,\n cwd: projectRoot \n });\n \n console.log('\\n\u2705 Handoff prompt copied to clipboard!');\n } catch (err) {\n console.log('\\n\u26A0\uFE0F Could not copy to clipboard');\n }\n }\n \n console.log(`\\n\uD83D\uDCBE Handoff saved to: ${handoffPath}`);\n console.log('\uD83D\uDCCB Use this prompt when starting your next session');\n \n } catch (error) {\n logger.error('Handoff command failed', error as Error);\n console.error('\u274C Handoff failed:', (error as Error).message);\n process.exit(1);\n }\n });\n \n return cmd;\n}"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
function registerLinearTestCommand(parent) {
|
|
3
|
+
parent.command("linear:test").description("Test Linear API connection").option("--api-key <key>", "Linear API key").action(async (options) => {
|
|
4
|
+
try {
|
|
5
|
+
const apiKey = options.apiKey || process.env.LINEAR_API_KEY;
|
|
6
|
+
if (!apiKey) {
|
|
7
|
+
console.log(chalk.red("\u274C No API key provided"));
|
|
8
|
+
console.log("Use --api-key or set LINEAR_API_KEY environment variable");
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
console.log(chalk.yellow("\u{1F504} Testing Linear connection..."));
|
|
12
|
+
const response = await fetch("https://api.linear.app/graphql", {
|
|
13
|
+
method: "POST",
|
|
14
|
+
headers: {
|
|
15
|
+
"Authorization": apiKey,
|
|
16
|
+
"Content-Type": "application/json"
|
|
17
|
+
},
|
|
18
|
+
body: JSON.stringify({
|
|
19
|
+
query: `
|
|
20
|
+
query Me {
|
|
21
|
+
viewer {
|
|
22
|
+
id
|
|
23
|
+
name
|
|
24
|
+
email
|
|
25
|
+
}
|
|
26
|
+
teams {
|
|
27
|
+
nodes {
|
|
28
|
+
id
|
|
29
|
+
key
|
|
30
|
+
name
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
`
|
|
35
|
+
})
|
|
36
|
+
});
|
|
37
|
+
if (!response.ok) {
|
|
38
|
+
console.log(chalk.red(`\u274C API Error: ${response.status} ${response.statusText}`));
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const result = await response.json();
|
|
42
|
+
if (result.errors) {
|
|
43
|
+
console.log(chalk.red("\u274C GraphQL Errors:"));
|
|
44
|
+
result.errors.forEach((err) => console.log(` - ${err.message}`));
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (result.data?.viewer) {
|
|
48
|
+
console.log(chalk.green("\u2705 Connected to Linear!"));
|
|
49
|
+
console.log(chalk.cyan("\n\u{1F464} User:"));
|
|
50
|
+
console.log(` Name: ${result.data.viewer.name}`);
|
|
51
|
+
console.log(` Email: ${result.data.viewer.email}`);
|
|
52
|
+
}
|
|
53
|
+
if (result.data?.teams?.nodes?.length > 0) {
|
|
54
|
+
console.log(chalk.cyan("\n\u{1F3E2} Teams:"));
|
|
55
|
+
result.data.teams.nodes.forEach((team) => {
|
|
56
|
+
console.log(` - ${team.name} (${team.key})`);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
console.log(chalk.yellow("\n\u{1F504} Testing issue creation..."));
|
|
60
|
+
if (result.data?.teams?.nodes?.length > 0) {
|
|
61
|
+
const teamId = result.data.teams.nodes[0].id;
|
|
62
|
+
const createResponse = await fetch("https://api.linear.app/graphql", {
|
|
63
|
+
method: "POST",
|
|
64
|
+
headers: {
|
|
65
|
+
"Authorization": apiKey,
|
|
66
|
+
"Content-Type": "application/json"
|
|
67
|
+
},
|
|
68
|
+
body: JSON.stringify({
|
|
69
|
+
query: `
|
|
70
|
+
mutation CreateIssue($input: IssueCreateInput!) {
|
|
71
|
+
issueCreate(input: $input) {
|
|
72
|
+
success
|
|
73
|
+
issue {
|
|
74
|
+
id
|
|
75
|
+
identifier
|
|
76
|
+
title
|
|
77
|
+
url
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
`,
|
|
82
|
+
variables: {
|
|
83
|
+
input: {
|
|
84
|
+
teamId,
|
|
85
|
+
title: "[TEST] StackMemory Integration Test",
|
|
86
|
+
description: "This is a test issue created by StackMemory to verify Linear integration.",
|
|
87
|
+
priority: 4
|
|
88
|
+
// Low priority
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
})
|
|
92
|
+
});
|
|
93
|
+
const createResult = await createResponse.json();
|
|
94
|
+
if (createResult.data?.issueCreate?.success) {
|
|
95
|
+
const issue = createResult.data.issueCreate.issue;
|
|
96
|
+
console.log(chalk.green("\u2705 Test issue created successfully!"));
|
|
97
|
+
console.log(` ID: ${issue.identifier}`);
|
|
98
|
+
console.log(` Title: ${issue.title}`);
|
|
99
|
+
console.log(` URL: ${issue.url}`);
|
|
100
|
+
console.log(chalk.gray("\n(You can delete this test issue from Linear)"));
|
|
101
|
+
} else {
|
|
102
|
+
console.log(chalk.yellow("\u26A0 Could not create test issue"));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
console.log(chalk.green("\n\u2705 Linear integration test completed!"));
|
|
106
|
+
} catch (error) {
|
|
107
|
+
console.error(chalk.red("\u274C Test failed:"), error.message);
|
|
108
|
+
process.exit(1);
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
export {
|
|
113
|
+
registerLinearTestCommand
|
|
114
|
+
};
|
|
115
|
+
//# sourceMappingURL=linear-test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/cli/commands/linear-test.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Simple Linear sync test command\n */\n\nimport chalk from 'chalk';\nimport { Command } from 'commander';\n\nexport function registerLinearTestCommand(parent: Command) {\n parent\n .command('linear:test')\n .description('Test Linear API connection')\n .option('--api-key <key>', 'Linear API key')\n .action(async (options) => {\n try {\n const apiKey = options.apiKey || process.env.LINEAR_API_KEY;\n \n if (!apiKey) {\n console.log(chalk.red('\u274C No API key provided'));\n console.log('Use --api-key or set LINEAR_API_KEY environment variable');\n return;\n }\n \n console.log(chalk.yellow('\uD83D\uDD04 Testing Linear connection...'));\n \n // Simple GraphQL query to test connection\n const response = await fetch('https://api.linear.app/graphql', {\n method: 'POST',\n headers: {\n 'Authorization': apiKey,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n query: `\n query Me {\n viewer {\n id\n name\n email\n }\n teams {\n nodes {\n id\n key\n name\n }\n }\n }\n `\n }),\n });\n \n if (!response.ok) {\n console.log(chalk.red(`\u274C API Error: ${response.status} ${response.statusText}`));\n return;\n }\n \n const result: any = await response.json();\n \n if (result.errors) {\n console.log(chalk.red('\u274C GraphQL Errors:'));\n result.errors.forEach((err: any) => console.log(` - ${err.message}`));\n return;\n }\n \n if (result.data?.viewer) {\n console.log(chalk.green('\u2705 Connected to Linear!'));\n console.log(chalk.cyan('\\n\uD83D\uDC64 User:'));\n console.log(` Name: ${result.data.viewer.name}`);\n console.log(` Email: ${result.data.viewer.email}`);\n }\n \n if (result.data?.teams?.nodes?.length > 0) {\n console.log(chalk.cyan('\\n\uD83C\uDFE2 Teams:'));\n result.data.teams.nodes.forEach((team: any) => {\n console.log(` - ${team.name} (${team.key})`);\n });\n }\n \n // Test creating a sample issue (optional)\n console.log(chalk.yellow('\\n\uD83D\uDD04 Testing issue creation...'));\n \n if (result.data?.teams?.nodes?.length > 0) {\n const teamId = result.data.teams.nodes[0].id;\n \n const createResponse = await fetch('https://api.linear.app/graphql', {\n method: 'POST',\n headers: {\n 'Authorization': apiKey,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n query: `\n mutation CreateIssue($input: IssueCreateInput!) {\n issueCreate(input: $input) {\n success\n issue {\n id\n identifier\n title\n url\n }\n }\n }\n `,\n variables: {\n input: {\n teamId: teamId,\n title: '[TEST] StackMemory Integration Test',\n description: 'This is a test issue created by StackMemory to verify Linear integration.',\n priority: 4, // Low priority\n }\n }\n }),\n });\n \n const createResult: any = await createResponse.json();\n \n if (createResult.data?.issueCreate?.success) {\n const issue = createResult.data.issueCreate.issue;\n console.log(chalk.green('\u2705 Test issue created successfully!'));\n console.log(` ID: ${issue.identifier}`);\n console.log(` Title: ${issue.title}`);\n console.log(` URL: ${issue.url}`);\n \n // Optional: Delete the test issue\n console.log(chalk.gray('\\n(You can delete this test issue from Linear)'));\n } else {\n console.log(chalk.yellow('\u26A0 Could not create test issue'));\n }\n }\n \n console.log(chalk.green('\\n\u2705 Linear integration test completed!'));\n \n } catch (error) {\n console.error(chalk.red('\u274C Test failed:'), (error as Error).message);\n process.exit(1);\n }\n });\n}"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|