@stackmemoryai/stackmemory 0.5.59 → 0.5.61
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +105 -1
- package/dist/src/cli/claude-sm.js +130 -50
- package/dist/src/cli/claude-sm.js.map +2 -2
- package/dist/src/cli/index.js +18 -3
- package/dist/src/cli/index.js.map +3 -3
- package/dist/src/core/extensions/custom-tools.js +567 -0
- package/dist/src/core/extensions/custom-tools.js.map +7 -0
- package/dist/src/core/extensions/index.js +55 -0
- package/dist/src/core/extensions/index.js.map +7 -0
- package/dist/src/core/extensions/loader.js +709 -0
- package/dist/src/core/extensions/loader.js.map +7 -0
- package/dist/src/core/extensions/plugin-system.js +506 -0
- package/dist/src/core/extensions/plugin-system.js.map +7 -0
- package/dist/src/core/extensions/provider-adapter.js +617 -0
- package/dist/src/core/extensions/provider-adapter.js.map +7 -0
- package/dist/src/core/extensions/sandbox-runtime.js +664 -0
- package/dist/src/core/extensions/sandbox-runtime.js.map +7 -0
- package/dist/src/core/storage/chromadb-adapter.js +32 -6
- package/dist/src/core/storage/chromadb-adapter.js.map +2 -2
- package/dist/src/skills/repo-ingestion-skill.js +35 -12
- package/dist/src/skills/repo-ingestion-skill.js.map +2 -2
- package/package.json +11 -7
- package/scripts/background-sync-manager.js +145 -83
- package/scripts/claude-sm-autostart.js +17 -12
- package/scripts/gepa/README.md +275 -0
- package/scripts/gepa/config.json +53 -0
- package/scripts/gepa/evals/coding-tasks.jsonl +5 -0
- package/scripts/gepa/evals/fixtures/buggy-loop.js +18 -0
- package/scripts/gepa/evals/fixtures/callback-hell.js +53 -0
- package/scripts/gepa/generations/gen-000/baseline.md +124 -0
- package/scripts/gepa/hooks/auto-optimize.js +494 -0
- package/scripts/gepa/hooks/eval-tracker.js +203 -0
- package/scripts/gepa/hooks/reflect.js +311 -0
- package/scripts/gepa/optimize.js +611 -0
- package/scripts/gepa/state.json +14 -0
- package/scripts/test-pre-publish-quick.sh +1 -1
- package/dist/agents/core/agent-task-manager.js +0 -527
- package/dist/agents/core/agent-task-manager.js.map +0 -7
- package/dist/agents/testing-agent.js +0 -614
- package/dist/agents/testing-agent.js.map +0 -7
- package/dist/agents/verifiers/base-verifier.js +0 -133
- package/dist/agents/verifiers/base-verifier.js.map +0 -7
- package/dist/agents/verifiers/formatter-verifier.js +0 -130
- package/dist/agents/verifiers/formatter-verifier.js.map +0 -7
- package/dist/agents/verifiers/llm-judge.js +0 -252
- package/dist/agents/verifiers/llm-judge.js.map +0 -7
- package/dist/cli/auto-detect.js +0 -321
- package/dist/cli/auto-detect.js.map +0 -7
- package/dist/cli/browser-test.js +0 -33
- package/dist/cli/browser-test.js.map +0 -7
- package/dist/cli/claude-sm-danger.js +0 -21
- package/dist/cli/claude-sm-danger.js.map +0 -7
- package/dist/cli/claude-sm.js +0 -1156
- package/dist/cli/claude-sm.js.map +0 -7
- package/dist/cli/codex-sm-danger.js +0 -21
- package/dist/cli/codex-sm-danger.js.map +0 -7
- package/dist/cli/codex-sm.js +0 -349
- package/dist/cli/codex-sm.js.map +0 -7
- package/dist/cli/commands/api.js +0 -232
- package/dist/cli/commands/api.js.map +0 -7
- package/dist/cli/commands/auto-background.js +0 -180
- package/dist/cli/commands/auto-background.js.map +0 -7
- package/dist/cli/commands/cleanup-processes.js +0 -68
- package/dist/cli/commands/cleanup-processes.js.map +0 -7
- package/dist/cli/commands/clear.js +0 -202
- package/dist/cli/commands/clear.js.map +0 -7
- package/dist/cli/commands/config.js +0 -445
- package/dist/cli/commands/config.js.map +0 -7
- package/dist/cli/commands/context-rehydrate.js +0 -751
- package/dist/cli/commands/context-rehydrate.js.map +0 -7
- package/dist/cli/commands/context.js +0 -343
- package/dist/cli/commands/context.js.map +0 -7
- package/dist/cli/commands/daemon.js +0 -392
- package/dist/cli/commands/daemon.js.map +0 -7
- package/dist/cli/commands/dashboard.js +0 -210
- package/dist/cli/commands/dashboard.js.map +0 -7
- package/dist/cli/commands/db.js +0 -147
- package/dist/cli/commands/db.js.map +0 -7
- package/dist/cli/commands/decision.js +0 -266
- package/dist/cli/commands/decision.js.map +0 -7
- package/dist/cli/commands/discovery.js +0 -279
- package/dist/cli/commands/discovery.js.map +0 -7
- package/dist/cli/commands/handoff.js +0 -624
- package/dist/cli/commands/handoff.js.map +0 -7
- package/dist/cli/commands/hooks.js +0 -298
- package/dist/cli/commands/hooks.js.map +0 -7
- package/dist/cli/commands/linear-unified.js +0 -353
- package/dist/cli/commands/linear-unified.js.map +0 -7
- package/dist/cli/commands/linear.js +0 -529
- package/dist/cli/commands/linear.js.map +0 -7
- package/dist/cli/commands/log.js +0 -169
- package/dist/cli/commands/log.js.map +0 -7
- package/dist/cli/commands/login.js +0 -172
- package/dist/cli/commands/login.js.map +0 -7
- package/dist/cli/commands/migrate.js +0 -240
- package/dist/cli/commands/migrate.js.map +0 -7
- package/dist/cli/commands/model.js +0 -533
- package/dist/cli/commands/model.js.map +0 -7
- package/dist/cli/commands/monitor.js +0 -313
- package/dist/cli/commands/monitor.js.map +0 -7
- package/dist/cli/commands/onboard.js +0 -536
- package/dist/cli/commands/onboard.js.map +0 -7
- package/dist/cli/commands/projects.js +0 -199
- package/dist/cli/commands/projects.js.map +0 -7
- package/dist/cli/commands/quality.js +0 -413
- package/dist/cli/commands/quality.js.map +0 -7
- package/dist/cli/commands/ralph.js +0 -909
- package/dist/cli/commands/ralph.js.map +0 -7
- package/dist/cli/commands/retrieval.js +0 -248
- package/dist/cli/commands/retrieval.js.map +0 -7
- package/dist/cli/commands/search.js +0 -173
- package/dist/cli/commands/search.js.map +0 -7
- package/dist/cli/commands/service.js +0 -749
- package/dist/cli/commands/service.js.map +0 -7
- package/dist/cli/commands/session.js +0 -200
- package/dist/cli/commands/session.js.map +0 -7
- package/dist/cli/commands/settings.js +0 -306
- package/dist/cli/commands/settings.js.map +0 -7
- package/dist/cli/commands/setup.js +0 -701
- package/dist/cli/commands/setup.js.map +0 -7
- package/dist/cli/commands/shell.js +0 -249
- package/dist/cli/commands/shell.js.map +0 -7
- package/dist/cli/commands/signup.js +0 -50
- package/dist/cli/commands/signup.js.map +0 -7
- package/dist/cli/commands/skills.js +0 -470
- package/dist/cli/commands/skills.js.map +0 -7
- package/dist/cli/commands/sms-notify.js +0 -795
- package/dist/cli/commands/sms-notify.js.map +0 -7
- package/dist/cli/commands/storage-tier.js +0 -183
- package/dist/cli/commands/storage-tier.js.map +0 -7
- package/dist/cli/commands/storage.js +0 -360
- package/dist/cli/commands/storage.js.map +0 -7
- package/dist/cli/commands/sweep.js +0 -249
- package/dist/cli/commands/sweep.js.map +0 -7
- package/dist/cli/commands/tasks.js +0 -213
- package/dist/cli/commands/tasks.js.map +0 -7
- package/dist/cli/commands/test.js +0 -286
- package/dist/cli/commands/test.js.map +0 -7
- package/dist/cli/commands/workflow.js +0 -142
- package/dist/cli/commands/workflow.js.map +0 -7
- package/dist/cli/commands/worktree.js +0 -319
- package/dist/cli/commands/worktree.js.map +0 -7
- package/dist/cli/index.js +0 -594
- package/dist/cli/index.js.map +0 -7
- package/dist/cli/opencode-sm.js +0 -448
- package/dist/cli/opencode-sm.js.map +0 -7
- package/dist/cli/utils/viewer.js +0 -96
- package/dist/cli/utils/viewer.js.map +0 -7
- package/dist/core/analytics/team-analytics.js +0 -378
- package/dist/core/analytics/team-analytics.js.map +0 -7
- package/dist/core/config/config-manager.js +0 -398
- package/dist/core/config/config-manager.js.map +0 -7
- package/dist/core/config/feature-flags.js +0 -76
- package/dist/core/config/feature-flags.js.map +0 -7
- package/dist/core/config/storage-config.js +0 -115
- package/dist/core/config/storage-config.js.map +0 -7
- package/dist/core/config/types.js +0 -144
- package/dist/core/config/types.js.map +0 -7
- package/dist/core/context/auto-context.js +0 -80
- package/dist/core/context/auto-context.js.map +0 -7
- package/dist/core/context/dual-stack-manager.js +0 -870
- package/dist/core/context/dual-stack-manager.js.map +0 -7
- package/dist/core/context/enhanced-rehydration.js +0 -994
- package/dist/core/context/enhanced-rehydration.js.map +0 -7
- package/dist/core/context/frame-database.js +0 -479
- package/dist/core/context/frame-database.js.map +0 -7
- package/dist/core/context/frame-digest.js +0 -250
- package/dist/core/context/frame-digest.js.map +0 -7
- package/dist/core/context/frame-handoff-manager.js +0 -778
- package/dist/core/context/frame-handoff-manager.js.map +0 -7
- package/dist/core/context/frame-lifecycle-hooks.js +0 -119
- package/dist/core/context/frame-lifecycle-hooks.js.map +0 -7
- package/dist/core/context/frame-manager.js +0 -1069
- package/dist/core/context/frame-manager.js.map +0 -7
- package/dist/core/context/frame-recovery.js +0 -302
- package/dist/core/context/frame-recovery.js.map +0 -7
- package/dist/core/context/frame-stack.js +0 -314
- package/dist/core/context/frame-stack.js.map +0 -7
- package/dist/core/context/frame-types.js +0 -5
- package/dist/core/context/frame-types.js.map +0 -7
- package/dist/core/context/incremental-gc.js +0 -290
- package/dist/core/context/incremental-gc.js.map +0 -7
- package/dist/core/context/index.js +0 -25
- package/dist/core/context/index.js.map +0 -7
- package/dist/core/context/model-aware-compaction.js +0 -623
- package/dist/core/context/model-aware-compaction.js.map +0 -7
- package/dist/core/context/permission-manager.js +0 -185
- package/dist/core/context/permission-manager.js.map +0 -7
- package/dist/core/context/recursive-context-manager.js +0 -592
- package/dist/core/context/recursive-context-manager.js.map +0 -7
- package/dist/core/context/refactored-frame-manager.js +0 -754
- package/dist/core/context/refactored-frame-manager.js.map +0 -7
- package/dist/core/context/shared-context-layer.js +0 -621
- package/dist/core/context/shared-context-layer.js.map +0 -7
- package/dist/core/context/stack-merge-resolver.js +0 -749
- package/dist/core/context/stack-merge-resolver.js.map +0 -7
- package/dist/core/context/validation.js +0 -130
- package/dist/core/context/validation.js.map +0 -7
- package/dist/core/database/batch-operations.js +0 -384
- package/dist/core/database/batch-operations.js.map +0 -7
- package/dist/core/database/connection-pool.js +0 -330
- package/dist/core/database/connection-pool.js.map +0 -7
- package/dist/core/database/database-adapter.js +0 -60
- package/dist/core/database/database-adapter.js.map +0 -7
- package/dist/core/database/migration-manager.js +0 -614
- package/dist/core/database/migration-manager.js.map +0 -7
- package/dist/core/database/paradedb-adapter.js +0 -990
- package/dist/core/database/paradedb-adapter.js.map +0 -7
- package/dist/core/database/query-cache.js +0 -298
- package/dist/core/database/query-cache.js.map +0 -7
- package/dist/core/database/query-router.js +0 -430
- package/dist/core/database/query-router.js.map +0 -7
- package/dist/core/database/sqlite-adapter.js +0 -738
- package/dist/core/database/sqlite-adapter.js.map +0 -7
- package/dist/core/digest/enhanced-hybrid-digest.js +0 -277
- package/dist/core/digest/enhanced-hybrid-digest.js.map +0 -7
- package/dist/core/digest/frame-digest-integration.js +0 -176
- package/dist/core/digest/frame-digest-integration.js.map +0 -7
- package/dist/core/digest/hybrid-digest-generator.js +0 -553
- package/dist/core/digest/hybrid-digest-generator.js.map +0 -7
- package/dist/core/digest/index.js +0 -9
- package/dist/core/digest/index.js.map +0 -7
- package/dist/core/digest/types.js +0 -25
- package/dist/core/digest/types.js.map +0 -7
- package/dist/core/errors/error-utils.js +0 -208
- package/dist/core/errors/error-utils.js.map +0 -7
- package/dist/core/errors/index.js +0 -521
- package/dist/core/errors/index.js.map +0 -7
- package/dist/core/errors/recovery.js +0 -269
- package/dist/core/errors/recovery.js.map +0 -7
- package/dist/core/execution/parallel-executor.js +0 -258
- package/dist/core/execution/parallel-executor.js.map +0 -7
- package/dist/core/frame/workflow-templates.js +0 -319
- package/dist/core/frame/workflow-templates.js.map +0 -7
- package/dist/core/merge/conflict-detector.js +0 -431
- package/dist/core/merge/conflict-detector.js.map +0 -7
- package/dist/core/merge/index.js +0 -9
- package/dist/core/merge/index.js.map +0 -7
- package/dist/core/merge/resolution-engine.js +0 -558
- package/dist/core/merge/resolution-engine.js.map +0 -7
- package/dist/core/merge/stack-diff.js +0 -532
- package/dist/core/merge/stack-diff.js.map +0 -7
- package/dist/core/merge/unified-merge-resolver.js +0 -303
- package/dist/core/merge/unified-merge-resolver.js.map +0 -7
- package/dist/core/models/fallback-monitor.js +0 -232
- package/dist/core/models/fallback-monitor.js.map +0 -7
- package/dist/core/models/model-router.js +0 -340
- package/dist/core/models/model-router.js.map +0 -7
- package/dist/core/monitoring/error-handler.js +0 -49
- package/dist/core/monitoring/error-handler.js.map +0 -7
- package/dist/core/monitoring/logger.js +0 -202
- package/dist/core/monitoring/logger.js.map +0 -7
- package/dist/core/monitoring/metrics.js +0 -172
- package/dist/core/monitoring/metrics.js.map +0 -7
- package/dist/core/monitoring/progress-tracker.js +0 -189
- package/dist/core/monitoring/progress-tracker.js.map +0 -7
- package/dist/core/monitoring/session-monitor.js +0 -300
- package/dist/core/monitoring/session-monitor.js.map +0 -7
- package/dist/core/performance/context-cache.js +0 -273
- package/dist/core/performance/context-cache.js.map +0 -7
- package/dist/core/performance/index.js +0 -11
- package/dist/core/performance/index.js.map +0 -7
- package/dist/core/performance/lazy-context-loader.js +0 -327
- package/dist/core/performance/lazy-context-loader.js.map +0 -7
- package/dist/core/performance/monitor.js +0 -221
- package/dist/core/performance/monitor.js.map +0 -7
- package/dist/core/performance/optimized-frame-context.js +0 -345
- package/dist/core/performance/optimized-frame-context.js.map +0 -7
- package/dist/core/performance/performance-benchmark.js +0 -277
- package/dist/core/performance/performance-benchmark.js.map +0 -7
- package/dist/core/performance/performance-profiler.js +0 -370
- package/dist/core/performance/performance-profiler.js.map +0 -7
- package/dist/core/performance/streaming-jsonl-parser.js +0 -195
- package/dist/core/performance/streaming-jsonl-parser.js.map +0 -7
- package/dist/core/persistence/postgres-adapter.js +0 -349
- package/dist/core/persistence/postgres-adapter.js.map +0 -7
- package/dist/core/projects/project-isolation.js +0 -201
- package/dist/core/projects/project-isolation.js.map +0 -7
- package/dist/core/projects/project-manager.js +0 -697
- package/dist/core/projects/project-manager.js.map +0 -7
- package/dist/core/query/query-parser.js +0 -370
- package/dist/core/query/query-parser.js.map +0 -7
- package/dist/core/query/query-templates.js +0 -321
- package/dist/core/query/query-templates.js.map +0 -7
- package/dist/core/retrieval/context-retriever.js +0 -479
- package/dist/core/retrieval/context-retriever.js.map +0 -7
- package/dist/core/retrieval/graph-retrieval.js +0 -662
- package/dist/core/retrieval/graph-retrieval.js.map +0 -7
- package/dist/core/retrieval/hierarchical-retrieval.js +0 -656
- package/dist/core/retrieval/hierarchical-retrieval.js.map +0 -7
- package/dist/core/retrieval/index.js +0 -8
- package/dist/core/retrieval/index.js.map +0 -7
- package/dist/core/retrieval/llm-context-retrieval.js +0 -613
- package/dist/core/retrieval/llm-context-retrieval.js.map +0 -7
- package/dist/core/retrieval/llm-provider.js +0 -151
- package/dist/core/retrieval/llm-provider.js.map +0 -7
- package/dist/core/retrieval/retrieval-audit.js +0 -236
- package/dist/core/retrieval/retrieval-audit.js.map +0 -7
- package/dist/core/retrieval/retrieval-benchmarks.js +0 -521
- package/dist/core/retrieval/retrieval-benchmarks.js.map +0 -7
- package/dist/core/retrieval/summary-generator.js +0 -589
- package/dist/core/retrieval/summary-generator.js.map +0 -7
- package/dist/core/retrieval/types.js +0 -21
- package/dist/core/retrieval/types.js.map +0 -7
- package/dist/core/security/index.js +0 -35
- package/dist/core/security/index.js.map +0 -7
- package/dist/core/security/input-sanitizer.js +0 -321
- package/dist/core/security/input-sanitizer.js.map +0 -7
- package/dist/core/session/clear-survival.js +0 -465
- package/dist/core/session/clear-survival.js.map +0 -7
- package/dist/core/session/enhanced-handoff.js +0 -792
- package/dist/core/session/enhanced-handoff.js.map +0 -7
- package/dist/core/session/handoff-generator.js +0 -343
- package/dist/core/session/handoff-generator.js.map +0 -7
- package/dist/core/session/index.js +0 -15
- package/dist/core/session/index.js.map +0 -7
- package/dist/core/session/session-manager.js +0 -347
- package/dist/core/session/session-manager.js.map +0 -7
- package/dist/core/skills/index.js +0 -7
- package/dist/core/skills/index.js.map +0 -7
- package/dist/core/skills/skill-storage.js +0 -764
- package/dist/core/skills/skill-storage.js.map +0 -7
- package/dist/core/skills/types.js +0 -193
- package/dist/core/skills/types.js.map +0 -7
- package/dist/core/storage/chromadb-adapter.js +0 -354
- package/dist/core/storage/chromadb-adapter.js.map +0 -7
- package/dist/core/storage/infinite-storage.js +0 -510
- package/dist/core/storage/infinite-storage.js.map +0 -7
- package/dist/core/storage/railway-optimized-storage.js +0 -591
- package/dist/core/storage/railway-optimized-storage.js.map +0 -7
- package/dist/core/storage/remote-storage.js +0 -489
- package/dist/core/storage/remote-storage.js.map +0 -7
- package/dist/core/storage/two-tier-storage.js +0 -766
- package/dist/core/storage/two-tier-storage.js.map +0 -7
- package/dist/core/trace/cli-trace-wrapper.js +0 -132
- package/dist/core/trace/cli-trace-wrapper.js.map +0 -7
- package/dist/core/trace/db-trace-wrapper.js +0 -247
- package/dist/core/trace/db-trace-wrapper.js.map +0 -7
- package/dist/core/trace/debug-trace.js +0 -417
- package/dist/core/trace/debug-trace.js.map +0 -7
- package/dist/core/trace/index.js +0 -109
- package/dist/core/trace/index.js.map +0 -7
- package/dist/core/trace/linear-api-wrapper.js +0 -178
- package/dist/core/trace/linear-api-wrapper.js.map +0 -7
- package/dist/core/trace/trace-demo.js +0 -154
- package/dist/core/trace/trace-demo.js.map +0 -7
- package/dist/core/trace/trace-detector.demo.js +0 -142
- package/dist/core/trace/trace-detector.demo.js.map +0 -7
- package/dist/core/trace/trace-detector.js +0 -528
- package/dist/core/trace/trace-detector.js.map +0 -7
- package/dist/core/trace/trace-store.js +0 -345
- package/dist/core/trace/trace-store.js.map +0 -7
- package/dist/core/trace/types.js +0 -77
- package/dist/core/trace/types.js.map +0 -7
- package/dist/core/types.js +0 -5
- package/dist/core/types.js.map +0 -7
- package/dist/core/utils/async-mutex.js +0 -114
- package/dist/core/utils/async-mutex.js.map +0 -7
- package/dist/core/utils/compression.js +0 -83
- package/dist/core/utils/compression.js.map +0 -7
- package/dist/core/utils/update-checker.js +0 -218
- package/dist/core/utils/update-checker.js.map +0 -7
- package/dist/core/worktree/worktree-manager.js +0 -465
- package/dist/core/worktree/worktree-manager.js.map +0 -7
- package/dist/daemon/daemon-config.js +0 -149
- package/dist/daemon/daemon-config.js.map +0 -7
- package/dist/daemon/services/context-service.js +0 -122
- package/dist/daemon/services/context-service.js.map +0 -7
- package/dist/daemon/services/linear-service.js +0 -136
- package/dist/daemon/services/linear-service.js.map +0 -7
- package/dist/daemon/session-daemon.js +0 -312
- package/dist/daemon/session-daemon.js.map +0 -7
- package/dist/daemon/unified-daemon.js +0 -276
- package/dist/daemon/unified-daemon.js.map +0 -7
- package/dist/features/analytics/api/analytics-api.js +0 -287
- package/dist/features/analytics/api/analytics-api.js.map +0 -7
- package/dist/features/analytics/core/analytics-service.js +0 -282
- package/dist/features/analytics/core/analytics-service.js.map +0 -7
- package/dist/features/analytics/index.js +0 -18
- package/dist/features/analytics/index.js.map +0 -7
- package/dist/features/analytics/queries/metrics-queries.js +0 -277
- package/dist/features/analytics/queries/metrics-queries.js.map +0 -7
- package/dist/features/analytics/types/metrics.js +0 -5
- package/dist/features/analytics/types/metrics.js.map +0 -7
- package/dist/features/browser/browser-mcp.js +0 -492
- package/dist/features/browser/browser-mcp.js.map +0 -7
- package/dist/features/sweep/index.js +0 -20
- package/dist/features/sweep/index.js.map +0 -7
- package/dist/features/sweep/prediction-client.js +0 -155
- package/dist/features/sweep/prediction-client.js.map +0 -7
- package/dist/features/sweep/prompt-builder.js +0 -85
- package/dist/features/sweep/prompt-builder.js.map +0 -7
- package/dist/features/sweep/pty-wrapper.js +0 -171
- package/dist/features/sweep/pty-wrapper.js.map +0 -7
- package/dist/features/sweep/state-watcher.js +0 -87
- package/dist/features/sweep/state-watcher.js.map +0 -7
- package/dist/features/sweep/status-bar.js +0 -88
- package/dist/features/sweep/status-bar.js.map +0 -7
- package/dist/features/sweep/sweep-server-manager.js +0 -226
- package/dist/features/sweep/sweep-server-manager.js.map +0 -7
- package/dist/features/sweep/tab-interceptor.js +0 -38
- package/dist/features/sweep/tab-interceptor.js.map +0 -7
- package/dist/features/sweep/types.js +0 -18
- package/dist/features/sweep/types.js.map +0 -7
- package/dist/features/tasks/linear-task-manager.js +0 -487
- package/dist/features/tasks/linear-task-manager.js.map +0 -7
- package/dist/features/tasks/task-aware-context.js +0 -410
- package/dist/features/tasks/task-aware-context.js.map +0 -7
- package/dist/features/tui/simple-monitor.js +0 -116
- package/dist/features/tui/simple-monitor.js.map +0 -7
- package/dist/features/tui/swarm-monitor.js +0 -648
- package/dist/features/tui/swarm-monitor.js.map +0 -7
- package/dist/features/web/client/stores/task-store.js +0 -26
- package/dist/features/web/client/stores/task-store.js.map +0 -7
- package/dist/features/web/server/index.js +0 -194
- package/dist/features/web/server/index.js.map +0 -7
- package/dist/hooks/auto-background.js +0 -151
- package/dist/hooks/auto-background.js.map +0 -7
- package/dist/hooks/claude-code-whatsapp-hook.js +0 -197
- package/dist/hooks/claude-code-whatsapp-hook.js.map +0 -7
- package/dist/hooks/config.js +0 -150
- package/dist/hooks/config.js.map +0 -7
- package/dist/hooks/daemon.js +0 -364
- package/dist/hooks/daemon.js.map +0 -7
- package/dist/hooks/events.js +0 -58
- package/dist/hooks/events.js.map +0 -7
- package/dist/hooks/index.js +0 -12
- package/dist/hooks/index.js.map +0 -7
- package/dist/hooks/linear-task-picker.js +0 -186
- package/dist/hooks/linear-task-picker.js.map +0 -7
- package/dist/hooks/schemas.js +0 -197
- package/dist/hooks/schemas.js.map +0 -7
- package/dist/hooks/secure-fs.js +0 -49
- package/dist/hooks/secure-fs.js.map +0 -7
- package/dist/hooks/security-logger.js +0 -155
- package/dist/hooks/security-logger.js.map +0 -7
- package/dist/hooks/session-summary.js +0 -222
- package/dist/hooks/session-summary.js.map +0 -7
- package/dist/hooks/sms-action-runner.js +0 -371
- package/dist/hooks/sms-action-runner.js.map +0 -7
- package/dist/hooks/sms-notify.js +0 -506
- package/dist/hooks/sms-notify.js.map +0 -7
- package/dist/hooks/sms-watcher.js +0 -93
- package/dist/hooks/sms-watcher.js.map +0 -7
- package/dist/hooks/sms-webhook.js +0 -555
- package/dist/hooks/sms-webhook.js.map +0 -7
- package/dist/hooks/whatsapp-commands.js +0 -479
- package/dist/hooks/whatsapp-commands.js.map +0 -7
- package/dist/hooks/whatsapp-scheduler.js +0 -317
- package/dist/hooks/whatsapp-scheduler.js.map +0 -7
- package/dist/hooks/whatsapp-sync.js +0 -409
- package/dist/hooks/whatsapp-sync.js.map +0 -7
- package/dist/index.js +0 -25
- package/dist/index.js.map +0 -7
- package/dist/integrations/anthropic/client.js +0 -263
- package/dist/integrations/anthropic/client.js.map +0 -7
- package/dist/integrations/claude-code/agent-bridge.js +0 -768
- package/dist/integrations/claude-code/agent-bridge.js.map +0 -7
- package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js +0 -459
- package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js.map +0 -7
- package/dist/integrations/claude-code/lifecycle-hooks.js +0 -254
- package/dist/integrations/claude-code/lifecycle-hooks.js.map +0 -7
- package/dist/integrations/claude-code/post-task-hooks.js +0 -545
- package/dist/integrations/claude-code/post-task-hooks.js.map +0 -7
- package/dist/integrations/claude-code/subagent-client-stub.js +0 -20
- package/dist/integrations/claude-code/subagent-client-stub.js.map +0 -7
- package/dist/integrations/claude-code/subagent-client.js +0 -511
- package/dist/integrations/claude-code/subagent-client.js.map +0 -7
- package/dist/integrations/claude-code/task-coordinator.js +0 -360
- package/dist/integrations/claude-code/task-coordinator.js.map +0 -7
- package/dist/integrations/linear/auth.js +0 -337
- package/dist/integrations/linear/auth.js.map +0 -7
- package/dist/integrations/linear/auto-sync.js +0 -258
- package/dist/integrations/linear/auto-sync.js.map +0 -7
- package/dist/integrations/linear/client.js +0 -634
- package/dist/integrations/linear/client.js.map +0 -7
- package/dist/integrations/linear/config.js +0 -130
- package/dist/integrations/linear/config.js.map +0 -7
- package/dist/integrations/linear/migration.js +0 -361
- package/dist/integrations/linear/migration.js.map +0 -7
- package/dist/integrations/linear/oauth-server.js +0 -454
- package/dist/integrations/linear/oauth-server.js.map +0 -7
- package/dist/integrations/linear/rest-client.js +0 -213
- package/dist/integrations/linear/rest-client.js.map +0 -7
- package/dist/integrations/linear/sync-manager.js +0 -236
- package/dist/integrations/linear/sync-manager.js.map +0 -7
- package/dist/integrations/linear/sync-service.js +0 -231
- package/dist/integrations/linear/sync-service.js.map +0 -7
- package/dist/integrations/linear/sync.js +0 -782
- package/dist/integrations/linear/sync.js.map +0 -7
- package/dist/integrations/linear/types.js +0 -5
- package/dist/integrations/linear/types.js.map +0 -7
- package/dist/integrations/linear/unified-sync.js +0 -589
- package/dist/integrations/linear/unified-sync.js.map +0 -7
- package/dist/integrations/linear/webhook-handler.js +0 -219
- package/dist/integrations/linear/webhook-handler.js.map +0 -7
- package/dist/integrations/linear/webhook-server.js +0 -218
- package/dist/integrations/linear/webhook-server.js.map +0 -7
- package/dist/integrations/linear/webhook.js +0 -291
- package/dist/integrations/linear/webhook.js.map +0 -7
- package/dist/integrations/mcp/handlers/code-execution-handlers.js +0 -266
- package/dist/integrations/mcp/handlers/code-execution-handlers.js.map +0 -7
- package/dist/integrations/mcp/handlers/context-handlers.js +0 -257
- package/dist/integrations/mcp/handlers/context-handlers.js.map +0 -7
- package/dist/integrations/mcp/handlers/discovery-handlers.js +0 -497
- package/dist/integrations/mcp/handlers/discovery-handlers.js.map +0 -7
- package/dist/integrations/mcp/handlers/index.js +0 -166
- package/dist/integrations/mcp/handlers/index.js.map +0 -7
- package/dist/integrations/mcp/handlers/linear-handlers.js +0 -247
- package/dist/integrations/mcp/handlers/linear-handlers.js.map +0 -7
- package/dist/integrations/mcp/handlers/skill-handlers.js +0 -529
- package/dist/integrations/mcp/handlers/skill-handlers.js.map +0 -7
- package/dist/integrations/mcp/handlers/task-handlers.js +0 -239
- package/dist/integrations/mcp/handlers/task-handlers.js.map +0 -7
- package/dist/integrations/mcp/handlers/trace-handlers.js +0 -308
- package/dist/integrations/mcp/handlers/trace-handlers.js.map +0 -7
- package/dist/integrations/mcp/index.js +0 -23
- package/dist/integrations/mcp/index.js.map +0 -7
- package/dist/integrations/mcp/middleware/tool-scoring.js +0 -356
- package/dist/integrations/mcp/middleware/tool-scoring.js.map +0 -7
- package/dist/integrations/mcp/refactored-server.js +0 -374
- package/dist/integrations/mcp/refactored-server.js.map +0 -7
- package/dist/integrations/mcp/remote-server.js +0 -682
- package/dist/integrations/mcp/remote-server.js.map +0 -7
- package/dist/integrations/mcp/schemas.js +0 -147
- package/dist/integrations/mcp/schemas.js.map +0 -7
- package/dist/integrations/mcp/server.js +0 -1975
- package/dist/integrations/mcp/server.js.map +0 -7
- package/dist/integrations/mcp/tool-definitions-code.js +0 -125
- package/dist/integrations/mcp/tool-definitions-code.js.map +0 -7
- package/dist/integrations/mcp/tool-definitions.js +0 -702
- package/dist/integrations/mcp/tool-definitions.js.map +0 -7
- package/dist/integrations/mcp/trace-test.js +0 -48
- package/dist/integrations/mcp/trace-test.js.map +0 -7
- package/dist/integrations/pg-aiguide/embedding-provider.js +0 -189
- package/dist/integrations/pg-aiguide/embedding-provider.js.map +0 -7
- package/dist/integrations/pg-aiguide/semantic-search.js +0 -187
- package/dist/integrations/pg-aiguide/semantic-search.js.map +0 -7
- package/dist/integrations/pg-aiguide/timescale-analytics.js +0 -224
- package/dist/integrations/pg-aiguide/timescale-analytics.js.map +0 -7
- package/dist/integrations/ralph/bridge/ralph-stackmemory-bridge.js +0 -860
- package/dist/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +0 -7
- package/dist/integrations/ralph/context/context-budget-manager.js +0 -301
- package/dist/integrations/ralph/context/context-budget-manager.js.map +0 -7
- package/dist/integrations/ralph/context/stackmemory-context-loader.js +0 -360
- package/dist/integrations/ralph/context/stackmemory-context-loader.js.map +0 -7
- package/dist/integrations/ralph/coordination/enhanced-coordination.js +0 -410
- package/dist/integrations/ralph/coordination/enhanced-coordination.js.map +0 -7
- package/dist/integrations/ralph/index.js +0 -18
- package/dist/integrations/ralph/index.js.map +0 -7
- package/dist/integrations/ralph/learning/pattern-learner.js +0 -401
- package/dist/integrations/ralph/learning/pattern-learner.js.map +0 -7
- package/dist/integrations/ralph/lifecycle/iteration-lifecycle.js +0 -448
- package/dist/integrations/ralph/lifecycle/iteration-lifecycle.js.map +0 -7
- package/dist/integrations/ralph/monitoring/swarm-dashboard.js +0 -294
- package/dist/integrations/ralph/monitoring/swarm-dashboard.js.map +0 -7
- package/dist/integrations/ralph/monitoring/swarm-registry.js +0 -108
- package/dist/integrations/ralph/monitoring/swarm-registry.js.map +0 -7
- package/dist/integrations/ralph/orchestration/multi-loop-orchestrator.js +0 -463
- package/dist/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +0 -7
- package/dist/integrations/ralph/patterns/compounding-engineering-pattern.js +0 -400
- package/dist/integrations/ralph/patterns/compounding-engineering-pattern.js.map +0 -7
- package/dist/integrations/ralph/patterns/extended-coherence-sessions.js +0 -473
- package/dist/integrations/ralph/patterns/extended-coherence-sessions.js.map +0 -7
- package/dist/integrations/ralph/patterns/oracle-worker-pattern.js +0 -388
- package/dist/integrations/ralph/patterns/oracle-worker-pattern.js.map +0 -7
- package/dist/integrations/ralph/performance/performance-optimizer.js +0 -358
- package/dist/integrations/ralph/performance/performance-optimizer.js.map +0 -7
- package/dist/integrations/ralph/ralph-integration-demo.js +0 -182
- package/dist/integrations/ralph/ralph-integration-demo.js.map +0 -7
- package/dist/integrations/ralph/recovery/crash-recovery.js +0 -462
- package/dist/integrations/ralph/recovery/crash-recovery.js.map +0 -7
- package/dist/integrations/ralph/state/state-reconciler.js +0 -404
- package/dist/integrations/ralph/state/state-reconciler.js.map +0 -7
- package/dist/integrations/ralph/swarm/git-workflow-manager.js +0 -428
- package/dist/integrations/ralph/swarm/git-workflow-manager.js.map +0 -7
- package/dist/integrations/ralph/swarm/swarm-coordinator.js +0 -996
- package/dist/integrations/ralph/swarm/swarm-coordinator.js.map +0 -7
- package/dist/integrations/ralph/types.js +0 -5
- package/dist/integrations/ralph/types.js.map +0 -7
- package/dist/integrations/ralph/visualization/ralph-debugger.js +0 -585
- package/dist/integrations/ralph/visualization/ralph-debugger.js.map +0 -7
- package/dist/mcp/stackmemory-mcp-server.js +0 -554
- package/dist/mcp/stackmemory-mcp-server.js.map +0 -7
- package/dist/middleware/exponential-rate-limiter.js +0 -289
- package/dist/middleware/exponential-rate-limiter.js.map +0 -7
- package/dist/models/user.model.js +0 -358
- package/dist/models/user.model.js.map +0 -7
- package/dist/servers/production/auth-middleware.js +0 -528
- package/dist/servers/production/auth-middleware.js.map +0 -7
- package/dist/servers/railway/config.js +0 -55
- package/dist/servers/railway/config.js.map +0 -7
- package/dist/servers/railway/index-enhanced.js +0 -160
- package/dist/servers/railway/index-enhanced.js.map +0 -7
- package/dist/servers/railway/index.js +0 -1349
- package/dist/servers/railway/index.js.map +0 -7
- package/dist/servers/railway/simple.js +0 -64
- package/dist/servers/railway/simple.js.map +0 -7
- package/dist/servers/railway/storage-test.js +0 -459
- package/dist/servers/railway/storage-test.js.map +0 -7
- package/dist/services/config-service.js +0 -65
- package/dist/services/config-service.js.map +0 -7
- package/dist/services/context-service.js +0 -194
- package/dist/services/context-service.js.map +0 -7
- package/dist/skills/api-discovery.js +0 -354
- package/dist/skills/api-discovery.js.map +0 -7
- package/dist/skills/api-skill.js +0 -475
- package/dist/skills/api-skill.js.map +0 -7
- package/dist/skills/claude-skills.js +0 -1061
- package/dist/skills/claude-skills.js.map +0 -7
- package/dist/skills/dashboard-launcher.js +0 -216
- package/dist/skills/dashboard-launcher.js.map +0 -7
- package/dist/skills/recursive-agent-orchestrator.js +0 -575
- package/dist/skills/recursive-agent-orchestrator.js.map +0 -7
- package/dist/skills/repo-ingestion-skill.js +0 -609
- package/dist/skills/repo-ingestion-skill.js.map +0 -7
- package/dist/skills/security-secrets-scanner.js +0 -284
- package/dist/skills/security-secrets-scanner.js.map +0 -7
- package/dist/skills/unified-rlm-orchestrator.js +0 -404
- package/dist/skills/unified-rlm-orchestrator.js.map +0 -7
- package/dist/types/task.js +0 -5
- package/dist/types/task.js.map +0 -7
- package/dist/utils/env.js +0 -50
- package/dist/utils/env.js.map +0 -7
- package/dist/utils/formatting.js +0 -62
- package/dist/utils/formatting.js.map +0 -7
- package/dist/utils/process-cleanup.js +0 -136
- package/dist/utils/process-cleanup.js.map +0 -7
- package/dist/validation/schemas.js +0 -222
- package/dist/validation/schemas.js.map +0 -7
- /package/dist/{core/merge → src/core/extensions}/types.js +0 -0
- /package/dist/{core/merge → src/core/extensions}/types.js.map +0 -0
|
@@ -1,199 +0,0 @@
|
|
|
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);
|
|
6
|
-
import { ProjectManager } from "../../core/projects/project-manager.js";
|
|
7
|
-
import chalk from "chalk";
|
|
8
|
-
import Table from "cli-table3";
|
|
9
|
-
function registerProjectCommands(program) {
|
|
10
|
-
const projects = program.command("projects").description("Manage multi-project organization");
|
|
11
|
-
projects.command("detect").description("Auto-detect current project").action(async () => {
|
|
12
|
-
const manager = ProjectManager.getInstance();
|
|
13
|
-
const project = await manager.detectProject();
|
|
14
|
-
console.log(chalk.green("\u2713 Project detected:"));
|
|
15
|
-
console.log(chalk.cyan(" Name:"), project.name);
|
|
16
|
-
console.log(
|
|
17
|
-
chalk.cyan(" Organization:"),
|
|
18
|
-
project.organization || "none"
|
|
19
|
-
);
|
|
20
|
-
console.log(chalk.cyan(" Account Type:"), project.accountType);
|
|
21
|
-
console.log(chalk.cyan(" Private:"), project.isPrivate ? "Yes" : "No");
|
|
22
|
-
console.log(
|
|
23
|
-
chalk.cyan(" Language:"),
|
|
24
|
-
project.primaryLanguage || "unknown"
|
|
25
|
-
);
|
|
26
|
-
console.log(chalk.cyan(" Framework:"), project.framework || "unknown");
|
|
27
|
-
console.log(chalk.cyan(" ID:"), project.id);
|
|
28
|
-
});
|
|
29
|
-
projects.command("scan").description("Scan and auto-categorize all Git projects").option("-p, --paths <paths...>", "Custom paths to scan").action(async (options) => {
|
|
30
|
-
const manager = ProjectManager.getInstance();
|
|
31
|
-
console.log(chalk.yellow("\u{1F50D} Scanning for Git repositories..."));
|
|
32
|
-
await manager.scanAndCategorizeAllProjects(options.paths);
|
|
33
|
-
const allProjects = manager.getAllProjects();
|
|
34
|
-
console.log(chalk.green(`\u2713 Found ${allProjects.length} projects`));
|
|
35
|
-
const byType = {};
|
|
36
|
-
const byOrg = {};
|
|
37
|
-
for (const project of allProjects) {
|
|
38
|
-
byType[project.accountType] = (byType[project.accountType] || 0) + 1;
|
|
39
|
-
if (project.organization) {
|
|
40
|
-
byOrg[project.organization] = (byOrg[project.organization] || 0) + 1;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
console.log("\n\u{1F4CA} Summary by Account Type:");
|
|
44
|
-
for (const [type, count] of Object.entries(byType)) {
|
|
45
|
-
console.log(` ${type}: ${count} projects`);
|
|
46
|
-
}
|
|
47
|
-
console.log("\n\u{1F3E2} Top Organizations:");
|
|
48
|
-
const topOrgs = Object.entries(byOrg).sort((a, b) => b[1] - a[1]).slice(0, 5);
|
|
49
|
-
for (const [org, count] of topOrgs) {
|
|
50
|
-
console.log(` ${org}: ${count} projects`);
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
projects.command("list").description("List all discovered projects").option(
|
|
54
|
-
"-t, --type <type>",
|
|
55
|
-
"Filter by account type (personal/work/opensource/client)"
|
|
56
|
-
).option("-o, --org <org>", "Filter by organization").option("-l, --language <lang>", "Filter by language").action((options) => {
|
|
57
|
-
const manager = ProjectManager.getInstance();
|
|
58
|
-
let projectList = manager.getAllProjects();
|
|
59
|
-
if (options.type) {
|
|
60
|
-
projectList = projectList.filter((p) => p.accountType === options.type);
|
|
61
|
-
}
|
|
62
|
-
if (options.org) {
|
|
63
|
-
projectList = projectList.filter((p) => p.organization === options.org);
|
|
64
|
-
}
|
|
65
|
-
if (options.language) {
|
|
66
|
-
projectList = projectList.filter(
|
|
67
|
-
(p) => p.primaryLanguage?.toLowerCase().includes(options.language.toLowerCase())
|
|
68
|
-
);
|
|
69
|
-
}
|
|
70
|
-
if (projectList.length === 0) {
|
|
71
|
-
console.log(chalk.yellow("No projects found matching criteria"));
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
const table = new Table({
|
|
75
|
-
head: [
|
|
76
|
-
"Name",
|
|
77
|
-
"Organization",
|
|
78
|
-
"Type",
|
|
79
|
-
"Language",
|
|
80
|
-
"Framework",
|
|
81
|
-
"Last Accessed"
|
|
82
|
-
],
|
|
83
|
-
style: { head: ["cyan"] }
|
|
84
|
-
});
|
|
85
|
-
for (const project of projectList.slice(0, 20)) {
|
|
86
|
-
table.push([
|
|
87
|
-
project.name,
|
|
88
|
-
project.organization || "-",
|
|
89
|
-
project.accountType,
|
|
90
|
-
project.primaryLanguage || "-",
|
|
91
|
-
project.framework || "-",
|
|
92
|
-
new Date(project.lastAccessed).toLocaleDateString()
|
|
93
|
-
]);
|
|
94
|
-
}
|
|
95
|
-
console.log(table.toString());
|
|
96
|
-
if (projectList.length > 20) {
|
|
97
|
-
console.log(
|
|
98
|
-
chalk.gray(`
|
|
99
|
-
... and ${projectList.length - 20} more projects`)
|
|
100
|
-
);
|
|
101
|
-
}
|
|
102
|
-
});
|
|
103
|
-
projects.command("orgs").description("List all detected organizations").action(() => {
|
|
104
|
-
const manager = ProjectManager.getInstance();
|
|
105
|
-
const allProjects = manager.getAllProjects();
|
|
106
|
-
const orgMap = {};
|
|
107
|
-
for (const project of allProjects) {
|
|
108
|
-
if (project.organization) {
|
|
109
|
-
if (!orgMap[project.organization]) {
|
|
110
|
-
orgMap[project.organization] = { count: 0, types: /* @__PURE__ */ new Set() };
|
|
111
|
-
}
|
|
112
|
-
orgMap[project.organization].count++;
|
|
113
|
-
orgMap[project.organization].types.add(project.accountType);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
const table = new Table({
|
|
117
|
-
head: ["Organization", "Projects", "Account Types"],
|
|
118
|
-
style: { head: ["cyan"] }
|
|
119
|
-
});
|
|
120
|
-
const sorted = Object.entries(orgMap).sort(
|
|
121
|
-
(a, b) => b[1].count - a[1].count
|
|
122
|
-
);
|
|
123
|
-
for (const [org, data] of sorted) {
|
|
124
|
-
table.push([
|
|
125
|
-
org,
|
|
126
|
-
data.count.toString(),
|
|
127
|
-
Array.from(data.types).join(", ")
|
|
128
|
-
]);
|
|
129
|
-
}
|
|
130
|
-
console.log(table.toString());
|
|
131
|
-
});
|
|
132
|
-
projects.command("config-org <name>").description("Configure an organization").option(
|
|
133
|
-
"-t, --type <type>",
|
|
134
|
-
"Organization type (company/personal/opensource/client)"
|
|
135
|
-
).option(
|
|
136
|
-
"-a, --account <account>",
|
|
137
|
-
"Account type (personal/work/opensource/client)"
|
|
138
|
-
).option("-d, --domain <domain>", "Add domain pattern").action((name, options) => {
|
|
139
|
-
const manager = ProjectManager.getInstance();
|
|
140
|
-
manager.saveOrganization({
|
|
141
|
-
name,
|
|
142
|
-
type: options.type || "company",
|
|
143
|
-
accountType: options.account || "work",
|
|
144
|
-
domains: options.domain ? [options.domain] : [],
|
|
145
|
-
githubOrgs: [name],
|
|
146
|
-
autoPatterns: []
|
|
147
|
-
});
|
|
148
|
-
console.log(chalk.green(`\u2713 Organization '${name}' configured`));
|
|
149
|
-
});
|
|
150
|
-
projects.command("report").description("Generate project statistics report").action(() => {
|
|
151
|
-
const manager = ProjectManager.getInstance();
|
|
152
|
-
const report = manager.generateReport();
|
|
153
|
-
console.log(chalk.cyan("\n\u{1F4CA} Project Statistics:\n"));
|
|
154
|
-
console.log(report);
|
|
155
|
-
});
|
|
156
|
-
projects.command("switch <path>").description("Switch to a different project context").action(async (projectPath) => {
|
|
157
|
-
const manager = ProjectManager.getInstance();
|
|
158
|
-
const project = await manager.detectProject(projectPath);
|
|
159
|
-
console.log(chalk.green(`\u2713 Switched to project: ${project.name}`));
|
|
160
|
-
console.log(
|
|
161
|
-
chalk.cyan(` Organization: ${project.organization || "none"}`)
|
|
162
|
-
);
|
|
163
|
-
console.log(chalk.cyan(` Account Type: ${project.accountType}`));
|
|
164
|
-
});
|
|
165
|
-
projects.command("organize").description("Auto-organize projects into accounts").action(async () => {
|
|
166
|
-
const manager = ProjectManager.getInstance();
|
|
167
|
-
console.log(chalk.yellow("\u{1F504} Auto-organizing projects..."));
|
|
168
|
-
await manager.scanAndCategorizeAllProjects();
|
|
169
|
-
const allProjects = manager.getAllProjects();
|
|
170
|
-
const organized = {
|
|
171
|
-
personal: [],
|
|
172
|
-
work: [],
|
|
173
|
-
opensource: [],
|
|
174
|
-
client: []
|
|
175
|
-
};
|
|
176
|
-
for (const project of allProjects) {
|
|
177
|
-
organized[project.accountType]?.push(project.name);
|
|
178
|
-
}
|
|
179
|
-
console.log(chalk.green("\n\u2713 Projects organized by account type:\n"));
|
|
180
|
-
for (const [type, projects2] of Object.entries(organized)) {
|
|
181
|
-
if (projects2.length > 0) {
|
|
182
|
-
console.log(
|
|
183
|
-
chalk.cyan(`${type.toUpperCase()} (${projects2.length} projects):`)
|
|
184
|
-
);
|
|
185
|
-
for (const proj of projects2.slice(0, 5)) {
|
|
186
|
-
console.log(` - ${proj}`);
|
|
187
|
-
}
|
|
188
|
-
if (projects2.length > 5) {
|
|
189
|
-
console.log(chalk.gray(` ... and ${projects2.length - 5} more`));
|
|
190
|
-
}
|
|
191
|
-
console.log();
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
});
|
|
195
|
-
}
|
|
196
|
-
export {
|
|
197
|
-
registerProjectCommands
|
|
198
|
-
};
|
|
199
|
-
//# sourceMappingURL=projects.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/cli/commands/projects.ts"],
|
|
4
|
-
"sourcesContent": ["#!/usr/bin/env node\n/**\n * Project Management CLI Commands\n * Auto-manages multi-project across GitHub orgs\n */\n\nimport { Command } from 'commander';\nimport { ProjectManager } from '../../core/projects/project-manager.js';\nimport chalk from 'chalk';\n// @ts-ignore - No types available for cli-table3\nimport Table from 'cli-table3';\n\nexport function registerProjectCommands(program: Command): void {\n const projects = program\n .command('projects')\n .description('Manage multi-project organization');\n\n // Auto-detect current project\n projects\n .command('detect')\n .description('Auto-detect current project')\n .action(async () => {\n const manager = ProjectManager.getInstance();\n const project = await manager.detectProject();\n\n console.log(chalk.green('\u2713 Project detected:'));\n console.log(chalk.cyan(' Name:'), project.name);\n console.log(\n chalk.cyan(' Organization:'),\n project.organization || 'none'\n );\n console.log(chalk.cyan(' Account Type:'), project.accountType);\n console.log(chalk.cyan(' Private:'), project.isPrivate ? 'Yes' : 'No');\n console.log(\n chalk.cyan(' Language:'),\n project.primaryLanguage || 'unknown'\n );\n console.log(chalk.cyan(' Framework:'), project.framework || 'unknown');\n console.log(chalk.cyan(' ID:'), project.id);\n });\n\n // Scan all projects\n projects\n .command('scan')\n .description('Scan and auto-categorize all Git projects')\n .option('-p, --paths <paths...>', 'Custom paths to scan')\n .action(async (options) => {\n const manager = ProjectManager.getInstance();\n\n console.log(chalk.yellow('\uD83D\uDD0D Scanning for Git repositories...'));\n await manager.scanAndCategorizeAllProjects(options.paths);\n\n const allProjects = manager.getAllProjects();\n console.log(chalk.green(`\u2713 Found ${allProjects.length} projects`));\n\n // Show summary\n const byType: Record<string, number> = {};\n const byOrg: Record<string, number> = {};\n\n for (const project of allProjects) {\n byType[project.accountType] = (byType[project.accountType] || 0) + 1;\n if (project.organization) {\n byOrg[project.organization] = (byOrg[project.organization] || 0) + 1;\n }\n }\n\n console.log('\\n\uD83D\uDCCA Summary by Account Type:');\n for (const [type, count] of Object.entries(byType)) {\n console.log(` ${type}: ${count} projects`);\n }\n\n console.log('\\n\uD83C\uDFE2 Top Organizations:');\n const topOrgs = Object.entries(byOrg)\n .sort((a, b) => b[1] - a[1])\n .slice(0, 5);\n for (const [org, count] of topOrgs) {\n console.log(` ${org}: ${count} projects`);\n }\n });\n\n // List all projects\n projects\n .command('list')\n .description('List all discovered projects')\n .option(\n '-t, --type <type>',\n 'Filter by account type (personal/work/opensource/client)'\n )\n .option('-o, --org <org>', 'Filter by organization')\n .option('-l, --language <lang>', 'Filter by language')\n .action((options) => {\n const manager = ProjectManager.getInstance();\n let projectList = manager.getAllProjects();\n\n // Apply filters\n if (options.type) {\n projectList = projectList.filter((p) => p.accountType === options.type);\n }\n if (options.org) {\n projectList = projectList.filter((p) => p.organization === options.org);\n }\n if (options.language) {\n projectList = projectList.filter((p) =>\n p.primaryLanguage\n ?.toLowerCase()\n .includes(options.language.toLowerCase())\n );\n }\n\n if (projectList.length === 0) {\n console.log(chalk.yellow('No projects found matching criteria'));\n return;\n }\n\n // Create table\n const table = new Table({\n head: [\n 'Name',\n 'Organization',\n 'Type',\n 'Language',\n 'Framework',\n 'Last Accessed',\n ],\n style: { head: ['cyan'] },\n });\n\n for (const project of projectList.slice(0, 20)) {\n table.push([\n project.name,\n project.organization || '-',\n project.accountType,\n project.primaryLanguage || '-',\n project.framework || '-',\n new Date(project.lastAccessed).toLocaleDateString(),\n ]);\n }\n\n console.log(table.toString());\n\n if (projectList.length > 20) {\n console.log(\n chalk.gray(`\\n... and ${projectList.length - 20} more projects`)\n );\n }\n });\n\n // Show organizations\n projects\n .command('orgs')\n .description('List all detected organizations')\n .action(() => {\n const manager = ProjectManager.getInstance();\n const allProjects = manager.getAllProjects();\n\n const orgMap: Record<string, { count: number; types: Set<string> }> = {};\n\n for (const project of allProjects) {\n if (project.organization) {\n if (!orgMap[project.organization]) {\n orgMap[project.organization] = { count: 0, types: new Set() };\n }\n orgMap[project.organization]!.count++;\n orgMap[project.organization]!.types.add(project.accountType);\n }\n }\n\n const table = new Table({\n head: ['Organization', 'Projects', 'Account Types'],\n style: { head: ['cyan'] },\n });\n\n const sorted = Object.entries(orgMap).sort(\n (a, b) => b[1].count - a[1].count\n );\n\n for (const [org, data] of sorted) {\n table.push([\n org,\n data.count.toString(),\n Array.from(data.types).join(', '),\n ]);\n }\n\n console.log(table.toString());\n });\n\n // Configure organization\n projects\n .command('config-org <name>')\n .description('Configure an organization')\n .option(\n '-t, --type <type>',\n 'Organization type (company/personal/opensource/client)'\n )\n .option(\n '-a, --account <account>',\n 'Account type (personal/work/opensource/client)'\n )\n .option('-d, --domain <domain>', 'Add domain pattern')\n .action((name, options) => {\n const manager = ProjectManager.getInstance();\n\n manager.saveOrganization({\n name,\n type: options.type || 'company',\n accountType: options.account || 'work',\n domains: options.domain ? [options.domain] : [],\n githubOrgs: [name],\n autoPatterns: [],\n });\n\n console.log(chalk.green(`\u2713 Organization '${name}' configured`));\n });\n\n // Show project report\n projects\n .command('report')\n .description('Generate project statistics report')\n .action(() => {\n const manager = ProjectManager.getInstance();\n const report = manager.generateReport();\n\n console.log(chalk.cyan('\\n\uD83D\uDCCA Project Statistics:\\n'));\n console.log(report);\n });\n\n // Switch context based on project\n projects\n .command('switch <path>')\n .description('Switch to a different project context')\n .action(async (projectPath) => {\n const manager = ProjectManager.getInstance();\n const project = await manager.detectProject(projectPath);\n\n console.log(chalk.green(`\u2713 Switched to project: ${project.name}`));\n console.log(\n chalk.cyan(` Organization: ${project.organization || 'none'}`)\n );\n console.log(chalk.cyan(` Account Type: ${project.accountType}`));\n });\n\n // Auto-organize projects by patterns\n projects\n .command('organize')\n .description('Auto-organize projects into accounts')\n .action(async () => {\n const manager = ProjectManager.getInstance();\n\n console.log(chalk.yellow('\uD83D\uDD04 Auto-organizing projects...'));\n\n // First scan\n await manager.scanAndCategorizeAllProjects();\n\n const allProjects = manager.getAllProjects();\n const organized: Record<string, string[]> = {\n personal: [],\n work: [],\n opensource: [],\n client: [],\n };\n\n for (const project of allProjects) {\n organized[project.accountType]?.push(project.name);\n }\n\n console.log(chalk.green('\\n\u2713 Projects organized by account type:\\n'));\n\n for (const [type, projects] of Object.entries(organized)) {\n if (projects.length > 0) {\n console.log(\n chalk.cyan(`${type.toUpperCase()} (${projects.length} projects):`)\n );\n for (const proj of projects.slice(0, 5)) {\n console.log(` - ${proj}`);\n }\n if (projects.length > 5) {\n console.log(chalk.gray(` ... and ${projects.length - 5} more`));\n }\n console.log();\n }\n }\n });\n}\n"],
|
|
5
|
-
"mappings": ";;;;;AAOA,SAAS,sBAAsB;AAC/B,OAAO,WAAW;AAElB,OAAO,WAAW;AAEX,SAAS,wBAAwB,SAAwB;AAC9D,QAAM,WAAW,QACd,QAAQ,UAAU,EAClB,YAAY,mCAAmC;AAGlD,WACG,QAAQ,QAAQ,EAChB,YAAY,6BAA6B,EACzC,OAAO,YAAY;AAClB,UAAM,UAAU,eAAe,YAAY;AAC3C,UAAM,UAAU,MAAM,QAAQ,cAAc;AAE5C,YAAQ,IAAI,MAAM,MAAM,0BAAqB,CAAC;AAC9C,YAAQ,IAAI,MAAM,KAAK,SAAS,GAAG,QAAQ,IAAI;AAC/C,YAAQ;AAAA,MACN,MAAM,KAAK,iBAAiB;AAAA,MAC5B,QAAQ,gBAAgB;AAAA,IAC1B;AACA,YAAQ,IAAI,MAAM,KAAK,iBAAiB,GAAG,QAAQ,WAAW;AAC9D,YAAQ,IAAI,MAAM,KAAK,YAAY,GAAG,QAAQ,YAAY,QAAQ,IAAI;AACtE,YAAQ;AAAA,MACN,MAAM,KAAK,aAAa;AAAA,MACxB,QAAQ,mBAAmB;AAAA,IAC7B;AACA,YAAQ,IAAI,MAAM,KAAK,cAAc,GAAG,QAAQ,aAAa,SAAS;AACtE,YAAQ,IAAI,MAAM,KAAK,OAAO,GAAG,QAAQ,EAAE;AAAA,EAC7C,CAAC;AAGH,WACG,QAAQ,MAAM,EACd,YAAY,2CAA2C,EACvD,OAAO,0BAA0B,sBAAsB,EACvD,OAAO,OAAO,YAAY;AACzB,UAAM,UAAU,eAAe,YAAY;AAE3C,YAAQ,IAAI,MAAM,OAAO,4CAAqC,CAAC;AAC/D,UAAM,QAAQ,6BAA6B,QAAQ,KAAK;AAExD,UAAM,cAAc,QAAQ,eAAe;AAC3C,YAAQ,IAAI,MAAM,MAAM,gBAAW,YAAY,MAAM,WAAW,CAAC;AAGjE,UAAM,SAAiC,CAAC;AACxC,UAAM,QAAgC,CAAC;AAEvC,eAAW,WAAW,aAAa;AACjC,aAAO,QAAQ,WAAW,KAAK,OAAO,QAAQ,WAAW,KAAK,KAAK;AACnE,UAAI,QAAQ,cAAc;AACxB,cAAM,QAAQ,YAAY,KAAK,MAAM,QAAQ,YAAY,KAAK,KAAK;AAAA,MACrE;AAAA,IACF;AAEA,YAAQ,IAAI,sCAA+B;AAC3C,eAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AAClD,cAAQ,IAAI,KAAK,IAAI,KAAK,KAAK,WAAW;AAAA,IAC5C;AAEA,YAAQ,IAAI,gCAAyB;AACrC,UAAM,UAAU,OAAO,QAAQ,KAAK,EACjC,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,EAC1B,MAAM,GAAG,CAAC;AACb,eAAW,CAAC,KAAK,KAAK,KAAK,SAAS;AAClC,cAAQ,IAAI,KAAK,GAAG,KAAK,KAAK,WAAW;AAAA,IAC3C;AAAA,EACF,CAAC;AAGH,WACG,QAAQ,MAAM,EACd,YAAY,8BAA8B,EAC1C;AAAA,IACC;AAAA,IACA;AAAA,EACF,EACC,OAAO,mBAAmB,wBAAwB,EAClD,OAAO,yBAAyB,oBAAoB,EACpD,OAAO,CAAC,YAAY;AACnB,UAAM,UAAU,eAAe,YAAY;AAC3C,QAAI,cAAc,QAAQ,eAAe;AAGzC,QAAI,QAAQ,MAAM;AAChB,oBAAc,YAAY,OAAO,CAAC,MAAM,EAAE,gBAAgB,QAAQ,IAAI;AAAA,IACxE;AACA,QAAI,QAAQ,KAAK;AACf,oBAAc,YAAY,OAAO,CAAC,MAAM,EAAE,iBAAiB,QAAQ,GAAG;AAAA,IACxE;AACA,QAAI,QAAQ,UAAU;AACpB,oBAAc,YAAY;AAAA,QAAO,CAAC,MAChC,EAAE,iBACE,YAAY,EACb,SAAS,QAAQ,SAAS,YAAY,CAAC;AAAA,MAC5C;AAAA,IACF;AAEA,QAAI,YAAY,WAAW,GAAG;AAC5B,cAAQ,IAAI,MAAM,OAAO,qCAAqC,CAAC;AAC/D;AAAA,IACF;AAGA,UAAM,QAAQ,IAAI,MAAM;AAAA,MACtB,MAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;AAAA,IAC1B,CAAC;AAED,eAAW,WAAW,YAAY,MAAM,GAAG,EAAE,GAAG;AAC9C,YAAM,KAAK;AAAA,QACT,QAAQ;AAAA,QACR,QAAQ,gBAAgB;AAAA,QACxB,QAAQ;AAAA,QACR,QAAQ,mBAAmB;AAAA,QAC3B,QAAQ,aAAa;AAAA,QACrB,IAAI,KAAK,QAAQ,YAAY,EAAE,mBAAmB;AAAA,MACpD,CAAC;AAAA,IACH;AAEA,YAAQ,IAAI,MAAM,SAAS,CAAC;AAE5B,QAAI,YAAY,SAAS,IAAI;AAC3B,cAAQ;AAAA,QACN,MAAM,KAAK;AAAA,UAAa,YAAY,SAAS,EAAE,gBAAgB;AAAA,MACjE;AAAA,IACF;AAAA,EACF,CAAC;AAGH,WACG,QAAQ,MAAM,EACd,YAAY,iCAAiC,EAC7C,OAAO,MAAM;AACZ,UAAM,UAAU,eAAe,YAAY;AAC3C,UAAM,cAAc,QAAQ,eAAe;AAE3C,UAAM,SAAgE,CAAC;AAEvE,eAAW,WAAW,aAAa;AACjC,UAAI,QAAQ,cAAc;AACxB,YAAI,CAAC,OAAO,QAAQ,YAAY,GAAG;AACjC,iBAAO,QAAQ,YAAY,IAAI,EAAE,OAAO,GAAG,OAAO,oBAAI,IAAI,EAAE;AAAA,QAC9D;AACA,eAAO,QAAQ,YAAY,EAAG;AAC9B,eAAO,QAAQ,YAAY,EAAG,MAAM,IAAI,QAAQ,WAAW;AAAA,MAC7D;AAAA,IACF;AAEA,UAAM,QAAQ,IAAI,MAAM;AAAA,MACtB,MAAM,CAAC,gBAAgB,YAAY,eAAe;AAAA,MAClD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;AAAA,IAC1B,CAAC;AAED,UAAM,SAAS,OAAO,QAAQ,MAAM,EAAE;AAAA,MACpC,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE;AAAA,IAC9B;AAEA,eAAW,CAAC,KAAK,IAAI,KAAK,QAAQ;AAChC,YAAM,KAAK;AAAA,QACT;AAAA,QACA,KAAK,MAAM,SAAS;AAAA,QACpB,MAAM,KAAK,KAAK,KAAK,EAAE,KAAK,IAAI;AAAA,MAClC,CAAC;AAAA,IACH;AAEA,YAAQ,IAAI,MAAM,SAAS,CAAC;AAAA,EAC9B,CAAC;AAGH,WACG,QAAQ,mBAAmB,EAC3B,YAAY,2BAA2B,EACvC;AAAA,IACC;AAAA,IACA;AAAA,EACF,EACC;AAAA,IACC;AAAA,IACA;AAAA,EACF,EACC,OAAO,yBAAyB,oBAAoB,EACpD,OAAO,CAAC,MAAM,YAAY;AACzB,UAAM,UAAU,eAAe,YAAY;AAE3C,YAAQ,iBAAiB;AAAA,MACvB;AAAA,MACA,MAAM,QAAQ,QAAQ;AAAA,MACtB,aAAa,QAAQ,WAAW;AAAA,MAChC,SAAS,QAAQ,SAAS,CAAC,QAAQ,MAAM,IAAI,CAAC;AAAA,MAC9C,YAAY,CAAC,IAAI;AAAA,MACjB,cAAc,CAAC;AAAA,IACjB,CAAC;AAED,YAAQ,IAAI,MAAM,MAAM,wBAAmB,IAAI,cAAc,CAAC;AAAA,EAChE,CAAC;AAGH,WACG,QAAQ,QAAQ,EAChB,YAAY,oCAAoC,EAChD,OAAO,MAAM;AACZ,UAAM,UAAU,eAAe,YAAY;AAC3C,UAAM,SAAS,QAAQ,eAAe;AAEtC,YAAQ,IAAI,MAAM,KAAK,mCAA4B,CAAC;AACpD,YAAQ,IAAI,MAAM;AAAA,EACpB,CAAC;AAGH,WACG,QAAQ,eAAe,EACvB,YAAY,uCAAuC,EACnD,OAAO,OAAO,gBAAgB;AAC7B,UAAM,UAAU,eAAe,YAAY;AAC3C,UAAM,UAAU,MAAM,QAAQ,cAAc,WAAW;AAEvD,YAAQ,IAAI,MAAM,MAAM,+BAA0B,QAAQ,IAAI,EAAE,CAAC;AACjE,YAAQ;AAAA,MACN,MAAM,KAAK,mBAAmB,QAAQ,gBAAgB,MAAM,EAAE;AAAA,IAChE;AACA,YAAQ,IAAI,MAAM,KAAK,mBAAmB,QAAQ,WAAW,EAAE,CAAC;AAAA,EAClE,CAAC;AAGH,WACG,QAAQ,UAAU,EAClB,YAAY,sCAAsC,EAClD,OAAO,YAAY;AAClB,UAAM,UAAU,eAAe,YAAY;AAE3C,YAAQ,IAAI,MAAM,OAAO,uCAAgC,CAAC;AAG1D,UAAM,QAAQ,6BAA6B;AAE3C,UAAM,cAAc,QAAQ,eAAe;AAC3C,UAAM,YAAsC;AAAA,MAC1C,UAAU,CAAC;AAAA,MACX,MAAM,CAAC;AAAA,MACP,YAAY,CAAC;AAAA,MACb,QAAQ,CAAC;AAAA,IACX;AAEA,eAAW,WAAW,aAAa;AACjC,gBAAU,QAAQ,WAAW,GAAG,KAAK,QAAQ,IAAI;AAAA,IACnD;AAEA,YAAQ,IAAI,MAAM,MAAM,gDAA2C,CAAC;AAEpE,eAAW,CAAC,MAAMA,SAAQ,KAAK,OAAO,QAAQ,SAAS,GAAG;AACxD,UAAIA,UAAS,SAAS,GAAG;AACvB,gBAAQ;AAAA,UACN,MAAM,KAAK,GAAG,KAAK,YAAY,CAAC,KAAKA,UAAS,MAAM,aAAa;AAAA,QACnE;AACA,mBAAW,QAAQA,UAAS,MAAM,GAAG,CAAC,GAAG;AACvC,kBAAQ,IAAI,OAAO,IAAI,EAAE;AAAA,QAC3B;AACA,YAAIA,UAAS,SAAS,GAAG;AACvB,kBAAQ,IAAI,MAAM,KAAK,aAAaA,UAAS,SAAS,CAAC,OAAO,CAAC;AAAA,QACjE;AACA,gBAAQ,IAAI;AAAA,MACd;AAAA,IACF;AAAA,EACF,CAAC;AACL;",
|
|
6
|
-
"names": ["projects"]
|
|
7
|
-
}
|
|
@@ -1,413 +0,0 @@
|
|
|
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);
|
|
6
|
-
import { Command } from "commander";
|
|
7
|
-
import chalk from "chalk";
|
|
8
|
-
import ora from "ora";
|
|
9
|
-
import inquirer from "inquirer";
|
|
10
|
-
import {
|
|
11
|
-
PostTaskHooks
|
|
12
|
-
} from "../../integrations/claude-code/post-task-hooks.js";
|
|
13
|
-
import { FrameManager } from "../../core/context/index.js";
|
|
14
|
-
import Database from "better-sqlite3";
|
|
15
|
-
import * as fs from "fs/promises";
|
|
16
|
-
import * as path from "path";
|
|
17
|
-
function createQualityCommand() {
|
|
18
|
-
const cmd = new Command("quality").description("Manage post-task quality gates and automation").option("--enable", "Enable quality gates").option("--disable", "Disable quality gates").option("--status", "Show quality gate status").option("--config", "Configure quality gates").option("--run", "Run quality gates manually").option("--history", "Show quality gate history").option("--setup", "Interactive setup wizard").action(async (options) => {
|
|
19
|
-
const spinner = ora();
|
|
20
|
-
try {
|
|
21
|
-
const projectRoot = await getProjectRoot();
|
|
22
|
-
const dbPath = path.join(
|
|
23
|
-
projectRoot,
|
|
24
|
-
".stackmemory",
|
|
25
|
-
"db",
|
|
26
|
-
"stackmemory.db"
|
|
27
|
-
);
|
|
28
|
-
try {
|
|
29
|
-
await fs.access(dbPath);
|
|
30
|
-
} catch {
|
|
31
|
-
console.error(chalk.red("\u2717 StackMemory not initialized"));
|
|
32
|
-
console.log(chalk.yellow("Run: stackmemory init"));
|
|
33
|
-
process.exit(1);
|
|
34
|
-
}
|
|
35
|
-
const db = new Database(dbPath);
|
|
36
|
-
const frameManager = new FrameManager(db);
|
|
37
|
-
if (options.enable) {
|
|
38
|
-
await enableQualityGates(projectRoot, frameManager, db, spinner);
|
|
39
|
-
} else if (options.disable) {
|
|
40
|
-
await disableQualityGates(projectRoot, spinner);
|
|
41
|
-
} else if (options.status) {
|
|
42
|
-
await showStatus(projectRoot, frameManager, db);
|
|
43
|
-
} else if (options.config) {
|
|
44
|
-
await configureQualityGates(projectRoot);
|
|
45
|
-
} else if (options.run) {
|
|
46
|
-
await runQualityGates(projectRoot, frameManager, db, spinner);
|
|
47
|
-
} else if (options.history) {
|
|
48
|
-
await showHistory(frameManager);
|
|
49
|
-
} else if (options.setup) {
|
|
50
|
-
await setupWizard(projectRoot, frameManager, db);
|
|
51
|
-
} else {
|
|
52
|
-
await showStatus(projectRoot, frameManager, db);
|
|
53
|
-
}
|
|
54
|
-
} catch (error) {
|
|
55
|
-
spinner.fail(chalk.red(`Error: ${error}`));
|
|
56
|
-
process.exit(1);
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
return cmd;
|
|
60
|
-
}
|
|
61
|
-
async function enableQualityGates(projectRoot, frameManager, db, spinner) {
|
|
62
|
-
spinner.start("Enabling quality gates...");
|
|
63
|
-
try {
|
|
64
|
-
const config = await loadConfig(projectRoot);
|
|
65
|
-
config.qualityGates = {
|
|
66
|
-
...config.qualityGates,
|
|
67
|
-
runTests: true,
|
|
68
|
-
runCodeReview: true,
|
|
69
|
-
runLinter: true
|
|
70
|
-
};
|
|
71
|
-
const hooks = new PostTaskHooks(frameManager, db, config);
|
|
72
|
-
await hooks.initialize();
|
|
73
|
-
await saveConfig(projectRoot, config);
|
|
74
|
-
await createServiceFile(projectRoot);
|
|
75
|
-
spinner.succeed(chalk.green("\u2705 Quality gates enabled"));
|
|
76
|
-
console.log(chalk.bold("\n\u{1F50D} Quality Gates Active:"));
|
|
77
|
-
console.log(" \u2022 Auto-run tests after code changes");
|
|
78
|
-
console.log(" \u2022 Auto-run linter on file saves");
|
|
79
|
-
console.log(" \u2022 Auto-trigger code review on task completion");
|
|
80
|
-
console.log(" \u2022 Real-time file change monitoring");
|
|
81
|
-
console.log(chalk.gray("\nDisable with: stackmemory quality --disable"));
|
|
82
|
-
} catch (error) {
|
|
83
|
-
spinner.fail(chalk.red(`Failed to enable quality gates: ${error}`));
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
async function disableQualityGates(projectRoot, spinner) {
|
|
87
|
-
spinner.start("Disabling quality gates...");
|
|
88
|
-
try {
|
|
89
|
-
const config = await loadConfig(projectRoot);
|
|
90
|
-
config.qualityGates = {
|
|
91
|
-
...config.qualityGates,
|
|
92
|
-
runTests: false,
|
|
93
|
-
runCodeReview: false,
|
|
94
|
-
runLinter: false
|
|
95
|
-
};
|
|
96
|
-
await saveConfig(projectRoot, config);
|
|
97
|
-
const serviceFile = path.join(
|
|
98
|
-
projectRoot,
|
|
99
|
-
".stackmemory",
|
|
100
|
-
"quality.service"
|
|
101
|
-
);
|
|
102
|
-
try {
|
|
103
|
-
await fs.unlink(serviceFile);
|
|
104
|
-
} catch {
|
|
105
|
-
}
|
|
106
|
-
spinner.succeed(chalk.green("\u2705 Quality gates disabled"));
|
|
107
|
-
} catch (error) {
|
|
108
|
-
spinner.fail(chalk.red(`Failed to disable quality gates: ${error}`));
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
async function showStatus(projectRoot, frameManager, db) {
|
|
112
|
-
console.log(chalk.bold("\n\u{1F4CA} Quality Gates Status\n"));
|
|
113
|
-
try {
|
|
114
|
-
const config = await loadConfig(projectRoot);
|
|
115
|
-
const isEnabled = config.qualityGates?.runTests || config.qualityGates?.runCodeReview || config.qualityGates?.runLinter;
|
|
116
|
-
console.log(
|
|
117
|
-
`Status: ${isEnabled ? chalk.green("\u2705 Enabled") : chalk.yellow("\u26A0\uFE0F Disabled")}`
|
|
118
|
-
);
|
|
119
|
-
console.log("\nGates:");
|
|
120
|
-
console.log(
|
|
121
|
-
` Tests: ${config.qualityGates?.runTests ? "\u2705" : "\u274C"} ${getTestCommand(config)}`
|
|
122
|
-
);
|
|
123
|
-
console.log(
|
|
124
|
-
` Linter: ${config.qualityGates?.runLinter ? "\u2705" : "\u274C"} ${getLintCommand(config)}`
|
|
125
|
-
);
|
|
126
|
-
console.log(
|
|
127
|
-
` Code Review: ${config.qualityGates?.runCodeReview ? "\u2705" : "\u274C"}`
|
|
128
|
-
);
|
|
129
|
-
console.log(
|
|
130
|
-
` Coverage: ${config.qualityGates?.requireTestCoverage ? "\u2705" : "\u274C"}`
|
|
131
|
-
);
|
|
132
|
-
if (config.testFrameworks?.detected.length) {
|
|
133
|
-
console.log("\nDetected Frameworks:");
|
|
134
|
-
config.testFrameworks.detected.forEach((fw) => {
|
|
135
|
-
console.log(` \u2022 ${fw}`);
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
const recentResults = await getRecentQualityResults(frameManager);
|
|
139
|
-
if (recentResults.length > 0) {
|
|
140
|
-
console.log("\nRecent Results:");
|
|
141
|
-
recentResults.slice(0, 3).forEach((result) => {
|
|
142
|
-
const icon = result.passed ? "\u2705" : "\u274C";
|
|
143
|
-
console.log(
|
|
144
|
-
` ${icon} ${result.frameName} (${new Date(result.timestamp).toLocaleString()})`
|
|
145
|
-
);
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
} catch (error) {
|
|
149
|
-
console.error(chalk.red("Failed to get status:", error));
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
async function configureQualityGates(projectRoot) {
|
|
153
|
-
console.log(chalk.bold("\n\u2699\uFE0F Quality Gates Configuration\n"));
|
|
154
|
-
try {
|
|
155
|
-
const config = await loadConfig(projectRoot);
|
|
156
|
-
const answers = await inquirer.prompt([
|
|
157
|
-
{
|
|
158
|
-
type: "confirm",
|
|
159
|
-
name: "runTests",
|
|
160
|
-
message: "Auto-run tests after code changes?",
|
|
161
|
-
default: config.qualityGates?.runTests ?? true
|
|
162
|
-
},
|
|
163
|
-
{
|
|
164
|
-
type: "confirm",
|
|
165
|
-
name: "runLinter",
|
|
166
|
-
message: "Auto-run linter on file changes?",
|
|
167
|
-
default: config.qualityGates?.runLinter ?? true
|
|
168
|
-
},
|
|
169
|
-
{
|
|
170
|
-
type: "confirm",
|
|
171
|
-
name: "runCodeReview",
|
|
172
|
-
message: "Auto-trigger code review on task completion?",
|
|
173
|
-
default: config.qualityGates?.runCodeReview ?? true
|
|
174
|
-
},
|
|
175
|
-
{
|
|
176
|
-
type: "confirm",
|
|
177
|
-
name: "requireTestCoverage",
|
|
178
|
-
message: "Require test coverage checks?",
|
|
179
|
-
default: config.qualityGates?.requireTestCoverage ?? false
|
|
180
|
-
},
|
|
181
|
-
{
|
|
182
|
-
type: "confirm",
|
|
183
|
-
name: "blockOnFailure",
|
|
184
|
-
message: "Block further work when quality gates fail?",
|
|
185
|
-
default: config.qualityGates?.blockOnFailure ?? false
|
|
186
|
-
},
|
|
187
|
-
{
|
|
188
|
-
type: "input",
|
|
189
|
-
name: "testCommand",
|
|
190
|
-
message: "Custom test command (leave empty for auto-detect):",
|
|
191
|
-
default: config.testFrameworks?.testCommand || ""
|
|
192
|
-
},
|
|
193
|
-
{
|
|
194
|
-
type: "input",
|
|
195
|
-
name: "lintCommand",
|
|
196
|
-
message: "Custom lint command (leave empty for auto-detect):",
|
|
197
|
-
default: config.testFrameworks?.lintCommand || ""
|
|
198
|
-
}
|
|
199
|
-
]);
|
|
200
|
-
config.qualityGates = {
|
|
201
|
-
runTests: answers.runTests,
|
|
202
|
-
runLinter: answers.runLinter,
|
|
203
|
-
runCodeReview: answers.runCodeReview,
|
|
204
|
-
requireTestCoverage: answers.requireTestCoverage,
|
|
205
|
-
blockOnFailure: answers.blockOnFailure
|
|
206
|
-
};
|
|
207
|
-
config.testFrameworks = {
|
|
208
|
-
...config.testFrameworks,
|
|
209
|
-
testCommand: answers.testCommand || config.testFrameworks?.testCommand,
|
|
210
|
-
lintCommand: answers.lintCommand || config.testFrameworks?.lintCommand
|
|
211
|
-
};
|
|
212
|
-
await saveConfig(projectRoot, config);
|
|
213
|
-
console.log(chalk.green("\n\u2705 Configuration saved"));
|
|
214
|
-
console.log(chalk.gray("Enable with: stackmemory quality --enable"));
|
|
215
|
-
} catch (error) {
|
|
216
|
-
console.error(chalk.red("Configuration failed:", error));
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
async function runQualityGates(projectRoot, frameManager, db, spinner) {
|
|
220
|
-
spinner.start("Running quality gates...");
|
|
221
|
-
try {
|
|
222
|
-
const config = await loadConfig(projectRoot);
|
|
223
|
-
const hooks = new PostTaskHooks(frameManager, db, config);
|
|
224
|
-
const mockEvent = {
|
|
225
|
-
taskType: "task_complete",
|
|
226
|
-
frameId: "manual-run",
|
|
227
|
-
frameName: "Manual quality gate run",
|
|
228
|
-
files: await getRecentlyModifiedFiles(projectRoot),
|
|
229
|
-
changes: { added: 0, removed: 0, modified: 1 },
|
|
230
|
-
metadata: { trigger: "manual" }
|
|
231
|
-
};
|
|
232
|
-
const results = await hooks.runQualityGates(mockEvent);
|
|
233
|
-
spinner.succeed(chalk.green("\u2705 Quality gates completed"));
|
|
234
|
-
console.log(chalk.bold("\n\u{1F4CB} Quality Gate Results:\n"));
|
|
235
|
-
results.forEach((result) => {
|
|
236
|
-
const icon = result.passed ? "\u2705" : "\u274C";
|
|
237
|
-
const duration = result.duration < 1e3 ? `${result.duration}ms` : `${Math.round(result.duration / 1e3)}s`;
|
|
238
|
-
console.log(`${icon} ${result.gate} (${duration})`);
|
|
239
|
-
if (!result.passed && result.issues) {
|
|
240
|
-
result.issues.slice(0, 3).forEach((issue) => {
|
|
241
|
-
console.log(
|
|
242
|
-
` ${issue.severity === "error" ? "\u274C" : "\u26A0\uFE0F"} ${issue.message}`
|
|
243
|
-
);
|
|
244
|
-
});
|
|
245
|
-
if (result.issues.length > 3) {
|
|
246
|
-
console.log(
|
|
247
|
-
chalk.gray(` ... and ${result.issues.length - 3} more issues`)
|
|
248
|
-
);
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
});
|
|
252
|
-
const allPassed = results.every((r) => r.passed);
|
|
253
|
-
if (allPassed) {
|
|
254
|
-
console.log(chalk.green("\n\u{1F389} All quality gates passed!"));
|
|
255
|
-
} else {
|
|
256
|
-
console.log(
|
|
257
|
-
chalk.yellow("\n\u26A0\uFE0F Some quality gates failed. See details above.")
|
|
258
|
-
);
|
|
259
|
-
}
|
|
260
|
-
} catch (error) {
|
|
261
|
-
spinner.fail(chalk.red(`Quality gates failed: ${error}`));
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
async function showHistory(frameManager) {
|
|
265
|
-
console.log(chalk.bold("\n\u{1F4C8} Quality Gate History\n"));
|
|
266
|
-
try {
|
|
267
|
-
const results = await getRecentQualityResults(frameManager);
|
|
268
|
-
if (results.length === 0) {
|
|
269
|
-
console.log(chalk.gray("No quality gate history found"));
|
|
270
|
-
return;
|
|
271
|
-
}
|
|
272
|
-
results.slice(0, 10).forEach((result, index) => {
|
|
273
|
-
const icon = result.passed ? "\u2705" : "\u274C";
|
|
274
|
-
const date = new Date(result.timestamp).toLocaleDateString();
|
|
275
|
-
const time = new Date(result.timestamp).toLocaleTimeString();
|
|
276
|
-
console.log(`${icon} ${result.frameName}`);
|
|
277
|
-
console.log(chalk.gray(` ${date} ${time} - ${result.duration}ms`));
|
|
278
|
-
if (result.gates) {
|
|
279
|
-
result.gates.forEach((gate) => {
|
|
280
|
-
const gateIcon = gate.passed ? " \u2713" : " \u2717";
|
|
281
|
-
console.log(chalk.gray(`${gateIcon} ${gate.gate}`));
|
|
282
|
-
});
|
|
283
|
-
}
|
|
284
|
-
if (index < results.length - 1) console.log("");
|
|
285
|
-
});
|
|
286
|
-
} catch (error) {
|
|
287
|
-
console.error(chalk.red("Failed to get history:", error));
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
async function setupWizard(projectRoot, frameManager, db) {
|
|
291
|
-
console.log(chalk.bold("\u{1F9D9} Quality Gates Setup Wizard\n"));
|
|
292
|
-
console.log(
|
|
293
|
-
"This wizard will help you configure automatic quality gates for your project."
|
|
294
|
-
);
|
|
295
|
-
console.log(
|
|
296
|
-
"Quality gates run automatically after Claude completes tasks.\n"
|
|
297
|
-
);
|
|
298
|
-
const packageJsonPath = path.join(projectRoot, "package.json");
|
|
299
|
-
let projectType = "unknown";
|
|
300
|
-
const detectedFrameworks = [];
|
|
301
|
-
try {
|
|
302
|
-
const packageJson = JSON.parse(await fs.readFile(packageJsonPath, "utf-8"));
|
|
303
|
-
const deps = {
|
|
304
|
-
...packageJson.dependencies,
|
|
305
|
-
...packageJson.devDependencies
|
|
306
|
-
};
|
|
307
|
-
if (deps.react) projectType = "React";
|
|
308
|
-
else if (deps.vue) projectType = "Vue";
|
|
309
|
-
else if (deps.angular) projectType = "Angular";
|
|
310
|
-
else if (deps.express) projectType = "Node.js API";
|
|
311
|
-
else if (deps.nextjs) projectType = "Next.js";
|
|
312
|
-
if (deps.jest) detectedFrameworks.push("Jest");
|
|
313
|
-
if (deps.vitest) detectedFrameworks.push("Vitest");
|
|
314
|
-
if (deps.playwright) detectedFrameworks.push("Playwright");
|
|
315
|
-
if (deps.eslint) detectedFrameworks.push("ESLint");
|
|
316
|
-
} catch {
|
|
317
|
-
}
|
|
318
|
-
console.log(`\u{1F4E6} Detected project: ${chalk.cyan(projectType)}`);
|
|
319
|
-
if (detectedFrameworks.length) {
|
|
320
|
-
console.log(
|
|
321
|
-
`\u{1F527} Detected tools: ${chalk.cyan(detectedFrameworks.join(", "))}`
|
|
322
|
-
);
|
|
323
|
-
}
|
|
324
|
-
console.log("");
|
|
325
|
-
const { proceed } = await inquirer.prompt([
|
|
326
|
-
{
|
|
327
|
-
type: "confirm",
|
|
328
|
-
name: "proceed",
|
|
329
|
-
message: "Continue with setup?",
|
|
330
|
-
default: true
|
|
331
|
-
}
|
|
332
|
-
]);
|
|
333
|
-
if (!proceed) {
|
|
334
|
-
console.log(chalk.gray("Setup cancelled"));
|
|
335
|
-
return;
|
|
336
|
-
}
|
|
337
|
-
await configureQualityGates(projectRoot);
|
|
338
|
-
const { enable } = await inquirer.prompt([
|
|
339
|
-
{
|
|
340
|
-
type: "confirm",
|
|
341
|
-
name: "enable",
|
|
342
|
-
message: "Enable quality gates now?",
|
|
343
|
-
default: true
|
|
344
|
-
}
|
|
345
|
-
]);
|
|
346
|
-
if (enable) {
|
|
347
|
-
const spinner = ora();
|
|
348
|
-
await enableQualityGates(projectRoot, frameManager, db, spinner);
|
|
349
|
-
}
|
|
350
|
-
console.log(chalk.bold("\n\u{1F389} Setup Complete!\n"));
|
|
351
|
-
console.log(
|
|
352
|
-
"Quality gates will now run automatically after Claude completes tasks."
|
|
353
|
-
);
|
|
354
|
-
console.log("Check status with: stackmemory quality --status");
|
|
355
|
-
}
|
|
356
|
-
async function getProjectRoot() {
|
|
357
|
-
return process.cwd();
|
|
358
|
-
}
|
|
359
|
-
async function loadConfig(projectRoot) {
|
|
360
|
-
const configPath = path.join(projectRoot, ".stackmemory", "config.json");
|
|
361
|
-
try {
|
|
362
|
-
const content = await fs.readFile(configPath, "utf-8");
|
|
363
|
-
return JSON.parse(content);
|
|
364
|
-
} catch {
|
|
365
|
-
return {};
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
async function saveConfig(projectRoot, config) {
|
|
369
|
-
const configPath = path.join(projectRoot, ".stackmemory", "config.json");
|
|
370
|
-
await fs.mkdir(path.dirname(configPath), { recursive: true });
|
|
371
|
-
await fs.writeFile(configPath, JSON.stringify(config, null, 2), "utf-8");
|
|
372
|
-
}
|
|
373
|
-
function getTestCommand(config) {
|
|
374
|
-
if (config.testFrameworks?.testCommand) {
|
|
375
|
-
return chalk.gray(`(${config.testFrameworks.testCommand})`);
|
|
376
|
-
}
|
|
377
|
-
return chalk.gray("(auto-detect)");
|
|
378
|
-
}
|
|
379
|
-
function getLintCommand(config) {
|
|
380
|
-
if (config.testFrameworks?.lintCommand) {
|
|
381
|
-
return chalk.gray(`(${config.testFrameworks.lintCommand})`);
|
|
382
|
-
}
|
|
383
|
-
return chalk.gray("(auto-detect)");
|
|
384
|
-
}
|
|
385
|
-
async function getRecentQualityResults(frameManager) {
|
|
386
|
-
return [];
|
|
387
|
-
}
|
|
388
|
-
async function getRecentlyModifiedFiles(projectRoot) {
|
|
389
|
-
try {
|
|
390
|
-
const { execFileSync } = await import("child_process");
|
|
391
|
-
const output = execFileSync("git", ["diff", "--name-only", "HEAD~1"], {
|
|
392
|
-
cwd: projectRoot,
|
|
393
|
-
encoding: "utf-8"
|
|
394
|
-
});
|
|
395
|
-
return output.trim().split("\n").filter((f) => f.length > 0);
|
|
396
|
-
} catch {
|
|
397
|
-
return [];
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
async function createServiceFile(projectRoot) {
|
|
401
|
-
const serviceContent = `# StackMemory Quality Gates Service
|
|
402
|
-
# This file indicates quality gates are enabled
|
|
403
|
-
# Created: ${(/* @__PURE__ */ new Date()).toISOString()}
|
|
404
|
-
`;
|
|
405
|
-
const servicePath = path.join(projectRoot, ".stackmemory", "quality.service");
|
|
406
|
-
await fs.writeFile(servicePath, serviceContent, "utf-8");
|
|
407
|
-
}
|
|
408
|
-
var quality_default = createQualityCommand();
|
|
409
|
-
export {
|
|
410
|
-
createQualityCommand,
|
|
411
|
-
quality_default as default
|
|
412
|
-
};
|
|
413
|
-
//# sourceMappingURL=quality.js.map
|