@stackmemoryai/stackmemory 0.5.4 → 0.5.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/claude-sm +6 -0
- package/bin/claude-smd +6 -0
- package/dist/agents/core/agent-task-manager.js +4 -0
- package/dist/agents/core/agent-task-manager.js.map +1 -1
- package/dist/agents/testing-agent.js +4 -0
- package/dist/agents/testing-agent.js.map +1 -1
- package/dist/agents/verifiers/base-verifier.js +4 -0
- package/dist/agents/verifiers/base-verifier.js.map +1 -1
- package/dist/agents/verifiers/formatter-verifier.js +4 -0
- package/dist/agents/verifiers/formatter-verifier.js.map +1 -1
- package/dist/agents/verifiers/llm-judge.js +4 -0
- package/dist/agents/verifiers/llm-judge.js.map +1 -1
- package/dist/cli/auto-detect.js +4 -0
- package/dist/cli/auto-detect.js.map +1 -1
- package/dist/cli/browser-test.js +4 -0
- package/dist/cli/browser-test.js.map +1 -1
- package/dist/cli/claude-sm-danger.js +21 -0
- package/dist/cli/claude-sm-danger.js.map +7 -0
- package/dist/cli/claude-sm.js +4 -0
- package/dist/cli/claude-sm.js.map +2 -2
- package/dist/cli/codex-sm.js +4 -0
- package/dist/cli/codex-sm.js.map +1 -1
- package/dist/cli/commands/api.js +232 -0
- package/dist/cli/commands/api.js.map +7 -0
- package/dist/cli/commands/cleanup-processes.js +68 -0
- package/dist/cli/commands/cleanup-processes.js.map +7 -0
- package/dist/cli/commands/clear.js +4 -0
- package/dist/cli/commands/clear.js.map +1 -1
- package/dist/cli/commands/config.js +4 -0
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/context-rehydrate.js +4 -0
- package/dist/cli/commands/context-rehydrate.js.map +1 -1
- package/dist/cli/commands/context.js +4 -0
- package/dist/cli/commands/context.js.map +1 -1
- package/dist/cli/commands/dashboard.js +4 -0
- package/dist/cli/commands/dashboard.js.map +1 -1
- package/dist/cli/commands/db.js +4 -0
- package/dist/cli/commands/db.js.map +1 -1
- package/dist/cli/commands/decision.js +4 -0
- package/dist/cli/commands/decision.js.map +1 -1
- package/dist/cli/commands/handoff.js +4 -0
- package/dist/cli/commands/handoff.js.map +1 -1
- package/dist/cli/commands/hooks.js +298 -0
- package/dist/cli/commands/hooks.js.map +7 -0
- package/dist/cli/commands/linear-unified.js +4 -0
- package/dist/cli/commands/linear-unified.js.map +1 -1
- package/dist/cli/commands/linear.js +4 -0
- package/dist/cli/commands/linear.js.map +1 -1
- package/dist/cli/commands/log.js +4 -0
- package/dist/cli/commands/log.js.map +1 -1
- package/dist/cli/commands/login.js +4 -0
- package/dist/cli/commands/login.js.map +1 -1
- package/dist/cli/commands/migrate.js +4 -0
- package/dist/cli/commands/migrate.js.map +1 -1
- package/dist/cli/commands/monitor.js +4 -0
- package/dist/cli/commands/monitor.js.map +1 -1
- package/dist/cli/commands/onboard.js +4 -0
- package/dist/cli/commands/onboard.js.map +1 -1
- package/dist/cli/commands/projects.js +4 -0
- package/dist/cli/commands/projects.js.map +1 -1
- package/dist/cli/commands/quality.js +4 -0
- package/dist/cli/commands/quality.js.map +1 -1
- package/dist/cli/commands/ralph.js +4 -0
- package/dist/cli/commands/ralph.js.map +1 -1
- package/dist/cli/commands/search.js +4 -0
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/service.js +4 -0
- package/dist/cli/commands/service.js.map +1 -1
- package/dist/cli/commands/session.js +4 -0
- package/dist/cli/commands/session.js.map +1 -1
- package/dist/cli/commands/shell.js +249 -0
- package/dist/cli/commands/shell.js.map +7 -0
- package/dist/cli/commands/signup.js +4 -0
- package/dist/cli/commands/signup.js.map +1 -1
- package/dist/cli/commands/skills.js +4 -0
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/storage-tier.js +4 -0
- package/dist/cli/commands/storage-tier.js.map +1 -1
- package/dist/cli/commands/storage.js +4 -0
- package/dist/cli/commands/storage.js.map +1 -1
- package/dist/cli/commands/sweep.js +5 -4
- package/dist/cli/commands/sweep.js.map +2 -2
- package/dist/cli/commands/tasks.js +4 -0
- package/dist/cli/commands/tasks.js.map +1 -1
- package/dist/cli/commands/test.js +4 -0
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/commands/workflow.js +4 -0
- package/dist/cli/commands/workflow.js.map +1 -1
- package/dist/cli/commands/worktree.js +4 -0
- package/dist/cli/commands/worktree.js.map +1 -1
- package/dist/cli/index.js +13 -1
- package/dist/cli/index.js.map +2 -2
- package/dist/cli/utils/viewer.js +4 -0
- package/dist/cli/utils/viewer.js.map +1 -1
- package/dist/core/analytics/team-analytics.js +4 -0
- package/dist/core/analytics/team-analytics.js.map +1 -1
- package/dist/core/config/config-manager.js +4 -0
- package/dist/core/config/config-manager.js.map +1 -1
- package/dist/core/config/storage-config.js +4 -0
- package/dist/core/config/storage-config.js.map +1 -1
- package/dist/core/config/types.js +4 -0
- package/dist/core/config/types.js.map +1 -1
- package/dist/core/context/auto-context.js +4 -0
- package/dist/core/context/auto-context.js.map +1 -1
- package/dist/core/context/compaction-handler.js +4 -0
- package/dist/core/context/compaction-handler.js.map +1 -1
- package/dist/core/context/context-bridge.js +4 -0
- package/dist/core/context/context-bridge.js.map +1 -1
- package/dist/core/context/dual-stack-manager.js +4 -0
- package/dist/core/context/dual-stack-manager.js.map +1 -1
- package/dist/core/context/enhanced-rehydration.js +4 -0
- package/dist/core/context/enhanced-rehydration.js.map +1 -1
- package/dist/core/context/frame-database.js +4 -0
- package/dist/core/context/frame-database.js.map +1 -1
- package/dist/core/context/frame-digest.js +4 -0
- package/dist/core/context/frame-digest.js.map +1 -1
- package/dist/core/context/frame-handoff-manager.js +4 -0
- package/dist/core/context/frame-handoff-manager.js.map +1 -1
- package/dist/core/context/frame-manager.js +4 -0
- package/dist/core/context/frame-manager.js.map +1 -1
- package/dist/core/context/frame-stack.js +4 -0
- package/dist/core/context/frame-stack.js.map +1 -1
- package/dist/core/context/frame-types.js +4 -0
- package/dist/core/context/incremental-gc.js +4 -0
- package/dist/core/context/incremental-gc.js.map +1 -1
- package/dist/core/context/index.js +4 -0
- package/dist/core/context/index.js.map +1 -1
- package/dist/core/context/model-aware-compaction.js +4 -0
- package/dist/core/context/model-aware-compaction.js.map +1 -1
- package/dist/core/context/permission-manager.js +4 -0
- package/dist/core/context/permission-manager.js.map +1 -1
- package/dist/core/context/recursive-context-manager.js +4 -0
- package/dist/core/context/recursive-context-manager.js.map +1 -1
- package/dist/core/context/refactored-frame-manager.js +4 -0
- package/dist/core/context/refactored-frame-manager.js.map +1 -1
- package/dist/core/context/shared-context-layer.js +4 -0
- package/dist/core/context/shared-context-layer.js.map +1 -1
- package/dist/core/context/stack-merge-resolver.js +4 -0
- package/dist/core/context/stack-merge-resolver.js.map +1 -1
- package/dist/core/context/validation.js +4 -0
- package/dist/core/context/validation.js.map +1 -1
- package/dist/core/database/batch-operations.js +4 -0
- package/dist/core/database/batch-operations.js.map +1 -1
- package/dist/core/database/connection-pool.js +4 -0
- package/dist/core/database/connection-pool.js.map +1 -1
- package/dist/core/database/database-adapter.js +4 -0
- package/dist/core/database/database-adapter.js.map +1 -1
- package/dist/core/database/migration-manager.js +4 -0
- package/dist/core/database/migration-manager.js.map +1 -1
- package/dist/core/database/paradedb-adapter.js +4 -0
- package/dist/core/database/paradedb-adapter.js.map +1 -1
- package/dist/core/database/query-cache.js +4 -0
- package/dist/core/database/query-cache.js.map +1 -1
- package/dist/core/database/query-router.js +4 -0
- package/dist/core/database/query-router.js.map +1 -1
- package/dist/core/database/sqlite-adapter.js +4 -0
- package/dist/core/database/sqlite-adapter.js.map +1 -1
- package/dist/core/digest/enhanced-hybrid-digest.js +4 -0
- package/dist/core/digest/enhanced-hybrid-digest.js.map +1 -1
- package/dist/core/digest/frame-digest-integration.js +4 -0
- package/dist/core/digest/frame-digest-integration.js.map +1 -1
- package/dist/core/digest/hybrid-digest-generator.js +4 -0
- package/dist/core/digest/hybrid-digest-generator.js.map +1 -1
- package/dist/core/digest/index.js +4 -0
- package/dist/core/digest/index.js.map +1 -1
- package/dist/core/digest/types.js +4 -0
- package/dist/core/digest/types.js.map +1 -1
- package/dist/core/errors/index.js +4 -0
- package/dist/core/errors/index.js.map +1 -1
- package/dist/core/errors/recovery.js +4 -0
- package/dist/core/errors/recovery.js.map +1 -1
- package/dist/core/execution/parallel-executor.js +4 -0
- package/dist/core/execution/parallel-executor.js.map +1 -1
- package/dist/core/frame/workflow-templates.js +4 -0
- package/dist/core/frame/workflow-templates.js.map +1 -1
- package/dist/core/merge/conflict-detector.js +4 -0
- package/dist/core/merge/conflict-detector.js.map +1 -1
- package/dist/core/merge/index.js +4 -0
- package/dist/core/merge/index.js.map +1 -1
- package/dist/core/merge/resolution-engine.js +4 -0
- package/dist/core/merge/resolution-engine.js.map +1 -1
- package/dist/core/merge/stack-diff.js +4 -0
- package/dist/core/merge/stack-diff.js.map +1 -1
- package/dist/core/merge/types.js +4 -0
- package/dist/core/monitoring/error-handler.js +4 -0
- package/dist/core/monitoring/error-handler.js.map +1 -1
- package/dist/core/monitoring/logger.js +4 -0
- package/dist/core/monitoring/logger.js.map +1 -1
- package/dist/core/monitoring/metrics.js +4 -0
- package/dist/core/monitoring/metrics.js.map +1 -1
- package/dist/core/monitoring/progress-tracker.js +4 -0
- package/dist/core/monitoring/progress-tracker.js.map +1 -1
- package/dist/core/monitoring/session-monitor.js +4 -0
- package/dist/core/monitoring/session-monitor.js.map +1 -1
- package/dist/core/performance/context-cache.js +4 -0
- package/dist/core/performance/context-cache.js.map +1 -1
- package/dist/core/performance/index.js +4 -0
- package/dist/core/performance/index.js.map +1 -1
- package/dist/core/performance/lazy-context-loader.js +4 -0
- package/dist/core/performance/lazy-context-loader.js.map +1 -1
- package/dist/core/performance/monitor.js +4 -0
- package/dist/core/performance/monitor.js.map +1 -1
- package/dist/core/performance/optimized-frame-context.js +4 -0
- package/dist/core/performance/optimized-frame-context.js.map +1 -1
- package/dist/core/performance/performance-benchmark.js +4 -0
- package/dist/core/performance/performance-benchmark.js.map +1 -1
- package/dist/core/performance/performance-profiler.js +4 -0
- package/dist/core/performance/performance-profiler.js.map +1 -1
- package/dist/core/performance/streaming-jsonl-parser.js +4 -0
- package/dist/core/performance/streaming-jsonl-parser.js.map +1 -1
- package/dist/core/persistence/postgres-adapter.js +4 -0
- package/dist/core/persistence/postgres-adapter.js.map +1 -1
- package/dist/core/projects/project-isolation.js +4 -0
- package/dist/core/projects/project-isolation.js.map +1 -1
- package/dist/core/projects/project-manager.js +4 -0
- package/dist/core/projects/project-manager.js.map +1 -1
- package/dist/core/query/query-parser.js +4 -0
- package/dist/core/query/query-parser.js.map +1 -1
- package/dist/core/query/query-templates.js +4 -0
- package/dist/core/query/query-templates.js.map +1 -1
- package/dist/core/retrieval/context-retriever.js +4 -0
- package/dist/core/retrieval/context-retriever.js.map +1 -1
- package/dist/core/retrieval/graph-retrieval.js +4 -0
- package/dist/core/retrieval/graph-retrieval.js.map +1 -1
- package/dist/core/retrieval/hierarchical-retrieval.js +4 -0
- package/dist/core/retrieval/hierarchical-retrieval.js.map +1 -1
- package/dist/core/retrieval/index.js +4 -0
- package/dist/core/retrieval/index.js.map +1 -1
- package/dist/core/retrieval/llm-context-retrieval.js +4 -0
- package/dist/core/retrieval/llm-context-retrieval.js.map +1 -1
- package/dist/core/retrieval/retrieval-benchmarks.js +4 -0
- package/dist/core/retrieval/retrieval-benchmarks.js.map +1 -1
- package/dist/core/retrieval/summary-generator.js +4 -0
- package/dist/core/retrieval/summary-generator.js.map +1 -1
- package/dist/core/retrieval/types.js +4 -0
- package/dist/core/retrieval/types.js.map +1 -1
- package/dist/core/session/clear-survival.js +4 -0
- package/dist/core/session/clear-survival.js.map +1 -1
- package/dist/core/session/enhanced-handoff.js +4 -0
- package/dist/core/session/enhanced-handoff.js.map +1 -1
- package/dist/core/session/handoff-generator.js +4 -0
- package/dist/core/session/handoff-generator.js.map +1 -1
- package/dist/core/session/index.js +4 -0
- package/dist/core/session/index.js.map +1 -1
- package/dist/core/session/session-manager.js +4 -0
- package/dist/core/session/session-manager.js.map +1 -1
- package/dist/core/skills/index.js +4 -0
- package/dist/core/skills/index.js.map +1 -1
- package/dist/core/skills/skill-storage.js +4 -0
- package/dist/core/skills/skill-storage.js.map +1 -1
- package/dist/core/skills/types.js +4 -0
- package/dist/core/skills/types.js.map +1 -1
- package/dist/core/storage/chromadb-adapter.js +4 -0
- package/dist/core/storage/chromadb-adapter.js.map +1 -1
- package/dist/core/storage/infinite-storage.js +4 -0
- package/dist/core/storage/infinite-storage.js.map +1 -1
- package/dist/core/storage/railway-optimized-storage.js +4 -0
- package/dist/core/storage/railway-optimized-storage.js.map +1 -1
- package/dist/core/storage/remote-storage.js +4 -0
- package/dist/core/storage/remote-storage.js.map +1 -1
- package/dist/core/storage/two-tier-storage.js +4 -0
- package/dist/core/storage/two-tier-storage.js.map +1 -1
- package/dist/core/trace/cli-trace-wrapper.js +4 -0
- package/dist/core/trace/cli-trace-wrapper.js.map +1 -1
- package/dist/core/trace/db-trace-wrapper.js +4 -0
- package/dist/core/trace/db-trace-wrapper.js.map +1 -1
- package/dist/core/trace/debug-trace.js +4 -0
- package/dist/core/trace/debug-trace.js.map +1 -1
- package/dist/core/trace/index.js +4 -0
- package/dist/core/trace/index.js.map +1 -1
- package/dist/core/trace/linear-api-wrapper.js +4 -0
- package/dist/core/trace/linear-api-wrapper.js.map +1 -1
- package/dist/core/trace/trace-demo.js +4 -0
- package/dist/core/trace/trace-demo.js.map +1 -1
- package/dist/core/trace/trace-detector.demo.js +4 -0
- package/dist/core/trace/trace-detector.demo.js.map +1 -1
- package/dist/core/trace/trace-detector.js +4 -0
- package/dist/core/trace/trace-detector.js.map +1 -1
- package/dist/core/trace/trace-store.js +4 -0
- package/dist/core/trace/trace-store.js.map +1 -1
- package/dist/core/trace/types.js +4 -0
- package/dist/core/trace/types.js.map +1 -1
- package/dist/core/types.js +4 -0
- package/dist/core/utils/compression.js +4 -0
- package/dist/core/utils/compression.js.map +1 -1
- package/dist/core/utils/update-checker.js +4 -0
- package/dist/core/utils/update-checker.js.map +1 -1
- package/dist/core/worktree/worktree-manager.js +4 -0
- package/dist/core/worktree/worktree-manager.js.map +1 -1
- package/dist/daemon/session-daemon.js +4 -0
- package/dist/daemon/session-daemon.js.map +1 -1
- package/dist/features/analytics/api/analytics-api.js +4 -0
- package/dist/features/analytics/api/analytics-api.js.map +1 -1
- package/dist/features/analytics/core/analytics-service.js +4 -0
- package/dist/features/analytics/core/analytics-service.js.map +1 -1
- package/dist/features/analytics/index.js +4 -0
- package/dist/features/analytics/index.js.map +1 -1
- package/dist/features/analytics/queries/metrics-queries.js +4 -0
- package/dist/features/analytics/queries/metrics-queries.js.map +1 -1
- package/dist/features/analytics/types/metrics.js +4 -0
- package/dist/features/browser/browser-mcp.js +4 -0
- package/dist/features/browser/browser-mcp.js.map +1 -1
- package/dist/features/tasks/linear-task-manager.js +4 -0
- package/dist/features/tasks/linear-task-manager.js.map +1 -1
- package/dist/features/tasks/task-aware-context.js +4 -0
- package/dist/features/tasks/task-aware-context.js.map +1 -1
- package/dist/features/tui/simple-monitor.js +4 -0
- package/dist/features/tui/simple-monitor.js.map +1 -1
- package/dist/features/tui/swarm-monitor.js +4 -0
- package/dist/features/tui/swarm-monitor.js.map +1 -1
- package/dist/features/web/client/stores/task-store.js +4 -0
- package/dist/features/web/client/stores/task-store.js.map +1 -1
- package/dist/features/web/server/index.js +4 -0
- package/dist/features/web/server/index.js.map +1 -1
- package/dist/hooks/config.js +150 -0
- package/dist/hooks/config.js.map +7 -0
- package/dist/hooks/daemon.js +364 -0
- package/dist/hooks/daemon.js.map +7 -0
- package/dist/hooks/events.js +55 -0
- package/dist/hooks/events.js.map +7 -0
- package/dist/hooks/index.js +8 -0
- package/dist/hooks/index.js.map +7 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/integrations/anthropic/client.js +4 -0
- package/dist/integrations/anthropic/client.js.map +1 -1
- package/dist/integrations/claude-code/agent-bridge.js +4 -0
- package/dist/integrations/claude-code/agent-bridge.js.map +1 -1
- package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js +4 -0
- package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js.map +1 -1
- package/dist/integrations/claude-code/lifecycle-hooks.js +4 -0
- package/dist/integrations/claude-code/lifecycle-hooks.js.map +1 -1
- package/dist/integrations/claude-code/post-task-hooks.js +4 -0
- package/dist/integrations/claude-code/post-task-hooks.js.map +1 -1
- package/dist/integrations/claude-code/subagent-client-stub.js +4 -0
- package/dist/integrations/claude-code/subagent-client-stub.js.map +1 -1
- package/dist/integrations/claude-code/subagent-client.js +4 -0
- package/dist/integrations/claude-code/subagent-client.js.map +1 -1
- package/dist/integrations/claude-code/task-coordinator.js +4 -0
- package/dist/integrations/claude-code/task-coordinator.js.map +1 -1
- package/dist/integrations/linear/auth.js +4 -0
- package/dist/integrations/linear/auth.js.map +1 -1
- package/dist/integrations/linear/auto-sync.js +4 -0
- package/dist/integrations/linear/auto-sync.js.map +1 -1
- package/dist/integrations/linear/client.js +4 -0
- package/dist/integrations/linear/client.js.map +1 -1
- package/dist/integrations/linear/config.js +4 -0
- package/dist/integrations/linear/config.js.map +1 -1
- package/dist/integrations/linear/migration.js +4 -0
- package/dist/integrations/linear/migration.js.map +1 -1
- package/dist/integrations/linear/oauth-server.js +4 -0
- package/dist/integrations/linear/oauth-server.js.map +1 -1
- package/dist/integrations/linear/rest-client.js +4 -0
- package/dist/integrations/linear/rest-client.js.map +1 -1
- package/dist/integrations/linear/sync-manager.js +4 -0
- package/dist/integrations/linear/sync-manager.js.map +1 -1
- package/dist/integrations/linear/sync-service.js +4 -0
- package/dist/integrations/linear/sync-service.js.map +1 -1
- package/dist/integrations/linear/sync.js +4 -0
- package/dist/integrations/linear/sync.js.map +1 -1
- package/dist/integrations/linear/types.js +4 -0
- package/dist/integrations/linear/unified-sync.js +4 -0
- package/dist/integrations/linear/unified-sync.js.map +1 -1
- package/dist/integrations/linear/webhook-handler.js +4 -0
- package/dist/integrations/linear/webhook-handler.js.map +1 -1
- package/dist/integrations/linear/webhook-server.js +4 -0
- package/dist/integrations/linear/webhook-server.js.map +1 -1
- package/dist/integrations/linear/webhook.js +4 -0
- package/dist/integrations/linear/webhook.js.map +1 -1
- package/dist/integrations/mcp/handlers/code-execution-handlers.js +4 -0
- package/dist/integrations/mcp/handlers/code-execution-handlers.js.map +1 -1
- package/dist/integrations/mcp/handlers/context-handlers.js +4 -0
- package/dist/integrations/mcp/handlers/context-handlers.js.map +1 -1
- package/dist/integrations/mcp/handlers/index.js +4 -0
- package/dist/integrations/mcp/handlers/index.js.map +1 -1
- package/dist/integrations/mcp/handlers/linear-handlers.js +4 -0
- package/dist/integrations/mcp/handlers/linear-handlers.js.map +1 -1
- package/dist/integrations/mcp/handlers/skill-handlers.js +4 -0
- package/dist/integrations/mcp/handlers/skill-handlers.js.map +1 -1
- package/dist/integrations/mcp/handlers/task-handlers.js +4 -0
- package/dist/integrations/mcp/handlers/task-handlers.js.map +1 -1
- package/dist/integrations/mcp/handlers/trace-handlers.js +4 -0
- package/dist/integrations/mcp/handlers/trace-handlers.js.map +1 -1
- package/dist/integrations/mcp/index.js +4 -0
- package/dist/integrations/mcp/index.js.map +1 -1
- package/dist/integrations/mcp/middleware/tool-scoring.js +4 -0
- package/dist/integrations/mcp/middleware/tool-scoring.js.map +1 -1
- package/dist/integrations/mcp/refactored-server.js +4 -0
- package/dist/integrations/mcp/refactored-server.js.map +1 -1
- package/dist/integrations/mcp/server.js +4 -0
- package/dist/integrations/mcp/server.js.map +1 -1
- package/dist/integrations/mcp/tool-definitions-code.js +4 -0
- package/dist/integrations/mcp/tool-definitions-code.js.map +1 -1
- package/dist/integrations/mcp/tool-definitions.js +4 -0
- package/dist/integrations/mcp/tool-definitions.js.map +1 -1
- package/dist/integrations/mcp/trace-test.js +4 -0
- package/dist/integrations/mcp/trace-test.js.map +1 -1
- package/dist/integrations/pg-aiguide/embedding-provider.js +4 -0
- package/dist/integrations/pg-aiguide/embedding-provider.js.map +1 -1
- package/dist/integrations/pg-aiguide/semantic-search.js +4 -0
- package/dist/integrations/pg-aiguide/semantic-search.js.map +1 -1
- package/dist/integrations/pg-aiguide/timescale-analytics.js +4 -0
- package/dist/integrations/pg-aiguide/timescale-analytics.js.map +1 -1
- package/dist/integrations/ralph/bridge/ralph-stackmemory-bridge.js +4 -0
- package/dist/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +1 -1
- package/dist/integrations/ralph/context/context-budget-manager.js +4 -0
- package/dist/integrations/ralph/context/context-budget-manager.js.map +1 -1
- package/dist/integrations/ralph/context/stackmemory-context-loader.js +4 -0
- package/dist/integrations/ralph/context/stackmemory-context-loader.js.map +1 -1
- package/dist/integrations/ralph/coordination/enhanced-coordination.js +4 -0
- package/dist/integrations/ralph/coordination/enhanced-coordination.js.map +1 -1
- package/dist/integrations/ralph/index.js +4 -0
- package/dist/integrations/ralph/index.js.map +1 -1
- package/dist/integrations/ralph/learning/pattern-learner.js +4 -0
- package/dist/integrations/ralph/learning/pattern-learner.js.map +1 -1
- package/dist/integrations/ralph/lifecycle/iteration-lifecycle.js +4 -0
- package/dist/integrations/ralph/lifecycle/iteration-lifecycle.js.map +1 -1
- package/dist/integrations/ralph/monitoring/swarm-dashboard.js +4 -0
- package/dist/integrations/ralph/monitoring/swarm-dashboard.js.map +1 -1
- package/dist/integrations/ralph/monitoring/swarm-registry.js +4 -0
- package/dist/integrations/ralph/monitoring/swarm-registry.js.map +1 -1
- package/dist/integrations/ralph/orchestration/multi-loop-orchestrator.js +4 -0
- package/dist/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +1 -1
- package/dist/integrations/ralph/patterns/compounding-engineering-pattern.js +4 -0
- package/dist/integrations/ralph/patterns/compounding-engineering-pattern.js.map +1 -1
- package/dist/integrations/ralph/patterns/extended-coherence-sessions.js +4 -0
- package/dist/integrations/ralph/patterns/extended-coherence-sessions.js.map +1 -1
- package/dist/integrations/ralph/patterns/oracle-worker-pattern.js +4 -0
- package/dist/integrations/ralph/patterns/oracle-worker-pattern.js.map +1 -1
- package/dist/integrations/ralph/performance/performance-optimizer.js +4 -0
- package/dist/integrations/ralph/performance/performance-optimizer.js.map +1 -1
- package/dist/integrations/ralph/ralph-integration-demo.js +4 -0
- package/dist/integrations/ralph/ralph-integration-demo.js.map +1 -1
- package/dist/integrations/ralph/recovery/crash-recovery.js +4 -0
- package/dist/integrations/ralph/recovery/crash-recovery.js.map +1 -1
- package/dist/integrations/ralph/state/state-reconciler.js +4 -0
- package/dist/integrations/ralph/state/state-reconciler.js.map +1 -1
- package/dist/integrations/ralph/swarm/git-workflow-manager.js +4 -0
- package/dist/integrations/ralph/swarm/git-workflow-manager.js.map +1 -1
- package/dist/integrations/ralph/swarm/swarm-coordinator.js +4 -0
- package/dist/integrations/ralph/swarm/swarm-coordinator.js.map +1 -1
- package/dist/integrations/ralph/types.js +4 -0
- package/dist/integrations/ralph/visualization/ralph-debugger.js +4 -0
- package/dist/integrations/ralph/visualization/ralph-debugger.js.map +1 -1
- package/dist/mcp/stackmemory-mcp-server.js +4 -0
- package/dist/mcp/stackmemory-mcp-server.js.map +1 -1
- package/dist/middleware/exponential-rate-limiter.js +4 -0
- package/dist/middleware/exponential-rate-limiter.js.map +1 -1
- package/dist/models/user.model.js +4 -0
- package/dist/models/user.model.js.map +1 -1
- package/dist/servers/production/auth-middleware.js +4 -0
- package/dist/servers/production/auth-middleware.js.map +1 -1
- package/dist/servers/railway/config.js +4 -0
- package/dist/servers/railway/config.js.map +1 -1
- package/dist/servers/railway/index-enhanced.js +4 -0
- package/dist/servers/railway/index-enhanced.js.map +1 -1
- package/dist/servers/railway/index.js +4 -0
- package/dist/servers/railway/index.js.map +1 -1
- package/dist/servers/railway/simple.js +4 -0
- package/dist/servers/railway/simple.js.map +1 -1
- package/dist/servers/railway/storage-test.js +4 -0
- package/dist/servers/railway/storage-test.js.map +1 -1
- package/dist/services/config-service.js +4 -0
- package/dist/services/config-service.js.map +1 -1
- package/dist/services/context-service.js +4 -0
- package/dist/services/context-service.js.map +1 -1
- package/dist/skills/api-discovery.js +353 -0
- package/dist/skills/api-discovery.js.map +7 -0
- package/dist/skills/api-skill.js +475 -0
- package/dist/skills/api-skill.js.map +7 -0
- package/dist/skills/claude-skills.js +53 -1
- package/dist/skills/claude-skills.js.map +2 -2
- package/dist/skills/dashboard-launcher.js +4 -0
- package/dist/skills/dashboard-launcher.js.map +1 -1
- package/dist/skills/recursive-agent-orchestrator.js +4 -0
- package/dist/skills/recursive-agent-orchestrator.js.map +1 -1
- package/dist/skills/repo-ingestion-skill.js +4 -0
- package/dist/skills/repo-ingestion-skill.js.map +1 -1
- package/dist/skills/security-secrets-scanner.js +4 -0
- package/dist/skills/security-secrets-scanner.js.map +1 -1
- package/dist/skills/unified-rlm-orchestrator.js +4 -0
- package/dist/skills/unified-rlm-orchestrator.js.map +1 -1
- package/dist/types/task.js +4 -0
- package/dist/utils/env.js +4 -0
- package/dist/utils/env.js.map +1 -1
- package/dist/utils/formatting.js +4 -0
- package/dist/utils/formatting.js.map +1 -1
- package/dist/utils/process-cleanup.js +136 -0
- package/dist/utils/process-cleanup.js.map +7 -0
- package/dist/validation/schemas.js +4 -0
- package/dist/validation/schemas.js.map +1 -1
- package/package.json +4 -2
- package/templates/shell/sweep-complete.zsh +116 -0
- package/templates/shell/sweep-suggest.js +161 -0
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/cli/commands/decision.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * Decision capture command - Records key decisions for handoff context\n *\n * Usage:\n * stackmemory decision add \"Use SQLite as default\" --why \"Zero dependencies, faster onboarding\"\n * stackmemory decision list\n * stackmemory decision clear\n */\n\nimport { Command } from 'commander';\nimport {\n existsSync,\n readFileSync,\n writeFileSync,\n mkdirSync,\n readdirSync,\n} from 'fs';\nimport { join, basename } from 'path';\nimport { homedir } from 'os';\nimport { createHash } from 'crypto';\n\ninterface Decision {\n id: string;\n what: string;\n why: string;\n alternatives?: string[];\n timestamp: string;\n category?: string;\n}\n\ninterface DecisionStore {\n decisions: Decision[];\n sessionStart: string;\n}\n\nfunction getDecisionStorePath(projectRoot: string): string {\n return join(projectRoot, '.stackmemory', 'session-decisions.json');\n}\n\nfunction getProjectId(projectRoot: string): string {\n const hash = createHash('sha256').update(projectRoot).digest('hex');\n return hash.slice(0, 12);\n}\n\nfunction getHistoryDir(): string {\n return join(homedir(), '.stackmemory', 'decision-history');\n}\n\nfunction archiveDecisions(projectRoot: string, decisions: Decision[]): void {\n if (decisions.length === 0) return;\n\n const historyDir = getHistoryDir();\n const projectId = getProjectId(projectRoot);\n const projectDir = join(historyDir, projectId);\n\n if (!existsSync(projectDir)) {\n mkdirSync(projectDir, { recursive: true });\n }\n\n // Save with timestamp\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n const archivePath = join(projectDir, `${timestamp}.json`);\n\n const archive = {\n projectRoot,\n projectName: basename(projectRoot),\n archivedAt: new Date().toISOString(),\n decisions,\n };\n\n writeFileSync(archivePath, JSON.stringify(archive, null, 2));\n}\n\ninterface HistoricalDecision extends Decision {\n projectName: string;\n archivedAt: string;\n}\n\nfunction loadDecisionHistory(projectRoot?: string): HistoricalDecision[] {\n const historyDir = getHistoryDir();\n if (!existsSync(historyDir)) return [];\n\n const allDecisions: HistoricalDecision[] = [];\n\n try {\n const projectDirs = projectRoot\n ? [getProjectId(projectRoot)]\n : readdirSync(historyDir);\n\n for (const projectId of projectDirs) {\n const projectDir = join(historyDir, projectId);\n if (!existsSync(projectDir)) continue;\n\n try {\n const files = readdirSync(projectDir).filter((f) =>\n f.endsWith('.json')\n );\n for (const file of files) {\n try {\n const content = JSON.parse(\n readFileSync(join(projectDir, file), 'utf-8')\n );\n for (const d of content.decisions || []) {\n allDecisions.push({\n ...d,\n projectName: content.projectName || 'unknown',\n archivedAt: content.archivedAt,\n });\n }\n } catch {\n // Skip invalid files\n }\n }\n } catch {\n // Skip unreadable directories\n }\n }\n } catch {\n // History dir unreadable\n }\n\n // Sort by timestamp descending\n return allDecisions.sort(\n (a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime()\n );\n}\n\nfunction loadDecisions(projectRoot: string): DecisionStore {\n const storePath = getDecisionStorePath(projectRoot);\n if (existsSync(storePath)) {\n try {\n return JSON.parse(readFileSync(storePath, 'utf-8'));\n } catch {\n // Invalid file, start fresh\n }\n }\n return {\n decisions: [],\n sessionStart: new Date().toISOString(),\n };\n}\n\nfunction saveDecisions(projectRoot: string, store: DecisionStore): void {\n const storePath = getDecisionStorePath(projectRoot);\n const dir = join(projectRoot, '.stackmemory');\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n writeFileSync(storePath, JSON.stringify(store, null, 2));\n}\n\nexport function createDecisionCommand(): Command {\n const cmd = new Command('decision');\n cmd.description('Capture key decisions for session handoff context');\n\n // Add a decision\n cmd\n .command('add <what>')\n .description('Record a decision made during this session')\n .option('-w, --why <rationale>', 'Why this decision was made')\n .option(\n '-a, --alternatives <alts>',\n 'Comma-separated alternatives considered'\n )\n .option(\n '-c, --category <category>',\n 'Category (architecture, tooling, approach, etc.)'\n )\n .action((what, options) => {\n const projectRoot = process.cwd();\n const store = loadDecisions(projectRoot);\n\n const decision: Decision = {\n id: `d-${Date.now()}`,\n what,\n why: options.why || '',\n alternatives: options.alternatives\n ?.split(',')\n .map((a: string) => a.trim()),\n timestamp: new Date().toISOString(),\n category: options.category,\n };\n\n store.decisions.push(decision);\n saveDecisions(projectRoot, store);\n\n console.log('Decision recorded:');\n console.log(` What: ${decision.what}`);\n if (decision.why) {\n console.log(` Why: ${decision.why}`);\n }\n if (decision.alternatives) {\n console.log(` Alternatives: ${decision.alternatives.join(', ')}`);\n }\n console.log(`\\nTotal decisions this session: ${store.decisions.length}`);\n });\n\n // List decisions\n cmd\n .command('list')\n .description('List all decisions from this session')\n .option('--json', 'Output as JSON')\n .option('--history', 'Include historical decisions')\n .option('--all', 'Show all projects (with --history)')\n .action((options) => {\n const projectRoot = process.cwd();\n const store = loadDecisions(projectRoot);\n\n if (options.history) {\n const history = loadDecisionHistory(\n options.all ? undefined : projectRoot\n );\n\n if (options.json) {\n console.log(JSON.stringify(history, null, 2));\n return;\n }\n\n if (history.length === 0) {\n console.log('No decision history found.');\n return;\n }\n\n console.log(`Decision History (${history.length}):\\n`);\n for (const d of history.slice(0, 50)) {\n const category = d.category ? `[${d.category}] ` : '';\n const project = options.all ? `(${d.projectName}) ` : '';\n console.log(`${project}${category}${d.what}`);\n if (d.why) {\n console.log(` Rationale: ${d.why}`);\n }\n const date = new Date(d.timestamp).toLocaleDateString();\n console.log(` Date: ${date}`);\n console.log('');\n }\n return;\n }\n\n if (options.json) {\n console.log(JSON.stringify(store.decisions, null, 2));\n return;\n }\n\n if (store.decisions.length === 0) {\n console.log('No decisions recorded this session.');\n console.log('\\nRecord decisions with:');\n console.log(' stackmemory decision add \"Decision\" --why \"Rationale\"');\n return;\n }\n\n console.log(`Session Decisions (${store.decisions.length}):\\n`);\n for (const d of store.decisions) {\n const category = d.category ? `[${d.category}] ` : '';\n console.log(`${category}${d.what}`);\n if (d.why) {\n console.log(` Rationale: ${d.why}`);\n }\n if (d.alternatives && d.alternatives.length > 0) {\n console.log(` Alternatives: ${d.alternatives.join(', ')}`);\n }\n console.log('');\n }\n });\n\n // Clear decisions (for new session)\n cmd\n .command('clear')\n .description('Clear all decisions (archives to history first)')\n .option('--force', 'Skip confirmation')\n .option('--no-archive', 'Do not archive decisions')\n .action((options) => {\n const projectRoot = process.cwd();\n const store = loadDecisions(projectRoot);\n\n if (store.decisions.length === 0) {\n console.log('No decisions to clear.');\n return;\n }\n\n if (!options.force) {\n console.log(`This will clear ${store.decisions.length} decisions.`);\n console.log('Decisions will be archived to history.');\n console.log('Use --force to confirm.');\n return;\n }\n\n // Archive before clearing (unless --no-archive)\n if (options.archive !== false) {\n archiveDecisions(projectRoot, store.decisions);\n console.log(`Archived ${store.decisions.length} decisions to history.`);\n }\n\n const newStore: DecisionStore = {\n decisions: [],\n sessionStart: new Date().toISOString(),\n };\n saveDecisions(projectRoot, newStore);\n console.log('Decisions cleared. New session started.');\n });\n\n // Quick capture common decision types\n cmd\n .command('arch <description>')\n .description('Record an architecture decision')\n .option('-w, --why <rationale>', 'Why this architecture choice')\n .action((description, options) => {\n const projectRoot = process.cwd();\n const store = loadDecisions(projectRoot);\n\n const decision: Decision = {\n id: `d-${Date.now()}`,\n what: description,\n why: options.why || '',\n timestamp: new Date().toISOString(),\n category: 'architecture',\n };\n\n store.decisions.push(decision);\n saveDecisions(projectRoot, store);\n\n console.log(`Architecture decision recorded: ${description}`);\n });\n\n cmd\n .command('tool <description>')\n .description('Record a tooling decision')\n .option('-w, --why <rationale>', 'Why this tool choice')\n .action((description, options) => {\n const projectRoot = process.cwd();\n const store = loadDecisions(projectRoot);\n\n const decision: Decision = {\n id: `d-${Date.now()}`,\n what: description,\n why: options.why || '',\n timestamp: new Date().toISOString(),\n category: 'tooling',\n };\n\n store.decisions.push(decision);\n saveDecisions(projectRoot, store);\n\n console.log(`Tooling decision recorded: ${description}`);\n });\n\n return cmd;\n}\n\n// Export for use in enhanced handoff\nexport function getSessionDecisions(projectRoot: string): Decision[] {\n const store = loadDecisions(projectRoot);\n return store.decisions;\n}\n\n// Alias: \"memory\" command (same as decision)\nexport function createMemoryCommand(): Command {\n const cmd = createDecisionCommand();\n // Change command name to \"memory\" but keep all subcommands\n return new Command('memory')\n .description('Store memories for session context (alias for decision)')\n .addCommand(\n cmd.commands.find((c) => c.name() === 'add')!.copyInheritedSettings(cmd)\n )\n .addCommand(\n cmd.commands.find((c) => c.name() === 'list')!.copyInheritedSettings(cmd)\n )\n .addCommand(\n cmd.commands.find((c) => c.name() === 'clear')!.copyInheritedSettings(cmd)\n )\n .addCommand(\n cmd.commands.find((c) => c.name() === 'arch')!.copyInheritedSettings(cmd)\n )\n .addCommand(\n cmd.commands.find((c) => c.name() === 'tool')!.copyInheritedSettings(cmd)\n );\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
2
|
+
import { dirname as __pathDirname } from 'path';
|
|
3
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
4
|
+
const __dirname = __pathDirname(__filename);
|
|
1
5
|
import { Command } from "commander";
|
|
2
6
|
import { execSync, execFileSync } from "child_process";
|
|
3
7
|
import {
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/cli/commands/handoff.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * Handoff command - Commits work and generates a prompt for the next session\n */\n\nimport { Command } from 'commander';\nimport { execSync, execFileSync } from 'child_process';\nimport {\n existsSync,\n readFileSync,\n writeFileSync,\n mkdirSync,\n readdirSync,\n unlinkSync,\n} from 'fs';\nimport { join } from 'path';\nimport Database from 'better-sqlite3';\nimport { z } from 'zod';\nimport { FrameManager } from '../../core/context/frame-manager.js';\nimport { LinearTaskManager } from '../../features/tasks/linear-task-manager.js';\nimport { logger } from '../../core/monitoring/logger.js';\nimport { EnhancedHandoffGenerator } from '../../core/session/enhanced-handoff.js';\n\n// Handoff versioning - keep last N handoffs\nconst MAX_HANDOFF_VERSIONS = 10;\n\nfunction saveVersionedHandoff(\n projectRoot: string,\n branch: string,\n content: string\n): string {\n const handoffsDir = join(projectRoot, '.stackmemory', 'handoffs');\n if (!existsSync(handoffsDir)) {\n mkdirSync(handoffsDir, { recursive: true });\n }\n\n // Generate versioned filename: YYYY-MM-DD-HH-mm-branch.md\n const now = new Date();\n const timestamp = now.toISOString().slice(0, 16).replace(/[T:]/g, '-');\n const safeBranch = branch.replace(/[^a-zA-Z0-9-]/g, '-').slice(0, 30);\n const filename = `${timestamp}-${safeBranch}.md`;\n const versionedPath = join(handoffsDir, filename);\n\n // Save versioned handoff\n writeFileSync(versionedPath, content);\n\n // Clean up old handoffs (keep last N)\n try {\n const files = readdirSync(handoffsDir)\n .filter((f) => f.endsWith('.md'))\n .sort()\n .reverse();\n\n for (const oldFile of files.slice(MAX_HANDOFF_VERSIONS)) {\n unlinkSync(join(handoffsDir, oldFile));\n }\n } catch {\n // Cleanup failed, not critical\n }\n\n return versionedPath;\n}\n\n// Input validation schemas\nconst CommitMessageSchema = z\n .string()\n .min(1, 'Commit message cannot be empty')\n .max(200, 'Commit message too long')\n .regex(\n /^[a-zA-Z0-9\\s\\-_.,:()\\/\\[\\]]+$/,\n 'Commit message contains invalid characters'\n )\n .refine(\n (msg) => !msg.includes('\\n'),\n 'Commit message cannot contain newlines'\n )\n .refine(\n (msg) => !msg.includes('\"'),\n 'Commit message cannot contain double quotes'\n )\n .refine(\n (msg) => !msg.includes('`'),\n 'Commit message cannot contain backticks'\n );\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 .option('--basic', 'Use basic handoff format instead of enhanced')\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 {\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 let commitMessage =\n options.message ||\n `chore: handoff checkpoint on ${currentBranch}`;\n\n // Validate commit message\n try {\n commitMessage = CommitMessageSchema.parse(commitMessage);\n } catch (validationError) {\n console.error(\n '\u274C Invalid commit message:',\n (validationError as Error).message\n );\n return;\n }\n\n // Commit using execFileSync for safety\n execFileSync('git', ['commit', '-m', commitMessage], {\n cwd: projectRoot,\n stdio: 'inherit',\n });\n\n console.log(`\u2705 Committed changes: \"${commitMessage}\"`);\n console.log(` Branch: ${currentBranch}`);\n } catch (err: unknown) {\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 LinearTaskManager(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 {\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 let handoffPrompt: string;\n\n if (options.basic) {\n // Use basic handoff format\n const timestamp = new Date().toISOString();\n 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 } else {\n // Use high-efficacy enhanced handoff generator (default)\n const enhancedGenerator = new EnhancedHandoffGenerator(projectRoot);\n const enhancedHandoff = await enhancedGenerator.generate();\n handoffPrompt = enhancedGenerator.toMarkdown(enhancedHandoff);\n console.log(`Estimated tokens: ~${enhancedHandoff.estimatedTokens}`);\n }\n\n // 7. Save handoff prompt (both latest and versioned)\n const handoffPath = join(\n projectRoot,\n '.stackmemory',\n 'last-handoff.md'\n );\n writeFileSync(handoffPath, handoffPrompt);\n\n // Save versioned copy\n let branch = 'unknown';\n try {\n branch = execSync('git rev-parse --abbrev-ref HEAD', {\n encoding: 'utf-8',\n cwd: projectRoot,\n }).trim();\n } catch {\n // Not a git repo\n }\n const versionedPath = saveVersionedHandoff(\n projectRoot,\n branch,\n handoffPrompt\n );\n console.log(\n `Versioned: ${versionedPath.split('/').slice(-2).join('/')}`\n );\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 // Use execFileSync with predefined commands for safety\n if (process.platform === 'darwin') {\n execFileSync('pbcopy', [], {\n input: handoffPrompt,\n cwd: projectRoot,\n });\n } else if (process.platform === 'win32') {\n execFileSync('clip', [], {\n input: handoffPrompt,\n cwd: projectRoot,\n });\n } else {\n execFileSync('xclip', ['-selection', 'clipboard'], {\n input: handoffPrompt,\n cwd: projectRoot,\n });\n }\n\n console.log('\\n\u2705 Handoff prompt copied to clipboard!');\n } catch {\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: unknown) {\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 {\n // Not a git repo\n }\n\n // Copy to clipboard unless disabled\n if (options.copy !== false) {\n try {\n // Use execFileSync with predefined commands for safety\n if (process.platform === 'darwin') {\n execFileSync('pbcopy', [], {\n input: handoffPrompt,\n cwd: projectRoot,\n });\n } else if (process.platform === 'win32') {\n execFileSync('clip', [], {\n input: handoffPrompt,\n cwd: projectRoot,\n });\n } else {\n execFileSync('xclip', ['-selection', 'clipboard'], {\n input: handoffPrompt,\n cwd: projectRoot,\n });\n }\n\n console.log('\\n\u2705 Handoff prompt copied to clipboard!');\n } catch {\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: unknown) {\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 // Validate and wrap specific command\n const commandSchema = z\n .string()\n .min(1, 'Command cannot be empty')\n .max(200, 'Command too long')\n .regex(\n /^[a-zA-Z0-9\\s\\-_./:]+$/,\n 'Command contains invalid characters'\n )\n .refine((cmd) => !cmd.includes(';'), 'Command cannot contain \";\"')\n .refine((cmd) => !cmd.includes('&'), 'Command cannot contain \"&\"')\n .refine((cmd) => !cmd.includes('|'), 'Command cannot contain \"|\"')\n .refine((cmd) => !cmd.includes('$'), 'Command cannot contain \"$\"')\n .refine((cmd) => !cmd.includes('`'), 'Command cannot contain \"`\"');\n\n try {\n const validatedCommand = commandSchema.parse(options.command);\n console.log(`Wrapping command: ${validatedCommand}`);\n execFileSync(scriptPath, [validatedCommand], {\n stdio: 'inherit',\n env: { ...process.env, AUTO_CAPTURE_ON_EXIT: 'true' },\n });\n } catch (validationError) {\n if (validationError instanceof z.ZodError) {\n console.error('\u274C Invalid command:');\n validationError.errors.forEach((err) => {\n console.error(` ${err.message}`);\n });\n } else {\n console.error(\n '\u274C Failed to execute command:',\n (validationError as Error).message\n );\n }\n return;\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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",
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["branch", "cmd"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
2
|
+
import { dirname as __pathDirname } from 'path';
|
|
3
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
4
|
+
const __dirname = __pathDirname(__filename);
|
|
5
|
+
import { Command } from "commander";
|
|
6
|
+
import chalk from "chalk";
|
|
7
|
+
import ora from "ora";
|
|
8
|
+
import { existsSync, readFileSync, unlinkSync } from "fs";
|
|
9
|
+
import { spawn } from "child_process";
|
|
10
|
+
import {
|
|
11
|
+
loadConfig,
|
|
12
|
+
saveConfig,
|
|
13
|
+
initConfig,
|
|
14
|
+
getConfigPath
|
|
15
|
+
} from "../../hooks/config.js";
|
|
16
|
+
import {
|
|
17
|
+
startDaemon,
|
|
18
|
+
stopDaemon,
|
|
19
|
+
getDaemonStatus
|
|
20
|
+
} from "../../hooks/daemon.js";
|
|
21
|
+
function createHooksCommand() {
|
|
22
|
+
const cmd = new Command("hooks").description(
|
|
23
|
+
"Manage StackMemory hook daemon for suggestions and automation"
|
|
24
|
+
).addHelpText(
|
|
25
|
+
"after",
|
|
26
|
+
`
|
|
27
|
+
Examples:
|
|
28
|
+
stackmemory hooks init Initialize hook configuration
|
|
29
|
+
stackmemory hooks start Start the hook daemon
|
|
30
|
+
stackmemory hooks stop Stop the hook daemon
|
|
31
|
+
stackmemory hooks status Check daemon status
|
|
32
|
+
stackmemory hooks logs View recent hook logs
|
|
33
|
+
stackmemory hooks config Show current configuration
|
|
34
|
+
|
|
35
|
+
The hook daemon watches for file changes and provides:
|
|
36
|
+
- Sweep AI predictions for next edits
|
|
37
|
+
- Context tracking across sessions
|
|
38
|
+
- Custom automation hooks
|
|
39
|
+
`
|
|
40
|
+
);
|
|
41
|
+
cmd.command("init").description("Initialize hook configuration").action(() => {
|
|
42
|
+
const configPath = getConfigPath();
|
|
43
|
+
if (existsSync(configPath)) {
|
|
44
|
+
console.log(chalk.yellow("Config already exists at:"), configPath);
|
|
45
|
+
console.log(chalk.gray("Use --force to overwrite"));
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
initConfig();
|
|
49
|
+
console.log(chalk.green("Hook configuration initialized"));
|
|
50
|
+
console.log(chalk.gray(`Config: ${configPath}`));
|
|
51
|
+
console.log("");
|
|
52
|
+
console.log(chalk.bold("Next steps:"));
|
|
53
|
+
console.log(" stackmemory hooks start Start the daemon");
|
|
54
|
+
console.log(" stackmemory hooks config View configuration");
|
|
55
|
+
});
|
|
56
|
+
cmd.command("start").description("Start the hook daemon").option("--foreground", "Run in foreground (for debugging)").action(async (options) => {
|
|
57
|
+
const status = getDaemonStatus();
|
|
58
|
+
if (status.running) {
|
|
59
|
+
console.log(
|
|
60
|
+
chalk.yellow("Daemon already running"),
|
|
61
|
+
chalk.gray(`(pid: ${status.pid})`)
|
|
62
|
+
);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const spinner = ora("Starting hook daemon...").start();
|
|
66
|
+
try {
|
|
67
|
+
await startDaemon({ foreground: options.foreground });
|
|
68
|
+
if (!options.foreground) {
|
|
69
|
+
await new Promise((r) => setTimeout(r, 500));
|
|
70
|
+
const newStatus = getDaemonStatus();
|
|
71
|
+
if (newStatus.running) {
|
|
72
|
+
spinner.succeed(chalk.green("Hook daemon started"));
|
|
73
|
+
console.log(chalk.gray(`PID: ${newStatus.pid}`));
|
|
74
|
+
} else {
|
|
75
|
+
spinner.fail(chalk.red("Failed to start daemon"));
|
|
76
|
+
console.log(chalk.gray("Check logs: stackmemory hooks logs"));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
} catch (error) {
|
|
80
|
+
spinner.fail(chalk.red("Failed to start daemon"));
|
|
81
|
+
console.log(chalk.gray(error.message));
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
cmd.command("stop").description("Stop the hook daemon").action(() => {
|
|
85
|
+
const status = getDaemonStatus();
|
|
86
|
+
if (!status.running) {
|
|
87
|
+
console.log(chalk.yellow("Daemon not running"));
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
stopDaemon();
|
|
91
|
+
console.log(chalk.green("Hook daemon stopped"));
|
|
92
|
+
});
|
|
93
|
+
cmd.command("restart").description("Restart the hook daemon").action(async () => {
|
|
94
|
+
const status = getDaemonStatus();
|
|
95
|
+
if (status.running) {
|
|
96
|
+
stopDaemon();
|
|
97
|
+
await new Promise((r) => setTimeout(r, 500));
|
|
98
|
+
}
|
|
99
|
+
await startDaemon();
|
|
100
|
+
await new Promise((r) => setTimeout(r, 500));
|
|
101
|
+
const newStatus = getDaemonStatus();
|
|
102
|
+
if (newStatus.running) {
|
|
103
|
+
console.log(
|
|
104
|
+
chalk.green("Hook daemon restarted"),
|
|
105
|
+
chalk.gray(`(pid: ${newStatus.pid})`)
|
|
106
|
+
);
|
|
107
|
+
} else {
|
|
108
|
+
console.log(chalk.red("Failed to restart daemon"));
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
cmd.command("status").description("Check hook daemon status").action(() => {
|
|
112
|
+
const status = getDaemonStatus();
|
|
113
|
+
const config = loadConfig();
|
|
114
|
+
console.log(chalk.bold("\nStackMemory Hook Daemon Status\n"));
|
|
115
|
+
console.log(
|
|
116
|
+
`Daemon: ${status.running ? chalk.green("Running") : chalk.yellow("Stopped")}`
|
|
117
|
+
);
|
|
118
|
+
if (status.running) {
|
|
119
|
+
console.log(chalk.gray(` PID: ${status.pid}`));
|
|
120
|
+
if (status.uptime) {
|
|
121
|
+
const uptime = Math.round(status.uptime / 1e3);
|
|
122
|
+
const mins = Math.floor(uptime / 60);
|
|
123
|
+
const secs = uptime % 60;
|
|
124
|
+
console.log(chalk.gray(` Uptime: ${mins}m ${secs}s`));
|
|
125
|
+
}
|
|
126
|
+
if (status.eventsProcessed) {
|
|
127
|
+
console.log(
|
|
128
|
+
chalk.gray(` Events processed: ${status.eventsProcessed}`)
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
console.log("");
|
|
133
|
+
console.log(chalk.bold("Configuration:"));
|
|
134
|
+
console.log(
|
|
135
|
+
` File watch: ${config.file_watch.enabled ? chalk.green("Enabled") : chalk.yellow("Disabled")}`
|
|
136
|
+
);
|
|
137
|
+
console.log(
|
|
138
|
+
` Extensions: ${chalk.gray(config.file_watch.extensions.join(", "))}`
|
|
139
|
+
);
|
|
140
|
+
console.log("");
|
|
141
|
+
console.log(chalk.bold("Active hooks:"));
|
|
142
|
+
for (const [event, hookConfig] of Object.entries(config.hooks)) {
|
|
143
|
+
if (hookConfig?.enabled) {
|
|
144
|
+
console.log(
|
|
145
|
+
` ${event}: ${chalk.green(hookConfig.handler)} -> ${hookConfig.output}`
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (!status.running) {
|
|
150
|
+
console.log("");
|
|
151
|
+
console.log(chalk.bold("To start: stackmemory hooks start"));
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
cmd.command("logs").description("View hook daemon logs").option("-n, --lines <number>", "Number of lines to show", "50").option("-f, --follow", "Follow log output").action((options) => {
|
|
155
|
+
const config = loadConfig();
|
|
156
|
+
const logFile = config.daemon.log_file;
|
|
157
|
+
if (!existsSync(logFile)) {
|
|
158
|
+
console.log(chalk.yellow("No log file found"));
|
|
159
|
+
console.log(
|
|
160
|
+
chalk.gray("Start the daemon first: stackmemory hooks start")
|
|
161
|
+
);
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
if (options.follow) {
|
|
165
|
+
const tail = spawn("tail", ["-f", logFile], { stdio: "inherit" });
|
|
166
|
+
tail.on("error", () => {
|
|
167
|
+
console.log(chalk.red("Could not follow logs"));
|
|
168
|
+
});
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
const content = readFileSync(logFile, "utf-8");
|
|
172
|
+
const lines = content.trim().split("\n");
|
|
173
|
+
const count = parseInt(options.lines, 10);
|
|
174
|
+
const recent = lines.slice(-count);
|
|
175
|
+
console.log(chalk.bold(`
|
|
176
|
+
Recent logs (${recent.length} lines):
|
|
177
|
+
`));
|
|
178
|
+
for (const line of recent) {
|
|
179
|
+
try {
|
|
180
|
+
if (line.includes("[ERROR]")) {
|
|
181
|
+
console.log(chalk.red(line));
|
|
182
|
+
} else if (line.includes("[WARN]")) {
|
|
183
|
+
console.log(chalk.yellow(line));
|
|
184
|
+
} else if (line.includes("[DEBUG]")) {
|
|
185
|
+
console.log(chalk.gray(line));
|
|
186
|
+
} else {
|
|
187
|
+
console.log(line);
|
|
188
|
+
}
|
|
189
|
+
} catch {
|
|
190
|
+
console.log(line);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
cmd.command("config").description("Show or edit hook configuration").option("--edit", "Open config in editor").option("--reset", "Reset to default configuration").action((options) => {
|
|
195
|
+
const configPath = getConfigPath();
|
|
196
|
+
if (options.reset) {
|
|
197
|
+
if (existsSync(configPath)) {
|
|
198
|
+
unlinkSync(configPath);
|
|
199
|
+
}
|
|
200
|
+
initConfig();
|
|
201
|
+
console.log(chalk.green("Configuration reset to defaults"));
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
if (options.edit) {
|
|
205
|
+
const editor = process.env.EDITOR || "vim";
|
|
206
|
+
spawn(editor, [configPath], { stdio: "inherit" });
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
const config = loadConfig();
|
|
210
|
+
console.log(chalk.bold("\nHook Configuration\n"));
|
|
211
|
+
console.log(chalk.gray(`File: ${configPath}`));
|
|
212
|
+
console.log("");
|
|
213
|
+
console.log(chalk.bold("Daemon:"));
|
|
214
|
+
console.log(` Enabled: ${config.daemon.enabled}`);
|
|
215
|
+
console.log(` Log level: ${config.daemon.log_level}`);
|
|
216
|
+
console.log(` PID file: ${chalk.gray(config.daemon.pid_file)}`);
|
|
217
|
+
console.log(` Log file: ${chalk.gray(config.daemon.log_file)}`);
|
|
218
|
+
console.log("");
|
|
219
|
+
console.log(chalk.bold("File Watch:"));
|
|
220
|
+
console.log(` Enabled: ${config.file_watch.enabled}`);
|
|
221
|
+
console.log(` Paths: ${config.file_watch.paths.join(", ")}`);
|
|
222
|
+
console.log(` Extensions: ${config.file_watch.extensions.join(", ")}`);
|
|
223
|
+
console.log(` Ignore: ${config.file_watch.ignore.join(", ")}`);
|
|
224
|
+
console.log("");
|
|
225
|
+
console.log(chalk.bold("Hooks:"));
|
|
226
|
+
for (const [event, hookConfig] of Object.entries(config.hooks)) {
|
|
227
|
+
console.log(` ${event}:`);
|
|
228
|
+
console.log(` Enabled: ${hookConfig?.enabled}`);
|
|
229
|
+
console.log(` Handler: ${hookConfig?.handler}`);
|
|
230
|
+
console.log(` Output: ${hookConfig?.output}`);
|
|
231
|
+
if (hookConfig?.debounce_ms) {
|
|
232
|
+
console.log(` Debounce: ${hookConfig.debounce_ms}ms`);
|
|
233
|
+
}
|
|
234
|
+
if (hookConfig?.cooldown_ms) {
|
|
235
|
+
console.log(` Cooldown: ${hookConfig.cooldown_ms}ms`);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
cmd.command("add <handler>").description("Add a hook handler").option("-e, --event <type>", "Event type to hook", "file_change").option(
|
|
240
|
+
"-o, --output <type>",
|
|
241
|
+
"Output type (overlay|notification|log)",
|
|
242
|
+
"log"
|
|
243
|
+
).action((handler, options) => {
|
|
244
|
+
const config = loadConfig();
|
|
245
|
+
const event = options.event;
|
|
246
|
+
config.hooks[event] = {
|
|
247
|
+
enabled: true,
|
|
248
|
+
handler,
|
|
249
|
+
output: options.output,
|
|
250
|
+
debounce_ms: 2e3,
|
|
251
|
+
cooldown_ms: 1e4
|
|
252
|
+
};
|
|
253
|
+
saveConfig(config);
|
|
254
|
+
console.log(chalk.green(`Added ${handler} hook for ${event} events`));
|
|
255
|
+
console.log(
|
|
256
|
+
chalk.gray("Restart daemon to apply: stackmemory hooks restart")
|
|
257
|
+
);
|
|
258
|
+
});
|
|
259
|
+
cmd.command("remove <event>").description("Remove a hook by event type").action((event) => {
|
|
260
|
+
const config = loadConfig();
|
|
261
|
+
if (!config.hooks[event]) {
|
|
262
|
+
console.log(chalk.yellow(`No hook found for ${event}`));
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
delete config.hooks[event];
|
|
266
|
+
saveConfig(config);
|
|
267
|
+
console.log(chalk.green(`Removed hook for ${event}`));
|
|
268
|
+
console.log(
|
|
269
|
+
chalk.gray("Restart daemon to apply: stackmemory hooks restart")
|
|
270
|
+
);
|
|
271
|
+
});
|
|
272
|
+
cmd.action(() => {
|
|
273
|
+
const status = getDaemonStatus();
|
|
274
|
+
console.log(chalk.bold("\nStackMemory Hooks\n"));
|
|
275
|
+
console.log(
|
|
276
|
+
`Daemon: ${status.running ? chalk.green("Running") : chalk.yellow("Stopped")}`
|
|
277
|
+
);
|
|
278
|
+
if (!status.running) {
|
|
279
|
+
console.log("");
|
|
280
|
+
console.log(chalk.bold("Quick start:"));
|
|
281
|
+
console.log(" stackmemory hooks init Initialize configuration");
|
|
282
|
+
console.log(" stackmemory hooks start Start the daemon");
|
|
283
|
+
} else {
|
|
284
|
+
console.log("");
|
|
285
|
+
console.log(chalk.bold("Commands:"));
|
|
286
|
+
console.log(" stackmemory hooks status View detailed status");
|
|
287
|
+
console.log(" stackmemory hooks logs View daemon logs");
|
|
288
|
+
console.log(" stackmemory hooks stop Stop the daemon");
|
|
289
|
+
}
|
|
290
|
+
});
|
|
291
|
+
return cmd;
|
|
292
|
+
}
|
|
293
|
+
var hooks_default = createHooksCommand();
|
|
294
|
+
export {
|
|
295
|
+
createHooksCommand,
|
|
296
|
+
hooks_default as default
|
|
297
|
+
};
|
|
298
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/cli/commands/hooks.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Hooks CLI Command\n * Manage StackMemory hook daemon and configuration\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { existsSync, readFileSync, unlinkSync } from 'fs';\nimport { spawn } from 'child_process';\nimport {\n loadConfig,\n saveConfig,\n initConfig,\n getConfigPath,\n} from '../../hooks/config.js';\nimport {\n startDaemon,\n stopDaemon,\n getDaemonStatus,\n} from '../../hooks/daemon.js';\n\nexport function createHooksCommand(): Command {\n const cmd = new Command('hooks')\n .description(\n 'Manage StackMemory hook daemon for suggestions and automation'\n )\n .addHelpText(\n 'after',\n `\nExamples:\n stackmemory hooks init Initialize hook configuration\n stackmemory hooks start Start the hook daemon\n stackmemory hooks stop Stop the hook daemon\n stackmemory hooks status Check daemon status\n stackmemory hooks logs View recent hook logs\n stackmemory hooks config Show current configuration\n\nThe hook daemon watches for file changes and provides:\n - Sweep AI predictions for next edits\n - Context tracking across sessions\n - Custom automation hooks\n`\n );\n\n cmd\n .command('init')\n .description('Initialize hook configuration')\n .action(() => {\n const configPath = getConfigPath();\n\n if (existsSync(configPath)) {\n console.log(chalk.yellow('Config already exists at:'), configPath);\n console.log(chalk.gray('Use --force to overwrite'));\n return;\n }\n\n initConfig();\n console.log(chalk.green('Hook configuration initialized'));\n console.log(chalk.gray(`Config: ${configPath}`));\n console.log('');\n console.log(chalk.bold('Next steps:'));\n console.log(' stackmemory hooks start Start the daemon');\n console.log(' stackmemory hooks config View configuration');\n });\n\n cmd\n .command('start')\n .description('Start the hook daemon')\n .option('--foreground', 'Run in foreground (for debugging)')\n .action(async (options) => {\n const status = getDaemonStatus();\n\n if (status.running) {\n console.log(\n chalk.yellow('Daemon already running'),\n chalk.gray(`(pid: ${status.pid})`)\n );\n return;\n }\n\n const spinner = ora('Starting hook daemon...').start();\n\n try {\n await startDaemon({ foreground: options.foreground });\n\n if (!options.foreground) {\n await new Promise((r) => setTimeout(r, 500));\n const newStatus = getDaemonStatus();\n\n if (newStatus.running) {\n spinner.succeed(chalk.green('Hook daemon started'));\n console.log(chalk.gray(`PID: ${newStatus.pid}`));\n } else {\n spinner.fail(chalk.red('Failed to start daemon'));\n console.log(chalk.gray('Check logs: stackmemory hooks logs'));\n }\n }\n } catch (error) {\n spinner.fail(chalk.red('Failed to start daemon'));\n console.log(chalk.gray((error as Error).message));\n }\n });\n\n cmd\n .command('stop')\n .description('Stop the hook daemon')\n .action(() => {\n const status = getDaemonStatus();\n\n if (!status.running) {\n console.log(chalk.yellow('Daemon not running'));\n return;\n }\n\n stopDaemon();\n console.log(chalk.green('Hook daemon stopped'));\n });\n\n cmd\n .command('restart')\n .description('Restart the hook daemon')\n .action(async () => {\n const status = getDaemonStatus();\n\n if (status.running) {\n stopDaemon();\n await new Promise((r) => setTimeout(r, 500));\n }\n\n await startDaemon();\n await new Promise((r) => setTimeout(r, 500));\n\n const newStatus = getDaemonStatus();\n if (newStatus.running) {\n console.log(\n chalk.green('Hook daemon restarted'),\n chalk.gray(`(pid: ${newStatus.pid})`)\n );\n } else {\n console.log(chalk.red('Failed to restart daemon'));\n }\n });\n\n cmd\n .command('status')\n .description('Check hook daemon status')\n .action(() => {\n const status = getDaemonStatus();\n const config = loadConfig();\n\n console.log(chalk.bold('\\nStackMemory Hook Daemon Status\\n'));\n\n console.log(\n `Daemon: ${status.running ? chalk.green('Running') : chalk.yellow('Stopped')}`\n );\n\n if (status.running) {\n console.log(chalk.gray(` PID: ${status.pid}`));\n if (status.uptime) {\n const uptime = Math.round(status.uptime / 1000);\n const mins = Math.floor(uptime / 60);\n const secs = uptime % 60;\n console.log(chalk.gray(` Uptime: ${mins}m ${secs}s`));\n }\n if (status.eventsProcessed) {\n console.log(\n chalk.gray(` Events processed: ${status.eventsProcessed}`)\n );\n }\n }\n\n console.log('');\n console.log(chalk.bold('Configuration:'));\n console.log(\n ` File watch: ${config.file_watch.enabled ? chalk.green('Enabled') : chalk.yellow('Disabled')}`\n );\n console.log(\n ` Extensions: ${chalk.gray(config.file_watch.extensions.join(', '))}`\n );\n\n console.log('');\n console.log(chalk.bold('Active hooks:'));\n for (const [event, hookConfig] of Object.entries(config.hooks)) {\n if (hookConfig?.enabled) {\n console.log(\n ` ${event}: ${chalk.green(hookConfig.handler)} -> ${hookConfig.output}`\n );\n }\n }\n\n if (!status.running) {\n console.log('');\n console.log(chalk.bold('To start: stackmemory hooks start'));\n }\n });\n\n cmd\n .command('logs')\n .description('View hook daemon logs')\n .option('-n, --lines <number>', 'Number of lines to show', '50')\n .option('-f, --follow', 'Follow log output')\n .action((options) => {\n const config = loadConfig();\n const logFile = config.daemon.log_file;\n\n if (!existsSync(logFile)) {\n console.log(chalk.yellow('No log file found'));\n console.log(\n chalk.gray('Start the daemon first: stackmemory hooks start')\n );\n return;\n }\n\n if (options.follow) {\n const tail = spawn('tail', ['-f', logFile], { stdio: 'inherit' });\n tail.on('error', () => {\n console.log(chalk.red('Could not follow logs'));\n });\n return;\n }\n\n const content = readFileSync(logFile, 'utf-8');\n const lines = content.trim().split('\\n');\n const count = parseInt(options.lines, 10);\n const recent = lines.slice(-count);\n\n console.log(chalk.bold(`\\nRecent logs (${recent.length} lines):\\n`));\n for (const line of recent) {\n try {\n if (line.includes('[ERROR]')) {\n console.log(chalk.red(line));\n } else if (line.includes('[WARN]')) {\n console.log(chalk.yellow(line));\n } else if (line.includes('[DEBUG]')) {\n console.log(chalk.gray(line));\n } else {\n console.log(line);\n }\n } catch {\n console.log(line);\n }\n }\n });\n\n cmd\n .command('config')\n .description('Show or edit hook configuration')\n .option('--edit', 'Open config in editor')\n .option('--reset', 'Reset to default configuration')\n .action((options) => {\n const configPath = getConfigPath();\n\n if (options.reset) {\n if (existsSync(configPath)) {\n unlinkSync(configPath);\n }\n initConfig();\n console.log(chalk.green('Configuration reset to defaults'));\n return;\n }\n\n if (options.edit) {\n const editor = process.env.EDITOR || 'vim';\n spawn(editor, [configPath], { stdio: 'inherit' });\n return;\n }\n\n const config = loadConfig();\n\n console.log(chalk.bold('\\nHook Configuration\\n'));\n console.log(chalk.gray(`File: ${configPath}`));\n console.log('');\n console.log(chalk.bold('Daemon:'));\n console.log(` Enabled: ${config.daemon.enabled}`);\n console.log(` Log level: ${config.daemon.log_level}`);\n console.log(` PID file: ${chalk.gray(config.daemon.pid_file)}`);\n console.log(` Log file: ${chalk.gray(config.daemon.log_file)}`);\n\n console.log('');\n console.log(chalk.bold('File Watch:'));\n console.log(` Enabled: ${config.file_watch.enabled}`);\n console.log(` Paths: ${config.file_watch.paths.join(', ')}`);\n console.log(` Extensions: ${config.file_watch.extensions.join(', ')}`);\n console.log(` Ignore: ${config.file_watch.ignore.join(', ')}`);\n\n console.log('');\n console.log(chalk.bold('Hooks:'));\n for (const [event, hookConfig] of Object.entries(config.hooks)) {\n console.log(` ${event}:`);\n console.log(` Enabled: ${hookConfig?.enabled}`);\n console.log(` Handler: ${hookConfig?.handler}`);\n console.log(` Output: ${hookConfig?.output}`);\n if (hookConfig?.debounce_ms) {\n console.log(` Debounce: ${hookConfig.debounce_ms}ms`);\n }\n if (hookConfig?.cooldown_ms) {\n console.log(` Cooldown: ${hookConfig.cooldown_ms}ms`);\n }\n }\n });\n\n cmd\n .command('add <handler>')\n .description('Add a hook handler')\n .option('-e, --event <type>', 'Event type to hook', 'file_change')\n .option(\n '-o, --output <type>',\n 'Output type (overlay|notification|log)',\n 'log'\n )\n .action((handler, options) => {\n const config = loadConfig();\n const event = options.event as keyof typeof config.hooks;\n\n config.hooks[event] = {\n enabled: true,\n handler,\n output: options.output,\n debounce_ms: 2000,\n cooldown_ms: 10000,\n };\n\n saveConfig(config);\n console.log(chalk.green(`Added ${handler} hook for ${event} events`));\n console.log(\n chalk.gray('Restart daemon to apply: stackmemory hooks restart')\n );\n });\n\n cmd\n .command('remove <event>')\n .description('Remove a hook by event type')\n .action((event) => {\n const config = loadConfig();\n\n if (!config.hooks[event as keyof typeof config.hooks]) {\n console.log(chalk.yellow(`No hook found for ${event}`));\n return;\n }\n\n delete config.hooks[event as keyof typeof config.hooks];\n saveConfig(config);\n console.log(chalk.green(`Removed hook for ${event}`));\n console.log(\n chalk.gray('Restart daemon to apply: stackmemory hooks restart')\n );\n });\n\n cmd.action(() => {\n const status = getDaemonStatus();\n\n console.log(chalk.bold('\\nStackMemory Hooks\\n'));\n console.log(\n `Daemon: ${status.running ? chalk.green('Running') : chalk.yellow('Stopped')}`\n );\n\n if (!status.running) {\n console.log('');\n console.log(chalk.bold('Quick start:'));\n console.log(' stackmemory hooks init Initialize configuration');\n console.log(' stackmemory hooks start Start the daemon');\n } else {\n console.log('');\n console.log(chalk.bold('Commands:'));\n console.log(' stackmemory hooks status View detailed status');\n console.log(' stackmemory hooks logs View daemon logs');\n console.log(' stackmemory hooks stop Stop the daemon');\n }\n });\n\n return cmd;\n}\n\nexport default createHooksCommand();\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
2
|
+
import { dirname as __pathDirname } from 'path';
|
|
3
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
4
|
+
const __dirname = __pathDirname(__filename);
|
|
1
5
|
import chalk from "chalk";
|
|
2
6
|
import {
|
|
3
7
|
UnifiedLinearSync
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/cli/commands/linear-unified.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * Unified Linear CLI Commands\n * Consolidates all Linear operations into a single, coherent interface\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport {\n UnifiedLinearSync,\n UnifiedSyncConfig,\n SyncStats,\n} from '../../integrations/linear/unified-sync.js';\nimport { LinearAuthManager } from '../../integrations/linear/auth.js';\nimport { LinearClient } from '../../integrations/linear/client.js';\nimport { LinearTaskManager } from '../../features/tasks/linear-task-manager.js';\nimport Database from 'better-sqlite3';\nimport { join } from 'path';\nimport { existsSync, readFileSync } from 'fs';\n// import { logger } from '../../core/monitoring/logger.js';\nimport Table from 'cli-table3';\nimport ora from 'ora';\n\nexport function registerUnifiedLinearCommands(parent: Command) {\n const linear = parent\n .command('linear')\n .description(\n 'Unified Linear integration with duplicate detection and task planning'\n );\n\n // Main sync command with all features\n linear\n .command('sync')\n .description(\n 'Intelligent sync with Linear (duplicate detection, bidirectional, task planning)'\n )\n .option(\n '-d, --direction <dir>',\n 'Sync direction: bidirectional, to_linear, from_linear',\n 'bidirectional'\n )\n .option('-t, --team <id>', 'Linear team ID')\n .option('--no-duplicates', 'Disable duplicate detection')\n .option(\n '--merge-strategy <strategy>',\n 'Duplicate handling: merge_content, skip, create_anyway',\n 'merge_content'\n )\n .option(\n '--conflict <resolution>',\n 'Conflict resolution: newest_wins, linear_wins, local_wins',\n 'newest_wins'\n )\n .option('--task-plan', 'Enable task planning integration')\n .option('--dry-run', 'Preview changes without syncing')\n .option('--daemon', 'Run as background daemon')\n .option('-i, --interval <minutes>', 'Auto-sync interval', '15')\n .option('--verbose', 'Show detailed sync progress')\n .action(async (options) => {\n const spinner = ora('Initializing Linear sync...').start();\n\n try {\n const projectRoot = process.cwd();\n const dbPath = join(projectRoot, '.stackmemory', 'context.db');\n\n if (!existsSync(dbPath)) {\n spinner.fail('StackMemory not initialized');\n console.log(chalk.yellow('Run \"stackmemory init\" first'));\n return;\n }\n\n // Initialize components\n const db = new Database(dbPath);\n const taskStore = new LinearTaskManager(projectRoot, db);\n const authManager = new LinearAuthManager(projectRoot);\n\n // Build config from options\n const config: Partial<UnifiedSyncConfig> = {\n direction: options.direction,\n defaultTeamId: options.team,\n duplicateDetection: options.duplicates !== false,\n mergeStrategy: options.mergeStrategy,\n conflictResolution: options.conflict,\n taskPlanningEnabled: options.taskPlan || false,\n };\n\n // Create unified sync instance\n const unifiedSync = new UnifiedLinearSync(\n taskStore,\n authManager,\n projectRoot,\n config\n );\n\n // Listen to events for progress\n if (options.verbose) {\n unifiedSync.on('sync:started', ({ config }) => {\n spinner.text = `Syncing (${config.direction})...`;\n });\n }\n\n // Initialize\n spinner.text = 'Authenticating with Linear...';\n await unifiedSync.initialize();\n\n if (options.dryRun) {\n spinner.info('Dry run mode - no changes will be made');\n // TODO: Implement dry run preview\n return;\n }\n\n if (options.daemon) {\n // Daemon mode\n spinner.succeed('Starting sync daemon');\n console.log(chalk.cyan(`Sync interval: ${options.interval} minutes`));\n console.log(chalk.gray('Press Ctrl+C to stop\\n'));\n\n // Initial sync\n const stats = await unifiedSync.sync();\n displaySyncStats(stats);\n\n // Schedule periodic syncs\n const interval = setInterval(\n async () => {\n console.log(\n chalk.yellow(\n `\\n[${new Date().toLocaleTimeString()}] Running scheduled sync...`\n )\n );\n try {\n const stats = await unifiedSync.sync();\n displaySyncStats(stats);\n } catch (error: unknown) {\n console.error(\n chalk.red('Sync failed:'),\n (error as Error).message\n );\n }\n },\n parseInt(options.interval) * 60 * 1000\n );\n\n // Handle graceful shutdown\n process.on('SIGINT', () => {\n console.log(chalk.yellow('\\nStopping sync daemon...'));\n clearInterval(interval);\n db.close();\n process.exit(0);\n });\n\n // Keep process alive\n process.stdin.resume();\n } else {\n // Single sync\n spinner.text = 'Syncing tasks...';\n const stats = await unifiedSync.sync();\n\n spinner.succeed('Sync completed');\n displaySyncStats(stats);\n\n // Show task plan if enabled\n if (options.taskPlan) {\n displayTaskPlan(projectRoot);\n }\n\n db.close();\n }\n } catch (error: unknown) {\n spinner.fail('Sync failed');\n console.error(chalk.red('Error:'), (error as Error).message);\n if (options.verbose) {\n console.error(error);\n }\n process.exit(1);\n }\n });\n\n // Quick status command\n linear\n .command('status')\n .description('Show Linear connection status and sync statistics')\n .action(async () => {\n try {\n const authManager = new LinearAuthManager(process.cwd());\n const hasAuth = authManager.isConfigured();\n\n if (!hasAuth && !process.env.STACKMEMORY_LINEAR_API_KEY && !process.env.LINEAR_API_KEY) {\n console.log(chalk.yellow('\u26A0 Not connected to Linear'));\n console.log('Run \"stackmemory linear auth\" to connect');\n return;\n }\n\n console.log(chalk.green('\u2713 Linear connection configured'));\n\n // Show last sync stats if available\n const statsFile = join(\n process.cwd(),\n '.stackmemory',\n 'sync-stats.json'\n );\n if (existsSync(statsFile)) {\n const stats = JSON.parse(readFileSync(statsFile, 'utf8'));\n console.log(chalk.cyan('\\nLast sync:'));\n console.log(` Time: ${new Date(stats.timestamp).toLocaleString()}`);\n console.log(` Duration: ${stats.duration}ms`);\n console.log(\n ` To Linear: ${stats.toLinear.created} created, ${stats.toLinear.updated} updated`\n );\n console.log(\n ` From Linear: ${stats.fromLinear.created} created, ${stats.fromLinear.updated} updated`\n );\n\n if (stats.toLinear.duplicatesMerged > 0) {\n console.log(\n chalk.green(\n ` Duplicates prevented: ${stats.toLinear.duplicatesMerged}`\n )\n );\n }\n }\n\n // Show task plan status\n const planFile = join(process.cwd(), '.stackmemory', 'task-plan.md');\n if (existsSync(planFile)) {\n console.log(chalk.cyan('\\n\u2713 Task planning enabled'));\n const reportFile = join(\n process.cwd(),\n '.stackmemory',\n 'task-report.md'\n );\n if (existsSync(reportFile)) {\n console.log(` Report: ${reportFile}`);\n }\n }\n } catch (error: unknown) {\n console.error(\n chalk.red('Status check failed:'),\n (error as Error).message\n );\n }\n });\n\n // Task planning command\n linear\n .command('plan')\n .description('View and manage task planning')\n .option('--generate', 'Generate task plan from current tasks')\n .option('--report', 'Show task report')\n .action(async (options) => {\n try {\n const projectRoot = process.cwd();\n\n if (options.generate) {\n console.log(chalk.yellow('Generating task plan...'));\n // Run sync with task planning enabled\n const dbPath = join(projectRoot, '.stackmemory', 'context.db');\n const db = new Database(dbPath);\n const taskStore = new LinearTaskManager(projectRoot, db);\n const authManager = new LinearAuthManager(projectRoot);\n\n const unifiedSync = new UnifiedLinearSync(\n taskStore,\n authManager,\n projectRoot,\n {\n taskPlanningEnabled: true,\n autoCreateTaskPlan: true,\n }\n );\n\n await unifiedSync.initialize();\n await unifiedSync.sync();\n\n console.log(chalk.green('\u2713 Task plan generated'));\n db.close();\n }\n\n displayTaskPlan(projectRoot, options.report);\n } catch (error: unknown) {\n console.error(\n chalk.red('Plan generation failed:'),\n (error as Error).message\n );\n }\n });\n\n // Duplicate detection command\n linear\n .command('duplicates')\n .description('Check for and manage duplicate Linear issues')\n .option('--check <title>', 'Check if a title would create a duplicate')\n .option('--merge', 'Merge detected duplicates')\n .option('--list', 'List potential duplicates')\n .action(async (options) => {\n try {\n const authManager = new LinearAuthManager(process.cwd());\n const token = await authManager.getValidToken();\n\n if (!token) {\n console.log(chalk.red('Not authenticated with Linear'));\n return;\n }\n\n const client = new LinearClient({\n apiKey: token,\n useBearer: authManager.isOAuth(),\n });\n\n if (options.check) {\n // Import dynamically to avoid circular dependency\n const { LinearDuplicateDetector } =\n await import('../../integrations/linear/sync-enhanced.js');\n const detector = new LinearDuplicateDetector(client);\n\n console.log(\n chalk.yellow(`Checking for duplicates of: \"${options.check}\"`)\n );\n const result = await detector.checkForDuplicate(options.check);\n\n if (result.isDuplicate && result.existingIssue) {\n console.log(chalk.red('\u26A0 Duplicate detected!'));\n console.log(\n ` Issue: ${result.existingIssue.identifier} - ${result.existingIssue.title}`\n );\n console.log(\n ` Similarity: ${Math.round((result.similarity || 0) * 100)}%`\n );\n console.log(` URL: ${result.existingIssue.url}`);\n } else {\n console.log(chalk.green('\u2713 No duplicates found'));\n }\n } else if (options.list) {\n console.log(chalk.yellow('Scanning for potential duplicates...'));\n // TODO: Implement duplicate scanning\n console.log('Feature coming soon');\n } else {\n console.log('Specify --check, --merge, or --list');\n }\n } catch (error: unknown) {\n console.error(\n chalk.red('Duplicate check failed:'),\n (error as Error).message\n );\n }\n });\n\n // Auth command (simplified)\n linear\n .command('auth')\n .description('Authenticate with Linear')\n .option('--api-key <key>', 'Use API key')\n .option('--oauth', 'Use OAuth flow')\n .action(async (options) => {\n try {\n // const authManager = new LinearAuthManager(process.cwd());\n\n if (options.apiKey) {\n // Simple API key setup\n process.env.STACKMEMORY_LINEAR_API_KEY = options.apiKey;\n console.log(chalk.green('\u2713 API key configured'));\n\n // Test connection\n const client = new LinearClient({ apiKey: options.apiKey });\n const user = await client.getViewer();\n console.log(chalk.cyan(`Connected as: ${user.name} (${user.email})`));\n } else {\n console.log(chalk.cyan('Linear Authentication'));\n console.log('\\nOption 1: API Key (Recommended for automation)');\n console.log(' 1. Go to: https://linear.app/settings/api');\n console.log(' 2. Create a personal API key');\n console.log(' 3. Run: stackmemory linear auth --api-key YOUR_KEY');\n console.log('\\nOption 2: OAuth (For user-facing apps)');\n console.log(' Configure OAuth app and use linear-oauth-server');\n }\n } catch (error: unknown) {\n console.error(\n chalk.red('Authentication failed:'),\n (error as Error).message\n );\n }\n });\n}\n\n/**\n * Display sync statistics\n */\nfunction displaySyncStats(stats: SyncStats): void {\n const table = new Table({\n head: ['Direction', 'Created', 'Updated', 'Merged', 'Skipped'],\n style: { head: ['cyan'] },\n });\n\n table.push(\n [\n '\u2192 Linear',\n stats.toLinear.created,\n stats.toLinear.updated,\n stats.toLinear.duplicatesMerged,\n stats.toLinear.skipped,\n ],\n [\n '\u2190 Linear',\n stats.fromLinear.created,\n stats.fromLinear.updated,\n '-',\n stats.fromLinear.skipped,\n ]\n );\n\n console.log('\\n' + table.toString());\n\n if (stats.conflicts.length > 0) {\n console.log(chalk.yellow(`\\n\u26A0 Conflicts: ${stats.conflicts.length}`));\n stats.conflicts.slice(0, 5).forEach((c) => {\n console.log(` - ${c.reason}`);\n });\n }\n\n if (stats.errors.length > 0) {\n console.log(chalk.red(`\\n\u274C Errors: ${stats.errors.length}`));\n stats.errors.slice(0, 5).forEach((e: string) => {\n console.log(` - ${e.substring(0, 100)}`);\n });\n }\n\n console.log(chalk.gray(`\\nCompleted in ${stats.duration}ms`));\n}\n\n/**\n * Display task plan\n */\nfunction displayTaskPlan(projectRoot: string, showReport = false): void {\n const reportFile = join(projectRoot, '.stackmemory', 'task-report.md');\n const planFile = join(projectRoot, '.stackmemory', 'task-plan.json');\n\n if (showReport && existsSync(reportFile)) {\n const report = readFileSync(reportFile, 'utf8');\n console.log('\\n' + report);\n } else if (existsSync(planFile)) {\n const plan = JSON.parse(readFileSync(planFile, 'utf8'));\n\n console.log(chalk.cyan('\\n\uD83D\uDCCB Task Plan Overview'));\n console.log(\n `Last updated: ${new Date(plan.lastUpdated).toLocaleString()}\\n`\n );\n\n plan.phases.forEach((phase) => {\n console.log(chalk.yellow(`${phase.name} (${phase.tasks.length})`));\n console.log(chalk.gray(` ${phase.description}`));\n\n if (phase.tasks.length > 0) {\n phase.tasks.slice(0, 5).forEach((task) => {\n const status = task.linearId ? '\uD83D\uDD17' : ' ';\n console.log(` ${status} ${task.title}`);\n });\n\n if (phase.tasks.length > 5) {\n console.log(chalk.gray(` ...and ${phase.tasks.length - 5} more`));\n }\n }\n console.log();\n });\n } else {\n console.log(\n chalk.yellow('No task plan found. Run sync with --task-plan to generate.')\n );\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["config", "stats"]
|
|
7
7
|
}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
2
|
+
import { dirname as __pathDirname } from 'path';
|
|
3
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
4
|
+
const __dirname = __pathDirname(__filename);
|
|
1
5
|
import chalk from "chalk";
|
|
2
6
|
import {
|
|
3
7
|
LinearAuthManager
|