@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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/cli/commands/sweep.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Sweep command for StackMemory\n * Provides next-edit predictions using the Sweep 1.5B model\n *\n * Usage:\n * stackmemory sweep setup Install dependencies and optionally download model\n * stackmemory sweep status Check if Sweep addon is properly configured\n * stackmemory sweep predict <file> Run prediction on a file\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport {\n existsSync,\n readFileSync,\n writeFileSync,\n mkdirSync,\n copyFileSync,\n chmodSync,\n} from 'fs';\nimport { join, dirname } from 'path';\nimport { fileURLToPath } from 'url';\nimport { spawn, execSync } from 'child_process';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\ninterface SweepStatus {\n installed: boolean;\n model_downloaded: boolean;\n python_path?: string;\n model_path?: string;\n error?: string;\n}\n\ninterface SweepPredictResult {\n success: boolean;\n predicted_content?: string;\n file_path?: string;\n latency_ms?: number;\n tokens_generated?: number;\n error?: string;\n message?: string;\n}\n\nfunction findPythonScript(): string | null {\n const locations = [\n join(\n process.cwd(),\n 'packages',\n 'sweep-addon',\n 'python',\n 'sweep_predict.py'\n ),\n join(\n process.cwd(),\n 'node_modules',\n '@stackmemoryai',\n 'sweep-addon',\n 'python',\n 'sweep_predict.py'\n ),\n join(process.env.HOME || '', '.stackmemory', 'sweep', 'sweep_predict.py'),\n ];\n\n for (const loc of locations) {\n if (existsSync(loc)) {\n return loc;\n }\n }\n return null;\n}\n\nfunction findHookSource(): string | null {\n const locations = [\n join(process.cwd(), 'templates', 'claude-hooks', 'post-edit-sweep.js'),\n join(\n process.cwd(),\n 'node_modules',\n '@stackmemoryai',\n 'stackmemory',\n 'templates',\n 'claude-hooks',\n 'post-edit-sweep.js'\n ),\n join(\n dirname(dirname(dirname(__dirname))),\n 'templates',\n 'claude-hooks',\n 'post-edit-sweep.js'\n ),\n ];\n\n for (const loc of locations) {\n if (existsSync(loc)) {\n return loc;\n }\n }\n return null;\n}\n\nasync function findPython(): Promise<string | null> {\n const candidates = ['python3', 'python'];\n\n for (const cmd of candidates) {\n try {\n execSync(`${cmd} --version`, { stdio: 'pipe' });\n return cmd;\n } catch {\n continue;\n }\n }\n return null;\n}\n\nasync function checkSweepStatus(): Promise<SweepStatus> {\n const pythonPath = await findPython();\n if (!pythonPath) {\n return {\n installed: false,\n model_downloaded: false,\n error: 'Python not found. Install Python 3.10+',\n };\n }\n\n const scriptPath = findPythonScript();\n if (!scriptPath) {\n return {\n installed: false,\n model_downloaded: false,\n python_path: pythonPath,\n error: 'Sweep addon not installed. Run: stackmemory sweep setup',\n };\n }\n\n const homeDir = process.env.HOME || '';\n const modelPath = join(\n homeDir,\n '.stackmemory',\n 'models',\n 'sweep',\n 'sweep-next-edit-1.5b.q8_0.v2.gguf'\n );\n const modelDownloaded = existsSync(modelPath);\n\n return {\n installed: true,\n model_downloaded: modelDownloaded,\n python_path: pythonPath,\n model_path: modelDownloaded ? modelPath : undefined,\n };\n}\n\nasync function runPrediction(\n filePath: string,\n pythonPath: string,\n scriptPath: string\n): Promise<SweepPredictResult> {\n if (!existsSync(filePath)) {\n return {\n success: false,\n error: 'file_not_found',\n message: `File not found: ${filePath}`,\n };\n }\n\n const currentContent = readFileSync(filePath, 'utf-8');\n\n const input = {\n file_path: filePath,\n current_content: currentContent,\n };\n\n return new Promise((resolve) => {\n const proc = spawn(pythonPath, [scriptPath], {\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n let stdout = '';\n let stderr = '';\n\n proc.stdout.on('data', (data) => (stdout += data));\n proc.stderr.on('data', (data) => (stderr += data));\n\n proc.on('close', (code) => {\n try {\n if (stdout.trim()) {\n const result = JSON.parse(stdout.trim());\n resolve(result);\n } else if (code !== 0) {\n resolve({\n success: false,\n error: 'process_error',\n message: stderr || `Process exited with code ${code}`,\n });\n } else {\n resolve({\n success: false,\n error: 'no_output',\n message: 'No output from prediction script',\n });\n }\n } catch {\n resolve({\n success: false,\n error: 'parse_error',\n message: `Failed to parse output: ${stdout}`,\n });\n }\n });\n\n proc.on('error', (error) => {\n resolve({\n success: false,\n error: 'spawn_error',\n message: error.message,\n });\n });\n\n proc.stdin.write(JSON.stringify(input));\n proc.stdin.end();\n });\n}\n\nexport function createSweepCommand(): Command {\n const cmd = new Command('sweep')\n .description(\n 'Next-edit predictions using Sweep 1.5B model (optional addon)'\n )\n .addHelpText(\n 'after',\n `\nExamples:\n stackmemory sweep setup Install Python dependencies\n stackmemory sweep setup --download Also download the model (1.5GB)\n stackmemory sweep status Check addon status\n stackmemory sweep predict src/app.ts Predict next edit for a file\n\nRequirements:\n - Python 3.10+\n - pip packages: huggingface_hub, llama-cpp-python\n\nThe Sweep 1.5B model predicts what code changes you'll make next based on:\n - Current file content\n - Recent changes (diffs)\n - Context from other files\n\nModel is downloaded from HuggingFace on first prediction (~1.5GB).\n`\n );\n\n cmd\n .command('setup')\n .description('Install Python dependencies for Sweep addon')\n .option('--download', 'Also download the model now')\n .action(async (options) => {\n const spinner = ora('Checking Python...').start();\n\n const pythonPath = await findPython();\n if (!pythonPath) {\n spinner.fail(chalk.red('Python not found'));\n console.log(chalk.gray('Please install Python 3.10+'));\n process.exit(1);\n }\n\n spinner.text = 'Installing Python dependencies...';\n\n try {\n execSync(\n `${pythonPath} -m pip install --quiet huggingface_hub llama-cpp-python`,\n {\n stdio: 'pipe',\n }\n );\n spinner.succeed(chalk.green('Python dependencies installed'));\n } catch {\n spinner.fail(chalk.red('Failed to install dependencies'));\n console.log(\n chalk.gray(\n `Run: ${pythonPath} -m pip install huggingface_hub llama-cpp-python`\n )\n );\n process.exit(1);\n }\n\n if (options.download) {\n const downloadSpinner = ora('Downloading Sweep 1.5B model...').start();\n downloadSpinner.text = 'Downloading model from HuggingFace (~1.5GB)...';\n\n try {\n execSync(\n `${pythonPath} -c \"\nfrom huggingface_hub import hf_hub_download\nimport os\nmodel_dir = os.path.expanduser('~/.stackmemory/models/sweep')\nos.makedirs(model_dir, exist_ok=True)\nhf_hub_download(\n repo_id='sweepai/sweep-next-edit-1.5B',\n filename='sweep-next-edit-1.5b.q8_0.v2.gguf',\n repo_type='model',\n local_dir=model_dir,\n local_dir_use_symlinks=False\n)\n\"`,\n { stdio: 'pipe', timeout: 600000 }\n );\n downloadSpinner.succeed(chalk.green('Model downloaded'));\n } catch {\n downloadSpinner.fail(chalk.red('Model download failed'));\n console.log(chalk.gray('Model will be downloaded on first use'));\n }\n } else {\n console.log(\n chalk.gray('\\nModel will be downloaded on first prediction (~1.5GB)')\n );\n console.log(chalk.gray('Or run: stackmemory sweep setup --download'));\n }\n\n console.log(chalk.bold('\\nSetup complete!'));\n });\n\n cmd\n .command('status')\n .description('Check Sweep addon status')\n .action(async () => {\n console.log(chalk.bold('\\nSweep 1.5B Addon Status\\n'));\n\n const status = await checkSweepStatus();\n\n if (status.error) {\n console.log(chalk.red(`Error: ${status.error}`));\n console.log('');\n }\n\n console.log(\n `Python: ${status.python_path ? chalk.green(status.python_path) : chalk.red('Not found')}`\n );\n console.log(\n `Addon installed: ${status.installed ? chalk.green('Yes') : chalk.yellow('No')}`\n );\n console.log(\n `Model downloaded: ${status.model_downloaded ? chalk.green('Yes') : chalk.yellow('No (will download on first use)')}`\n );\n\n if (status.model_path) {\n console.log(chalk.gray(`Model path: ${status.model_path}`));\n }\n\n if (!status.installed) {\n console.log(chalk.bold('\\nTo install:'));\n console.log(' stackmemory sweep setup');\n }\n });\n\n cmd\n .command('predict <file>')\n .description('Predict next edit for a file')\n .option('-o, --output <path>', 'Write prediction to file instead of stdout')\n .option('--json', 'Output raw JSON result')\n .action(async (file, options) => {\n const status = await checkSweepStatus();\n\n if (!status.installed) {\n console.error(chalk.red('Sweep addon not installed'));\n console.log(chalk.gray('Run: stackmemory sweep setup'));\n process.exit(1);\n }\n\n const scriptPath = findPythonScript();\n if (!scriptPath || !status.python_path) {\n console.error(chalk.red('Could not find Sweep prediction script'));\n process.exit(1);\n }\n\n const spinner = ora('Running prediction...').start();\n\n if (!status.model_downloaded) {\n spinner.text = 'Downloading model (first time only, ~1.5GB)...';\n }\n\n const result = await runPrediction(file, status.python_path, scriptPath);\n\n if (!result.success) {\n spinner.fail(\n chalk.red(`Prediction failed: ${result.message || result.error}`)\n );\n process.exit(1);\n }\n\n spinner.succeed(chalk.green('Prediction complete'));\n\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n console.log(chalk.bold('\\nPredicted content:'));\n console.log(chalk.gray('\u2500'.repeat(50)));\n console.log(result.predicted_content);\n console.log(chalk.gray('\u2500'.repeat(50)));\n\n if (result.latency_ms) {\n console.log(chalk.gray(`Latency: ${result.latency_ms}ms`));\n }\n if (result.tokens_generated) {\n console.log(chalk.gray(`Tokens: ${result.tokens_generated}`));\n }\n\n if (options.output) {\n const { writeFileSync } = await import('fs');\n writeFileSync(options.output, result.predicted_content || '');\n console.log(chalk.green(`\\nWritten to: ${options.output}`));\n }\n });\n\n const hookCmd = cmd\n .command('hook')\n .description('Manage Claude Code integration hook');\n\n hookCmd\n .command('install')\n .description('Install Sweep prediction hook for Claude Code')\n .action(async () => {\n const spinner = ora('Installing Sweep hook...').start();\n\n const homeDir = process.env.HOME || '';\n const hookDir = join(homeDir, '.claude', 'hooks');\n const sweepDir = join(homeDir, '.stackmemory', 'sweep');\n const hooksJsonPath = join(homeDir, '.claude', 'hooks.json');\n\n try {\n mkdirSync(hookDir, { recursive: true });\n mkdirSync(sweepDir, { recursive: true });\n\n const hookSource = findHookSource();\n if (!hookSource) {\n spinner.fail(chalk.red('Hook template not found'));\n console.log(\n chalk.gray('Ensure stackmemory is installed from the repository')\n );\n process.exit(1);\n }\n\n const hookDest = join(hookDir, 'post-edit-sweep.js');\n copyFileSync(hookSource, hookDest);\n chmodSync(hookDest, '755');\n\n const pythonScriptSource = findPythonScript();\n if (pythonScriptSource) {\n const pythonDest = join(sweepDir, 'sweep_predict.py');\n copyFileSync(pythonScriptSource, pythonDest);\n }\n\n if (existsSync(hooksJsonPath)) {\n const hooks = JSON.parse(readFileSync(hooksJsonPath, 'utf-8'));\n if (!hooks['post-tool-use']) {\n hooks['post-tool-use'] = hookDest;\n writeFileSync(hooksJsonPath, JSON.stringify(hooks, null, 2));\n } else if (!hooks['post-tool-use'].includes('sweep')) {\n spinner.warn(chalk.yellow('post-tool-use hook already configured'));\n console.log(chalk.gray(`Existing: ${hooks['post-tool-use']}`));\n console.log(chalk.gray(`Hook installed at: ${hookDest}`));\n console.log(\n chalk.gray('You may need to manually configure the hook chain')\n );\n return;\n }\n } else {\n const hooks = { 'post-tool-use': hookDest };\n writeFileSync(hooksJsonPath, JSON.stringify(hooks, null, 2));\n }\n\n spinner.succeed(chalk.green('Sweep hook installed'));\n console.log(chalk.gray(`Hook: ${hookDest}`));\n console.log(chalk.gray(`Config: ${hooksJsonPath}`));\n console.log('');\n console.log(chalk.bold('Usage:'));\n console.log(' Hook runs automatically after Edit/Write operations');\n console.log(' Predictions appear after 2+ edits in session');\n console.log(' Disable: export SWEEP_ENABLED=false');\n } catch (error) {\n spinner.fail(chalk.red('Installation failed'));\n console.log(chalk.gray((error as Error).message));\n process.exit(1);\n }\n });\n\n hookCmd\n .command('status')\n .description('Check hook installation status')\n .action(async () => {\n const homeDir = process.env.HOME || '';\n const hookPath = join(homeDir, '.claude', 'hooks', 'post-edit-sweep.js');\n const hooksJsonPath = join(homeDir, '.claude', 'hooks.json');\n const statePath = join(homeDir, '.stackmemory', 'sweep-state.json');\n\n console.log(chalk.bold('\\nSweep Hook Status\\n'));\n\n const hookInstalled = existsSync(hookPath);\n console.log(\n `Hook installed: ${hookInstalled ? chalk.green('Yes') : chalk.yellow('No')}`\n );\n\n if (existsSync(hooksJsonPath)) {\n const hooks = JSON.parse(readFileSync(hooksJsonPath, 'utf-8'));\n const configured =\n hooks['post-tool-use'] && hooks['post-tool-use'].includes('sweep');\n console.log(\n `Hook configured: ${configured ? chalk.green('Yes') : chalk.yellow('No')}`\n );\n } else {\n console.log(`Hook configured: ${chalk.yellow('No hooks.json')}`);\n }\n\n const enabled = process.env.SWEEP_ENABLED !== 'false';\n console.log(\n `Enabled: ${enabled ? chalk.green('Yes') : chalk.yellow('Disabled (SWEEP_ENABLED=false)')}`\n );\n\n if (existsSync(statePath)) {\n try {\n const state = JSON.parse(readFileSync(statePath, 'utf-8'));\n console.log(\n chalk.gray(\n `\\nRecent diffs tracked: ${state.recentDiffs?.length || 0}`\n )\n );\n if (state.lastPrediction) {\n const age = Date.now() - state.lastPrediction.timestamp;\n const ageStr =\n age < 60000\n ? `${Math.round(age / 1000)}s ago`\n : `${Math.round(age / 60000)}m ago`;\n console.log(chalk.gray(`Last prediction: ${ageStr}`));\n }\n } catch {\n // Ignore parse errors\n }\n }\n\n if (!hookInstalled) {\n console.log(chalk.bold('\\nTo install: stackmemory sweep hook install'));\n }\n });\n\n hookCmd\n .command('disable')\n .description('Disable the Sweep hook')\n .action(() => {\n console.log(chalk.bold('\\nTo disable Sweep predictions:\\n'));\n console.log(' Temporarily: export SWEEP_ENABLED=false');\n console.log(' Permanently: Add to ~/.zshrc or ~/.bashrc');\n console.log('');\n console.log('Or remove the hook:');\n console.log(' rm ~/.claude/hooks/post-edit-sweep.js');\n });\n\n hookCmd\n .command('clear')\n .description('Clear hook state (recent diffs and predictions)')\n .action(() => {\n const homeDir = process.env.HOME || '';\n const statePath = join(homeDir, '.stackmemory', 'sweep-state.json');\n\n if (existsSync(statePath)) {\n writeFileSync(\n statePath,\n JSON.stringify(\n {\n recentDiffs: [],\n lastPrediction: null,\n pendingPrediction: null,\n fileContents: {},\n },\n null,\n 2\n )\n );\n console.log(chalk.green('Sweep state cleared'));\n } else {\n console.log(chalk.gray('No state file found'));\n }\n });\n\n cmd.action(async () => {\n const status = await checkSweepStatus();\n console.log(chalk.bold('\\nSweep 1.5B Addon Status\\n'));\n\n console.log(\n `Installed: ${status.installed ? chalk.green('Yes') : chalk.yellow('No')}`\n );\n console.log(\n `Model ready: ${status.model_downloaded ? chalk.green('Yes') : chalk.yellow('No')}`\n );\n\n if (!status.installed) {\n console.log(chalk.bold('\\nRun: stackmemory sweep setup'));\n } else {\n console.log(chalk.bold('\\nUsage: stackmemory sweep predict <file>'));\n }\n });\n\n return cmd;\n}\n\nexport default createSweepCommand();\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/**\n * Sweep command for StackMemory\n * Provides next-edit predictions using the Sweep 1.5B model\n *\n * Usage:\n * stackmemory sweep setup Install dependencies and optionally download model\n * stackmemory sweep status Check if Sweep addon is properly configured\n * stackmemory sweep predict <file> Run prediction on a file\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport {\n existsSync,\n readFileSync,\n writeFileSync,\n mkdirSync,\n copyFileSync,\n chmodSync,\n} from 'fs';\nimport { join } from 'path';\nimport { spawn, execSync } from 'child_process';\n\n// __filename and __dirname are provided by esbuild banner for ESM compatibility\n\ninterface SweepStatus {\n installed: boolean;\n model_downloaded: boolean;\n python_path?: string;\n model_path?: string;\n error?: string;\n}\n\ninterface SweepPredictResult {\n success: boolean;\n predicted_content?: string;\n file_path?: string;\n latency_ms?: number;\n tokens_generated?: number;\n error?: string;\n message?: string;\n}\n\nfunction findPythonScript(): string | null {\n const locations = [\n join(\n process.cwd(),\n 'packages',\n 'sweep-addon',\n 'python',\n 'sweep_predict.py'\n ),\n join(\n process.cwd(),\n 'node_modules',\n '@stackmemoryai',\n 'sweep-addon',\n 'python',\n 'sweep_predict.py'\n ),\n join(process.env.HOME || '', '.stackmemory', 'sweep', 'sweep_predict.py'),\n ];\n\n for (const loc of locations) {\n if (existsSync(loc)) {\n return loc;\n }\n }\n return null;\n}\n\nfunction findHookSource(): string | null {\n const locations = [\n join(process.cwd(), 'templates', 'claude-hooks', 'post-edit-sweep.js'),\n join(\n process.cwd(),\n 'node_modules',\n '@stackmemoryai',\n 'stackmemory',\n 'templates',\n 'claude-hooks',\n 'post-edit-sweep.js'\n ),\n join(\n dirname(dirname(dirname(__dirname))),\n 'templates',\n 'claude-hooks',\n 'post-edit-sweep.js'\n ),\n ];\n\n for (const loc of locations) {\n if (existsSync(loc)) {\n return loc;\n }\n }\n return null;\n}\n\nasync function findPython(): Promise<string | null> {\n const candidates = ['python3', 'python'];\n\n for (const cmd of candidates) {\n try {\n execSync(`${cmd} --version`, { stdio: 'pipe' });\n return cmd;\n } catch {\n continue;\n }\n }\n return null;\n}\n\nasync function checkSweepStatus(): Promise<SweepStatus> {\n const pythonPath = await findPython();\n if (!pythonPath) {\n return {\n installed: false,\n model_downloaded: false,\n error: 'Python not found. Install Python 3.10+',\n };\n }\n\n const scriptPath = findPythonScript();\n if (!scriptPath) {\n return {\n installed: false,\n model_downloaded: false,\n python_path: pythonPath,\n error: 'Sweep addon not installed. Run: stackmemory sweep setup',\n };\n }\n\n const homeDir = process.env.HOME || '';\n const modelPath = join(\n homeDir,\n '.stackmemory',\n 'models',\n 'sweep',\n 'sweep-next-edit-1.5b.q8_0.v2.gguf'\n );\n const modelDownloaded = existsSync(modelPath);\n\n return {\n installed: true,\n model_downloaded: modelDownloaded,\n python_path: pythonPath,\n model_path: modelDownloaded ? modelPath : undefined,\n };\n}\n\nasync function runPrediction(\n filePath: string,\n pythonPath: string,\n scriptPath: string\n): Promise<SweepPredictResult> {\n if (!existsSync(filePath)) {\n return {\n success: false,\n error: 'file_not_found',\n message: `File not found: ${filePath}`,\n };\n }\n\n const currentContent = readFileSync(filePath, 'utf-8');\n\n const input = {\n file_path: filePath,\n current_content: currentContent,\n };\n\n return new Promise((resolve) => {\n const proc = spawn(pythonPath, [scriptPath], {\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n let stdout = '';\n let stderr = '';\n\n proc.stdout.on('data', (data) => (stdout += data));\n proc.stderr.on('data', (data) => (stderr += data));\n\n proc.on('close', (code) => {\n try {\n if (stdout.trim()) {\n const result = JSON.parse(stdout.trim());\n resolve(result);\n } else if (code !== 0) {\n resolve({\n success: false,\n error: 'process_error',\n message: stderr || `Process exited with code ${code}`,\n });\n } else {\n resolve({\n success: false,\n error: 'no_output',\n message: 'No output from prediction script',\n });\n }\n } catch {\n resolve({\n success: false,\n error: 'parse_error',\n message: `Failed to parse output: ${stdout}`,\n });\n }\n });\n\n proc.on('error', (error) => {\n resolve({\n success: false,\n error: 'spawn_error',\n message: error.message,\n });\n });\n\n proc.stdin.write(JSON.stringify(input));\n proc.stdin.end();\n });\n}\n\nexport function createSweepCommand(): Command {\n const cmd = new Command('sweep')\n .description(\n 'Next-edit predictions using Sweep 1.5B model (optional addon)'\n )\n .addHelpText(\n 'after',\n `\nExamples:\n stackmemory sweep setup Install Python dependencies\n stackmemory sweep setup --download Also download the model (1.5GB)\n stackmemory sweep status Check addon status\n stackmemory sweep predict src/app.ts Predict next edit for a file\n\nRequirements:\n - Python 3.10+\n - pip packages: huggingface_hub, llama-cpp-python\n\nThe Sweep 1.5B model predicts what code changes you'll make next based on:\n - Current file content\n - Recent changes (diffs)\n - Context from other files\n\nModel is downloaded from HuggingFace on first prediction (~1.5GB).\n`\n );\n\n cmd\n .command('setup')\n .description('Install Python dependencies for Sweep addon')\n .option('--download', 'Also download the model now')\n .action(async (options) => {\n const spinner = ora('Checking Python...').start();\n\n const pythonPath = await findPython();\n if (!pythonPath) {\n spinner.fail(chalk.red('Python not found'));\n console.log(chalk.gray('Please install Python 3.10+'));\n process.exit(1);\n }\n\n spinner.text = 'Installing Python dependencies...';\n\n try {\n execSync(\n `${pythonPath} -m pip install --quiet huggingface_hub llama-cpp-python`,\n {\n stdio: 'pipe',\n }\n );\n spinner.succeed(chalk.green('Python dependencies installed'));\n } catch {\n spinner.fail(chalk.red('Failed to install dependencies'));\n console.log(\n chalk.gray(\n `Run: ${pythonPath} -m pip install huggingface_hub llama-cpp-python`\n )\n );\n process.exit(1);\n }\n\n if (options.download) {\n const downloadSpinner = ora('Downloading Sweep 1.5B model...').start();\n downloadSpinner.text = 'Downloading model from HuggingFace (~1.5GB)...';\n\n try {\n execSync(\n `${pythonPath} -c \"\nfrom huggingface_hub import hf_hub_download\nimport os\nmodel_dir = os.path.expanduser('~/.stackmemory/models/sweep')\nos.makedirs(model_dir, exist_ok=True)\nhf_hub_download(\n repo_id='sweepai/sweep-next-edit-1.5B',\n filename='sweep-next-edit-1.5b.q8_0.v2.gguf',\n repo_type='model',\n local_dir=model_dir,\n local_dir_use_symlinks=False\n)\n\"`,\n { stdio: 'pipe', timeout: 600000 }\n );\n downloadSpinner.succeed(chalk.green('Model downloaded'));\n } catch {\n downloadSpinner.fail(chalk.red('Model download failed'));\n console.log(chalk.gray('Model will be downloaded on first use'));\n }\n } else {\n console.log(\n chalk.gray('\\nModel will be downloaded on first prediction (~1.5GB)')\n );\n console.log(chalk.gray('Or run: stackmemory sweep setup --download'));\n }\n\n console.log(chalk.bold('\\nSetup complete!'));\n });\n\n cmd\n .command('status')\n .description('Check Sweep addon status')\n .action(async () => {\n console.log(chalk.bold('\\nSweep 1.5B Addon Status\\n'));\n\n const status = await checkSweepStatus();\n\n if (status.error) {\n console.log(chalk.red(`Error: ${status.error}`));\n console.log('');\n }\n\n console.log(\n `Python: ${status.python_path ? chalk.green(status.python_path) : chalk.red('Not found')}`\n );\n console.log(\n `Addon installed: ${status.installed ? chalk.green('Yes') : chalk.yellow('No')}`\n );\n console.log(\n `Model downloaded: ${status.model_downloaded ? chalk.green('Yes') : chalk.yellow('No (will download on first use)')}`\n );\n\n if (status.model_path) {\n console.log(chalk.gray(`Model path: ${status.model_path}`));\n }\n\n if (!status.installed) {\n console.log(chalk.bold('\\nTo install:'));\n console.log(' stackmemory sweep setup');\n }\n });\n\n cmd\n .command('predict <file>')\n .description('Predict next edit for a file')\n .option('-o, --output <path>', 'Write prediction to file instead of stdout')\n .option('--json', 'Output raw JSON result')\n .action(async (file, options) => {\n const status = await checkSweepStatus();\n\n if (!status.installed) {\n console.error(chalk.red('Sweep addon not installed'));\n console.log(chalk.gray('Run: stackmemory sweep setup'));\n process.exit(1);\n }\n\n const scriptPath = findPythonScript();\n if (!scriptPath || !status.python_path) {\n console.error(chalk.red('Could not find Sweep prediction script'));\n process.exit(1);\n }\n\n const spinner = ora('Running prediction...').start();\n\n if (!status.model_downloaded) {\n spinner.text = 'Downloading model (first time only, ~1.5GB)...';\n }\n\n const result = await runPrediction(file, status.python_path, scriptPath);\n\n if (!result.success) {\n spinner.fail(\n chalk.red(`Prediction failed: ${result.message || result.error}`)\n );\n process.exit(1);\n }\n\n spinner.succeed(chalk.green('Prediction complete'));\n\n if (options.json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n console.log(chalk.bold('\\nPredicted content:'));\n console.log(chalk.gray('\u2500'.repeat(50)));\n console.log(result.predicted_content);\n console.log(chalk.gray('\u2500'.repeat(50)));\n\n if (result.latency_ms) {\n console.log(chalk.gray(`Latency: ${result.latency_ms}ms`));\n }\n if (result.tokens_generated) {\n console.log(chalk.gray(`Tokens: ${result.tokens_generated}`));\n }\n\n if (options.output) {\n const { writeFileSync } = await import('fs');\n writeFileSync(options.output, result.predicted_content || '');\n console.log(chalk.green(`\\nWritten to: ${options.output}`));\n }\n });\n\n const hookCmd = cmd\n .command('hook')\n .description('Manage Claude Code integration hook');\n\n hookCmd\n .command('install')\n .description('Install Sweep prediction hook for Claude Code')\n .action(async () => {\n const spinner = ora('Installing Sweep hook...').start();\n\n const homeDir = process.env.HOME || '';\n const hookDir = join(homeDir, '.claude', 'hooks');\n const sweepDir = join(homeDir, '.stackmemory', 'sweep');\n const hooksJsonPath = join(homeDir, '.claude', 'hooks.json');\n\n try {\n mkdirSync(hookDir, { recursive: true });\n mkdirSync(sweepDir, { recursive: true });\n\n const hookSource = findHookSource();\n if (!hookSource) {\n spinner.fail(chalk.red('Hook template not found'));\n console.log(\n chalk.gray('Ensure stackmemory is installed from the repository')\n );\n process.exit(1);\n }\n\n const hookDest = join(hookDir, 'post-edit-sweep.js');\n copyFileSync(hookSource, hookDest);\n chmodSync(hookDest, '755');\n\n const pythonScriptSource = findPythonScript();\n if (pythonScriptSource) {\n const pythonDest = join(sweepDir, 'sweep_predict.py');\n copyFileSync(pythonScriptSource, pythonDest);\n }\n\n if (existsSync(hooksJsonPath)) {\n const hooks = JSON.parse(readFileSync(hooksJsonPath, 'utf-8'));\n if (!hooks['post-tool-use']) {\n hooks['post-tool-use'] = hookDest;\n writeFileSync(hooksJsonPath, JSON.stringify(hooks, null, 2));\n } else if (!hooks['post-tool-use'].includes('sweep')) {\n spinner.warn(chalk.yellow('post-tool-use hook already configured'));\n console.log(chalk.gray(`Existing: ${hooks['post-tool-use']}`));\n console.log(chalk.gray(`Hook installed at: ${hookDest}`));\n console.log(\n chalk.gray('You may need to manually configure the hook chain')\n );\n return;\n }\n } else {\n const hooks = { 'post-tool-use': hookDest };\n writeFileSync(hooksJsonPath, JSON.stringify(hooks, null, 2));\n }\n\n spinner.succeed(chalk.green('Sweep hook installed'));\n console.log(chalk.gray(`Hook: ${hookDest}`));\n console.log(chalk.gray(`Config: ${hooksJsonPath}`));\n console.log('');\n console.log(chalk.bold('Usage:'));\n console.log(' Hook runs automatically after Edit/Write operations');\n console.log(' Predictions appear after 2+ edits in session');\n console.log(' Disable: export SWEEP_ENABLED=false');\n } catch (error) {\n spinner.fail(chalk.red('Installation failed'));\n console.log(chalk.gray((error as Error).message));\n process.exit(1);\n }\n });\n\n hookCmd\n .command('status')\n .description('Check hook installation status')\n .action(async () => {\n const homeDir = process.env.HOME || '';\n const hookPath = join(homeDir, '.claude', 'hooks', 'post-edit-sweep.js');\n const hooksJsonPath = join(homeDir, '.claude', 'hooks.json');\n const statePath = join(homeDir, '.stackmemory', 'sweep-state.json');\n\n console.log(chalk.bold('\\nSweep Hook Status\\n'));\n\n const hookInstalled = existsSync(hookPath);\n console.log(\n `Hook installed: ${hookInstalled ? chalk.green('Yes') : chalk.yellow('No')}`\n );\n\n if (existsSync(hooksJsonPath)) {\n const hooks = JSON.parse(readFileSync(hooksJsonPath, 'utf-8'));\n const configured =\n hooks['post-tool-use'] && hooks['post-tool-use'].includes('sweep');\n console.log(\n `Hook configured: ${configured ? chalk.green('Yes') : chalk.yellow('No')}`\n );\n } else {\n console.log(`Hook configured: ${chalk.yellow('No hooks.json')}`);\n }\n\n const enabled = process.env.SWEEP_ENABLED !== 'false';\n console.log(\n `Enabled: ${enabled ? chalk.green('Yes') : chalk.yellow('Disabled (SWEEP_ENABLED=false)')}`\n );\n\n if (existsSync(statePath)) {\n try {\n const state = JSON.parse(readFileSync(statePath, 'utf-8'));\n console.log(\n chalk.gray(\n `\\nRecent diffs tracked: ${state.recentDiffs?.length || 0}`\n )\n );\n if (state.lastPrediction) {\n const age = Date.now() - state.lastPrediction.timestamp;\n const ageStr =\n age < 60000\n ? `${Math.round(age / 1000)}s ago`\n : `${Math.round(age / 60000)}m ago`;\n console.log(chalk.gray(`Last prediction: ${ageStr}`));\n }\n } catch {\n // Ignore parse errors\n }\n }\n\n if (!hookInstalled) {\n console.log(chalk.bold('\\nTo install: stackmemory sweep hook install'));\n }\n });\n\n hookCmd\n .command('disable')\n .description('Disable the Sweep hook')\n .action(() => {\n console.log(chalk.bold('\\nTo disable Sweep predictions:\\n'));\n console.log(' Temporarily: export SWEEP_ENABLED=false');\n console.log(' Permanently: Add to ~/.zshrc or ~/.bashrc');\n console.log('');\n console.log('Or remove the hook:');\n console.log(' rm ~/.claude/hooks/post-edit-sweep.js');\n });\n\n hookCmd\n .command('clear')\n .description('Clear hook state (recent diffs and predictions)')\n .action(() => {\n const homeDir = process.env.HOME || '';\n const statePath = join(homeDir, '.stackmemory', 'sweep-state.json');\n\n if (existsSync(statePath)) {\n writeFileSync(\n statePath,\n JSON.stringify(\n {\n recentDiffs: [],\n lastPrediction: null,\n pendingPrediction: null,\n fileContents: {},\n },\n null,\n 2\n )\n );\n console.log(chalk.green('Sweep state cleared'));\n } else {\n console.log(chalk.gray('No state file found'));\n }\n });\n\n cmd.action(async () => {\n const status = await checkSweepStatus();\n console.log(chalk.bold('\\nSweep 1.5B Addon Status\\n'));\n\n console.log(\n `Installed: ${status.installed ? chalk.green('Yes') : chalk.yellow('No')}`\n );\n console.log(\n `Model ready: ${status.model_downloaded ? chalk.green('Yes') : chalk.yellow('No')}`\n );\n\n if (!status.installed) {\n console.log(chalk.bold('\\nRun: stackmemory sweep setup'));\n } else {\n console.log(chalk.bold('\\nUsage: stackmemory sweep predict <file>'));\n }\n });\n\n return cmd;\n}\n\nexport default createSweepCommand();\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["writeFileSync"]
|
|
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 Database from "better-sqlite3";
|
|
3
7
|
import { join } from "path";
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/cli/commands/tasks.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * Enhanced Task Commands for StackMemory CLI\n * Provides task management directly from command line\n */\n\nimport { Command } from 'commander';\nimport Database from 'better-sqlite3';\nimport { join } from 'path';\nimport { existsSync } from 'fs';\nimport {\n LinearTaskManager,\n TaskPriority,\n} from '../../features/tasks/linear-task-manager.js';\n\nfunction getTaskStore(projectRoot: string): LinearTaskManager | null {\n const dbPath = join(projectRoot, '.stackmemory', 'context.db');\n if (!existsSync(dbPath)) {\n console.log(\n '\u274C StackMemory not initialized. Run \"stackmemory init\" first.'\n );\n return null;\n }\n \n // Use project isolation for proper task management\n const config = {\n linearApiKey: process.env.STACKMEMORY_LINEAR_API_KEY || process.env.LINEAR_API_KEY,\n autoSync: true,\n syncInterval: 15,\n };\n return new LinearTaskManager(config, undefined, projectRoot);\n}\n\nexport function createTaskCommands(): Command {\n const tasks = new Command('tasks')\n .alias('task')\n .description('Manage tasks from command line');\n\n // List tasks\n tasks\n .command('list')\n .alias('ls')\n .description('List tasks')\n .option(\n '-s, --status <status>',\n 'Filter by status (pending, in_progress, completed, blocked)'\n )\n .option(\n '-p, --priority <priority>',\n 'Filter by priority (urgent, high, medium, low)'\n )\n .option('-q, --query <text>', 'Search in title/description')\n .option('-l, --limit <n>', 'Limit results', '20')\n .option('-a, --all', 'Include completed tasks')\n .action(async (options) => {\n const projectRoot = process.cwd();\n const taskStore = getTaskStore(projectRoot);\n if (!taskStore) return;\n\n try {\n // Get all tasks from DB\n const db = new Database(\n join(projectRoot, '.stackmemory', 'context.db')\n );\n let query = 'SELECT * FROM task_cache WHERE 1=1';\n const params: any[] = [];\n\n if (!options.all && !options.status) {\n query += \" AND status NOT IN ('completed', 'cancelled')\";\n }\n\n if (options.status) {\n query += ' AND status = ?';\n params.push(options.status);\n }\n\n if (options.priority) {\n query += ' AND priority = ?';\n params.push(options.priority);\n }\n\n if (options.query) {\n query += ' AND (title LIKE ? OR description LIKE ?)';\n params.push(`%${options.query}%`, `%${options.query}%`);\n }\n\n query += ' ORDER BY priority ASC, created_at DESC LIMIT ?';\n params.push(parseInt(options.limit));\n\n const rows = db.prepare(query).all(...params) as any[];\n db.close();\n\n if (rows.length === 0) {\n console.log('\uD83D\uDCDD No tasks found');\n return;\n }\n\n console.log(`\\n\uD83D\uDCCB Tasks (${rows.length})\\n`);\n\n const priorityIcon: Record<string, string> = {\n urgent: '\uD83D\uDD34',\n high: '\uD83D\uDFE0',\n medium: '\uD83D\uDFE1',\n low: '\uD83D\uDFE2',\n };\n const statusIcon: Record<string, string> = {\n pending: '\u23F3',\n in_progress: '\uD83D\uDD04',\n completed: '\u2705',\n blocked: '\uD83D\uDEAB',\n cancelled: '\u274C',\n };\n\n rows.forEach((row) => {\n const pIcon = priorityIcon[row.priority] || '\u26AA';\n const sIcon = statusIcon[row.status] || '\u26AA';\n const id = row.id.slice(0, 10);\n console.log(`${sIcon} ${pIcon} [${id}] ${row.title}`);\n if (row.description) {\n const desc = row.description.split('\\n')[0].slice(0, 60);\n console.log(\n ` ${desc}${row.description.length > 60 ? '...' : ''}`\n );\n }\n });\n console.log('');\n } catch (error: unknown) {\n console.error('\u274C Failed to list tasks:', (error as Error).message);\n }\n });\n\n // Add task\n tasks\n .command('add <title>')\n .description('Add a new task')\n .option('-d, --description <text>', 'Task description')\n .option(\n '-p, --priority <priority>',\n 'Priority (urgent, high, medium, low)',\n 'medium'\n )\n .option('-t, --tags <tags>', 'Comma-separated tags')\n .action(async (title, options) => {\n const projectRoot = process.cwd();\n const taskStore = getTaskStore(projectRoot);\n if (!taskStore) return;\n\n try {\n const taskId = taskStore.createTask({\n title,\n description: options.description,\n priority: options.priority as TaskPriority,\n frameId: 'cli',\n tags: options.tags\n ? options.tags.split(',').map((t: string) => t.trim())\n : [],\n });\n\n console.log(`\u2705 Created task: ${taskId.slice(0, 10)}`);\n console.log(` Title: ${title}`);\n console.log(` Priority: ${options.priority}`);\n } catch (error: unknown) {\n console.error('\u274C Failed to add task:', (error as Error).message);\n }\n });\n\n // Start task (set to in_progress)\n tasks\n .command('start <taskId>')\n .description('Start working on a task')\n .action(async (taskId) => {\n const projectRoot = process.cwd();\n const taskStore = getTaskStore(projectRoot);\n if (!taskStore) return;\n\n try {\n // Find task by partial ID\n const task = findTaskByPartialId(projectRoot, taskId);\n if (!task) {\n console.log(`\u274C Task not found: ${taskId}`);\n return;\n }\n\n taskStore.updateTaskStatus(task.id, 'in_progress', 'Started from CLI');\n console.log(`\uD83D\uDD04 Started: ${task.title}`);\n } catch (error: unknown) {\n console.error('\u274C Failed to start task:', (error as Error).message);\n }\n });\n\n // Complete task\n tasks\n .command('done <taskId>')\n .alias('complete')\n .description('Mark task as completed')\n .action(async (taskId) => {\n const projectRoot = process.cwd();\n const taskStore = getTaskStore(projectRoot);\n if (!taskStore) return;\n\n try {\n const task = findTaskByPartialId(projectRoot, taskId);\n if (!task) {\n console.log(`\u274C Task not found: ${taskId}`);\n return;\n }\n\n taskStore.updateTaskStatus(task.id, 'completed', 'Completed from CLI');\n console.log(`\u2705 Completed: ${task.title}`);\n } catch (error: unknown) {\n console.error('\u274C Failed to complete task:', (error as Error).message);\n }\n });\n\n // Show task details\n tasks\n .command('show <taskId>')\n .description('Show task details')\n .action(async (taskId) => {\n const projectRoot = process.cwd();\n\n try {\n const task = findTaskByPartialId(projectRoot, taskId);\n if (!task) {\n console.log(`\u274C Task not found: ${taskId}`);\n return;\n }\n\n console.log(`\\n\uD83D\uDCCB Task Details\\n`);\n console.log(`ID: ${task.id}`);\n console.log(`Title: ${task.title}`);\n console.log(`Status: ${task.status}`);\n console.log(`Priority: ${task.priority}`);\n console.log(\n `Created: ${new Date(task.created_at * 1000).toLocaleString()}`\n );\n if (task.completed_at) {\n console.log(\n `Completed: ${new Date(task.completed_at * 1000).toLocaleString()}`\n );\n }\n if (task.description) {\n console.log(`\\nDescription:\\n${task.description}`);\n }\n const tags = JSON.parse(task.tags || '[]');\n if (tags.length > 0) {\n console.log(`\\nTags: ${tags.join(', ')}`);\n }\n console.log('');\n } catch (error: unknown) {\n console.error('\u274C Failed to show task:', (error as Error).message);\n }\n });\n\n return tasks;\n}\n\nfunction findTaskByPartialId(\n projectRoot: string,\n partialId: string\n): any | null {\n const dbPath = join(projectRoot, '.stackmemory', 'context.db');\n if (!existsSync(dbPath)) return null;\n\n const db = new Database(dbPath);\n\n // Try exact match first, then partial\n let row = db.prepare('SELECT * FROM task_cache WHERE id = ?').get(partialId);\n\n if (!row) {\n row = db\n .prepare('SELECT * FROM task_cache WHERE id LIKE ?')\n .get(`${partialId}%`);\n }\n\n // Also try matching Linear identifier in title\n if (!row && partialId.match(/^ENG-\\d+$/i)) {\n row = db\n .prepare('SELECT * FROM task_cache WHERE title LIKE ?')\n .get(`%[${partialId.toUpperCase()}]%`);\n }\n\n db.close();\n return row || null;\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
3
|
+
import { dirname as __pathDirname } from 'path';
|
|
4
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
5
|
+
const __dirname = __pathDirname(__filename);
|
|
2
6
|
import { Command } from "commander";
|
|
3
7
|
import { TestingAgent } from "../../agents/testing-agent.js";
|
|
4
8
|
import { logger } from "../../core/monitoring/logger.js";
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/cli/commands/test.ts"],
|
|
4
4
|
"sourcesContent": ["#!/usr/bin/env node\n/**\n * Testing command - Generate and execute automated tests\n */\n\nimport { Command } from 'commander';\nimport { TestingAgent } from '../../agents/testing-agent.js';\nimport { logger } from '../../core/monitoring/logger.js';\nimport { join } from 'path';\nimport chalk from 'chalk';\nimport ora from 'ora';\n\nexport function createTestCommand(): Command {\n const testCmd = new Command('test')\n .description('Generate and execute automated tests')\n .option('--verbose', 'Show detailed output')\n .option('--dry-run', 'Preview generated tests without saving');\n\n /**\n * Generate tests for target file/module\n */\n testCmd\n .command('generate <target>')\n .description('Generate tests for target file/module')\n .option('--type <type>', 'Test type: unit|integration|e2e|perf', 'unit')\n .option('--coverage', 'Include coverage report')\n .option('--edge-cases', 'Generate comprehensive edge case tests')\n .option('--output <path>', 'Output directory for generated tests')\n .action(async (target: string, options: any) => {\n const spinner = ora('Generating tests...').start();\n \n try {\n const agent = new TestingAgent();\n const targetPath = join(process.cwd(), target);\n \n // Generate tests based on type\n let testSuite;\n switch (options.type) {\n case 'unit':\n spinner.text = 'Generating unit tests...';\n testSuite = await agent.generateUnitTests(targetPath);\n break;\n \n case 'integration':\n spinner.text = 'Generating integration tests...';\n testSuite = await agent.generateIntegrationTests(targetPath);\n break;\n \n case 'perf':\n spinner.text = 'Generating performance benchmarks...';\n // For performance, we generate benchmarks instead\n const funcName = options.function || 'main';\n const perfReport = await agent.benchmarkPerformance(targetPath, funcName);\n spinner.succeed('Performance benchmark generated');\n console.log(chalk.cyan('\\n\uD83D\uDCCA Performance Report:'));\n console.log(chalk.gray(' Average:'), perfReport.averageTime.toFixed(2), 'ms');\n console.log(chalk.gray(' Min:'), perfReport.minTime.toFixed(2), 'ms');\n console.log(chalk.gray(' Max:'), perfReport.maxTime.toFixed(2), 'ms');\n return;\n \n default:\n spinner.text = 'Generating unit tests...';\n testSuite = await agent.generateUnitTests(targetPath);\n }\n \n // Add edge cases if requested\n if (options.edgeCases && testSuite) {\n spinner.text = 'Adding edge case tests...';\n const functions = await getFunctionsFromFile(targetPath);\n for (const func of functions) {\n const edgeCases = await agent.generateEdgeCaseTests(targetPath, func);\n testSuite.tests.push(...edgeCases);\n }\n }\n \n // Check coverage if requested\n if (options.coverage) {\n spinner.text = 'Analyzing code coverage...';\n const coverage = await agent.analyzeCodeCoverage(targetPath);\n console.log(chalk.cyan('\\n\uD83D\uDCC8 Coverage Report:'));\n console.log(chalk.gray(' Lines:'), `${coverage.lines.percentage}%`);\n console.log(chalk.gray(' Branches:'), `${coverage.branches.percentage}%`);\n console.log(chalk.gray(' Functions:'), `${coverage.functions.percentage}%`);\n \n if (coverage.uncoveredLines.length > 0) {\n console.log(chalk.yellow(' Uncovered lines:'), coverage.uncoveredLines.join(', '));\n }\n }\n \n // Save or preview tests\n if (options.dryRun) {\n spinner.succeed('Test generation complete (dry run)');\n console.log(chalk.cyan('\\n\uD83D\uDD0D Preview of generated tests:'));\n console.log(chalk.gray('\u2500'.repeat(50)));\n console.log(formatTestPreview(testSuite));\n } else {\n await agent.saveTestSuite(testSuite);\n spinner.succeed(`Tests saved to ${testSuite.filePath}`);\n \n // Show summary\n console.log(chalk.green('\\n\u2728 Test Generation Summary:'));\n console.log(chalk.gray(' Type:'), options.type);\n console.log(chalk.gray(' Target:'), target);\n console.log(chalk.gray(' Tests generated:'), testSuite.tests.length);\n console.log(chalk.gray(' Output:'), testSuite.filePath);\n }\n \n } catch (error) {\n spinner.fail('Test generation failed');\n logger.error('Failed to generate tests', { error, target, options });\n console.error(chalk.red('Error:'), (error as Error).message);\n process.exit(1);\n }\n });\n\n /**\n * Analyze coverage and generate missing tests\n */\n testCmd\n .command('coverage')\n .description('Analyze coverage and generate missing tests')\n .option('--generate-missing', 'Generate tests for uncovered code')\n .option('--threshold <percent>', 'Coverage threshold percentage', '80')\n .option('--target <path>', 'Specific file or directory to analyze')\n .action(async (options: any) => {\n const spinner = ora('Analyzing code coverage...').start();\n \n try {\n const agent = new TestingAgent();\n const targetPath = options.target ? join(process.cwd(), options.target) : process.cwd();\n \n // Get coverage report\n const coverage = await agent.analyzeCodeCoverage(targetPath);\n spinner.succeed('Coverage analysis complete');\n \n // Display coverage\n console.log(chalk.cyan('\\n\uD83D\uDCCA Code Coverage Report:'));\n console.log(chalk.gray('\u2500'.repeat(50)));\n displayCoverageReport(coverage);\n \n // Check threshold\n const threshold = parseInt(options.threshold);\n const passed = coverage.lines.percentage >= threshold;\n \n if (passed) {\n console.log(chalk.green(`\\n\u2705 Coverage meets threshold (${threshold}%)`));\n } else {\n console.log(chalk.yellow(`\\n\u26A0\uFE0F Coverage below threshold (${threshold}%)`));\n \n if (options.generateMissing) {\n spinner.start('Generating tests for uncovered code...');\n \n // Generate tests for uncovered lines\n const testSuite = await agent.generateUnitTests(targetPath);\n \n // Focus on uncovered areas\n testSuite.tests = testSuite.tests.filter(test => {\n // Filter to focus on uncovered code\n return true; // This would need more sophisticated logic\n });\n \n await agent.saveTestSuite(testSuite);\n spinner.succeed(`Generated ${testSuite.tests.length} tests for uncovered code`);\n }\n }\n \n } catch (error) {\n spinner.fail('Coverage analysis failed');\n logger.error('Failed to analyze coverage', { error, options });\n console.error(chalk.red('Error:'), (error as Error).message);\n process.exit(1);\n }\n });\n\n /**\n * Execute tests\n */\n testCmd\n .command('run [pattern]')\n .description('Execute tests matching pattern')\n .option('--watch', 'Run tests in watch mode')\n .option('--coverage', 'Generate coverage report')\n .option('--reporter <type>', 'Test reporter type', 'default')\n .action(async (pattern: string = '**/*.test.ts', options: any) => {\n const spinner = ora('Running tests...').start();\n \n try {\n const agent = new TestingAgent();\n \n // Execute tests\n const results = await agent.executeTests(pattern);\n \n if (results.failed === 0) {\n spinner.succeed(`All tests passed (${results.passed} tests)`);\n console.log(chalk.green('\\n\u2705 Test Results:'));\n } else {\n spinner.fail(`${results.failed} tests failed`);\n console.log(chalk.red('\\n\u274C Test Results:'));\n }\n \n // Display results\n console.log(chalk.gray(' Passed:'), results.passed);\n console.log(chalk.gray(' Failed:'), results.failed);\n console.log(chalk.gray(' Skipped:'), results.skipped);\n console.log(chalk.gray(' Duration:'), `${results.duration}ms`);\n \n // Show failures\n if (results.failures.length > 0) {\n console.log(chalk.red('\\n\uD83D\uDCCB Failed Tests:'));\n results.failures.forEach(failure => {\n console.log(chalk.red(` \u2022 ${failure.test}`));\n console.log(chalk.gray(` ${failure.error}`));\n });\n }\n \n process.exit(results.failed > 0 ? 1 : 0);\n \n } catch (error) {\n spinner.fail('Test execution failed');\n logger.error('Failed to execute tests', { error, pattern, options });\n console.error(chalk.red('Error:'), (error as Error).message);\n process.exit(1);\n }\n });\n\n /**\n * Generate mock data\n */\n testCmd\n .command('mock <schema>')\n .description('Generate mock data from schema')\n .option('--count <n>', 'Number of mock items to generate', '1')\n .option('--output <path>', 'Output file for mock data')\n .action(async (schemaPath: string, options: any) => {\n const spinner = ora('Generating mock data...').start();\n \n try {\n const agent = new TestingAgent();\n const schema = require(join(process.cwd(), schemaPath));\n \n const mocks = [];\n for (let i = 0; i < parseInt(options.count); i++) {\n mocks.push(agent.generateMockData(schema));\n }\n \n spinner.succeed(`Generated ${mocks.length} mock items`);\n \n if (options.output) {\n const { writeFileSync } = await import('fs');\n writeFileSync(\n join(process.cwd(), options.output),\n JSON.stringify(mocks, null, 2)\n );\n console.log(chalk.green(`\\n\u2705 Mock data saved to ${options.output}`));\n } else {\n console.log(chalk.cyan('\\n\uD83D\uDCE6 Mock Data:'));\n console.log(JSON.stringify(mocks, null, 2));\n }\n \n } catch (error) {\n spinner.fail('Mock generation failed');\n logger.error('Failed to generate mock data', { error, schemaPath, options });\n console.error(chalk.red('Error:'), (error as Error).message);\n process.exit(1);\n }\n });\n\n /**\n * Create test fixtures\n */\n testCmd\n .command('fixtures <component>')\n .description('Create test fixtures for component')\n .option('--output <path>', 'Output directory for fixtures')\n .action(async (component: string, options: any) => {\n const spinner = ora('Creating test fixtures...').start();\n \n try {\n const agent = new TestingAgent();\n const fixtures = agent.createTestFixtures(component);\n \n spinner.succeed(`Created ${fixtures.length} fixtures for ${component}`);\n \n // Save fixtures\n if (options.output) {\n const { writeFileSync, mkdirSync } = await import('fs');\n const outputDir = join(process.cwd(), options.output);\n mkdirSync(outputDir, { recursive: true });\n \n fixtures.forEach(fixture => {\n const filePath = join(outputDir, `${fixture.name}.fixture.json`);\n writeFileSync(filePath, JSON.stringify(fixture.data, null, 2));\n console.log(chalk.gray(` \u2022 ${fixture.name} \u2192 ${filePath}`));\n });\n \n console.log(chalk.green(`\\n\u2705 Fixtures saved to ${options.output}`));\n } else {\n console.log(chalk.cyan('\\n\uD83D\uDD27 Test Fixtures:'));\n fixtures.forEach(fixture => {\n console.log(chalk.yellow(`\\n${fixture.name}:`));\n console.log(JSON.stringify(fixture.data, null, 2));\n });\n }\n \n } catch (error) {\n spinner.fail('Fixture creation failed');\n logger.error('Failed to create fixtures', { error, component, options });\n console.error(chalk.red('Error:'), (error as Error).message);\n process.exit(1);\n }\n });\n\n /**\n * Benchmark performance\n */\n testCmd\n .command('benchmark <target>')\n .description('Run performance benchmarks')\n .option('--function <name>', 'Specific function to benchmark')\n .option('--iterations <n>', 'Number of iterations', '1000')\n .option('--threshold <ms>', 'Performance threshold in milliseconds')\n .action(async (target: string, options: any) => {\n const spinner = ora('Running performance benchmarks...').start();\n \n try {\n const agent = new TestingAgent();\n const targetPath = join(process.cwd(), target);\n const functionName = options.function || 'default';\n \n const report = await agent.benchmarkPerformance(targetPath, functionName);\n spinner.succeed('Benchmark complete');\n \n // Display report\n console.log(chalk.cyan('\\n\u26A1 Performance Benchmark Report:'));\n console.log(chalk.gray('\u2500'.repeat(50)));\n console.log(chalk.gray(' Function:'), report.function);\n console.log(chalk.gray(' Average:'), `${report.averageTime.toFixed(3)}ms`);\n console.log(chalk.gray(' Min:'), `${report.minTime.toFixed(3)}ms`);\n console.log(chalk.gray(' Max:'), `${report.maxTime.toFixed(3)}ms`);\n console.log(chalk.gray(' Iterations:'), report.iterations);\n console.log(chalk.gray(' Memory:'), `${(report.memoryUsage / 1024 / 1024).toFixed(2)}MB`);\n \n // Check threshold\n if (options.threshold) {\n const threshold = parseFloat(options.threshold);\n if (report.averageTime <= threshold) {\n console.log(chalk.green(`\\n\u2705 Performance within threshold (${threshold}ms)`));\n } else {\n console.log(chalk.red(`\\n\u274C Performance exceeds threshold (${threshold}ms)`));\n process.exit(1);\n }\n }\n \n } catch (error) {\n spinner.fail('Benchmark failed');\n logger.error('Failed to run benchmark', { error, target, options });\n console.error(chalk.red('Error:'), (error as Error).message);\n process.exit(1);\n }\n });\n\n return testCmd;\n}\n\n// Helper functions\n\nasync function getFunctionsFromFile(filePath: string): Promise<string[]> {\n // This would use TypeScript compiler API to extract function names\n // For now, return a placeholder\n return ['main', 'helper', 'util'];\n}\n\nfunction formatTestPreview(testSuite: any): string {\n const preview = [`File: ${testSuite.filePath}`, `Describe: ${testSuite.describe}`, ''];\n \n testSuite.tests.forEach((test: any) => {\n preview.push(` \u2713 ${test.name}`);\n });\n \n return preview.join('\\n');\n}\n\nfunction displayCoverageReport(coverage: any): void {\n const formatPercent = (percent: number) => {\n if (percent >= 80) return chalk.green(`${percent}%`);\n if (percent >= 60) return chalk.yellow(`${percent}%`);\n return chalk.red(`${percent}%`);\n };\n \n console.log(chalk.gray(' Lines:'), formatPercent(coverage.lines.percentage), \n `(${coverage.lines.covered}/${coverage.lines.total})`);\n console.log(chalk.gray(' Branches:'), formatPercent(coverage.branches.percentage),\n `(${coverage.branches.covered}/${coverage.branches.total})`);\n console.log(chalk.gray(' Functions:'), formatPercent(coverage.functions.percentage),\n `(${coverage.functions.covered}/${coverage.functions.total})`);\n}\n\n// Export for CLI\nif (import.meta.url === `file://${process.argv[1]}`) {\n const program = new Command();\n program.addCommand(createTestCommand());\n program.parse(process.argv);\n}"],
|
|
5
|
-
"mappings": "
|
|
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 chalk from "chalk";
|
|
3
7
|
import * as path from "path";
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/cli/commands/workflow.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * Workflow command for StackMemory\n * Manages workflow templates and execution\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport * as path from 'path';\nimport Database from 'better-sqlite3';\nimport { existsSync } from 'fs';\nimport { FrameManager } from '../../core/context/frame-manager.js';\nimport { workflowTemplates } from '../../core/frame/workflow-templates.js';\nimport { sessionManager } from '../../core/session/session-manager.js';\nimport { getEnv, getOptionalEnv } from '../../utils/env.js';\n\nexport function createWorkflowCommand(): Command {\n const cmd = new Command('workflow')\n .description('Manage structured workflow templates')\n .option('-l, --list', 'List available workflow templates')\n .option('-s, --start <template>', 'Start a new workflow from template')\n .option('--status', 'Show status of active workflow')\n .action(async (options) => {\n try {\n const projectRoot = process.cwd();\n const dbPath = path.join(projectRoot, '.stackmemory', 'context.db');\n\n // Check if StackMemory is initialized\n if (!existsSync(dbPath)) {\n console.error(chalk.red('\u2717 StackMemory not initialized'));\n console.log(chalk.yellow('Run: stackmemory init'));\n if (process.env['NODE_ENV'] !== 'test') {\n process.exit(1);\n }\n return;\n }\n\n if (options.list) {\n await listWorkflows();\n } else if (options.start) {\n await startWorkflow(options.start, dbPath);\n } else if (options.status) {\n await showWorkflowStatus(dbPath);\n } else {\n // Default: list workflows\n await listWorkflows();\n }\n } catch (error: unknown) {\n console.error(chalk.red('Error: ' + (error as Error).message));\n if (process.env['NODE_ENV'] !== 'test') {\n process.exit(1);\n }\n }\n });\n\n return cmd;\n}\n\nasync function listWorkflows(): Promise<void> {\n console.log(chalk.bold('\\n\uD83D\uDCCB Available Workflows'));\n console.log('\u2500'.repeat(40));\n\n Object.entries(workflowTemplates).forEach(([key, template]) => {\n console.log(chalk.cyan(`\\n${key}:`));\n console.log(` ${template.description}`);\n console.log(chalk.gray(` Phases: ${template.phases.length}`));\n\n // Show first few phases\n template.phases.slice(0, 3).forEach((phase) => {\n console.log(` \u2022 ${phase.name}`);\n });\n if (template.phases.length > 3) {\n console.log(` ... and ${template.phases.length - 3} more`);\n }\n });\n\n console.log(\n chalk.gray('\\nStart a workflow: stackmemory workflow --start <name>')\n );\n}\n\nasync function startWorkflow(\n workflowName: string,\n dbPath: string\n): Promise<void> {\n const template =\n workflowTemplates[workflowName as keyof typeof workflowTemplates];\n\n if (!template) {\n console.error(chalk.red(`Unknown workflow: ${workflowName}`));\n console.log(chalk.yellow('Use --list to see available workflows'));\n if (process.env['NODE_ENV'] !== 'test') {\n process.exit(1);\n }\n return;\n }\n\n const db = new Database(dbPath);\n\n try {\n // Initialize session\n await sessionManager.initialize();\n const session = await sessionManager.getOrCreateSession({\n projectPath: process.cwd(),\n });\n\n const frameManager = new FrameManager(db, session.projectId);\n\n // Create root frame for workflow\n const workflowId = await frameManager.createFrame({\n type: 'workflow',\n name: `${template.name} Workflow`,\n metadata: {\n workflow: workflowName,\n phases: template.phases.map((p: any) => p.name),\n currentPhase: 0,\n startTime: Date.now(),\n },\n });\n\n console.log(chalk.green(`\u2713 Started ${workflowName} workflow`));\n console.log(chalk.cyan(`Workflow ID: ${workflowId}`));\n console.log('\\nPhases:');\n\n template.phases.forEach((phase, index) => {\n const marker = index === 0 ? '\u2192' : ' ';\n console.log(`${marker} ${index + 1}. ${phase.name}`);\n });\n\n console.log(chalk.gray('\\nTrack progress: stackmemory workflow --status'));\n } finally {\n db.close();\n }\n}\n\nasync function showWorkflowStatus(dbPath: string): Promise<void> {\n const db = new Database(dbPath);\n\n try {\n // Get active workflow frames\n const workflows = db\n .prepare(\n `\n SELECT * FROM frames \n WHERE type = 'workflow' \n AND state = 'active'\n ORDER BY created_at DESC\n `\n )\n .all() as any[];\n\n if (workflows.length === 0) {\n console.log(chalk.yellow('No active workflows'));\n return;\n }\n\n console.log(chalk.bold('\\n\uD83D\uDD04 Active Workflows'));\n console.log('\u2500'.repeat(40));\n\n workflows.forEach((workflow) => {\n const metadata = workflow.metadata ? JSON.parse(workflow.metadata) : {};\n const elapsed = Date.now() - workflow.created_at;\n const minutes = Math.floor(elapsed / 60000);\n\n console.log(chalk.cyan(`\\n${workflow.name}`));\n console.log(` ID: ${workflow.frame_id}`);\n console.log(` Duration: ${minutes} minutes`);\n\n if (metadata.phases) {\n const current = metadata.currentPhase || 0;\n console.log(` Phase: ${current + 1}/${metadata.phases.length}`);\n console.log(` Current: ${metadata.phases[current]}`);\n }\n });\n } finally {\n db.close();\n }\n}\n\nexport default createWorkflowCommand;\n"],
|
|
5
|
-
"mappings": "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",
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
3
|
+
import { dirname as __pathDirname } from 'path';
|
|
4
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
5
|
+
const __dirname = __pathDirname(__filename);
|
|
2
6
|
import { WorktreeManager } from "../../core/worktree/worktree-manager.js";
|
|
3
7
|
import { ProjectManager } from "../../core/projects/project-manager.js";
|
|
4
8
|
import { FrameManager } from "../../core/context/frame-manager.js";
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/cli/commands/worktree.ts"],
|
|
4
4
|
"sourcesContent": ["#!/usr/bin/env node\n/**\n * Git Worktree Management CLI Commands\n * Handles multiple StackMemory instances across git worktrees\n */\n\nimport { Command } from 'commander';\nimport { WorktreeManager } from '../../core/worktree/worktree-manager.js';\nimport { ProjectManager } from '../../core/projects/project-manager.js';\nimport { FrameManager } from '../../core/context/frame-manager.js';\nimport chalk from 'chalk';\nimport Table from 'cli-table3';\nimport { join } from 'path';\nimport { existsSync } from 'fs';\nimport Database from 'better-sqlite3';\nimport { execSync, execFileSync } from 'child_process';\nimport shellEscape from 'shell-escape';\nimport { z } from 'zod';\n\n// Input validation schemas\nconst BranchNameSchema = z.string()\n .min(1, 'Branch name cannot be empty')\n .max(100, 'Branch name too long')\n .regex(/^[a-zA-Z0-9._/-]+$/, 'Branch name contains invalid characters')\n .refine(name => !name.includes('..'), 'Branch name cannot contain \"..\"')\n .refine(name => !name.includes(';'), 'Branch name cannot contain \";\"')\n .refine(name => !name.includes('&'), 'Branch name cannot contain \"&\"')\n .refine(name => !name.includes('|'), 'Branch name cannot contain \"|\"')\n .refine(name => !name.includes('$'), 'Branch name cannot contain \"$\"')\n .refine(name => !name.includes('`'), 'Branch name cannot contain \"`\"');\n\nconst PathSchema = z.string()\n .min(1, 'Path cannot be empty')\n .max(500, 'Path too long')\n .regex(/^[a-zA-Z0-9._/-]+$/, 'Path contains invalid characters')\n .refine(path => !path.includes('..'), 'Path cannot contain \"..\"');\n\nconst CommitSchema = z.string()\n .min(1, 'Commit reference cannot be empty')\n .max(100, 'Commit reference too long')\n .regex(/^[a-zA-Z0-9._/-]+$/, 'Commit reference contains invalid characters');\n\nexport function registerWorktreeCommands(program: Command): void {\n const worktree = program\n .command('worktree')\n .alias('wt')\n .description('Manage StackMemory across git worktrees');\n\n // Enable/disable worktree support\n worktree\n .command('enable')\n .description('Enable worktree support')\n .option(\n '--isolate',\n 'Isolate contexts between worktrees (default: true)',\n true\n )\n .option('--auto-detect', 'Auto-detect worktrees (default: true)', true)\n .option('--sync-interval <minutes>', 'Context sync interval', '15')\n .action(async (options) => {\n const manager = WorktreeManager.getInstance();\n\n manager.saveConfig({\n enabled: true,\n autoDetect: options.autoDetect,\n isolateContexts: options.isolate,\n shareGlobalContext: false,\n syncInterval: parseInt(options.syncInterval),\n });\n\n console.log(chalk.green('\u2713 Worktree support enabled'));\n\n // Auto-detect current worktrees\n const worktrees = manager.detectWorktrees();\n if (worktrees.length > 0) {\n console.log(chalk.cyan(`\\nDetected ${worktrees.length} worktree(s):`));\n worktrees.forEach((wt) => {\n const marker = wt.isMainWorktree ? ' (main)' : '';\n console.log(chalk.gray(` - ${wt.branch}${marker} at ${wt.path}`));\n });\n }\n });\n\n worktree\n .command('disable')\n .description('Disable worktree support')\n .action(() => {\n const manager = WorktreeManager.getInstance();\n manager.setEnabled(false);\n console.log(chalk.yellow('\u26A0 Worktree support disabled'));\n });\n\n // List all worktrees\n worktree\n .command('list')\n .alias('ls')\n .description('List all git worktrees with StackMemory status')\n .option('-v, --verbose', 'Show detailed information')\n .action((options) => {\n const manager = WorktreeManager.getInstance();\n const worktrees = manager.detectWorktrees();\n\n if (worktrees.length === 0) {\n console.log(chalk.yellow('No worktrees found in current repository'));\n return;\n }\n\n const table = new Table({\n head: ['Branch', 'Path', 'Type', 'Context', 'Last Activity'],\n style: { head: ['cyan'] },\n });\n\n for (const wt of worktrees) {\n const type = wt.isMainWorktree\n ? 'Main'\n : wt.isDetached\n ? 'Detached'\n : 'Branch';\n\n // Check for context\n let contextStatus = '\u2014';\n let lastActivity = '\u2014';\n\n try {\n const context = manager.getWorktreeContext(wt.path);\n if (existsSync(context.dbPath)) {\n contextStatus = '\u2713 Active';\n\n // Get last activity\n const db = new Database(context.dbPath);\n const lastEvent = db\n .prepare('SELECT MAX(created_at) as last FROM events')\n .get() as any;\n\n if (lastEvent?.last) {\n const date = new Date(lastEvent.last);\n lastActivity = date.toLocaleDateString();\n }\n\n db.close();\n } else {\n contextStatus = '\u25CB Not initialized';\n }\n } catch (error: unknown) {\n contextStatus = '\u2717 Error';\n }\n\n table.push([\n wt.branch || 'detached',\n options.verbose\n ? wt.path\n : `.../${wt.path.split('/').slice(-2).join('/')}`,\n type,\n contextStatus,\n lastActivity,\n ]);\n }\n\n console.log(chalk.cyan('\\nGit Worktrees:\\n'));\n console.log(table.toString());\n\n if (manager.isEnabled()) {\n console.log(chalk.gray('\\n\u2713 Worktree support is enabled'));\n const config = manager.getConfig();\n if (config.isolateContexts) {\n console.log(\n chalk.gray(' - Contexts are isolated between worktrees')\n );\n }\n if (config.autoDetect) {\n console.log(chalk.gray(' - Auto-detection is enabled'));\n }\n } else {\n console.log(chalk.gray('\\n\u25CB Worktree support is disabled'));\n console.log(\n chalk.gray(' Run \"stackmemory worktree enable\" to activate')\n );\n }\n });\n\n // Status of current worktree\n worktree\n .command('status')\n .description('Show status of current worktree')\n .action(async () => {\n const manager = WorktreeManager.getInstance();\n const currentPath = process.cwd();\n\n // Detect current worktree\n const worktrees = manager.detectWorktrees(currentPath);\n const current = worktrees.find((w: any) =>\n currentPath.startsWith(w.path)\n );\n\n if (!current) {\n console.log(chalk.yellow('Not in a git worktree'));\n return;\n }\n\n console.log(chalk.cyan('Current Worktree:\\n'));\n console.log(chalk.gray(' Branch:'), current.branch || 'detached');\n console.log(chalk.gray(' Path:'), current.path);\n console.log(\n chalk.gray(' Type:'),\n current.isMainWorktree ? 'Main' : 'Branch'\n );\n console.log(chalk.gray(' Commit:'), current.commit.substring(0, 8));\n\n if (manager.isEnabled()) {\n try {\n const context = manager.getWorktreeContext(current.path);\n console.log(chalk.gray(' Context Path:'), context.contextPath);\n\n if (existsSync(context.dbPath)) {\n const db = new Database(context.dbPath);\n\n // Get statistics\n const stats = db\n .prepare(\n `\n SELECT \n (SELECT COUNT(*) FROM frames) as frames,\n (SELECT COUNT(*) FROM events) as events,\n (SELECT COUNT(*) FROM contexts) as contexts\n `\n )\n .get() as any;\n\n console.log(chalk.cyan('\\nContext Statistics:'));\n console.log(chalk.gray(' Frames:'), stats.frames);\n console.log(chalk.gray(' Events:'), stats.events);\n console.log(chalk.gray(' Contexts:'), stats.contexts);\n\n db.close();\n } else {\n console.log(chalk.yellow('\\nContext not initialized'));\n console.log(chalk.gray(' Run \"stackmemory init\" to initialize'));\n }\n } catch (error: unknown) {\n console.log(\n chalk.red('\\nError accessing context:'),\n (error as Error).message\n );\n }\n } else {\n console.log(chalk.gray('\\nWorktree support is disabled'));\n }\n });\n\n // Create new worktree with StackMemory\n worktree\n .command('create <branch>')\n .description('Create new git worktree with StackMemory context')\n .option('-p, --path <path>', 'Worktree path (default: ../repo-branch)')\n .option('--from <commit>', 'Create branch from commit/branch')\n .option('--init', 'Initialize StackMemory immediately')\n .action(async (branch, options) => {\n const manager = WorktreeManager.getInstance();\n const projectManager = ProjectManager.getInstance();\n\n try {\n // Validate and sanitize inputs\n const validatedBranch = BranchNameSchema.parse(branch);\n \n // Get current project info\n const project = await projectManager.detectProject();\n const worktreePath = options.path || `../${project.name}-${validatedBranch}`;\n \n // Validate path if provided\n if (options.path) {\n PathSchema.parse(options.path);\n }\n \n // Validate commit reference if provided\n if (options.from) {\n CommitSchema.parse(options.from);\n }\n\n // Create git worktree using execFileSync for safety\n const gitArgs = ['worktree', 'add', '-b', validatedBranch, worktreePath];\n if (options.from) {\n gitArgs.push(options.from);\n }\n\n console.log(chalk.gray(`Creating worktree: git ${gitArgs.join(' ')}`));\n execFileSync('git', gitArgs, { stdio: 'inherit' });\n\n console.log(chalk.green(`\u2713 Created worktree at ${worktreePath}`));\n\n // Set up StackMemory context if enabled\n if (manager.isEnabled()) {\n const context = manager.getWorktreeContext(worktreePath);\n console.log(\n chalk.green(`\u2713 Created isolated context at ${context.contextPath}`)\n );\n\n if (options.init) {\n // Initialize StackMemory in new worktree\n const db = new Database(context.dbPath);\n new FrameManager(db, project.id);\n db.close();\n\n console.log(chalk.green('\u2713 StackMemory initialized in worktree'));\n }\n }\n\n console.log(chalk.cyan('\\nNext steps:'));\n console.log(chalk.gray(` cd ${worktreePath}`));\n if (!options.init && manager.isEnabled()) {\n console.log(chalk.gray(' stackmemory init'));\n }\n console.log(chalk.gray(' # Start working in isolated context'));\n } catch (error: unknown) {\n if (error instanceof z.ZodError) {\n console.error(chalk.red('Invalid input:'));\n error.errors.forEach(err => {\n console.error(chalk.red(` ${err.path.join('.')}: ${err.message}`));\n });\n } else {\n console.error(\n chalk.red('Failed to create worktree:'),\n (error as Error).message\n );\n }\n process.exit(1);\n }\n });\n\n // Sync contexts between worktrees\n worktree\n .command('sync')\n .description('Sync contexts between worktrees')\n .option('-s, --source <branch>', 'Source worktree branch')\n .option('-t, --target <branch>', 'Target worktree branch')\n .option('--type <type>', 'Sync type: push|pull|merge (default: merge)')\n .action(async (options) => {\n const manager = WorktreeManager.getInstance();\n\n if (!manager.isEnabled()) {\n console.log(chalk.yellow('Worktree support is not enabled'));\n console.log(chalk.gray('Run \"stackmemory worktree enable\" first'));\n return;\n }\n\n const worktrees = manager.detectWorktrees();\n\n // Find source and target\n let source = worktrees.find((w: any) => w.branch === options.source);\n let target = worktrees.find((w: any) => w.branch === options.target);\n\n if (!source || !target) {\n // Interactive selection if not specified\n const inquirer = await import('inquirer');\n\n if (!source) {\n const { sourceBranch } = await inquirer.default.prompt([\n {\n type: 'list',\n name: 'sourceBranch',\n message: 'Select source worktree:',\n choices: worktrees.map((w: any) => ({\n name: `${w.branch} (${w.path})`,\n value: w,\n })),\n },\n ]);\n source = sourceBranch;\n }\n\n if (!target) {\n const { targetBranch } = await inquirer.default.prompt([\n {\n type: 'list',\n name: 'targetBranch',\n message: 'Select target worktree:',\n choices: worktrees\n .filter((w: any) => w.path !== source!.path)\n .map((w: any) => ({\n name: `${w.branch} (${w.path})`,\n value: w,\n })),\n },\n ]);\n target = targetBranch;\n }\n }\n\n console.log(chalk.cyan('Syncing contexts:'));\n console.log(chalk.gray(' Source:'), source!.branch);\n console.log(chalk.gray(' Target:'), target!.branch);\n console.log(chalk.gray(' Type:'), options.type || 'merge');\n\n try {\n await manager.syncContexts(\n source!.path,\n target!.path,\n options.type || 'merge'\n );\n\n console.log(chalk.green('\u2713 Context sync completed'));\n } catch (error: unknown) {\n console.error(chalk.red('Sync failed:'), (error as Error).message);\n process.exit(1);\n }\n });\n\n // Clean up stale worktree contexts\n worktree\n .command('cleanup')\n .description('Clean up stale worktree contexts')\n .option('--dry-run', 'Show what would be cleaned without doing it')\n .action((options) => {\n const manager = WorktreeManager.getInstance();\n\n if (options.dryRun) {\n console.log(chalk.yellow('Dry run - no changes will be made'));\n }\n\n console.log(chalk.cyan('Checking for stale worktree contexts...'));\n\n if (!options.dryRun) {\n manager.cleanupStaleContexts();\n console.log(chalk.green('\u2713 Cleanup completed'));\n } else {\n const active = manager.detectWorktrees();\n const stored = manager.listActiveWorktrees();\n\n const activePaths = new Set(active.map((w: any) => w.path));\n const stale = stored.filter((w: any) => !activePaths.has(w.path));\n\n if (stale.length === 0) {\n console.log(chalk.green('No stale contexts found'));\n } else {\n console.log(chalk.yellow(`Found ${stale.length} stale context(s):`));\n stale.forEach((w) => {\n console.log(chalk.gray(` - ${w.branch} at ${w.path}`));\n });\n }\n }\n });\n\n // Switch to different worktree\n worktree\n .command('switch <branch>')\n .description('Switch to a different worktree')\n .action(async (branch) => {\n const manager = WorktreeManager.getInstance();\n const worktrees = manager.detectWorktrees();\n\n const target = worktrees.find((w: any) => w.branch === branch);\n if (!target) {\n console.log(chalk.red(`Worktree '${branch}' not found`));\n console.log(chalk.gray('\\nAvailable worktrees:'));\n worktrees.forEach((w) => {\n console.log(chalk.gray(` - ${w.branch}`));\n });\n process.exit(1);\n }\n\n console.log(chalk.cyan(`Switching to worktree: ${branch}`));\n console.log(chalk.gray(`Path: ${target.path}`));\n console.log(chalk.gray('\\nRun this command to switch:'));\n console.log(chalk.green(` cd ${target.path}`));\n\n if (manager.isEnabled() && !target.isMainWorktree) {\n console.log(chalk.gray('\\nThis worktree has an isolated context'));\n }\n });\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;AAOA,SAAS,uBAAuB;AAChC,SAAS,sBAAsB;AAC/B,SAAS,oBAAoB;AAC7B,OAAO,WAAW;AAClB,OAAO,WAAW;AAElB,SAAS,kBAAkB;AAC3B,OAAO,cAAc;AACrB,SAAmB,oBAAoB;AAEvC,SAAS,SAAS;AAGlB,MAAM,mBAAmB,EAAE,OAAO,EAC/B,IAAI,GAAG,6BAA6B,EACpC,IAAI,KAAK,sBAAsB,EAC/B,MAAM,sBAAsB,yCAAyC,EACrE,OAAO,UAAQ,CAAC,KAAK,SAAS,IAAI,GAAG,iCAAiC,EACtE,OAAO,UAAQ,CAAC,KAAK,SAAS,GAAG,GAAG,gCAAgC,EACpE,OAAO,UAAQ,CAAC,KAAK,SAAS,GAAG,GAAG,gCAAgC,EACpE,OAAO,UAAQ,CAAC,KAAK,SAAS,GAAG,GAAG,gCAAgC,EACpE,OAAO,UAAQ,CAAC,KAAK,SAAS,GAAG,GAAG,gCAAgC,EACpE,OAAO,UAAQ,CAAC,KAAK,SAAS,GAAG,GAAG,gCAAgC;AAEvE,MAAM,aAAa,EAAE,OAAO,EACzB,IAAI,GAAG,sBAAsB,EAC7B,IAAI,KAAK,eAAe,EACxB,MAAM,sBAAsB,kCAAkC,EAC9D,OAAO,UAAQ,CAAC,KAAK,SAAS,IAAI,GAAG,0BAA0B;AAElE,MAAM,eAAe,EAAE,OAAO,EAC3B,IAAI,GAAG,kCAAkC,EACzC,IAAI,KAAK,2BAA2B,EACpC,MAAM,sBAAsB,8CAA8C;AAEtE,SAAS,yBAAyB,SAAwB;AAC/D,QAAM,WAAW,QACd,QAAQ,UAAU,EAClB,MAAM,IAAI,EACV,YAAY,yCAAyC;AAGxD,WACG,QAAQ,QAAQ,EAChB,YAAY,yBAAyB,EACrC;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,EACF,EACC,OAAO,iBAAiB,yCAAyC,IAAI,EACrE,OAAO,6BAA6B,yBAAyB,IAAI,EACjE,OAAO,OAAO,YAAY;AACzB,UAAM,UAAU,gBAAgB,YAAY;AAE5C,YAAQ,WAAW;AAAA,MACjB,SAAS;AAAA,MACT,YAAY,QAAQ;AAAA,MACpB,iBAAiB,QAAQ;AAAA,MACzB,oBAAoB;AAAA,MACpB,cAAc,SAAS,QAAQ,YAAY;AAAA,IAC7C,CAAC;AAED,YAAQ,IAAI,MAAM,MAAM,iCAA4B,CAAC;AAGrD,UAAM,YAAY,QAAQ,gBAAgB;AAC1C,QAAI,UAAU,SAAS,GAAG;AACxB,cAAQ,IAAI,MAAM,KAAK;AAAA,WAAc,UAAU,MAAM,eAAe,CAAC;AACrE,gBAAU,QAAQ,CAAC,OAAO;AACxB,cAAM,SAAS,GAAG,iBAAiB,YAAY;AAC/C,gBAAQ,IAAI,MAAM,KAAK,OAAO,GAAG,MAAM,GAAG,MAAM,OAAO,GAAG,IAAI,EAAE,CAAC;AAAA,MACnE,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAEH,WACG,QAAQ,SAAS,EACjB,YAAY,0BAA0B,EACtC,OAAO,MAAM;AACZ,UAAM,UAAU,gBAAgB,YAAY;AAC5C,YAAQ,WAAW,KAAK;AACxB,YAAQ,IAAI,MAAM,OAAO,kCAA6B,CAAC;AAAA,EACzD,CAAC;AAGH,WACG,QAAQ,MAAM,EACd,MAAM,IAAI,EACV,YAAY,gDAAgD,EAC5D,OAAO,iBAAiB,2BAA2B,EACnD,OAAO,CAAC,YAAY;AACnB,UAAM,UAAU,gBAAgB,YAAY;AAC5C,UAAM,YAAY,QAAQ,gBAAgB;AAE1C,QAAI,UAAU,WAAW,GAAG;AAC1B,cAAQ,IAAI,MAAM,OAAO,0CAA0C,CAAC;AACpE;AAAA,IACF;AAEA,UAAM,QAAQ,IAAI,MAAM;AAAA,MACtB,MAAM,CAAC,UAAU,QAAQ,QAAQ,WAAW,eAAe;AAAA,MAC3D,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;AAAA,IAC1B,CAAC;AAED,eAAW,MAAM,WAAW;AAC1B,YAAM,OAAO,GAAG,iBACZ,SACA,GAAG,aACD,aACA;AAGN,UAAI,gBAAgB;AACpB,UAAI,eAAe;AAEnB,UAAI;AACF,cAAM,UAAU,QAAQ,mBAAmB,GAAG,IAAI;AAClD,YAAI,WAAW,QAAQ,MAAM,GAAG;AAC9B,0BAAgB;AAGhB,gBAAM,KAAK,IAAI,SAAS,QAAQ,MAAM;AACtC,gBAAM,YAAY,GACf,QAAQ,4CAA4C,EACpD,IAAI;AAEP,cAAI,WAAW,MAAM;AACnB,kBAAM,OAAO,IAAI,KAAK,UAAU,IAAI;AACpC,2BAAe,KAAK,mBAAmB;AAAA,UACzC;AAEA,aAAG,MAAM;AAAA,QACX,OAAO;AACL,0BAAgB;AAAA,QAClB;AAAA,MACF,SAAS,OAAgB;AACvB,wBAAgB;AAAA,MAClB;AAEA,YAAM,KAAK;AAAA,QACT,GAAG,UAAU;AAAA,QACb,QAAQ,UACJ,GAAG,OACH,OAAO,GAAG,KAAK,MAAM,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,GAAG,CAAC;AAAA,QACjD;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAEA,YAAQ,IAAI,MAAM,KAAK,oBAAoB,CAAC;AAC5C,YAAQ,IAAI,MAAM,SAAS,CAAC;AAE5B,QAAI,QAAQ,UAAU,GAAG;AACvB,cAAQ,IAAI,MAAM,KAAK,sCAAiC,CAAC;AACzD,YAAM,SAAS,QAAQ,UAAU;AACjC,UAAI,OAAO,iBAAiB;AAC1B,gBAAQ;AAAA,UACN,MAAM,KAAK,6CAA6C;AAAA,QAC1D;AAAA,MACF;AACA,UAAI,OAAO,YAAY;AACrB,gBAAQ,IAAI,MAAM,KAAK,+BAA+B,CAAC;AAAA,MACzD;AAAA,IACF,OAAO;AACL,cAAQ,IAAI,MAAM,KAAK,uCAAkC,CAAC;AAC1D,cAAQ;AAAA,QACN,MAAM,KAAK,iDAAiD;AAAA,MAC9D;AAAA,IACF;AAAA,EACF,CAAC;AAGH,WACG,QAAQ,QAAQ,EAChB,YAAY,iCAAiC,EAC7C,OAAO,YAAY;AAClB,UAAM,UAAU,gBAAgB,YAAY;AAC5C,UAAM,cAAc,QAAQ,IAAI;AAGhC,UAAM,YAAY,QAAQ,gBAAgB,WAAW;AACrD,UAAM,UAAU,UAAU;AAAA,MAAK,CAAC,MAC9B,YAAY,WAAW,EAAE,IAAI;AAAA,IAC/B;AAEA,QAAI,CAAC,SAAS;AACZ,cAAQ,IAAI,MAAM,OAAO,uBAAuB,CAAC;AACjD;AAAA,IACF;AAEA,YAAQ,IAAI,MAAM,KAAK,qBAAqB,CAAC;AAC7C,YAAQ,IAAI,MAAM,KAAK,WAAW,GAAG,QAAQ,UAAU,UAAU;AACjE,YAAQ,IAAI,MAAM,KAAK,SAAS,GAAG,QAAQ,IAAI;AAC/C,YAAQ;AAAA,MACN,MAAM,KAAK,SAAS;AAAA,MACpB,QAAQ,iBAAiB,SAAS;AAAA,IACpC;AACA,YAAQ,IAAI,MAAM,KAAK,WAAW,GAAG,QAAQ,OAAO,UAAU,GAAG,CAAC,CAAC;AAEnE,QAAI,QAAQ,UAAU,GAAG;AACvB,UAAI;AACF,cAAM,UAAU,QAAQ,mBAAmB,QAAQ,IAAI;AACvD,gBAAQ,IAAI,MAAM,KAAK,iBAAiB,GAAG,QAAQ,WAAW;AAE9D,YAAI,WAAW,QAAQ,MAAM,GAAG;AAC9B,gBAAM,KAAK,IAAI,SAAS,QAAQ,MAAM;AAGtC,gBAAM,QAAQ,GACX;AAAA,YACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAMF,EACC,IAAI;AAEP,kBAAQ,IAAI,MAAM,KAAK,uBAAuB,CAAC;AAC/C,kBAAQ,IAAI,MAAM,KAAK,WAAW,GAAG,MAAM,MAAM;AACjD,kBAAQ,IAAI,MAAM,KAAK,WAAW,GAAG,MAAM,MAAM;AACjD,kBAAQ,IAAI,MAAM,KAAK,aAAa,GAAG,MAAM,QAAQ;AAErD,aAAG,MAAM;AAAA,QACX,OAAO;AACL,kBAAQ,IAAI,MAAM,OAAO,2BAA2B,CAAC;AACrD,kBAAQ,IAAI,MAAM,KAAK,wCAAwC,CAAC;AAAA,QAClE;AAAA,MACF,SAAS,OAAgB;AACvB,gBAAQ;AAAA,UACN,MAAM,IAAI,4BAA4B;AAAA,UACrC,MAAgB;AAAA,QACnB;AAAA,MACF;AAAA,IACF,OAAO;AACL,cAAQ,IAAI,MAAM,KAAK,gCAAgC,CAAC;AAAA,IAC1D;AAAA,EACF,CAAC;AAGH,WACG,QAAQ,iBAAiB,EACzB,YAAY,kDAAkD,EAC9D,OAAO,qBAAqB,yCAAyC,EACrE,OAAO,mBAAmB,kCAAkC,EAC5D,OAAO,UAAU,oCAAoC,EACrD,OAAO,OAAO,QAAQ,YAAY;AACjC,UAAM,UAAU,gBAAgB,YAAY;AAC5C,UAAM,iBAAiB,eAAe,YAAY;AAElD,QAAI;AAEF,YAAM,kBAAkB,iBAAiB,MAAM,MAAM;AAGrD,YAAM,UAAU,MAAM,eAAe,cAAc;AACnD,YAAM,eAAe,QAAQ,QAAQ,MAAM,QAAQ,IAAI,IAAI,eAAe;AAG1E,UAAI,QAAQ,MAAM;AAChB,mBAAW,MAAM,QAAQ,IAAI;AAAA,MAC/B;AAGA,UAAI,QAAQ,MAAM;AAChB,qBAAa,MAAM,QAAQ,IAAI;AAAA,MACjC;AAGA,YAAM,UAAU,CAAC,YAAY,OAAO,MAAM,iBAAiB,YAAY;AACvE,UAAI,QAAQ,MAAM;AAChB,gBAAQ,KAAK,QAAQ,IAAI;AAAA,MAC3B;AAEA,cAAQ,IAAI,MAAM,KAAK,0BAA0B,QAAQ,KAAK,GAAG,CAAC,EAAE,CAAC;AACrE,mBAAa,OAAO,SAAS,EAAE,OAAO,UAAU,CAAC;AAEjD,cAAQ,IAAI,MAAM,MAAM,8BAAyB,YAAY,EAAE,CAAC;AAGhE,UAAI,QAAQ,UAAU,GAAG;AACvB,cAAM,UAAU,QAAQ,mBAAmB,YAAY;AACvD,gBAAQ;AAAA,UACN,MAAM,MAAM,sCAAiC,QAAQ,WAAW,EAAE;AAAA,QACpE;AAEA,YAAI,QAAQ,MAAM;AAEhB,gBAAM,KAAK,IAAI,SAAS,QAAQ,MAAM;AACtC,cAAI,aAAa,IAAI,QAAQ,EAAE;AAC/B,aAAG,MAAM;AAET,kBAAQ,IAAI,MAAM,MAAM,4CAAuC,CAAC;AAAA,QAClE;AAAA,MACF;AAEA,cAAQ,IAAI,MAAM,KAAK,eAAe,CAAC;AACvC,cAAQ,IAAI,MAAM,KAAK,QAAQ,YAAY,EAAE,CAAC;AAC9C,UAAI,CAAC,QAAQ,QAAQ,QAAQ,UAAU,GAAG;AACxC,gBAAQ,IAAI,MAAM,KAAK,oBAAoB,CAAC;AAAA,MAC9C;AACA,cAAQ,IAAI,MAAM,KAAK,uCAAuC,CAAC;AAAA,IACjE,SAAS,OAAgB;AACvB,UAAI,iBAAiB,EAAE,UAAU;AAC/B,gBAAQ,MAAM,MAAM,IAAI,gBAAgB,CAAC;AACzC,cAAM,OAAO,QAAQ,SAAO;AAC1B,kBAAQ,MAAM,MAAM,IAAI,KAAK,IAAI,KAAK,KAAK,GAAG,CAAC,KAAK,IAAI,OAAO,EAAE,CAAC;AAAA,QACpE,CAAC;AAAA,MACH,OAAO;AACL,gBAAQ;AAAA,UACN,MAAM,IAAI,4BAA4B;AAAA,UACrC,MAAgB;AAAA,QACnB;AAAA,MACF;AACA,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,CAAC;AAGH,WACG,QAAQ,MAAM,EACd,YAAY,iCAAiC,EAC7C,OAAO,yBAAyB,wBAAwB,EACxD,OAAO,yBAAyB,wBAAwB,EACxD,OAAO,iBAAiB,6CAA6C,EACrE,OAAO,OAAO,YAAY;AACzB,UAAM,UAAU,gBAAgB,YAAY;AAE5C,QAAI,CAAC,QAAQ,UAAU,GAAG;AACxB,cAAQ,IAAI,MAAM,OAAO,iCAAiC,CAAC;AAC3D,cAAQ,IAAI,MAAM,KAAK,yCAAyC,CAAC;AACjE;AAAA,IACF;AAEA,UAAM,YAAY,QAAQ,gBAAgB;AAG1C,QAAI,SAAS,UAAU,KAAK,CAAC,MAAW,EAAE,WAAW,QAAQ,MAAM;AACnE,QAAI,SAAS,UAAU,KAAK,CAAC,MAAW,EAAE,WAAW,QAAQ,MAAM;AAEnE,QAAI,CAAC,UAAU,CAAC,QAAQ;AAEtB,YAAM,WAAW,MAAM,OAAO,UAAU;AAExC,UAAI,CAAC,QAAQ;AACX,cAAM,EAAE,aAAa,IAAI,MAAM,SAAS,QAAQ,OAAO;AAAA,UACrD;AAAA,YACE,MAAM;AAAA,YACN,MAAM;AAAA,YACN,SAAS;AAAA,YACT,SAAS,UAAU,IAAI,CAAC,OAAY;AAAA,cAClC,MAAM,GAAG,EAAE,MAAM,KAAK,EAAE,IAAI;AAAA,cAC5B,OAAO;AAAA,YACT,EAAE;AAAA,UACJ;AAAA,QACF,CAAC;AACD,iBAAS;AAAA,MACX;AAEA,UAAI,CAAC,QAAQ;AACX,cAAM,EAAE,aAAa,IAAI,MAAM,SAAS,QAAQ,OAAO;AAAA,UACrD;AAAA,YACE,MAAM;AAAA,YACN,MAAM;AAAA,YACN,SAAS;AAAA,YACT,SAAS,UACN,OAAO,CAAC,MAAW,EAAE,SAAS,OAAQ,IAAI,EAC1C,IAAI,CAAC,OAAY;AAAA,cAChB,MAAM,GAAG,EAAE,MAAM,KAAK,EAAE,IAAI;AAAA,cAC5B,OAAO;AAAA,YACT,EAAE;AAAA,UACN;AAAA,QACF,CAAC;AACD,iBAAS;AAAA,MACX;AAAA,IACF;AAEA,YAAQ,IAAI,MAAM,KAAK,mBAAmB,CAAC;AAC3C,YAAQ,IAAI,MAAM,KAAK,WAAW,GAAG,OAAQ,MAAM;AACnD,YAAQ,IAAI,MAAM,KAAK,WAAW,GAAG,OAAQ,MAAM;AACnD,YAAQ,IAAI,MAAM,KAAK,SAAS,GAAG,QAAQ,QAAQ,OAAO;AAE1D,QAAI;AACF,YAAM,QAAQ;AAAA,QACZ,OAAQ;AAAA,QACR,OAAQ;AAAA,QACR,QAAQ,QAAQ;AAAA,MAClB;AAEA,cAAQ,IAAI,MAAM,MAAM,+BAA0B,CAAC;AAAA,IACrD,SAAS,OAAgB;AACvB,cAAQ,MAAM,MAAM,IAAI,cAAc,GAAI,MAAgB,OAAO;AACjE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,CAAC;AAGH,WACG,QAAQ,SAAS,EACjB,YAAY,kCAAkC,EAC9C,OAAO,aAAa,6CAA6C,EACjE,OAAO,CAAC,YAAY;AACnB,UAAM,UAAU,gBAAgB,YAAY;AAE5C,QAAI,QAAQ,QAAQ;AAClB,cAAQ,IAAI,MAAM,OAAO,mCAAmC,CAAC;AAAA,IAC/D;AAEA,YAAQ,IAAI,MAAM,KAAK,yCAAyC,CAAC;AAEjE,QAAI,CAAC,QAAQ,QAAQ;AACnB,cAAQ,qBAAqB;AAC7B,cAAQ,IAAI,MAAM,MAAM,0BAAqB,CAAC;AAAA,IAChD,OAAO;AACL,YAAM,SAAS,QAAQ,gBAAgB;AACvC,YAAM,SAAS,QAAQ,oBAAoB;AAE3C,YAAM,cAAc,IAAI,IAAI,OAAO,IAAI,CAAC,MAAW,EAAE,IAAI,CAAC;AAC1D,YAAM,QAAQ,OAAO,OAAO,CAAC,MAAW,CAAC,YAAY,IAAI,EAAE,IAAI,CAAC;AAEhE,UAAI,MAAM,WAAW,GAAG;AACtB,gBAAQ,IAAI,MAAM,MAAM,yBAAyB,CAAC;AAAA,MACpD,OAAO;AACL,gBAAQ,IAAI,MAAM,OAAO,SAAS,MAAM,MAAM,oBAAoB,CAAC;AACnE,cAAM,QAAQ,CAAC,MAAM;AACnB,kBAAQ,IAAI,MAAM,KAAK,OAAO,EAAE,MAAM,OAAO,EAAE,IAAI,EAAE,CAAC;AAAA,QACxD,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AAGH,WACG,QAAQ,iBAAiB,EACzB,YAAY,gCAAgC,EAC5C,OAAO,OAAO,WAAW;AACxB,UAAM,UAAU,gBAAgB,YAAY;AAC5C,UAAM,YAAY,QAAQ,gBAAgB;AAE1C,UAAM,SAAS,UAAU,KAAK,CAAC,MAAW,EAAE,WAAW,MAAM;AAC7D,QAAI,CAAC,QAAQ;AACX,cAAQ,IAAI,MAAM,IAAI,aAAa,MAAM,aAAa,CAAC;AACvD,cAAQ,IAAI,MAAM,KAAK,wBAAwB,CAAC;AAChD,gBAAU,QAAQ,CAAC,MAAM;AACvB,gBAAQ,IAAI,MAAM,KAAK,OAAO,EAAE,MAAM,EAAE,CAAC;AAAA,MAC3C,CAAC;AACD,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,YAAQ,IAAI,MAAM,KAAK,0BAA0B,MAAM,EAAE,CAAC;AAC1D,YAAQ,IAAI,MAAM,KAAK,SAAS,OAAO,IAAI,EAAE,CAAC;AAC9C,YAAQ,IAAI,MAAM,KAAK,+BAA+B,CAAC;AACvD,YAAQ,IAAI,MAAM,MAAM,QAAQ,OAAO,IAAI,EAAE,CAAC;AAE9C,QAAI,QAAQ,UAAU,KAAK,CAAC,OAAO,gBAAgB;AACjD,cAAQ,IAAI,MAAM,KAAK,yCAAyC,CAAC;AAAA,IACnE;AAAA,EACF,CAAC;AACL;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/cli/index.js
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
3
|
+
import { dirname as __pathDirname } from 'path';
|
|
4
|
+
const __filename = __fileURLToPath(import.meta.url);
|
|
5
|
+
const __dirname = __pathDirname(__filename);
|
|
2
6
|
process.env["STACKMEMORY_CLI"] = "true";
|
|
3
7
|
import "dotenv/config";
|
|
4
8
|
import { initializeTracing, trace } from "../core/trace/index.js";
|
|
@@ -38,6 +42,10 @@ import { registerLoginCommand } from "./commands/login.js";
|
|
|
38
42
|
import { registerSignupCommand } from "./commands/signup.js";
|
|
39
43
|
import { registerLogoutCommand, registerDbCommands } from "./commands/db.js";
|
|
40
44
|
import { createSweepCommand } from "./commands/sweep.js";
|
|
45
|
+
import { createHooksCommand } from "./commands/hooks.js";
|
|
46
|
+
import { createShellCommand } from "./commands/shell.js";
|
|
47
|
+
import { createAPICommand } from "./commands/api.js";
|
|
48
|
+
import { createCleanupProcessesCommand } from "./commands/cleanup-processes.js";
|
|
41
49
|
import { ProjectManager } from "../core/projects/project-manager.js";
|
|
42
50
|
import Database from "better-sqlite3";
|
|
43
51
|
import { join } from "path";
|
|
@@ -49,7 +57,7 @@ import {
|
|
|
49
57
|
enableChromaDB,
|
|
50
58
|
getStorageModeDescription
|
|
51
59
|
} from "../core/config/storage-config.js";
|
|
52
|
-
const VERSION = "0.5.
|
|
60
|
+
const VERSION = "0.5.5";
|
|
53
61
|
UpdateChecker.checkForUpdates(VERSION, true).catch(() => {
|
|
54
62
|
});
|
|
55
63
|
program.name("stackmemory").description(
|
|
@@ -425,6 +433,10 @@ program.addCommand(qualityCommand);
|
|
|
425
433
|
program.addCommand(createRalphCommand());
|
|
426
434
|
program.addCommand(serviceCommand);
|
|
427
435
|
program.addCommand(createSweepCommand());
|
|
436
|
+
program.addCommand(createHooksCommand());
|
|
437
|
+
program.addCommand(createShellCommand());
|
|
438
|
+
program.addCommand(createAPICommand());
|
|
439
|
+
program.addCommand(createCleanupProcessesCommand());
|
|
428
440
|
program.command("dashboard").description("Display monitoring dashboard in terminal").option("-w, --watch", "Auto-refresh dashboard").option("-i, --interval <seconds>", "Refresh interval in seconds", "5").action(async (options) => {
|
|
429
441
|
const { dashboardCommand } = await import("./commands/dashboard.js");
|
|
430
442
|
await dashboardCommand.handler(options);
|