@stackmemoryai/stackmemory 0.3.1 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +52 -272
- package/dist/cli/commands/clear.js +191 -0
- package/dist/cli/commands/clear.js.map +7 -0
- package/dist/cli/commands/config.js +152 -1
- package/dist/cli/commands/config.js.map +2 -2
- package/dist/cli/commands/dashboard.js +178 -0
- package/dist/cli/commands/dashboard.js.map +7 -0
- package/dist/cli/commands/handoff.js +125 -8
- package/dist/cli/commands/handoff.js.map +2 -2
- package/dist/cli/commands/linear-create.js +132 -0
- package/dist/cli/commands/linear-create.js.map +7 -0
- package/dist/cli/commands/linear-list.js +69 -0
- package/dist/cli/commands/linear-list.js.map +7 -0
- package/dist/cli/commands/linear-migrate.js +40 -0
- package/dist/cli/commands/linear-migrate.js.map +7 -0
- package/dist/cli/commands/linear.js +185 -36
- package/dist/cli/commands/linear.js.map +2 -2
- package/dist/cli/commands/monitor.js +309 -0
- package/dist/cli/commands/monitor.js.map +7 -0
- package/dist/cli/commands/quality.js +414 -0
- package/dist/cli/commands/quality.js.map +7 -0
- package/dist/cli/commands/storage.js +275 -0
- package/dist/cli/commands/storage.js.map +7 -0
- package/dist/cli/commands/tui.js +66 -0
- package/dist/cli/commands/tui.js.map +7 -0
- package/dist/cli/commands/workflow.js +134 -0
- package/dist/cli/commands/workflow.js.map +7 -0
- package/dist/cli/index.js +104 -8
- package/dist/cli/index.js.map +3 -3
- package/dist/core/analytics/team-analytics.js +374 -0
- package/dist/core/analytics/team-analytics.js.map +7 -0
- package/dist/core/context/context-bridge.js +234 -0
- package/dist/core/context/context-bridge.js.map +7 -0
- package/dist/core/context/dual-stack-manager.js +850 -0
- package/dist/core/context/dual-stack-manager.js.map +7 -0
- package/dist/core/context/frame-handoff-manager.js +384 -0
- package/dist/core/context/frame-handoff-manager.js.map +7 -0
- package/dist/core/context/frame-manager.js +132 -12
- package/dist/core/context/frame-manager.js.map +2 -2
- package/dist/core/context/permission-manager.js +181 -0
- package/dist/core/context/permission-manager.js.map +7 -0
- package/dist/core/context/shared-context-layer.js +386 -0
- package/dist/core/context/shared-context-layer.js.map +7 -0
- package/dist/core/context/stack-merge-resolver.js +600 -0
- package/dist/core/context/stack-merge-resolver.js.map +7 -0
- package/dist/core/context/validation.js +121 -0
- package/dist/core/context/validation.js.map +7 -0
- package/dist/core/database/connection-pool.js +266 -175
- package/dist/core/database/connection-pool.js.map +2 -2
- package/dist/core/database/database-adapter.js +51 -0
- package/dist/core/database/database-adapter.js.map +7 -0
- package/dist/core/database/migration-manager.js +514 -0
- package/dist/core/database/migration-manager.js.map +7 -0
- package/dist/core/database/paradedb-adapter.js +970 -0
- package/dist/core/database/paradedb-adapter.js.map +7 -0
- package/dist/core/database/query-router.js +421 -0
- package/dist/core/database/query-router.js.map +7 -0
- package/dist/core/database/sqlite-adapter.js +547 -0
- package/dist/core/database/sqlite-adapter.js.map +7 -0
- package/dist/core/errors/index.js +21 -1
- package/dist/core/errors/index.js.map +2 -2
- package/dist/core/frame/workflow-templates-stub.js +42 -0
- package/dist/core/frame/workflow-templates-stub.js.map +7 -0
- package/dist/core/frame/workflow-templates.js +276 -0
- package/dist/core/frame/workflow-templates.js.map +7 -0
- package/dist/core/merge/conflict-detector.js +5 -2
- package/dist/core/merge/conflict-detector.js.map +2 -2
- package/dist/core/merge/resolution-engine.js +3 -14
- package/dist/core/merge/resolution-engine.js.map +2 -2
- package/dist/core/merge/stack-diff.js.map +2 -2
- package/dist/core/monitoring/logger.js +18 -3
- package/dist/core/monitoring/logger.js.map +2 -2
- package/dist/core/monitoring/session-monitor.js +296 -0
- package/dist/core/monitoring/session-monitor.js.map +7 -0
- package/dist/core/retrieval/context-retriever.js +475 -0
- package/dist/core/retrieval/context-retriever.js.map +7 -0
- package/dist/core/retrieval/graph-retrieval.js +658 -0
- package/dist/core/retrieval/graph-retrieval.js.map +7 -0
- package/dist/core/retrieval/hierarchical-retrieval.js +652 -0
- package/dist/core/retrieval/hierarchical-retrieval.js.map +7 -0
- package/dist/core/retrieval/retrieval-benchmarks.js +517 -0
- package/dist/core/retrieval/retrieval-benchmarks.js.map +7 -0
- package/dist/core/session/clear-survival-stub.js +49 -0
- package/dist/core/session/clear-survival-stub.js.map +7 -0
- package/dist/core/session/clear-survival.js +426 -0
- package/dist/core/session/clear-survival.js.map +7 -0
- package/dist/core/session/handoff-generator.js +339 -0
- package/dist/core/session/handoff-generator.js.map +7 -0
- package/dist/core/session/session-manager.js +61 -26
- package/dist/core/session/session-manager.js.map +3 -3
- package/dist/core/skills/index.js +3 -0
- package/dist/core/skills/index.js.map +7 -0
- package/dist/core/skills/skill-storage.js +749 -0
- package/dist/core/skills/skill-storage.js.map +7 -0
- package/dist/core/skills/types.js +189 -0
- package/dist/core/skills/types.js.map +7 -0
- package/dist/core/storage/railway-optimized-storage.js +550 -0
- package/dist/core/storage/railway-optimized-storage.js.map +7 -0
- package/dist/core/storage/remote-storage.js +456 -0
- package/dist/core/storage/remote-storage.js.map +7 -0
- package/dist/core/trace/trace-detector.js +136 -5
- package/dist/core/trace/trace-detector.js.map +2 -2
- package/dist/core/trace/trace-store.js.map +2 -2
- package/dist/features/tui/components/analytics-panel.js +136 -0
- package/dist/features/tui/components/analytics-panel.js.map +7 -0
- package/dist/features/tui/components/frame-visualizer.js +377 -0
- package/dist/features/tui/components/frame-visualizer.js.map +7 -0
- package/dist/features/tui/components/pr-tracker.js +123 -0
- package/dist/features/tui/components/pr-tracker.js.map +7 -0
- package/dist/features/tui/components/session-monitor.js +286 -0
- package/dist/features/tui/components/session-monitor.js.map +7 -0
- package/dist/features/tui/components/subagent-fleet.js +388 -0
- package/dist/features/tui/components/subagent-fleet.js.map +7 -0
- package/dist/features/tui/components/task-board.js +475 -0
- package/dist/features/tui/components/task-board.js.map +7 -0
- package/dist/features/tui/index.js +397 -0
- package/dist/features/tui/index.js.map +7 -0
- package/dist/features/tui/services/data-service.js +654 -0
- package/dist/features/tui/services/data-service.js.map +7 -0
- package/dist/features/tui/services/websocket-client.js +149 -0
- package/dist/features/tui/services/websocket-client.js.map +7 -0
- package/dist/features/tui/terminal-compat.js +205 -0
- package/dist/features/tui/terminal-compat.js.map +7 -0
- package/dist/features/tui/types.js +1 -0
- package/dist/features/tui/types.js.map +7 -0
- package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js +455 -0
- package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
- package/dist/integrations/claude-code/lifecycle-hooks.js +250 -0
- package/dist/integrations/claude-code/lifecycle-hooks.js.map +7 -0
- package/dist/integrations/claude-code/post-task-hooks.js +541 -0
- package/dist/integrations/claude-code/post-task-hooks.js.map +7 -0
- package/dist/integrations/linear/client.js +22 -4
- package/dist/integrations/linear/client.js.map +2 -2
- package/dist/integrations/linear/migration.js +299 -0
- package/dist/integrations/linear/migration.js.map +7 -0
- package/dist/integrations/linear/oauth-server.js +396 -0
- package/dist/integrations/linear/oauth-server.js.map +7 -0
- package/dist/integrations/linear/rest-client.js +199 -0
- package/dist/integrations/linear/rest-client.js.map +7 -0
- package/dist/integrations/linear/sync.js +14 -2
- package/dist/integrations/linear/sync.js.map +2 -2
- package/dist/integrations/linear/webhook-handler.js +200 -0
- package/dist/integrations/linear/webhook-handler.js.map +7 -0
- package/dist/integrations/mcp/handlers/skill-handlers.js +514 -0
- package/dist/integrations/mcp/handlers/skill-handlers.js.map +7 -0
- package/dist/integrations/mcp/middleware/tool-scoring.js +352 -0
- package/dist/integrations/mcp/middleware/tool-scoring.js.map +7 -0
- package/dist/integrations/mcp/refactored-server.js +31 -3
- package/dist/integrations/mcp/refactored-server.js.map +2 -2
- package/dist/integrations/mcp/server.js +25 -7
- package/dist/integrations/mcp/server.js.map +2 -2
- package/dist/mcp/stackmemory-mcp-server.js.map +1 -1
- package/dist/models/user.model.js +3 -0
- package/dist/models/user.model.js.map +2 -2
- package/dist/services/context-service.js.map +2 -2
- package/dist/utils/formatting.js +58 -0
- package/dist/utils/formatting.js.map +7 -0
- package/package.json +21 -5
- package/dist/cli/__tests__/index.test.js +0 -290
- package/dist/cli/__tests__/index.test.js.map +0 -7
- package/dist/core/config/__tests__/config-manager.test.js +0 -248
- package/dist/core/config/__tests__/config-manager.test.js.map +0 -7
- package/dist/core/context/__tests__/frame-manager.test.js +0 -879
- package/dist/core/context/__tests__/frame-manager.test.js.map +0 -7
- package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js +0 -379
- package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js.map +0 -7
- package/dist/core/digest/__tests__/frame-digest-integration.test.js +0 -230
- package/dist/core/digest/__tests__/frame-digest-integration.test.js.map +0 -7
- package/dist/core/errors/__tests__/error-handling.test.js +0 -270
- package/dist/core/errors/__tests__/error-handling.test.js.map +0 -7
- package/dist/core/merge/__tests__/conflict-scenarios.test.js +0 -414
- package/dist/core/merge/__tests__/conflict-scenarios.test.js.map +0 -7
- package/dist/core/query/__tests__/query-parser.test.js +0 -301
- package/dist/core/query/__tests__/query-parser.test.js.map +0 -7
- package/dist/core/query/__tests__/query-templates.test.js +0 -210
- package/dist/core/query/__tests__/query-templates.test.js.map +0 -7
- package/dist/core/trace/trace-detector.test.js +0 -401
- package/dist/core/trace/trace-detector.test.js.map +0 -7
- package/dist/features/tasks/__tests__/pebbles-task-store.test.js +0 -747
- package/dist/features/tasks/__tests__/pebbles-task-store.test.js.map +0 -7
- package/dist/integrations/linear/__tests__/auth.test.js +0 -558
- package/dist/integrations/linear/__tests__/auth.test.js.map +0 -7
- package/dist/integrations/linear/__tests__/sync-service.test.js +0 -760
- package/dist/integrations/linear/__tests__/sync-service.test.js.map +0 -7
- package/dist/integrations/mcp/__tests__/server.test.js +0 -798
- package/dist/integrations/mcp/__tests__/server.test.js.map +0 -7
- package/dist/scripts/benchmark-performance.d.ts +0 -7
- package/dist/scripts/benchmark-performance.d.ts.map +0 -1
- package/dist/scripts/benchmark-performance.js +0 -44
- package/dist/scripts/benchmark-performance.js.map +0 -1
- package/dist/scripts/cancel-duplicate-tasks.d.ts +0 -7
- package/dist/scripts/cancel-duplicate-tasks.d.ts.map +0 -1
- package/dist/scripts/cancel-duplicate-tasks.js +0 -172
- package/dist/scripts/cancel-duplicate-tasks.js.map +0 -1
- package/dist/scripts/cleanup-duplicate-tasks.d.ts +0 -12
- package/dist/scripts/cleanup-duplicate-tasks.d.ts.map +0 -1
- package/dist/scripts/cleanup-duplicate-tasks.js +0 -215
- package/dist/scripts/cleanup-duplicate-tasks.js.map +0 -1
- package/dist/scripts/initialize.d.ts +0 -6
- package/dist/scripts/initialize.d.ts.map +0 -1
- package/dist/scripts/initialize.js +0 -93
- package/dist/scripts/initialize.js.map +0 -1
- package/dist/scripts/list-linear-tasks.d.ts +0 -6
- package/dist/scripts/list-linear-tasks.d.ts.map +0 -1
- package/dist/scripts/list-linear-tasks.js +0 -121
- package/dist/scripts/list-linear-tasks.js.map +0 -1
- package/dist/scripts/merge-linear-duplicates-safe.d.ts +0 -7
- package/dist/scripts/merge-linear-duplicates-safe.d.ts.map +0 -1
- package/dist/scripts/merge-linear-duplicates-safe.js +0 -267
- package/dist/scripts/merge-linear-duplicates-safe.js.map +0 -1
- package/dist/scripts/show-linear-summary.d.ts +0 -6
- package/dist/scripts/show-linear-summary.d.ts.map +0 -1
- package/dist/scripts/show-linear-summary.js +0 -120
- package/dist/scripts/show-linear-summary.js.map +0 -1
- package/dist/scripts/status.d.ts +0 -6
- package/dist/scripts/status.d.ts.map +0 -1
- package/dist/scripts/status.js +0 -101
- package/dist/scripts/status.js.map +0 -1
- package/dist/src/agents/core/agent-task-manager.d.ts +0 -154
- package/dist/src/agents/core/agent-task-manager.d.ts.map +0 -1
- package/dist/src/agents/core/agent-task-manager.js +0 -504
- package/dist/src/agents/core/agent-task-manager.js.map +0 -1
- package/dist/src/agents/verifiers/base-verifier.d.ts +0 -112
- package/dist/src/agents/verifiers/base-verifier.d.ts.map +0 -1
- package/dist/src/agents/verifiers/base-verifier.js +0 -130
- package/dist/src/agents/verifiers/base-verifier.js.map +0 -1
- package/dist/src/agents/verifiers/formatter-verifier.d.ts +0 -14
- package/dist/src/agents/verifiers/formatter-verifier.d.ts.map +0 -1
- package/dist/src/agents/verifiers/formatter-verifier.js +0 -107
- package/dist/src/agents/verifiers/formatter-verifier.js.map +0 -1
- package/dist/src/agents/verifiers/llm-judge.d.ts +0 -46
- package/dist/src/agents/verifiers/llm-judge.d.ts.map +0 -1
- package/dist/src/agents/verifiers/llm-judge.js +0 -248
- package/dist/src/agents/verifiers/llm-judge.js.map +0 -1
- package/dist/src/cli/auto-detect.d.ts +0 -61
- package/dist/src/cli/auto-detect.d.ts.map +0 -1
- package/dist/src/cli/auto-detect.js +0 -350
- package/dist/src/cli/auto-detect.js.map +0 -1
- package/dist/src/cli/browser-test.d.ts +0 -6
- package/dist/src/cli/browser-test.d.ts.map +0 -1
- package/dist/src/cli/browser-test.js +0 -32
- package/dist/src/cli/browser-test.js.map +0 -1
- package/dist/src/cli/claude-sm.d.ts +0 -7
- package/dist/src/cli/claude-sm.d.ts.map +0 -1
- package/dist/src/cli/claude-sm.js +0 -412
- package/dist/src/cli/claude-sm.js.map +0 -1
- package/dist/src/cli/commands/agent.d.ts +0 -9
- package/dist/src/cli/commands/agent.d.ts.map +0 -1
- package/dist/src/cli/commands/agent.js +0 -303
- package/dist/src/cli/commands/agent.js.map +0 -1
- package/dist/src/cli/commands/config.d.ts +0 -6
- package/dist/src/cli/commands/config.d.ts.map +0 -1
- package/dist/src/cli/commands/config.js +0 -224
- package/dist/src/cli/commands/config.js.map +0 -1
- package/dist/src/cli/commands/context.d.ts +0 -7
- package/dist/src/cli/commands/context.d.ts.map +0 -1
- package/dist/src/cli/commands/context.js +0 -365
- package/dist/src/cli/commands/context.js.map +0 -1
- package/dist/src/cli/commands/handoff.d.ts +0 -6
- package/dist/src/cli/commands/handoff.d.ts.map +0 -1
- package/dist/src/cli/commands/handoff.js +0 -212
- package/dist/src/cli/commands/handoff.js.map +0 -1
- package/dist/src/cli/commands/linear-test.d.ts +0 -6
- package/dist/src/cli/commands/linear-test.d.ts.map +0 -1
- package/dist/src/cli/commands/linear-test.js +0 -123
- package/dist/src/cli/commands/linear-test.js.map +0 -1
- package/dist/src/cli/commands/linear.d.ts +0 -6
- package/dist/src/cli/commands/linear.d.ts.map +0 -1
- package/dist/src/cli/commands/linear.js +0 -393
- package/dist/src/cli/commands/linear.js.map +0 -1
- package/dist/src/cli/commands/log.d.ts +0 -7
- package/dist/src/cli/commands/log.d.ts.map +0 -1
- package/dist/src/cli/commands/log.js +0 -168
- package/dist/src/cli/commands/log.js.map +0 -1
- package/dist/src/cli/commands/onboard.d.ts +0 -8
- package/dist/src/cli/commands/onboard.d.ts.map +0 -1
- package/dist/src/cli/commands/onboard.js +0 -363
- package/dist/src/cli/commands/onboard.js.map +0 -1
- package/dist/src/cli/commands/projects.d.ts +0 -8
- package/dist/src/cli/commands/projects.d.ts.map +0 -1
- package/dist/src/cli/commands/projects.js +0 -220
- package/dist/src/cli/commands/projects.js.map +0 -1
- package/dist/src/cli/commands/search.d.ts +0 -7
- package/dist/src/cli/commands/search.d.ts.map +0 -1
- package/dist/src/cli/commands/search.js +0 -162
- package/dist/src/cli/commands/search.js.map +0 -1
- package/dist/src/cli/commands/session.d.ts +0 -7
- package/dist/src/cli/commands/session.d.ts.map +0 -1
- package/dist/src/cli/commands/session.js +0 -222
- package/dist/src/cli/commands/session.js.map +0 -1
- package/dist/src/cli/commands/tasks.d.ts +0 -7
- package/dist/src/cli/commands/tasks.d.ts.map +0 -1
- package/dist/src/cli/commands/tasks.js +0 -229
- package/dist/src/cli/commands/tasks.js.map +0 -1
- package/dist/src/cli/commands/webhook.d.ts +0 -3
- package/dist/src/cli/commands/webhook.d.ts.map +0 -1
- package/dist/src/cli/commands/webhook.js +0 -157
- package/dist/src/cli/commands/webhook.js.map +0 -1
- package/dist/src/cli/commands/worktree.d.ts +0 -8
- package/dist/src/cli/commands/worktree.d.ts.map +0 -1
- package/dist/src/cli/commands/worktree.js +0 -339
- package/dist/src/cli/commands/worktree.js.map +0 -1
- package/dist/src/cli/index.d.ts +0 -8
- package/dist/src/cli/index.d.ts.map +0 -1
- package/dist/src/cli/index.js +0 -995
- package/dist/src/cli/index.js.map +0 -1
- package/dist/src/cli/utils/viewer.d.ts +0 -3
- package/dist/src/cli/utils/viewer.d.ts.map +0 -1
- package/dist/src/cli/utils/viewer.js +0 -91
- package/dist/src/cli/utils/viewer.js.map +0 -1
- package/dist/src/core/config/config-manager.d.ts +0 -95
- package/dist/src/core/config/config-manager.d.ts.map +0 -1
- package/dist/src/core/config/config-manager.js +0 -359
- package/dist/src/core/config/config-manager.js.map +0 -1
- package/dist/src/core/config/types.d.ts +0 -72
- package/dist/src/core/config/types.d.ts.map +0 -1
- package/dist/src/core/config/types.js +0 -127
- package/dist/src/core/config/types.js.map +0 -1
- package/dist/src/core/context/auto-context.d.ts +0 -22
- package/dist/src/core/context/auto-context.d.ts.map +0 -1
- package/dist/src/core/context/auto-context.js +0 -77
- package/dist/src/core/context/auto-context.js.map +0 -1
- package/dist/src/core/context/compaction-handler.d.ts +0 -119
- package/dist/src/core/context/compaction-handler.d.ts.map +0 -1
- package/dist/src/core/context/compaction-handler.js +0 -306
- package/dist/src/core/context/compaction-handler.js.map +0 -1
- package/dist/src/core/context/frame-database.d.ts +0 -59
- package/dist/src/core/context/frame-database.d.ts.map +0 -1
- package/dist/src/core/context/frame-database.js +0 -333
- package/dist/src/core/context/frame-database.js.map +0 -1
- package/dist/src/core/context/frame-digest.d.ts +0 -59
- package/dist/src/core/context/frame-digest.d.ts.map +0 -1
- package/dist/src/core/context/frame-digest.js +0 -264
- package/dist/src/core/context/frame-digest.js.map +0 -1
- package/dist/src/core/context/frame-manager.d.ts +0 -112
- package/dist/src/core/context/frame-manager.d.ts.map +0 -1
- package/dist/src/core/context/frame-manager.js +0 -600
- package/dist/src/core/context/frame-manager.js.map +0 -1
- package/dist/src/core/context/frame-stack.d.ts +0 -85
- package/dist/src/core/context/frame-stack.d.ts.map +0 -1
- package/dist/src/core/context/frame-stack.js +0 -287
- package/dist/src/core/context/frame-stack.js.map +0 -1
- package/dist/src/core/context/frame-types.d.ts +0 -67
- package/dist/src/core/context/frame-types.d.ts.map +0 -1
- package/dist/src/core/context/frame-types.js +0 -6
- package/dist/src/core/context/frame-types.js.map +0 -1
- package/dist/src/core/context/index.d.ts +0 -11
- package/dist/src/core/context/index.d.ts.map +0 -1
- package/dist/src/core/context/index.js +0 -14
- package/dist/src/core/context/index.js.map +0 -1
- package/dist/src/core/context/model-aware-compaction.d.ts +0 -101
- package/dist/src/core/context/model-aware-compaction.d.ts.map +0 -1
- package/dist/src/core/context/model-aware-compaction.js +0 -616
- package/dist/src/core/context/model-aware-compaction.js.map +0 -1
- package/dist/src/core/context/refactored-frame-manager.d.ts +0 -99
- package/dist/src/core/context/refactored-frame-manager.d.ts.map +0 -1
- package/dist/src/core/context/refactored-frame-manager.js +0 -340
- package/dist/src/core/context/refactored-frame-manager.js.map +0 -1
- package/dist/src/core/database/batch-operations.d.ts +0 -118
- package/dist/src/core/database/batch-operations.d.ts.map +0 -1
- package/dist/src/core/database/batch-operations.js +0 -339
- package/dist/src/core/database/batch-operations.js.map +0 -1
- package/dist/src/core/database/connection-pool.d.ts +0 -79
- package/dist/src/core/database/connection-pool.d.ts.map +0 -1
- package/dist/src/core/database/connection-pool.js +0 -236
- package/dist/src/core/database/connection-pool.js.map +0 -1
- package/dist/src/core/database/query-cache.d.ts +0 -135
- package/dist/src/core/database/query-cache.d.ts.map +0 -1
- package/dist/src/core/database/query-cache.js +0 -294
- package/dist/src/core/database/query-cache.js.map +0 -1
- package/dist/src/core/digest/enhanced-hybrid-digest.d.ts +0 -125
- package/dist/src/core/digest/enhanced-hybrid-digest.d.ts.map +0 -1
- package/dist/src/core/digest/enhanced-hybrid-digest.js +0 -282
- package/dist/src/core/digest/enhanced-hybrid-digest.js.map +0 -1
- package/dist/src/core/digest/frame-digest-integration.d.ts +0 -67
- package/dist/src/core/digest/frame-digest-integration.d.ts.map +0 -1
- package/dist/src/core/digest/frame-digest-integration.js +0 -198
- package/dist/src/core/digest/frame-digest-integration.js.map +0 -1
- package/dist/src/core/digest/hybrid-digest-generator.d.ts +0 -76
- package/dist/src/core/digest/hybrid-digest-generator.d.ts.map +0 -1
- package/dist/src/core/digest/hybrid-digest-generator.js +0 -629
- package/dist/src/core/digest/hybrid-digest-generator.js.map +0 -1
- package/dist/src/core/digest/index.d.ts +0 -9
- package/dist/src/core/digest/index.d.ts.map +0 -1
- package/dist/src/core/digest/index.js +0 -9
- package/dist/src/core/digest/index.js.map +0 -1
- package/dist/src/core/digest/types.d.ts +0 -154
- package/dist/src/core/digest/types.d.ts.map +0 -1
- package/dist/src/core/digest/types.js +0 -18
- package/dist/src/core/digest/types.js.map +0 -1
- package/dist/src/core/errors/index.d.ts +0 -143
- package/dist/src/core/errors/index.d.ts.map +0 -1
- package/dist/src/core/errors/index.js +0 -282
- package/dist/src/core/errors/index.js.map +0 -1
- package/dist/src/core/errors/recovery.d.ts +0 -86
- package/dist/src/core/errors/recovery.d.ts.map +0 -1
- package/dist/src/core/errors/recovery.js +0 -274
- package/dist/src/core/errors/recovery.js.map +0 -1
- package/dist/src/core/merge/conflict-detector.d.ts +0 -122
- package/dist/src/core/merge/conflict-detector.d.ts.map +0 -1
- package/dist/src/core/merge/conflict-detector.js +0 -468
- package/dist/src/core/merge/conflict-detector.js.map +0 -1
- package/dist/src/core/merge/index.d.ts +0 -9
- package/dist/src/core/merge/index.d.ts.map +0 -1
- package/dist/src/core/merge/index.js +0 -9
- package/dist/src/core/merge/index.js.map +0 -1
- package/dist/src/core/merge/resolution-engine.d.ts +0 -120
- package/dist/src/core/merge/resolution-engine.d.ts.map +0 -1
- package/dist/src/core/merge/resolution-engine.js +0 -573
- package/dist/src/core/merge/resolution-engine.js.map +0 -1
- package/dist/src/core/merge/stack-diff.d.ts +0 -97
- package/dist/src/core/merge/stack-diff.d.ts.map +0 -1
- package/dist/src/core/merge/stack-diff.js +0 -516
- package/dist/src/core/merge/stack-diff.js.map +0 -1
- package/dist/src/core/merge/types.d.ts +0 -110
- package/dist/src/core/merge/types.d.ts.map +0 -1
- package/dist/src/core/merge/types.js +0 -6
- package/dist/src/core/merge/types.js.map +0 -1
- package/dist/src/core/monitoring/error-handler.d.ts +0 -46
- package/dist/src/core/monitoring/error-handler.d.ts.map +0 -1
- package/dist/src/core/monitoring/error-handler.js +0 -212
- package/dist/src/core/monitoring/error-handler.js.map +0 -1
- package/dist/src/core/monitoring/logger.d.ts +0 -24
- package/dist/src/core/monitoring/logger.d.ts.map +0 -1
- package/dist/src/core/monitoring/logger.js +0 -126
- package/dist/src/core/monitoring/logger.js.map +0 -1
- package/dist/src/core/monitoring/metrics.d.ts +0 -10
- package/dist/src/core/monitoring/metrics.d.ts.map +0 -1
- package/dist/src/core/monitoring/metrics.js +0 -152
- package/dist/src/core/monitoring/metrics.js.map +0 -1
- package/dist/src/core/monitoring/progress-tracker.d.ts +0 -95
- package/dist/src/core/monitoring/progress-tracker.d.ts.map +0 -1
- package/dist/src/core/monitoring/progress-tracker.js +0 -178
- package/dist/src/core/monitoring/progress-tracker.js.map +0 -1
- package/dist/src/core/performance/context-cache.d.ts +0 -109
- package/dist/src/core/performance/context-cache.d.ts.map +0 -1
- package/dist/src/core/performance/context-cache.js +0 -280
- package/dist/src/core/performance/context-cache.js.map +0 -1
- package/dist/src/core/performance/index.d.ts +0 -3
- package/dist/src/core/performance/index.d.ts.map +0 -1
- package/dist/src/core/performance/index.js +0 -3
- package/dist/src/core/performance/index.js.map +0 -1
- package/dist/src/core/performance/lazy-context-loader.d.ts +0 -93
- package/dist/src/core/performance/lazy-context-loader.d.ts.map +0 -1
- package/dist/src/core/performance/lazy-context-loader.js +0 -332
- package/dist/src/core/performance/lazy-context-loader.js.map +0 -1
- package/dist/src/core/performance/monitor.d.ts +0 -48
- package/dist/src/core/performance/monitor.d.ts.map +0 -1
- package/dist/src/core/performance/monitor.js +0 -226
- package/dist/src/core/performance/monitor.js.map +0 -1
- package/dist/src/core/performance/optimized-frame-context.d.ts +0 -74
- package/dist/src/core/performance/optimized-frame-context.d.ts.map +0 -1
- package/dist/src/core/performance/optimized-frame-context.js +0 -330
- package/dist/src/core/performance/optimized-frame-context.js.map +0 -1
- package/dist/src/core/performance/performance-benchmark.d.ts +0 -50
- package/dist/src/core/performance/performance-benchmark.d.ts.map +0 -1
- package/dist/src/core/performance/performance-benchmark.js +0 -290
- package/dist/src/core/performance/performance-benchmark.js.map +0 -1
- package/dist/src/core/performance/performance-profiler.d.ts +0 -151
- package/dist/src/core/performance/performance-profiler.d.ts.map +0 -1
- package/dist/src/core/performance/performance-profiler.js +0 -346
- package/dist/src/core/performance/performance-profiler.js.map +0 -1
- package/dist/src/core/performance/streaming-jsonl-parser.d.ts +0 -41
- package/dist/src/core/performance/streaming-jsonl-parser.d.ts.map +0 -1
- package/dist/src/core/performance/streaming-jsonl-parser.js +0 -193
- package/dist/src/core/performance/streaming-jsonl-parser.js.map +0 -1
- package/dist/src/core/persistence/postgres-adapter.d.ts +0 -31
- package/dist/src/core/persistence/postgres-adapter.d.ts.map +0 -1
- package/dist/src/core/persistence/postgres-adapter.js +0 -330
- package/dist/src/core/persistence/postgres-adapter.js.map +0 -1
- package/dist/src/core/projects/project-manager.d.ts +0 -130
- package/dist/src/core/projects/project-manager.d.ts.map +0 -1
- package/dist/src/core/projects/project-manager.js +0 -709
- package/dist/src/core/projects/project-manager.js.map +0 -1
- package/dist/src/core/query/query-parser.d.ts +0 -109
- package/dist/src/core/query/query-parser.d.ts.map +0 -1
- package/dist/src/core/query/query-parser.js +0 -415
- package/dist/src/core/query/query-parser.js.map +0 -1
- package/dist/src/core/query/query-templates.d.ts +0 -44
- package/dist/src/core/query/query-templates.d.ts.map +0 -1
- package/dist/src/core/query/query-templates.js +0 -326
- package/dist/src/core/query/query-templates.js.map +0 -1
- package/dist/src/core/retrieval/index.d.ts +0 -8
- package/dist/src/core/retrieval/index.d.ts.map +0 -1
- package/dist/src/core/retrieval/index.js +0 -8
- package/dist/src/core/retrieval/index.js.map +0 -1
- package/dist/src/core/retrieval/llm-context-retrieval.d.ts +0 -73
- package/dist/src/core/retrieval/llm-context-retrieval.d.ts.map +0 -1
- package/dist/src/core/retrieval/llm-context-retrieval.js +0 -597
- package/dist/src/core/retrieval/llm-context-retrieval.js.map +0 -1
- package/dist/src/core/retrieval/summary-generator.d.ts +0 -63
- package/dist/src/core/retrieval/summary-generator.d.ts.map +0 -1
- package/dist/src/core/retrieval/summary-generator.js +0 -622
- package/dist/src/core/retrieval/summary-generator.js.map +0 -1
- package/dist/src/core/retrieval/types.d.ts +0 -257
- package/dist/src/core/retrieval/types.d.ts.map +0 -1
- package/dist/src/core/retrieval/types.js +0 -18
- package/dist/src/core/retrieval/types.js.map +0 -1
- package/dist/src/core/session/index.d.ts +0 -2
- package/dist/src/core/session/index.d.ts.map +0 -1
- package/dist/src/core/session/index.js +0 -2
- package/dist/src/core/session/index.js.map +0 -1
- package/dist/src/core/session/session-manager.d.ts +0 -69
- package/dist/src/core/session/session-manager.d.ts.map +0 -1
- package/dist/src/core/session/session-manager.js +0 -311
- package/dist/src/core/session/session-manager.js.map +0 -1
- package/dist/src/core/trace/cli-trace-wrapper.d.ts +0 -23
- package/dist/src/core/trace/cli-trace-wrapper.d.ts.map +0 -1
- package/dist/src/core/trace/cli-trace-wrapper.js +0 -141
- package/dist/src/core/trace/cli-trace-wrapper.js.map +0 -1
- package/dist/src/core/trace/db-trace-wrapper.d.ts +0 -36
- package/dist/src/core/trace/db-trace-wrapper.d.ts.map +0 -1
- package/dist/src/core/trace/db-trace-wrapper.js +0 -252
- package/dist/src/core/trace/db-trace-wrapper.js.map +0 -1
- package/dist/src/core/trace/debug-trace.d.ts +0 -84
- package/dist/src/core/trace/debug-trace.d.ts.map +0 -1
- package/dist/src/core/trace/debug-trace.js +0 -402
- package/dist/src/core/trace/debug-trace.js.map +0 -1
- package/dist/src/core/trace/error-test.d.ts +0 -6
- package/dist/src/core/trace/error-test.d.ts.map +0 -1
- package/dist/src/core/trace/error-test.js +0 -128
- package/dist/src/core/trace/error-test.js.map +0 -1
- package/dist/src/core/trace/index.d.ts +0 -25
- package/dist/src/core/trace/index.d.ts.map +0 -1
- package/dist/src/core/trace/index.js +0 -121
- package/dist/src/core/trace/index.js.map +0 -1
- package/dist/src/core/trace/linear-api-wrapper.d.ts +0 -17
- package/dist/src/core/trace/linear-api-wrapper.d.ts.map +0 -1
- package/dist/src/core/trace/linear-api-wrapper.js +0 -205
- package/dist/src/core/trace/linear-api-wrapper.js.map +0 -1
- package/dist/src/core/trace/performance-test.d.ts +0 -6
- package/dist/src/core/trace/performance-test.d.ts.map +0 -1
- package/dist/src/core/trace/performance-test.js +0 -111
- package/dist/src/core/trace/performance-test.js.map +0 -1
- package/dist/src/core/trace/trace-demo.d.ts +0 -8
- package/dist/src/core/trace/trace-demo.d.ts.map +0 -1
- package/dist/src/core/trace/trace-demo.js +0 -154
- package/dist/src/core/trace/trace-demo.js.map +0 -1
- package/dist/src/core/trace/trace-detector.d.ts +0 -108
- package/dist/src/core/trace/trace-detector.d.ts.map +0 -1
- package/dist/src/core/trace/trace-detector.demo.d.ts +0 -5
- package/dist/src/core/trace/trace-detector.demo.d.ts.map +0 -1
- package/dist/src/core/trace/trace-detector.demo.js +0 -145
- package/dist/src/core/trace/trace-detector.demo.js.map +0 -1
- package/dist/src/core/trace/trace-detector.js +0 -425
- package/dist/src/core/trace/trace-detector.js.map +0 -1
- package/dist/src/core/trace/trace-store.d.ts +0 -60
- package/dist/src/core/trace/trace-store.d.ts.map +0 -1
- package/dist/src/core/trace/trace-store.js +0 -323
- package/dist/src/core/trace/trace-store.js.map +0 -1
- package/dist/src/core/trace/types.d.ts +0 -81
- package/dist/src/core/trace/types.d.ts.map +0 -1
- package/dist/src/core/trace/types.js +0 -70
- package/dist/src/core/trace/types.js.map +0 -1
- package/dist/src/core/types.d.ts +0 -35
- package/dist/src/core/types.d.ts.map +0 -1
- package/dist/src/core/types.js +0 -2
- package/dist/src/core/types.js.map +0 -1
- package/dist/src/core/utils/update-checker.d.ts +0 -38
- package/dist/src/core/utils/update-checker.d.ts.map +0 -1
- package/dist/src/core/utils/update-checker.js +0 -213
- package/dist/src/core/utils/update-checker.js.map +0 -1
- package/dist/src/core/worktree/worktree-manager.d.ts +0 -110
- package/dist/src/core/worktree/worktree-manager.d.ts.map +0 -1
- package/dist/src/core/worktree/worktree-manager.js +0 -456
- package/dist/src/core/worktree/worktree-manager.js.map +0 -1
- package/dist/src/features/analytics/api/analytics-api.d.ts +0 -24
- package/dist/src/features/analytics/api/analytics-api.d.ts.map +0 -1
- package/dist/src/features/analytics/api/analytics-api.js +0 -289
- package/dist/src/features/analytics/api/analytics-api.js.map +0 -1
- package/dist/src/features/analytics/core/analytics-service.d.ts +0 -29
- package/dist/src/features/analytics/core/analytics-service.d.ts.map +0 -1
- package/dist/src/features/analytics/core/analytics-service.js +0 -275
- package/dist/src/features/analytics/core/analytics-service.js.map +0 -1
- package/dist/src/features/analytics/index.d.ts +0 -12
- package/dist/src/features/analytics/index.d.ts.map +0 -1
- package/dist/src/features/analytics/index.js +0 -11
- package/dist/src/features/analytics/index.js.map +0 -1
- package/dist/src/features/analytics/queries/metrics-queries.d.ts +0 -11
- package/dist/src/features/analytics/queries/metrics-queries.d.ts.map +0 -1
- package/dist/src/features/analytics/queries/metrics-queries.js +0 -240
- package/dist/src/features/analytics/queries/metrics-queries.js.map +0 -1
- package/dist/src/features/analytics/types/metrics.d.ts +0 -60
- package/dist/src/features/analytics/types/metrics.d.ts.map +0 -1
- package/dist/src/features/analytics/types/metrics.js +0 -2
- package/dist/src/features/analytics/types/metrics.js.map +0 -1
- package/dist/src/features/browser/browser-mcp.d.ts +0 -94
- package/dist/src/features/browser/browser-mcp.d.ts.map +0 -1
- package/dist/src/features/browser/browser-mcp.js +0 -459
- package/dist/src/features/browser/browser-mcp.js.map +0 -1
- package/dist/src/features/tasks/pebbles-task-store.d.ts +0 -128
- package/dist/src/features/tasks/pebbles-task-store.d.ts.map +0 -1
- package/dist/src/features/tasks/pebbles-task-store.js +0 -572
- package/dist/src/features/tasks/pebbles-task-store.js.map +0 -1
- package/dist/src/features/tasks/task-aware-context.d.ts +0 -103
- package/dist/src/features/tasks/task-aware-context.d.ts.map +0 -1
- package/dist/src/features/tasks/task-aware-context.js +0 -412
- package/dist/src/features/tasks/task-aware-context.js.map +0 -1
- package/dist/src/index.d.ts +0 -21
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -9
- package/dist/src/index.js.map +0 -1
- package/dist/src/integrations/linear/auth.d.ts +0 -99
- package/dist/src/integrations/linear/auth.d.ts.map +0 -1
- package/dist/src/integrations/linear/auth.js +0 -319
- package/dist/src/integrations/linear/auth.js.map +0 -1
- package/dist/src/integrations/linear/auto-sync.d.ts +0 -77
- package/dist/src/integrations/linear/auto-sync.d.ts.map +0 -1
- package/dist/src/integrations/linear/auto-sync.js +0 -268
- package/dist/src/integrations/linear/auto-sync.js.map +0 -1
- package/dist/src/integrations/linear/client.d.ts +0 -127
- package/dist/src/integrations/linear/client.d.ts.map +0 -1
- package/dist/src/integrations/linear/client.js +0 -446
- package/dist/src/integrations/linear/client.js.map +0 -1
- package/dist/src/integrations/linear/config.d.ts +0 -51
- package/dist/src/integrations/linear/config.d.ts.map +0 -1
- package/dist/src/integrations/linear/config.js +0 -103
- package/dist/src/integrations/linear/config.js.map +0 -1
- package/dist/src/integrations/linear/sync-manager.d.ts +0 -78
- package/dist/src/integrations/linear/sync-manager.d.ts.map +0 -1
- package/dist/src/integrations/linear/sync-manager.js +0 -235
- package/dist/src/integrations/linear/sync-manager.js.map +0 -1
- package/dist/src/integrations/linear/sync-service.d.ts +0 -46
- package/dist/src/integrations/linear/sync-service.d.ts.map +0 -1
- package/dist/src/integrations/linear/sync-service.js +0 -217
- package/dist/src/integrations/linear/sync-service.js.map +0 -1
- package/dist/src/integrations/linear/sync.d.ts +0 -125
- package/dist/src/integrations/linear/sync.d.ts.map +0 -1
- package/dist/src/integrations/linear/sync.js +0 -563
- package/dist/src/integrations/linear/sync.js.map +0 -1
- package/dist/src/integrations/linear/types.d.ts +0 -90
- package/dist/src/integrations/linear/types.d.ts.map +0 -1
- package/dist/src/integrations/linear/types.js +0 -2
- package/dist/src/integrations/linear/types.js.map +0 -1
- package/dist/src/integrations/linear/webhook-server.d.ts +0 -32
- package/dist/src/integrations/linear/webhook-server.d.ts.map +0 -1
- package/dist/src/integrations/linear/webhook-server.js +0 -190
- package/dist/src/integrations/linear/webhook-server.js.map +0 -1
- package/dist/src/integrations/linear/webhook.d.ts +0 -108
- package/dist/src/integrations/linear/webhook.d.ts.map +0 -1
- package/dist/src/integrations/linear/webhook.js +0 -291
- package/dist/src/integrations/linear/webhook.js.map +0 -1
- package/dist/src/integrations/mcp/handlers/context-handlers.d.ts +0 -39
- package/dist/src/integrations/mcp/handlers/context-handlers.d.ts.map +0 -1
- package/dist/src/integrations/mcp/handlers/context-handlers.js +0 -266
- package/dist/src/integrations/mcp/handlers/context-handlers.js.map +0 -1
- package/dist/src/integrations/mcp/handlers/index.d.ts +0 -37
- package/dist/src/integrations/mcp/handlers/index.d.ts.map +0 -1
- package/dist/src/integrations/mcp/handlers/index.js +0 -134
- package/dist/src/integrations/mcp/handlers/index.js.map +0 -1
- package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts +0 -33
- package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts.map +0 -1
- package/dist/src/integrations/mcp/handlers/linear-handlers.js +0 -251
- package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +0 -1
- package/dist/src/integrations/mcp/handlers/task-handlers.d.ts +0 -42
- package/dist/src/integrations/mcp/handlers/task-handlers.d.ts.map +0 -1
- package/dist/src/integrations/mcp/handlers/task-handlers.js +0 -238
- package/dist/src/integrations/mcp/handlers/task-handlers.js.map +0 -1
- package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts +0 -41
- package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts.map +0 -1
- package/dist/src/integrations/mcp/handlers/trace-handlers.js +0 -298
- package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +0 -1
- package/dist/src/integrations/mcp/index.d.ts +0 -13
- package/dist/src/integrations/mcp/index.d.ts.map +0 -1
- package/dist/src/integrations/mcp/index.js +0 -17
- package/dist/src/integrations/mcp/index.js.map +0 -1
- package/dist/src/integrations/mcp/refactored-server.d.ts +0 -76
- package/dist/src/integrations/mcp/refactored-server.d.ts.map +0 -1
- package/dist/src/integrations/mcp/refactored-server.js +0 -351
- package/dist/src/integrations/mcp/refactored-server.js.map +0 -1
- package/dist/src/integrations/mcp/server.d.ts +0 -54
- package/dist/src/integrations/mcp/server.d.ts.map +0 -1
- package/dist/src/integrations/mcp/server.js +0 -1616
- package/dist/src/integrations/mcp/server.js.map +0 -1
- package/dist/src/integrations/mcp/tool-definitions.d.ts +0 -44
- package/dist/src/integrations/mcp/tool-definitions.d.ts.map +0 -1
- package/dist/src/integrations/mcp/tool-definitions.js +0 -563
- package/dist/src/integrations/mcp/tool-definitions.js.map +0 -1
- package/dist/src/integrations/mcp/trace-test.d.ts +0 -5
- package/dist/src/integrations/mcp/trace-test.d.ts.map +0 -1
- package/dist/src/integrations/mcp/trace-test.js +0 -54
- package/dist/src/integrations/mcp/trace-test.js.map +0 -1
- package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts +0 -48
- package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts.map +0 -1
- package/dist/src/integrations/pg-aiguide/embedding-provider.js +0 -190
- package/dist/src/integrations/pg-aiguide/embedding-provider.js.map +0 -1
- package/dist/src/integrations/pg-aiguide/semantic-search.d.ts +0 -34
- package/dist/src/integrations/pg-aiguide/semantic-search.d.ts.map +0 -1
- package/dist/src/integrations/pg-aiguide/semantic-search.js +0 -176
- package/dist/src/integrations/pg-aiguide/semantic-search.js.map +0 -1
- package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts +0 -44
- package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts.map +0 -1
- package/dist/src/integrations/pg-aiguide/timescale-analytics.js +0 -215
- package/dist/src/integrations/pg-aiguide/timescale-analytics.js.map +0 -1
- package/dist/src/mcp/stackmemory-mcp-server.d.ts +0 -9
- package/dist/src/mcp/stackmemory-mcp-server.d.ts.map +0 -1
- package/dist/src/mcp/stackmemory-mcp-server.js +0 -519
- package/dist/src/mcp/stackmemory-mcp-server.js.map +0 -1
- package/dist/src/middleware/exponential-rate-limiter.d.ts +0 -78
- package/dist/src/middleware/exponential-rate-limiter.d.ts.map +0 -1
- package/dist/src/middleware/exponential-rate-limiter.js +0 -293
- package/dist/src/middleware/exponential-rate-limiter.js.map +0 -1
- package/dist/src/models/user.model.d.ts +0 -62
- package/dist/src/models/user.model.d.ts.map +0 -1
- package/dist/src/models/user.model.js +0 -311
- package/dist/src/models/user.model.js.map +0 -1
- package/dist/src/servers/production/auth-middleware.d.ts +0 -76
- package/dist/src/servers/production/auth-middleware.d.ts.map +0 -1
- package/dist/src/servers/production/auth-middleware.js +0 -558
- package/dist/src/servers/production/auth-middleware.js.map +0 -1
- package/dist/src/servers/railway/index.d.ts +0 -7
- package/dist/src/servers/railway/index.d.ts.map +0 -1
- package/dist/src/servers/railway/index.js +0 -401
- package/dist/src/servers/railway/index.js.map +0 -1
- package/dist/src/services/config-service.d.ts +0 -44
- package/dist/src/services/config-service.d.ts.map +0 -1
- package/dist/src/services/config-service.js +0 -61
- package/dist/src/services/config-service.js.map +0 -1
- package/dist/src/services/context-service.d.ts +0 -17
- package/dist/src/services/context-service.d.ts.map +0 -1
- package/dist/src/services/context-service.js +0 -173
- package/dist/src/services/context-service.js.map +0 -1
- package/dist/src/types/task.d.ts +0 -27
- package/dist/src/types/task.d.ts.map +0 -1
- package/dist/src/types/task.js +0 -2
- package/dist/src/types/task.js.map +0 -1
- package/dist/src/utils/logger.d.ts +0 -13
- package/dist/src/utils/logger.d.ts.map +0 -1
- package/dist/src/utils/logger.js +0 -52
- package/dist/src/utils/logger.js.map +0 -1
- package/dist/src/validation/schemas.d.ts +0 -633
- package/dist/src/validation/schemas.d.ts.map +0 -1
- package/dist/src/validation/schemas.js +0 -347
- package/dist/src/validation/schemas.js.map +0 -1
|
@@ -8,14 +8,18 @@ import { PebblesTaskStore } from "../../features/tasks/pebbles-task-store.js";
|
|
|
8
8
|
import { logger } from "../../core/monitoring/logger.js";
|
|
9
9
|
function createHandoffCommand() {
|
|
10
10
|
const cmd = new Command("handoff");
|
|
11
|
-
cmd.description("
|
|
11
|
+
cmd.description("Session handoff for continuity between Claude sessions");
|
|
12
|
+
cmd.command("capture", { isDefault: true }).description("Commit current work and generate a handoff prompt").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
13
|
try {
|
|
13
14
|
const projectRoot = process.cwd();
|
|
14
15
|
const dbPath = join(projectRoot, ".stackmemory", "context.db");
|
|
15
16
|
let gitStatus = "";
|
|
16
17
|
let hasChanges = false;
|
|
17
18
|
try {
|
|
18
|
-
gitStatus = execSync("git status --short", {
|
|
19
|
+
gitStatus = execSync("git status --short", {
|
|
20
|
+
encoding: "utf-8",
|
|
21
|
+
cwd: projectRoot
|
|
22
|
+
});
|
|
19
23
|
hasChanges = gitStatus.trim().length > 0;
|
|
20
24
|
} catch (err) {
|
|
21
25
|
console.log("\u26A0\uFE0F Not in a git repository");
|
|
@@ -32,7 +36,10 @@ function createHandoffCommand() {
|
|
|
32
36
|
console.log(`\u2705 Committed changes: "${commitMessage}"`);
|
|
33
37
|
console.log(` Branch: ${currentBranch}`);
|
|
34
38
|
} catch (err) {
|
|
35
|
-
console.error(
|
|
39
|
+
console.error(
|
|
40
|
+
"\u274C Failed to commit changes:",
|
|
41
|
+
err.message
|
|
42
|
+
);
|
|
36
43
|
}
|
|
37
44
|
} else if (!hasChanges) {
|
|
38
45
|
console.log("\u2139\uFE0F No changes to commit");
|
|
@@ -53,9 +60,13 @@ function createHandoffCommand() {
|
|
|
53
60
|
}
|
|
54
61
|
const taskStore = new PebblesTaskStore(projectRoot, db);
|
|
55
62
|
const activeTasks = taskStore.getActiveTasks();
|
|
56
|
-
const inProgress = activeTasks.filter(
|
|
63
|
+
const inProgress = activeTasks.filter(
|
|
64
|
+
(t) => t.status === "in_progress"
|
|
65
|
+
);
|
|
57
66
|
const todo = activeTasks.filter((t) => t.status === "pending");
|
|
58
|
-
const recentlyCompleted = activeTasks.filter((t) => t.status === "completed" && t.completed_at).sort(
|
|
67
|
+
const recentlyCompleted = activeTasks.filter((t) => t.status === "completed" && t.completed_at).sort(
|
|
68
|
+
(a, b) => (b.completed_at || 0) - (a.completed_at || 0)
|
|
69
|
+
).slice(0, 3);
|
|
59
70
|
if (inProgress.length > 0 || todo.length > 0) {
|
|
60
71
|
tasksSummary = "\nTasks:\n";
|
|
61
72
|
if (inProgress.length > 0) {
|
|
@@ -86,12 +97,14 @@ function createHandoffCommand() {
|
|
|
86
97
|
`;
|
|
87
98
|
});
|
|
88
99
|
}
|
|
89
|
-
const recentEvents = db.prepare(
|
|
100
|
+
const recentEvents = db.prepare(
|
|
101
|
+
`
|
|
90
102
|
SELECT event_type as type, payload as data, datetime(ts, 'unixepoch') as time
|
|
91
103
|
FROM events
|
|
92
104
|
ORDER BY ts DESC
|
|
93
105
|
LIMIT 5
|
|
94
|
-
`
|
|
106
|
+
`
|
|
107
|
+
).all();
|
|
95
108
|
if (recentEvents.length > 0) {
|
|
96
109
|
recentWork += "\nRecent Activity:\n";
|
|
97
110
|
recentEvents.forEach((event) => {
|
|
@@ -157,7 +170,11 @@ ${notes}
|
|
|
157
170
|
---
|
|
158
171
|
Generated by stackmemory handoff at ${timestamp}
|
|
159
172
|
`;
|
|
160
|
-
const handoffPath = join(
|
|
173
|
+
const handoffPath = join(
|
|
174
|
+
projectRoot,
|
|
175
|
+
".stackmemory",
|
|
176
|
+
"last-handoff.md"
|
|
177
|
+
);
|
|
161
178
|
writeFileSync(handoffPath, handoffPrompt);
|
|
162
179
|
console.log("\n" + "=".repeat(60));
|
|
163
180
|
console.log(handoffPrompt);
|
|
@@ -183,6 +200,106 @@ Generated by stackmemory handoff at ${timestamp}
|
|
|
183
200
|
process.exit(1);
|
|
184
201
|
}
|
|
185
202
|
});
|
|
203
|
+
cmd.command("restore").description("Restore context from last handoff").option("--no-copy", "Do not copy prompt to clipboard").action(async (options) => {
|
|
204
|
+
try {
|
|
205
|
+
const projectRoot = process.cwd();
|
|
206
|
+
const handoffPath = join(
|
|
207
|
+
projectRoot,
|
|
208
|
+
".stackmemory",
|
|
209
|
+
"last-handoff.md"
|
|
210
|
+
);
|
|
211
|
+
const metaPath = join(
|
|
212
|
+
process.env.HOME || "~",
|
|
213
|
+
".stackmemory",
|
|
214
|
+
"handoffs",
|
|
215
|
+
"last-handoff-meta.json"
|
|
216
|
+
);
|
|
217
|
+
if (!existsSync(handoffPath)) {
|
|
218
|
+
console.log("\u274C No handoff found in this project");
|
|
219
|
+
console.log('\u{1F4A1} Run "stackmemory handoff" to create one');
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
const handoffPrompt = readFileSync(handoffPath, "utf-8");
|
|
223
|
+
console.log("\n" + "=".repeat(60));
|
|
224
|
+
console.log("\u{1F4CB} RESTORED HANDOFF");
|
|
225
|
+
console.log("=".repeat(60));
|
|
226
|
+
console.log(handoffPrompt);
|
|
227
|
+
console.log("=".repeat(60));
|
|
228
|
+
if (existsSync(metaPath)) {
|
|
229
|
+
const metadata = JSON.parse(readFileSync(metaPath, "utf-8"));
|
|
230
|
+
console.log("\n\u{1F4CA} Session Metadata:");
|
|
231
|
+
console.log(` Timestamp: ${metadata.timestamp}`);
|
|
232
|
+
console.log(` Reason: ${metadata.reason}`);
|
|
233
|
+
console.log(` Duration: ${metadata.session_duration}s`);
|
|
234
|
+
console.log(` Command: ${metadata.command}`);
|
|
235
|
+
}
|
|
236
|
+
try {
|
|
237
|
+
const gitStatus = execSync("git status --short", {
|
|
238
|
+
encoding: "utf-8"
|
|
239
|
+
}).trim();
|
|
240
|
+
if (gitStatus) {
|
|
241
|
+
console.log("\n\u26A0\uFE0F Current uncommitted changes:");
|
|
242
|
+
console.log(gitStatus);
|
|
243
|
+
}
|
|
244
|
+
} catch (err) {
|
|
245
|
+
}
|
|
246
|
+
if (options.copy !== false) {
|
|
247
|
+
try {
|
|
248
|
+
const copyCommand = process.platform === "darwin" ? "pbcopy" : process.platform === "win32" ? "clip" : "xclip -selection clipboard";
|
|
249
|
+
execSync(copyCommand, {
|
|
250
|
+
input: handoffPrompt,
|
|
251
|
+
cwd: projectRoot
|
|
252
|
+
});
|
|
253
|
+
console.log("\n\u2705 Handoff prompt copied to clipboard!");
|
|
254
|
+
} catch (err) {
|
|
255
|
+
console.log("\n\u26A0\uFE0F Could not copy to clipboard");
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
console.log("\n\u{1F680} Ready to continue where you left off!");
|
|
259
|
+
} catch (error) {
|
|
260
|
+
logger.error("Handoff restore failed", error);
|
|
261
|
+
console.error("\u274C Restore failed:", error.message);
|
|
262
|
+
process.exit(1);
|
|
263
|
+
}
|
|
264
|
+
});
|
|
265
|
+
cmd.command("auto").description("Enable auto-capture on session termination").option("--command <command>", "Command to wrap with auto-handoff").action(async (options) => {
|
|
266
|
+
const scriptPath = join(
|
|
267
|
+
__dirname,
|
|
268
|
+
"..",
|
|
269
|
+
"..",
|
|
270
|
+
"..",
|
|
271
|
+
"scripts",
|
|
272
|
+
"stackmemory-auto-handoff.sh"
|
|
273
|
+
);
|
|
274
|
+
if (!existsSync(scriptPath)) {
|
|
275
|
+
console.error("\u274C Auto-handoff script not found");
|
|
276
|
+
console.log("\u{1F4E6} Please ensure StackMemory is properly installed");
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
console.log("\u{1F6E1}\uFE0F StackMemory Auto-Handoff");
|
|
280
|
+
console.log("\u2500".repeat(50));
|
|
281
|
+
if (options.command) {
|
|
282
|
+
console.log(`Wrapping command: ${options.command}`);
|
|
283
|
+
execSync(`${scriptPath} ${options.command}`, {
|
|
284
|
+
stdio: "inherit",
|
|
285
|
+
env: { ...process.env, AUTO_CAPTURE_ON_EXIT: "true" }
|
|
286
|
+
});
|
|
287
|
+
} else {
|
|
288
|
+
console.log("To enable auto-handoff for your current session:");
|
|
289
|
+
console.log("");
|
|
290
|
+
console.log(" For bash/zsh:");
|
|
291
|
+
console.log(` source <(${scriptPath} --shell)`);
|
|
292
|
+
console.log("");
|
|
293
|
+
console.log(" Or wrap a command:");
|
|
294
|
+
console.log(` ${scriptPath} claude`);
|
|
295
|
+
console.log(` ${scriptPath} npm run dev`);
|
|
296
|
+
console.log("");
|
|
297
|
+
console.log(" Add to your shell profile for permanent setup:");
|
|
298
|
+
console.log(
|
|
299
|
+
` echo 'alias claude="${scriptPath} claude"' >> ~/.bashrc`
|
|
300
|
+
);
|
|
301
|
+
}
|
|
302
|
+
});
|
|
186
303
|
return cmd;
|
|
187
304
|
}
|
|
188
305
|
export {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
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": "AAIA,SAAS,eAAe;AACxB,SAAS,gBAAgB;AACzB,SAAS,YAAY,cAAc,qBAAqB;AACxD,SAAS,YAAY;AACrB,OAAO,cAAc;AACrB,SAAS,oBAAoB;AAC7B,SAAS,wBAAwB;AACjC,SAAS,cAAc;AAEhB,SAAS,uBAAgC;AAC9C,QAAM,MAAM,IAAI,QAAQ,SAAS;AAEjC,MACG,YAAY,
|
|
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.description('Session handoff for continuity between Claude sessions');\n\n // Default action - capture handoff\n cmd\n .command('capture', { isDefault: true })\n .description('Commit current work and generate a handoff prompt')\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', {\n encoding: 'utf-8',\n cwd: projectRoot,\n });\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 =\n options.message ||\n `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(\n '\u274C Failed to commit changes:',\n (err as Error).message\n );\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(\n (t: any) => t.status === 'in_progress'\n );\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(\n (a: any, b: any) => (b.completed_at || 0) - (a.completed_at || 0)\n )\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\n .prepare(\n `\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 `\n )\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(\n projectRoot,\n '.stackmemory',\n 'last-handoff.md'\n );\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 =\n 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 } 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 // Restore command\n cmd\n .command('restore')\n .description('Restore context from last handoff')\n .option('--no-copy', 'Do not copy prompt to clipboard')\n .action(async (options) => {\n try {\n const projectRoot = process.cwd();\n const handoffPath = join(\n projectRoot,\n '.stackmemory',\n 'last-handoff.md'\n );\n const metaPath = join(\n process.env.HOME || '~',\n '.stackmemory',\n 'handoffs',\n 'last-handoff-meta.json'\n );\n\n if (!existsSync(handoffPath)) {\n console.log('\u274C No handoff found in this project');\n console.log('\uD83D\uDCA1 Run \"stackmemory handoff\" to create one');\n return;\n }\n\n // Read handoff prompt\n const handoffPrompt = readFileSync(handoffPath, 'utf-8');\n\n // Display the prompt\n console.log('\\n' + '='.repeat(60));\n console.log('\uD83D\uDCCB RESTORED HANDOFF');\n console.log('='.repeat(60));\n console.log(handoffPrompt);\n console.log('='.repeat(60));\n\n // Check for metadata\n if (existsSync(metaPath)) {\n const metadata = JSON.parse(readFileSync(metaPath, 'utf-8'));\n console.log('\\n\uD83D\uDCCA Session Metadata:');\n console.log(` Timestamp: ${metadata.timestamp}`);\n console.log(` Reason: ${metadata.reason}`);\n console.log(` Duration: ${metadata.session_duration}s`);\n console.log(` Command: ${metadata.command}`);\n }\n\n // Check current git status\n try {\n const gitStatus = execSync('git status --short', {\n encoding: 'utf-8',\n }).trim();\n if (gitStatus) {\n console.log('\\n\u26A0\uFE0F Current uncommitted changes:');\n console.log(gitStatus);\n }\n } catch (err) {\n // Not a git repo\n }\n\n // Copy to clipboard unless disabled\n if (options.copy !== false) {\n try {\n const copyCommand =\n 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\uDE80 Ready to continue where you left off!');\n } catch (error) {\n logger.error('Handoff restore failed', error as Error);\n console.error('\u274C Restore failed:', (error as Error).message);\n process.exit(1);\n }\n });\n\n // Auto command - enable auto-capture\n cmd\n .command('auto')\n .description('Enable auto-capture on session termination')\n .option('--command <command>', 'Command to wrap with auto-handoff')\n .action(async (options) => {\n const scriptPath = join(\n __dirname,\n '..',\n '..',\n '..',\n 'scripts',\n 'stackmemory-auto-handoff.sh'\n );\n\n if (!existsSync(scriptPath)) {\n console.error('\u274C Auto-handoff script not found');\n console.log('\uD83D\uDCE6 Please ensure StackMemory is properly installed');\n return;\n }\n\n console.log('\uD83D\uDEE1\uFE0F StackMemory Auto-Handoff');\n console.log('\u2500'.repeat(50));\n\n if (options.command) {\n // Wrap specific command\n console.log(`Wrapping command: ${options.command}`);\n execSync(`${scriptPath} ${options.command}`, {\n stdio: 'inherit',\n env: { ...process.env, AUTO_CAPTURE_ON_EXIT: 'true' },\n });\n } else {\n // Interactive mode\n console.log('To enable auto-handoff for your current session:');\n console.log('');\n console.log(' For bash/zsh:');\n console.log(` source <(${scriptPath} --shell)`);\n console.log('');\n console.log(' Or wrap a command:');\n console.log(` ${scriptPath} claude`);\n console.log(` ${scriptPath} npm run dev`);\n console.log('');\n console.log(' Add to your shell profile for permanent setup:');\n console.log(\n ` echo 'alias claude=\"${scriptPath} claude\"' >> ~/.bashrc`\n );\n }\n });\n\n return cmd;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { LinearRestClient } from "../../integrations/linear/rest-client.js";
|
|
3
|
+
function registerLinearCreateCommand(parent) {
|
|
4
|
+
parent.command("linear:create").description("Create a new Linear task in the correct project").option("--api-key <key>", "Linear API key for target workspace").option("--title <title>", "Task title (required)").option("--description <desc>", "Task description").option("--priority <level>", "Priority: urgent(1), high(2), medium(3), low(4)", "3").option("--state <state>", "Initial state: backlog, todo, started", "backlog").action(async (options) => {
|
|
5
|
+
try {
|
|
6
|
+
const apiKey = options.apiKey || process.env.LINEAR_NEW_API_KEY;
|
|
7
|
+
if (!apiKey) {
|
|
8
|
+
console.error(chalk.red("\u274C API key required. Use --api-key or set LINEAR_NEW_API_KEY"));
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
if (!options.title) {
|
|
12
|
+
console.error(chalk.red('\u274C Task title required. Use --title "Your task title"'));
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const client = new LinearRestClient(apiKey);
|
|
16
|
+
console.log(chalk.yellow("\u{1F504} Creating new Linear task..."));
|
|
17
|
+
const team = await client.getTeam();
|
|
18
|
+
console.log(chalk.cyan(`\u{1F3AF} Target team: ${team.name} (${team.key})`));
|
|
19
|
+
const createQuery = `
|
|
20
|
+
mutation CreateIssue($input: IssueCreateInput!) {
|
|
21
|
+
issueCreate(input: $input) {
|
|
22
|
+
success
|
|
23
|
+
issue {
|
|
24
|
+
id
|
|
25
|
+
identifier
|
|
26
|
+
title
|
|
27
|
+
description
|
|
28
|
+
state {
|
|
29
|
+
id
|
|
30
|
+
name
|
|
31
|
+
type
|
|
32
|
+
}
|
|
33
|
+
priority
|
|
34
|
+
url
|
|
35
|
+
createdAt
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
`;
|
|
40
|
+
const taskInput = {
|
|
41
|
+
title: options.title,
|
|
42
|
+
description: options.description || "",
|
|
43
|
+
teamId: team.id,
|
|
44
|
+
priority: parseInt(options.priority)
|
|
45
|
+
};
|
|
46
|
+
const response = await client.makeRequest(createQuery, { input: taskInput });
|
|
47
|
+
if (!response.data?.issueCreate?.success) {
|
|
48
|
+
throw new Error("Failed to create task in Linear");
|
|
49
|
+
}
|
|
50
|
+
const task = response.data.issueCreate.issue;
|
|
51
|
+
console.log(chalk.green("\n\u2705 Task created successfully!"));
|
|
52
|
+
console.log(chalk.blue(`\u{1F4CB} ${task.identifier}: ${task.title}`));
|
|
53
|
+
console.log(chalk.gray(` State: ${task.state.name}`));
|
|
54
|
+
console.log(chalk.gray(` Priority: ${task.priority}`));
|
|
55
|
+
console.log(chalk.gray(` URL: ${task.url}`));
|
|
56
|
+
if (options.description) {
|
|
57
|
+
console.log(chalk.gray(` Description: ${options.description}`));
|
|
58
|
+
}
|
|
59
|
+
} catch (error) {
|
|
60
|
+
console.error(chalk.red("\u274C Task creation failed:"), error.message);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
parent.command("linear:quick").description("Quick task creation with prompts").option("--api-key <key>", "Linear API key for target workspace").action(async (options) => {
|
|
64
|
+
try {
|
|
65
|
+
const apiKey = options.apiKey || process.env.LINEAR_NEW_API_KEY;
|
|
66
|
+
if (!apiKey) {
|
|
67
|
+
console.error(chalk.red("\u274C API key required. Use --api-key or set LINEAR_NEW_API_KEY"));
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const readline = await import("readline");
|
|
71
|
+
const rl = readline.createInterface({
|
|
72
|
+
input: process.stdin,
|
|
73
|
+
output: process.stdout
|
|
74
|
+
});
|
|
75
|
+
const question = (prompt) => {
|
|
76
|
+
return new Promise((resolve) => {
|
|
77
|
+
rl.question(prompt, resolve);
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
console.log(chalk.blue("\u{1F4DD} Quick Linear Task Creation"));
|
|
81
|
+
console.log(chalk.gray("Press Ctrl+C to cancel at any time\n"));
|
|
82
|
+
const title = await question(chalk.yellow("Task title: "));
|
|
83
|
+
if (!title.trim()) {
|
|
84
|
+
console.log(chalk.red("\u274C Title is required"));
|
|
85
|
+
rl.close();
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const description = await question(chalk.yellow("Description (optional): "));
|
|
89
|
+
const priorityInput = await question(chalk.yellow("Priority (1=urgent, 2=high, 3=medium, 4=low) [3]: "));
|
|
90
|
+
const priority = priorityInput.trim() || "3";
|
|
91
|
+
rl.close();
|
|
92
|
+
console.log(chalk.yellow("\n\u{1F504} Creating task..."));
|
|
93
|
+
const client = new LinearRestClient(apiKey);
|
|
94
|
+
const team = await client.getTeam();
|
|
95
|
+
const createQuery = `
|
|
96
|
+
mutation CreateIssue($input: IssueCreateInput!) {
|
|
97
|
+
issueCreate(input: $input) {
|
|
98
|
+
success
|
|
99
|
+
issue {
|
|
100
|
+
id
|
|
101
|
+
identifier
|
|
102
|
+
title
|
|
103
|
+
state { name }
|
|
104
|
+
priority
|
|
105
|
+
url
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
`;
|
|
110
|
+
const taskInput = {
|
|
111
|
+
title: title.trim(),
|
|
112
|
+
description: description.trim() || void 0,
|
|
113
|
+
teamId: team.id,
|
|
114
|
+
priority: parseInt(priority)
|
|
115
|
+
};
|
|
116
|
+
const response = await client.makeRequest(createQuery, { input: taskInput });
|
|
117
|
+
if (!response.data?.issueCreate?.success) {
|
|
118
|
+
throw new Error("Failed to create task in Linear");
|
|
119
|
+
}
|
|
120
|
+
const task = response.data.issueCreate.issue;
|
|
121
|
+
console.log(chalk.green("\n\u2705 Task created successfully!"));
|
|
122
|
+
console.log(chalk.blue(`\u{1F4CB} ${task.identifier}: ${task.title}`));
|
|
123
|
+
console.log(chalk.gray(` URL: ${task.url}`));
|
|
124
|
+
} catch (error) {
|
|
125
|
+
console.error(chalk.red("\u274C Task creation failed:"), error.message);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
export {
|
|
130
|
+
registerLinearCreateCommand
|
|
131
|
+
};
|
|
132
|
+
//# sourceMappingURL=linear-create.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/cli/commands/linear-create.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Linear Task Creation Command\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { LinearRestClient } from '../../integrations/linear/rest-client.js';\n\nexport function registerLinearCreateCommand(parent: Command) {\n parent\n .command('linear:create')\n .description('Create a new Linear task in the correct project')\n .option('--api-key <key>', 'Linear API key for target workspace')\n .option('--title <title>', 'Task title (required)')\n .option('--description <desc>', 'Task description')\n .option('--priority <level>', 'Priority: urgent(1), high(2), medium(3), low(4)', '3')\n .option('--state <state>', 'Initial state: backlog, todo, started', 'backlog')\n .action(async (options) => {\n try {\n const apiKey = options.apiKey || process.env.LINEAR_NEW_API_KEY;\n \n if (!apiKey) {\n console.error(chalk.red('\u274C API key required. Use --api-key or set LINEAR_NEW_API_KEY'));\n return;\n }\n\n if (!options.title) {\n console.error(chalk.red('\u274C Task title required. Use --title \"Your task title\"'));\n return;\n }\n\n const client = new LinearRestClient(apiKey);\n \n console.log(chalk.yellow('\uD83D\uDD04 Creating new Linear task...'));\n \n // Get team info\n const team = await client.getTeam();\n console.log(chalk.cyan(`\uD83C\uDFAF Target team: ${team.name} (${team.key})`));\n\n // Create the task\n const createQuery = `\n mutation CreateIssue($input: IssueCreateInput!) {\n issueCreate(input: $input) {\n success\n issue {\n id\n identifier\n title\n description\n state {\n id\n name\n type\n }\n priority\n url\n createdAt\n }\n }\n }\n `;\n\n const taskInput = {\n title: options.title,\n description: options.description || '',\n teamId: team.id,\n priority: parseInt(options.priority)\n };\n\n const response = await client.makeRequest<{\n data: {\n issueCreate: {\n success: boolean;\n issue: any;\n };\n };\n }>(createQuery, { input: taskInput });\n\n if (!response.data?.issueCreate?.success) {\n throw new Error('Failed to create task in Linear');\n }\n\n const task = response.data.issueCreate.issue;\n \n console.log(chalk.green('\\n\u2705 Task created successfully!'));\n console.log(chalk.blue(`\uD83D\uDCCB ${task.identifier}: ${task.title}`));\n console.log(chalk.gray(` State: ${task.state.name}`));\n console.log(chalk.gray(` Priority: ${task.priority}`));\n console.log(chalk.gray(` URL: ${task.url}`));\n \n if (options.description) {\n console.log(chalk.gray(` Description: ${options.description}`));\n }\n\n } catch (error) {\n console.error(chalk.red('\u274C Task creation failed:'), (error as Error).message);\n }\n });\n\n parent\n .command('linear:quick')\n .description('Quick task creation with prompts')\n .option('--api-key <key>', 'Linear API key for target workspace')\n .action(async (options) => {\n try {\n const apiKey = options.apiKey || process.env.LINEAR_NEW_API_KEY;\n \n if (!apiKey) {\n console.error(chalk.red('\u274C API key required. Use --api-key or set LINEAR_NEW_API_KEY'));\n return;\n }\n\n const readline = await import('readline');\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout\n });\n\n const question = (prompt: string): Promise<string> => {\n return new Promise((resolve) => {\n rl.question(prompt, resolve);\n });\n };\n\n console.log(chalk.blue('\uD83D\uDCDD Quick Linear Task Creation'));\n console.log(chalk.gray('Press Ctrl+C to cancel at any time\\n'));\n\n const title = await question(chalk.yellow('Task title: '));\n if (!title.trim()) {\n console.log(chalk.red('\u274C Title is required'));\n rl.close();\n return;\n }\n\n const description = await question(chalk.yellow('Description (optional): '));\n const priorityInput = await question(chalk.yellow('Priority (1=urgent, 2=high, 3=medium, 4=low) [3]: '));\n const priority = priorityInput.trim() || '3';\n\n rl.close();\n\n console.log(chalk.yellow('\\n\uD83D\uDD04 Creating task...'));\n\n const client = new LinearRestClient(apiKey);\n const team = await client.getTeam();\n\n const createQuery = `\n mutation CreateIssue($input: IssueCreateInput!) {\n issueCreate(input: $input) {\n success\n issue {\n id\n identifier\n title\n state { name }\n priority\n url\n }\n }\n }\n `;\n\n const taskInput = {\n title: title.trim(),\n description: description.trim() || undefined,\n teamId: team.id,\n priority: parseInt(priority)\n };\n\n const response = await client.makeRequest<{\n data: {\n issueCreate: {\n success: boolean;\n issue: any;\n };\n };\n }>(createQuery, { input: taskInput });\n\n if (!response.data?.issueCreate?.success) {\n throw new Error('Failed to create task in Linear');\n }\n\n const task = response.data.issueCreate.issue;\n \n console.log(chalk.green('\\n\u2705 Task created successfully!'));\n console.log(chalk.blue(`\uD83D\uDCCB ${task.identifier}: ${task.title}`));\n console.log(chalk.gray(` URL: ${task.url}`));\n\n } catch (error) {\n console.error(chalk.red('\u274C Task creation failed:'), (error as Error).message);\n }\n });\n}"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { LinearRestClient } from "../../integrations/linear/rest-client.js";
|
|
3
|
+
function registerLinearListCommand(parent) {
|
|
4
|
+
parent.command("linear:list").alias("linear:ls").description("List Linear tasks (fast, memory-cached)").option("--limit <n>", "Number of tasks to show", "20").option("--status <status>", "Filter by status (backlog, started, completed, etc.)").option("--my", "Show only tasks assigned to me").option("--cache", "Show cache stats only").option("--refresh", "Force refresh cache").option("--count", "Show count by status only").action(async (options) => {
|
|
5
|
+
try {
|
|
6
|
+
const apiKey = process.env.LINEAR_API_KEY;
|
|
7
|
+
if (!apiKey) {
|
|
8
|
+
console.log(chalk.yellow("\u26A0 Set LINEAR_API_KEY environment variable"));
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
const restClient = new LinearRestClient(apiKey);
|
|
12
|
+
if (options.cache) {
|
|
13
|
+
const stats = restClient.getCacheStats();
|
|
14
|
+
console.log(chalk.cyan("\u{1F4CA} Cache Stats:"));
|
|
15
|
+
console.log(` Size: ${stats.size} tasks`);
|
|
16
|
+
console.log(` Age: ${Math.round(stats.age / 1e3)}s`);
|
|
17
|
+
console.log(` Fresh: ${stats.fresh ? "yes" : "no"}`);
|
|
18
|
+
console.log(` Last sync: ${new Date(stats.lastSync).toLocaleString()}`);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
if (options.count) {
|
|
22
|
+
const counts = await restClient.getTaskCounts();
|
|
23
|
+
console.log(chalk.cyan("\u{1F4CA} Task Counts:"));
|
|
24
|
+
Object.entries(counts).sort(([, a], [, b]) => b - a).forEach(([status, count]) => {
|
|
25
|
+
console.log(` ${status}: ${count}`);
|
|
26
|
+
});
|
|
27
|
+
const cacheStats2 = restClient.getCacheStats();
|
|
28
|
+
console.log(chalk.gray(`
|
|
29
|
+
Cache: ${cacheStats2.size} tasks, age: ${Math.round(cacheStats2.age / 1e3)}s`));
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
let tasks;
|
|
33
|
+
if (options.my) {
|
|
34
|
+
tasks = await restClient.getMyTasks();
|
|
35
|
+
} else if (options.status) {
|
|
36
|
+
tasks = await restClient.getTasksByStatus(options.status);
|
|
37
|
+
} else {
|
|
38
|
+
tasks = await restClient.getAllTasks(options.refresh);
|
|
39
|
+
}
|
|
40
|
+
if (!tasks || tasks.length === 0) {
|
|
41
|
+
console.log(chalk.gray("No tasks found"));
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const limit = parseInt(options.limit);
|
|
45
|
+
const displayTasks = tasks.slice(0, limit);
|
|
46
|
+
console.log(chalk.cyan(`
|
|
47
|
+
\u{1F4CB} Linear Tasks (${displayTasks.length}/${tasks.length}):`));
|
|
48
|
+
displayTasks.forEach((task) => {
|
|
49
|
+
const priority = task.priority ? `P${task.priority}` : "";
|
|
50
|
+
const assignee = task.assignee ? ` @${task.assignee.name}` : "";
|
|
51
|
+
const statusColor = task.state.type === "completed" ? chalk.green : task.state.type === "started" ? chalk.yellow : chalk.gray;
|
|
52
|
+
console.log(`${chalk.blue(task.identifier)} ${task.title}`);
|
|
53
|
+
console.log(chalk.gray(` ${statusColor(task.state.name)} ${priority}${assignee}`));
|
|
54
|
+
});
|
|
55
|
+
const cacheStats = restClient.getCacheStats();
|
|
56
|
+
console.log(chalk.gray(`
|
|
57
|
+
${displayTasks.length} shown, ${tasks.length} total \u2022 Cache: ${Math.round(cacheStats.age / 1e3)}s old`));
|
|
58
|
+
} catch (error) {
|
|
59
|
+
console.error(
|
|
60
|
+
chalk.red("Failed to list tasks:"),
|
|
61
|
+
error.message
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
export {
|
|
67
|
+
registerLinearListCommand
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=linear-list.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/cli/commands/linear-list.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Simple Linear task list command using memory cache\n */\n\nimport chalk from 'chalk';\nimport { Command } from 'commander';\nimport { LinearRestClient } from '../../integrations/linear/rest-client.js';\n\nexport function registerLinearListCommand(parent: Command) {\n parent\n .command('linear:list')\n .alias('linear:ls')\n .description('List Linear tasks (fast, memory-cached)')\n .option('--limit <n>', 'Number of tasks to show', '20')\n .option('--status <status>', 'Filter by status (backlog, started, completed, etc.)')\n .option('--my', 'Show only tasks assigned to me')\n .option('--cache', 'Show cache stats only')\n .option('--refresh', 'Force refresh cache')\n .option('--count', 'Show count by status only')\n .action(async (options) => {\n try {\n const apiKey = process.env.LINEAR_API_KEY;\n if (!apiKey) {\n console.log(chalk.yellow('\u26A0 Set LINEAR_API_KEY environment variable'));\n return;\n }\n\n const restClient = new LinearRestClient(apiKey);\n\n // Show cache stats if requested\n if (options.cache) {\n const stats = restClient.getCacheStats();\n console.log(chalk.cyan('\uD83D\uDCCA Cache Stats:'));\n console.log(` Size: ${stats.size} tasks`);\n console.log(` Age: ${Math.round(stats.age / 1000)}s`);\n console.log(` Fresh: ${stats.fresh ? 'yes' : 'no'}`);\n console.log(` Last sync: ${new Date(stats.lastSync).toLocaleString()}`);\n return;\n }\n\n // Show counts only\n if (options.count) {\n const counts = await restClient.getTaskCounts();\n console.log(chalk.cyan('\uD83D\uDCCA Task Counts:'));\n Object.entries(counts)\n .sort(([,a], [,b]) => b - a)\n .forEach(([status, count]) => {\n console.log(` ${status}: ${count}`);\n });\n \n const cacheStats = restClient.getCacheStats();\n console.log(chalk.gray(`\\nCache: ${cacheStats.size} tasks, age: ${Math.round(cacheStats.age / 1000)}s`));\n return;\n }\n\n let tasks;\n if (options.my) {\n tasks = await restClient.getMyTasks();\n } else if (options.status) {\n tasks = await restClient.getTasksByStatus(options.status);\n } else {\n tasks = await restClient.getAllTasks(options.refresh);\n }\n\n if (!tasks || tasks.length === 0) {\n console.log(chalk.gray('No tasks found'));\n return;\n }\n\n // Limit results\n const limit = parseInt(options.limit);\n const displayTasks = tasks.slice(0, limit);\n\n console.log(chalk.cyan(`\\n\uD83D\uDCCB Linear Tasks (${displayTasks.length}/${tasks.length}):`));\n \n displayTasks.forEach((task) => {\n const priority = task.priority ? `P${task.priority}` : '';\n const assignee = task.assignee ? ` @${task.assignee.name}` : '';\n const statusColor = task.state.type === 'completed' ? chalk.green : \n task.state.type === 'started' ? chalk.yellow : chalk.gray;\n \n console.log(`${chalk.blue(task.identifier)} ${task.title}`);\n console.log(chalk.gray(` ${statusColor(task.state.name)} ${priority}${assignee}`));\n });\n\n const cacheStats = restClient.getCacheStats();\n console.log(chalk.gray(`\\n${displayTasks.length} shown, ${tasks.length} total \u2022 Cache: ${Math.round(cacheStats.age / 1000)}s old`));\n } catch (error) {\n console.error(\n chalk.red('Failed to list tasks:'),\n (error as Error).message\n );\n }\n });\n}"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["cacheStats"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { runMigration } from "../../integrations/linear/migration.js";
|
|
3
|
+
function registerLinearMigrateCommand(parent) {
|
|
4
|
+
parent.command("linear:migrate").description("Migrate STA- tasks from LiftCL to new Linear workspace").option("--source-key <key>", "Source workspace Linear API key").option("--target-key <key>", "Target workspace Linear API key").option("--dry-run", "Preview migration without making changes").option("--delete-source", "Delete tasks from source after successful migration").option("--batch-size <n>", "Number of tasks per batch", "3").option("--delay <ms>", "Delay between batches in milliseconds", "3000").action(async (options) => {
|
|
5
|
+
try {
|
|
6
|
+
const sourceKey = options.sourceKey || process.env.LINEAR_API_KEY;
|
|
7
|
+
const targetKey = options.targetKey;
|
|
8
|
+
if (!sourceKey) {
|
|
9
|
+
console.error(chalk.red("\u274C Source API key required. Use --source-key or set LINEAR_API_KEY"));
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
if (!targetKey) {
|
|
13
|
+
console.error(chalk.red("\u274C Target API key required. Use --target-key"));
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
console.log(chalk.blue("\u{1F680} Starting Linear Migration"));
|
|
17
|
+
console.log(chalk.gray(" This will migrate all STA- prefixed tasks"));
|
|
18
|
+
if (options.deleteSource) {
|
|
19
|
+
console.log(chalk.yellow(" \u26A0\uFE0F Tasks will be DELETED from source after migration"));
|
|
20
|
+
}
|
|
21
|
+
console.log();
|
|
22
|
+
await runMigration({
|
|
23
|
+
sourceApiKey: sourceKey,
|
|
24
|
+
targetApiKey: targetKey,
|
|
25
|
+
taskPrefix: "STA-",
|
|
26
|
+
deleteFromSource: options.deleteSource,
|
|
27
|
+
dryRun: options.dryRun,
|
|
28
|
+
batchSize: parseInt(options.batchSize),
|
|
29
|
+
delayMs: parseInt(options.delay)
|
|
30
|
+
});
|
|
31
|
+
} catch (error) {
|
|
32
|
+
console.error(chalk.red("Migration failed:"), error.message);
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
export {
|
|
38
|
+
registerLinearMigrateCommand
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=linear-migrate.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/cli/commands/linear-migrate.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Linear Migration Command\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { runMigration } from '../../integrations/linear/migration.js';\n\nexport function registerLinearMigrateCommand(parent: Command) {\n parent\n .command('linear:migrate')\n .description('Migrate STA- tasks from LiftCL to new Linear workspace')\n .option('--source-key <key>', 'Source workspace Linear API key')\n .option('--target-key <key>', 'Target workspace Linear API key') \n .option('--dry-run', 'Preview migration without making changes')\n .option('--delete-source', 'Delete tasks from source after successful migration')\n .option('--batch-size <n>', 'Number of tasks per batch', '3')\n .option('--delay <ms>', 'Delay between batches in milliseconds', '3000')\n .action(async (options) => {\n try {\n const sourceKey = options.sourceKey || process.env.LINEAR_API_KEY;\n const targetKey = options.targetKey;\n\n if (!sourceKey) {\n console.error(chalk.red('\u274C Source API key required. Use --source-key or set LINEAR_API_KEY'));\n return;\n }\n\n if (!targetKey) {\n console.error(chalk.red('\u274C Target API key required. Use --target-key'));\n return;\n }\n\n console.log(chalk.blue('\uD83D\uDE80 Starting Linear Migration'));\n console.log(chalk.gray(' This will migrate all STA- prefixed tasks'));\n if (options.deleteSource) {\n console.log(chalk.yellow(' \u26A0\uFE0F Tasks will be DELETED from source after migration'));\n }\n console.log();\n\n await runMigration({\n sourceApiKey: sourceKey,\n targetApiKey: targetKey,\n taskPrefix: 'STA-',\n deleteFromSource: options.deleteSource,\n dryRun: options.dryRun,\n batchSize: parseInt(options.batchSize),\n delayMs: parseInt(options.delay)\n });\n\n } catch (error) {\n console.error(chalk.red('Migration failed:'), (error as Error).message);\n process.exit(1);\n }\n });\n}"],
|
|
5
|
+
"mappings": "AAKA,OAAO,WAAW;AAClB,SAAS,oBAAoB;AAEtB,SAAS,6BAA6B,QAAiB;AAC5D,SACG,QAAQ,gBAAgB,EACxB,YAAY,wDAAwD,EACpE,OAAO,sBAAsB,iCAAiC,EAC9D,OAAO,sBAAsB,iCAAiC,EAC9D,OAAO,aAAa,0CAA0C,EAC9D,OAAO,mBAAmB,qDAAqD,EAC/E,OAAO,oBAAoB,6BAA6B,GAAG,EAC3D,OAAO,gBAAgB,yCAAyC,MAAM,EACtE,OAAO,OAAO,YAAY;AACzB,QAAI;AACF,YAAM,YAAY,QAAQ,aAAa,QAAQ,IAAI;AACnD,YAAM,YAAY,QAAQ;AAE1B,UAAI,CAAC,WAAW;AACd,gBAAQ,MAAM,MAAM,IAAI,wEAAmE,CAAC;AAC5F;AAAA,MACF;AAEA,UAAI,CAAC,WAAW;AACd,gBAAQ,MAAM,MAAM,IAAI,kDAA6C,CAAC;AACtE;AAAA,MACF;AAEA,cAAQ,IAAI,MAAM,KAAK,qCAA8B,CAAC;AACtD,cAAQ,IAAI,MAAM,KAAK,8CAA8C,CAAC;AACtE,UAAI,QAAQ,cAAc;AACxB,gBAAQ,IAAI,MAAM,OAAO,oEAA0D,CAAC;AAAA,MACtF;AACA,cAAQ,IAAI;AAEZ,YAAM,aAAa;AAAA,QACjB,cAAc;AAAA,QACd,cAAc;AAAA,QACd,YAAY;AAAA,QACZ,kBAAkB,QAAQ;AAAA,QAC1B,QAAQ,QAAQ;AAAA,QAChB,WAAW,SAAS,QAAQ,SAAS;AAAA,QACrC,SAAS,SAAS,QAAQ,KAAK;AAAA,MACjC,CAAC;AAAA,IAEH,SAAS,OAAO;AACd,cAAQ,MAAM,MAAM,IAAI,mBAAmB,GAAI,MAAgB,OAAO;AACtE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,CAAC;AACL;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|