@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,545 +0,0 @@
|
|
|
1
|
-
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
2
|
-
import { dirname as __pathDirname } from 'path';
|
|
3
|
-
const __filename = __fileURLToPath(import.meta.url);
|
|
4
|
-
const __dirname = __pathDirname(__filename);
|
|
5
|
-
import { EventEmitter } from "events";
|
|
6
|
-
import { execSync } from "child_process";
|
|
7
|
-
import * as fs from "fs/promises";
|
|
8
|
-
import * as path from "path";
|
|
9
|
-
class PostTaskHooks extends EventEmitter {
|
|
10
|
-
config;
|
|
11
|
-
frameManager;
|
|
12
|
-
dbManager;
|
|
13
|
-
isActive = false;
|
|
14
|
-
lastProcessedFrame;
|
|
15
|
-
constructor(frameManager, dbManager, config) {
|
|
16
|
-
super();
|
|
17
|
-
this.frameManager = frameManager;
|
|
18
|
-
this.dbManager = dbManager;
|
|
19
|
-
this.config = {
|
|
20
|
-
projectRoot: process.cwd(),
|
|
21
|
-
qualityGates: {
|
|
22
|
-
runTests: true,
|
|
23
|
-
requireTestCoverage: false,
|
|
24
|
-
runCodeReview: true,
|
|
25
|
-
runLinter: true,
|
|
26
|
-
blockOnFailure: false
|
|
27
|
-
},
|
|
28
|
-
testFrameworks: {
|
|
29
|
-
detected: []
|
|
30
|
-
},
|
|
31
|
-
reviewConfig: {
|
|
32
|
-
reviewOnEveryChange: false,
|
|
33
|
-
reviewOnTaskComplete: true,
|
|
34
|
-
focusAreas: [
|
|
35
|
-
"security",
|
|
36
|
-
"performance",
|
|
37
|
-
"maintainability",
|
|
38
|
-
"correctness"
|
|
39
|
-
],
|
|
40
|
-
skipPatterns: ["*.test.ts", "*.spec.js", "dist/", "node_modules/"]
|
|
41
|
-
},
|
|
42
|
-
...config
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Initialize post-task hooks
|
|
47
|
-
*/
|
|
48
|
-
async initialize() {
|
|
49
|
-
if (this.isActive) return;
|
|
50
|
-
await this.detectTestFrameworks();
|
|
51
|
-
this.setupFrameListeners();
|
|
52
|
-
await this.setupFileWatchers();
|
|
53
|
-
this.isActive = true;
|
|
54
|
-
console.log("\u2705 Post-task hooks initialized");
|
|
55
|
-
this.emit("initialized", this.config);
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Detect available test frameworks and commands
|
|
59
|
-
*/
|
|
60
|
-
async detectTestFrameworks() {
|
|
61
|
-
const packageJsonPath = path.join(this.config.projectRoot, "package.json");
|
|
62
|
-
try {
|
|
63
|
-
const packageJson = JSON.parse(
|
|
64
|
-
await fs.readFile(packageJsonPath, "utf-8")
|
|
65
|
-
);
|
|
66
|
-
const scripts = packageJson.scripts || {};
|
|
67
|
-
const dependencies = {
|
|
68
|
-
...packageJson.dependencies,
|
|
69
|
-
...packageJson.devDependencies
|
|
70
|
-
};
|
|
71
|
-
const frameworks = [];
|
|
72
|
-
if (dependencies.jest) frameworks.push("jest");
|
|
73
|
-
if (dependencies.vitest) frameworks.push("vitest");
|
|
74
|
-
if (dependencies.mocha) frameworks.push("mocha");
|
|
75
|
-
if (dependencies.playwright) frameworks.push("playwright");
|
|
76
|
-
if (dependencies.cypress) frameworks.push("cypress");
|
|
77
|
-
this.config.testFrameworks.detected = frameworks;
|
|
78
|
-
if (scripts.test) {
|
|
79
|
-
this.config.testFrameworks.testCommand = "npm test";
|
|
80
|
-
} else if (scripts["test:run"]) {
|
|
81
|
-
this.config.testFrameworks.testCommand = "npm run test:run";
|
|
82
|
-
}
|
|
83
|
-
if (scripts.coverage) {
|
|
84
|
-
this.config.testFrameworks.coverageCommand = "npm run coverage";
|
|
85
|
-
}
|
|
86
|
-
if (scripts.lint) {
|
|
87
|
-
this.config.testFrameworks.lintCommand = "npm run lint";
|
|
88
|
-
}
|
|
89
|
-
} catch (error) {
|
|
90
|
-
console.warn("Could not detect test frameworks:", error);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Set up frame event listeners
|
|
95
|
-
*/
|
|
96
|
-
setupFrameListeners() {
|
|
97
|
-
this.frameManager.on(
|
|
98
|
-
"frame:closed",
|
|
99
|
-
async (frameId, frameData) => {
|
|
100
|
-
if (frameData.type === "task" || frameData.type === "subtask") {
|
|
101
|
-
await this.handleTaskCompletion({
|
|
102
|
-
taskType: "task_complete",
|
|
103
|
-
frameId,
|
|
104
|
-
frameName: frameData.name || "Unnamed task",
|
|
105
|
-
files: this.extractFilesFromFrame(frameData),
|
|
106
|
-
changes: this.calculateChanges(frameData),
|
|
107
|
-
metadata: frameData.metadata || {}
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
);
|
|
112
|
-
this.frameManager.on(
|
|
113
|
-
"frame:event",
|
|
114
|
-
async (frameId, eventType, data) => {
|
|
115
|
-
if (eventType === "code_change" || eventType === "file_modified") {
|
|
116
|
-
await this.handleTaskCompletion({
|
|
117
|
-
taskType: "code_change",
|
|
118
|
-
frameId,
|
|
119
|
-
frameName: data.description || "Code change",
|
|
120
|
-
files: data.files || [],
|
|
121
|
-
changes: data.changes || { added: 0, removed: 0, modified: 1 },
|
|
122
|
-
metadata: data
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
);
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Set up file watchers for real-time code change detection
|
|
130
|
-
*/
|
|
131
|
-
async setupFileWatchers() {
|
|
132
|
-
try {
|
|
133
|
-
const chokidar = await import("chokidar");
|
|
134
|
-
const watcher = chokidar.watch(
|
|
135
|
-
[
|
|
136
|
-
"**/*.{ts,js,tsx,jsx,py,go,rs,java,cpp,c}",
|
|
137
|
-
"!node_modules/**",
|
|
138
|
-
"!dist/**",
|
|
139
|
-
"!build/**"
|
|
140
|
-
],
|
|
141
|
-
{
|
|
142
|
-
cwd: this.config.projectRoot,
|
|
143
|
-
ignored: /node_modules/,
|
|
144
|
-
persistent: true
|
|
145
|
-
}
|
|
146
|
-
);
|
|
147
|
-
let changeQueue = [];
|
|
148
|
-
let debounceTimer = null;
|
|
149
|
-
watcher.on("change", (filePath) => {
|
|
150
|
-
changeQueue.push(filePath);
|
|
151
|
-
if (debounceTimer) clearTimeout(debounceTimer);
|
|
152
|
-
debounceTimer = setTimeout(async () => {
|
|
153
|
-
if (changeQueue.length > 0) {
|
|
154
|
-
await this.handleFileChanges([...changeQueue]);
|
|
155
|
-
changeQueue = [];
|
|
156
|
-
}
|
|
157
|
-
}, 2e3);
|
|
158
|
-
});
|
|
159
|
-
} catch (error) {
|
|
160
|
-
console.warn("File watching not available:", error);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* Handle task completion events
|
|
165
|
-
*/
|
|
166
|
-
async handleTaskCompletion(event) {
|
|
167
|
-
if (this.lastProcessedFrame === event.frameId && event.taskType !== "code_change") {
|
|
168
|
-
return;
|
|
169
|
-
}
|
|
170
|
-
this.lastProcessedFrame = event.frameId;
|
|
171
|
-
console.log(
|
|
172
|
-
`\u{1F50D} Task completed: ${event.frameName} (${event.files.length} files changed)`
|
|
173
|
-
);
|
|
174
|
-
this.emit("task:completed", event);
|
|
175
|
-
const results = await this.runQualityGates(event);
|
|
176
|
-
const allPassed = results.every((r) => r.passed);
|
|
177
|
-
if (allPassed) {
|
|
178
|
-
console.log("\u2705 All quality gates passed");
|
|
179
|
-
this.emit("quality:passed", { event, results });
|
|
180
|
-
} else {
|
|
181
|
-
console.log("\u26A0\uFE0F Quality gate failures detected");
|
|
182
|
-
this.emit("quality:failed", { event, results });
|
|
183
|
-
if (this.config.qualityGates.blockOnFailure) {
|
|
184
|
-
await this.blockFurtherWork(results);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
await this.recordQualityResults(event.frameId, results);
|
|
188
|
-
}
|
|
189
|
-
/**
|
|
190
|
-
* Handle file changes
|
|
191
|
-
*/
|
|
192
|
-
async handleFileChanges(files) {
|
|
193
|
-
if (!this.config.reviewConfig.reviewOnEveryChange) return;
|
|
194
|
-
const filteredFiles = files.filter((file) => {
|
|
195
|
-
return !this.config.reviewConfig.skipPatterns.some((pattern) => {
|
|
196
|
-
return file.includes(pattern.replace("*", ""));
|
|
197
|
-
});
|
|
198
|
-
});
|
|
199
|
-
if (filteredFiles.length === 0) return;
|
|
200
|
-
await this.handleTaskCompletion({
|
|
201
|
-
taskType: "file_modified",
|
|
202
|
-
frameId: "file-watcher",
|
|
203
|
-
frameName: "File changes detected",
|
|
204
|
-
files: filteredFiles,
|
|
205
|
-
changes: { added: 0, removed: 0, modified: filteredFiles.length },
|
|
206
|
-
metadata: { trigger: "file_watcher" }
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* Run all configured quality gates
|
|
211
|
-
*/
|
|
212
|
-
async runQualityGates(event) {
|
|
213
|
-
const results = [];
|
|
214
|
-
if (this.config.qualityGates.runLinter) {
|
|
215
|
-
results.push(await this.runLinter(event.files));
|
|
216
|
-
}
|
|
217
|
-
if (this.config.qualityGates.runTests) {
|
|
218
|
-
results.push(await this.runTests(event.files));
|
|
219
|
-
}
|
|
220
|
-
if (this.config.qualityGates.requireTestCoverage) {
|
|
221
|
-
results.push(await this.checkTestCoverage(event.files));
|
|
222
|
-
}
|
|
223
|
-
if (this.config.qualityGates.runCodeReview) {
|
|
224
|
-
results.push(await this.runCodeReview(event));
|
|
225
|
-
}
|
|
226
|
-
return results;
|
|
227
|
-
}
|
|
228
|
-
/**
|
|
229
|
-
* Run linter on changed files
|
|
230
|
-
*/
|
|
231
|
-
async runLinter(files) {
|
|
232
|
-
const start = Date.now();
|
|
233
|
-
try {
|
|
234
|
-
if (!this.config.testFrameworks.lintCommand) {
|
|
235
|
-
return {
|
|
236
|
-
gate: "linter",
|
|
237
|
-
passed: true,
|
|
238
|
-
output: "No lint command configured",
|
|
239
|
-
duration: Date.now() - start
|
|
240
|
-
};
|
|
241
|
-
}
|
|
242
|
-
const output = execSync(this.config.testFrameworks.lintCommand, {
|
|
243
|
-
cwd: this.config.projectRoot,
|
|
244
|
-
encoding: "utf-8",
|
|
245
|
-
timeout: 3e4
|
|
246
|
-
// 30 second timeout
|
|
247
|
-
});
|
|
248
|
-
return {
|
|
249
|
-
gate: "linter",
|
|
250
|
-
passed: true,
|
|
251
|
-
output,
|
|
252
|
-
duration: Date.now() - start
|
|
253
|
-
};
|
|
254
|
-
} catch (error) {
|
|
255
|
-
return {
|
|
256
|
-
gate: "linter",
|
|
257
|
-
passed: false,
|
|
258
|
-
output: error.stdout || error.message,
|
|
259
|
-
duration: Date.now() - start,
|
|
260
|
-
issues: this.parseLintErrors(error.stdout || error.message)
|
|
261
|
-
};
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
/**
|
|
265
|
-
* Run tests
|
|
266
|
-
*/
|
|
267
|
-
async runTests(files) {
|
|
268
|
-
const start = Date.now();
|
|
269
|
-
try {
|
|
270
|
-
if (!this.config.testFrameworks.testCommand) {
|
|
271
|
-
return {
|
|
272
|
-
gate: "tests",
|
|
273
|
-
passed: true,
|
|
274
|
-
output: "No test command configured",
|
|
275
|
-
duration: Date.now() - start
|
|
276
|
-
};
|
|
277
|
-
}
|
|
278
|
-
const output = execSync(this.config.testFrameworks.testCommand, {
|
|
279
|
-
cwd: this.config.projectRoot,
|
|
280
|
-
encoding: "utf-8",
|
|
281
|
-
timeout: 12e4
|
|
282
|
-
// 2 minute timeout
|
|
283
|
-
});
|
|
284
|
-
return {
|
|
285
|
-
gate: "tests",
|
|
286
|
-
passed: true,
|
|
287
|
-
output,
|
|
288
|
-
duration: Date.now() - start
|
|
289
|
-
};
|
|
290
|
-
} catch (error) {
|
|
291
|
-
return {
|
|
292
|
-
gate: "tests",
|
|
293
|
-
passed: false,
|
|
294
|
-
output: error.stdout || error.message,
|
|
295
|
-
duration: Date.now() - start,
|
|
296
|
-
issues: this.parseTestFailures(error.stdout || error.message)
|
|
297
|
-
};
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
/**
|
|
301
|
-
* Check test coverage
|
|
302
|
-
*/
|
|
303
|
-
async checkTestCoverage(files) {
|
|
304
|
-
const start = Date.now();
|
|
305
|
-
try {
|
|
306
|
-
if (!this.config.testFrameworks.coverageCommand) {
|
|
307
|
-
return {
|
|
308
|
-
gate: "coverage",
|
|
309
|
-
passed: true,
|
|
310
|
-
output: "No coverage command configured",
|
|
311
|
-
duration: Date.now() - start
|
|
312
|
-
};
|
|
313
|
-
}
|
|
314
|
-
const output = execSync(this.config.testFrameworks.coverageCommand, {
|
|
315
|
-
cwd: this.config.projectRoot,
|
|
316
|
-
encoding: "utf-8",
|
|
317
|
-
timeout: 12e4
|
|
318
|
-
});
|
|
319
|
-
const coverageMatch = output.match(/(\d+\.?\d*)%/);
|
|
320
|
-
const coverage = coverageMatch ? parseFloat(coverageMatch[1]) : 0;
|
|
321
|
-
const threshold = 80;
|
|
322
|
-
return {
|
|
323
|
-
gate: "coverage",
|
|
324
|
-
passed: coverage >= threshold,
|
|
325
|
-
output,
|
|
326
|
-
duration: Date.now() - start,
|
|
327
|
-
issues: coverage < threshold ? [
|
|
328
|
-
{
|
|
329
|
-
type: "coverage_low",
|
|
330
|
-
file: "overall",
|
|
331
|
-
message: `Coverage ${coverage}% is below threshold ${threshold}%`,
|
|
332
|
-
severity: "warning"
|
|
333
|
-
}
|
|
334
|
-
] : void 0
|
|
335
|
-
};
|
|
336
|
-
} catch (error) {
|
|
337
|
-
return {
|
|
338
|
-
gate: "coverage",
|
|
339
|
-
passed: false,
|
|
340
|
-
output: error.stdout || error.message,
|
|
341
|
-
duration: Date.now() - start,
|
|
342
|
-
issues: [
|
|
343
|
-
{
|
|
344
|
-
type: "coverage_low",
|
|
345
|
-
file: "overall",
|
|
346
|
-
message: "Coverage check failed",
|
|
347
|
-
severity: "error"
|
|
348
|
-
}
|
|
349
|
-
]
|
|
350
|
-
};
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
/**
|
|
354
|
-
* Run code review using AI agent
|
|
355
|
-
*/
|
|
356
|
-
async runCodeReview(event) {
|
|
357
|
-
const start = Date.now();
|
|
358
|
-
try {
|
|
359
|
-
const reviewPrompt = this.generateCodeReviewPrompt(event);
|
|
360
|
-
const review = await this.callCodeReviewAgent(reviewPrompt, event.files);
|
|
361
|
-
return {
|
|
362
|
-
gate: "code_review",
|
|
363
|
-
passed: !review.issues || review.issues.length === 0,
|
|
364
|
-
output: review.summary,
|
|
365
|
-
duration: Date.now() - start,
|
|
366
|
-
issues: review.issues
|
|
367
|
-
};
|
|
368
|
-
} catch (error) {
|
|
369
|
-
return {
|
|
370
|
-
gate: "code_review",
|
|
371
|
-
passed: false,
|
|
372
|
-
output: `Code review failed: ${error.message}`,
|
|
373
|
-
duration: Date.now() - start
|
|
374
|
-
};
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
/**
|
|
378
|
-
* Generate code review prompt
|
|
379
|
-
*/
|
|
380
|
-
generateCodeReviewPrompt(event) {
|
|
381
|
-
return `
|
|
382
|
-
Please review the following code changes:
|
|
383
|
-
|
|
384
|
-
Task: ${event.frameName}
|
|
385
|
-
Files changed: ${event.files.join(", ")}
|
|
386
|
-
Changes: +${event.changes.added}, -${event.changes.removed}, ~${event.changes.modified}
|
|
387
|
-
|
|
388
|
-
Focus areas: ${this.config.reviewConfig.focusAreas.join(", ")}
|
|
389
|
-
|
|
390
|
-
Please check for:
|
|
391
|
-
1. Security vulnerabilities
|
|
392
|
-
2. Performance issues
|
|
393
|
-
3. Code maintainability
|
|
394
|
-
4. Correctness and logic errors
|
|
395
|
-
5. Best practices adherence
|
|
396
|
-
|
|
397
|
-
Provide specific, actionable feedback.
|
|
398
|
-
`;
|
|
399
|
-
}
|
|
400
|
-
/**
|
|
401
|
-
* Call code review agent (placeholder for actual implementation)
|
|
402
|
-
*/
|
|
403
|
-
async callCodeReviewAgent(prompt, files) {
|
|
404
|
-
return {
|
|
405
|
-
summary: `Reviewed ${files.length} files. Code quality looks good.`,
|
|
406
|
-
issues: []
|
|
407
|
-
};
|
|
408
|
-
}
|
|
409
|
-
/**
|
|
410
|
-
* Parse lint errors into structured issues
|
|
411
|
-
*/
|
|
412
|
-
parseLintErrors(output) {
|
|
413
|
-
const issues = [];
|
|
414
|
-
const lines = output.split("\n");
|
|
415
|
-
for (const line of lines) {
|
|
416
|
-
const match = line.match(
|
|
417
|
-
/^(.+?):(\d+):(\d+):\s*(error|warning):\s*(.+)$/
|
|
418
|
-
);
|
|
419
|
-
if (match) {
|
|
420
|
-
issues.push({
|
|
421
|
-
type: "lint_error",
|
|
422
|
-
file: match[1],
|
|
423
|
-
line: parseInt(match[2]),
|
|
424
|
-
message: match[5],
|
|
425
|
-
severity: match[4]
|
|
426
|
-
});
|
|
427
|
-
}
|
|
428
|
-
}
|
|
429
|
-
return issues;
|
|
430
|
-
}
|
|
431
|
-
/**
|
|
432
|
-
* Parse test failures into structured issues
|
|
433
|
-
*/
|
|
434
|
-
parseTestFailures(output) {
|
|
435
|
-
const issues = [];
|
|
436
|
-
const lines = output.split("\n");
|
|
437
|
-
for (const line of lines) {
|
|
438
|
-
if (line.includes("FAIL") || line.includes("\u2717")) {
|
|
439
|
-
issues.push({
|
|
440
|
-
type: "test_failure",
|
|
441
|
-
file: "unknown",
|
|
442
|
-
message: line.trim(),
|
|
443
|
-
severity: "error"
|
|
444
|
-
});
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
return issues;
|
|
448
|
-
}
|
|
449
|
-
/**
|
|
450
|
-
* Block further work when quality gates fail
|
|
451
|
-
*/
|
|
452
|
-
async blockFurtherWork(results) {
|
|
453
|
-
const failedGates = results.filter((r) => !r.passed);
|
|
454
|
-
console.log("\u{1F6AB} Quality gates failed - blocking further work:");
|
|
455
|
-
failedGates.forEach((gate) => {
|
|
456
|
-
console.log(` ${gate.gate}: ${gate.output}`);
|
|
457
|
-
if (gate.issues) {
|
|
458
|
-
gate.issues.forEach((issue) => {
|
|
459
|
-
console.log(
|
|
460
|
-
` - ${issue.severity}: ${issue.message} (${issue.file}:${issue.line || 0})`
|
|
461
|
-
);
|
|
462
|
-
});
|
|
463
|
-
}
|
|
464
|
-
});
|
|
465
|
-
console.log("\n\u{1F527} Fix these issues before continuing:");
|
|
466
|
-
const allIssues = failedGates.flatMap((g) => g.issues || []);
|
|
467
|
-
allIssues.forEach((issue, i) => {
|
|
468
|
-
console.log(`${i + 1}. ${issue.message}`);
|
|
469
|
-
});
|
|
470
|
-
}
|
|
471
|
-
/**
|
|
472
|
-
* Record quality results in frame metadata
|
|
473
|
-
*/
|
|
474
|
-
async recordQualityResults(frameId, results) {
|
|
475
|
-
try {
|
|
476
|
-
const frame = await this.frameManager.getFrame(frameId);
|
|
477
|
-
if (frame) {
|
|
478
|
-
frame.metadata = {
|
|
479
|
-
...frame.metadata,
|
|
480
|
-
qualityGates: {
|
|
481
|
-
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
482
|
-
results,
|
|
483
|
-
passed: results.every((r) => r.passed),
|
|
484
|
-
totalDuration: results.reduce((sum, r) => sum + r.duration, 0)
|
|
485
|
-
}
|
|
486
|
-
};
|
|
487
|
-
await this.frameManager.updateFrame(frameId, frame);
|
|
488
|
-
}
|
|
489
|
-
} catch (error) {
|
|
490
|
-
console.error("Failed to record quality results:", error);
|
|
491
|
-
}
|
|
492
|
-
}
|
|
493
|
-
/**
|
|
494
|
-
* Extract files from frame data
|
|
495
|
-
*/
|
|
496
|
-
extractFilesFromFrame(frameData) {
|
|
497
|
-
const files = [];
|
|
498
|
-
if (frameData.metadata?.files) {
|
|
499
|
-
files.push(...frameData.metadata.files);
|
|
500
|
-
}
|
|
501
|
-
if (frameData.events) {
|
|
502
|
-
frameData.events.forEach((event) => {
|
|
503
|
-
if (event.type === "file_change" && event.data?.file) {
|
|
504
|
-
files.push(event.data.file);
|
|
505
|
-
}
|
|
506
|
-
});
|
|
507
|
-
}
|
|
508
|
-
return [...new Set(files)];
|
|
509
|
-
}
|
|
510
|
-
/**
|
|
511
|
-
* Calculate changes from frame data
|
|
512
|
-
*/
|
|
513
|
-
calculateChanges(frameData) {
|
|
514
|
-
return {
|
|
515
|
-
added: frameData.metadata?.linesAdded || 0,
|
|
516
|
-
removed: frameData.metadata?.linesRemoved || 0,
|
|
517
|
-
modified: frameData.metadata?.filesModified || 1
|
|
518
|
-
};
|
|
519
|
-
}
|
|
520
|
-
/**
|
|
521
|
-
* Stop post-task hooks
|
|
522
|
-
*/
|
|
523
|
-
async stop() {
|
|
524
|
-
this.isActive = false;
|
|
525
|
-
this.removeAllListeners();
|
|
526
|
-
console.log("\u{1F6D1} Post-task hooks stopped");
|
|
527
|
-
}
|
|
528
|
-
/**
|
|
529
|
-
* Get current configuration
|
|
530
|
-
*/
|
|
531
|
-
getConfig() {
|
|
532
|
-
return { ...this.config };
|
|
533
|
-
}
|
|
534
|
-
/**
|
|
535
|
-
* Update configuration
|
|
536
|
-
*/
|
|
537
|
-
updateConfig(updates) {
|
|
538
|
-
this.config = { ...this.config, ...updates };
|
|
539
|
-
this.emit("config:updated", this.config);
|
|
540
|
-
}
|
|
541
|
-
}
|
|
542
|
-
export {
|
|
543
|
-
PostTaskHooks
|
|
544
|
-
};
|
|
545
|
-
//# sourceMappingURL=post-task-hooks.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/integrations/claude-code/post-task-hooks.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Post-Task Completion Hooks for StackMemory\n * Automatically runs tests and code review after Claude completes tasks\n */\n\nimport { EventEmitter } from 'events';\nimport { execSync } from 'child_process';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { FrameManager } from '../../core/frame/frame-manager';\nimport { DatabaseManager } from '../../core/storage/database-manager';\n\nexport interface PostTaskConfig {\n projectRoot: string;\n qualityGates: {\n runTests: boolean; // Auto-run tests after code changes\n requireTestCoverage: boolean; // Require test coverage for new code\n runCodeReview: boolean; // Auto-trigger code review agent\n runLinter: boolean; // Auto-run linter/formatter\n blockOnFailure: boolean; // Block further work if quality gates fail\n };\n testFrameworks: {\n detected: string[]; // Auto-detected test frameworks\n testCommand?: string; // Custom test command\n coverageCommand?: string; // Custom coverage command\n lintCommand?: string; // Custom lint command\n };\n reviewConfig: {\n reviewOnEveryChange: boolean; // Review every file change\n reviewOnTaskComplete: boolean; // Review when task frame closes\n focusAreas: string[]; // What to focus on in reviews\n skipPatterns: string[]; // Files/patterns to skip review\n };\n}\n\nexport interface TaskCompletionEvent {\n taskType: 'code_change' | 'task_complete' | 'file_modified' | 'frame_closed';\n files: string[];\n frameId: string;\n frameName: string;\n changes: {\n added: number;\n removed: number;\n modified: number;\n };\n metadata: Record<string, any>;\n}\n\nexport interface QualityGateResult {\n gate: string;\n passed: boolean;\n output: string;\n duration: number;\n issues?: QualityIssue[];\n}\n\nexport interface QualityIssue {\n type: 'test_failure' | 'lint_error' | 'coverage_low' | 'review_concern';\n file: string;\n line?: number;\n message: string;\n severity: 'error' | 'warning' | 'info';\n}\n\nexport class PostTaskHooks extends EventEmitter {\n private config: PostTaskConfig;\n private frameManager: FrameManager;\n private dbManager: DatabaseManager;\n private isActive: boolean = false;\n private lastProcessedFrame?: string;\n\n constructor(\n frameManager: FrameManager,\n dbManager: DatabaseManager,\n config: Partial<PostTaskConfig>\n ) {\n super();\n this.frameManager = frameManager;\n this.dbManager = dbManager;\n\n // Default configuration\n this.config = {\n projectRoot: process.cwd(),\n qualityGates: {\n runTests: true,\n requireTestCoverage: false,\n runCodeReview: true,\n runLinter: true,\n blockOnFailure: false,\n },\n testFrameworks: {\n detected: [],\n },\n reviewConfig: {\n reviewOnEveryChange: false,\n reviewOnTaskComplete: true,\n focusAreas: [\n 'security',\n 'performance',\n 'maintainability',\n 'correctness',\n ],\n skipPatterns: ['*.test.ts', '*.spec.js', 'dist/', 'node_modules/'],\n },\n ...config,\n };\n }\n\n /**\n * Initialize post-task hooks\n */\n async initialize(): Promise<void> {\n if (this.isActive) return;\n\n // Detect test frameworks and commands\n await this.detectTestFrameworks();\n\n // Set up frame event listeners\n this.setupFrameListeners();\n\n // Set up file watchers for code changes\n await this.setupFileWatchers();\n\n this.isActive = true;\n console.log('\u2705 Post-task hooks initialized');\n this.emit('initialized', this.config);\n }\n\n /**\n * Detect available test frameworks and commands\n */\n private async detectTestFrameworks(): Promise<void> {\n const packageJsonPath = path.join(this.config.projectRoot, 'package.json');\n\n try {\n const packageJson = JSON.parse(\n await fs.readFile(packageJsonPath, 'utf-8')\n );\n const scripts = packageJson.scripts || {};\n const dependencies = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n // Detect test frameworks\n const frameworks: string[] = [];\n if (dependencies.jest) frameworks.push('jest');\n if (dependencies.vitest) frameworks.push('vitest');\n if (dependencies.mocha) frameworks.push('mocha');\n if (dependencies.playwright) frameworks.push('playwright');\n if (dependencies.cypress) frameworks.push('cypress');\n\n this.config.testFrameworks.detected = frameworks;\n\n // Detect commands\n if (scripts.test) {\n this.config.testFrameworks.testCommand = 'npm test';\n } else if (scripts['test:run']) {\n this.config.testFrameworks.testCommand = 'npm run test:run';\n }\n\n if (scripts.coverage) {\n this.config.testFrameworks.coverageCommand = 'npm run coverage';\n }\n\n if (scripts.lint) {\n this.config.testFrameworks.lintCommand = 'npm run lint';\n }\n } catch (error: unknown) {\n console.warn('Could not detect test frameworks:', error);\n }\n }\n\n /**\n * Set up frame event listeners\n */\n private setupFrameListeners(): void {\n // Listen for frame closures (task completion)\n this.frameManager.on(\n 'frame:closed',\n async (frameId: string, frameData: any) => {\n if (frameData.type === 'task' || frameData.type === 'subtask') {\n await this.handleTaskCompletion({\n taskType: 'task_complete',\n frameId,\n frameName: frameData.name || 'Unnamed task',\n files: this.extractFilesFromFrame(frameData),\n changes: this.calculateChanges(frameData),\n metadata: frameData.metadata || {},\n });\n }\n }\n );\n\n // Listen for significant events\n this.frameManager.on(\n 'frame:event',\n async (frameId: string, eventType: string, data: any) => {\n if (eventType === 'code_change' || eventType === 'file_modified') {\n await this.handleTaskCompletion({\n taskType: 'code_change',\n frameId,\n frameName: data.description || 'Code change',\n files: data.files || [],\n changes: data.changes || { added: 0, removed: 0, modified: 1 },\n metadata: data,\n });\n }\n }\n );\n }\n\n /**\n * Set up file watchers for real-time code change detection\n */\n private async setupFileWatchers(): Promise<void> {\n try {\n const chokidar = await import('chokidar');\n\n const watcher = chokidar.watch(\n [\n '**/*.{ts,js,tsx,jsx,py,go,rs,java,cpp,c}',\n '!node_modules/**',\n '!dist/**',\n '!build/**',\n ],\n {\n cwd: this.config.projectRoot,\n ignored: /node_modules/,\n persistent: true,\n }\n );\n\n let changeQueue: string[] = [];\n let debounceTimer: NodeJS.Timeout | null = null;\n\n watcher.on('change', (filePath: string) => {\n changeQueue.push(filePath);\n\n // Debounce to avoid too many triggers\n if (debounceTimer) clearTimeout(debounceTimer);\n debounceTimer = setTimeout(async () => {\n if (changeQueue.length > 0) {\n await this.handleFileChanges([...changeQueue]);\n changeQueue = [];\n }\n }, 2000); // 2 second debounce\n });\n } catch (error: unknown) {\n console.warn('File watching not available:', error);\n }\n }\n\n /**\n * Handle task completion events\n */\n private async handleTaskCompletion(\n event: TaskCompletionEvent\n ): Promise<void> {\n // Avoid duplicate processing\n if (\n this.lastProcessedFrame === event.frameId &&\n event.taskType !== 'code_change'\n ) {\n return;\n }\n\n this.lastProcessedFrame = event.frameId;\n\n console.log(\n `\uD83D\uDD0D Task completed: ${event.frameName} (${event.files.length} files changed)`\n );\n this.emit('task:completed', event);\n\n // Run quality gates\n const results = await this.runQualityGates(event);\n\n // Check if gates passed\n const allPassed = results.every((r) => r.passed);\n\n if (allPassed) {\n console.log('\u2705 All quality gates passed');\n this.emit('quality:passed', { event, results });\n } else {\n console.log('\u26A0\uFE0F Quality gate failures detected');\n this.emit('quality:failed', { event, results });\n\n if (this.config.qualityGates.blockOnFailure) {\n await this.blockFurtherWork(results);\n }\n }\n\n // Record results in frame metadata\n await this.recordQualityResults(event.frameId, results);\n }\n\n /**\n * Handle file changes\n */\n private async handleFileChanges(files: string[]): Promise<void> {\n if (!this.config.reviewConfig.reviewOnEveryChange) return;\n\n // Filter out files that should be skipped\n const filteredFiles = files.filter((file) => {\n return !this.config.reviewConfig.skipPatterns.some((pattern) => {\n return file.includes(pattern.replace('*', ''));\n });\n });\n\n if (filteredFiles.length === 0) return;\n\n await this.handleTaskCompletion({\n taskType: 'file_modified',\n frameId: 'file-watcher',\n frameName: 'File changes detected',\n files: filteredFiles,\n changes: { added: 0, removed: 0, modified: filteredFiles.length },\n metadata: { trigger: 'file_watcher' },\n });\n }\n\n /**\n * Run all configured quality gates\n */\n private async runQualityGates(\n event: TaskCompletionEvent\n ): Promise<QualityGateResult[]> {\n const results: QualityGateResult[] = [];\n\n // Run linter first (fastest)\n if (this.config.qualityGates.runLinter) {\n results.push(await this.runLinter(event.files));\n }\n\n // Run tests (slower)\n if (this.config.qualityGates.runTests) {\n results.push(await this.runTests(event.files));\n }\n\n // Check test coverage\n if (this.config.qualityGates.requireTestCoverage) {\n results.push(await this.checkTestCoverage(event.files));\n }\n\n // Run code review (slowest, most thorough)\n if (this.config.qualityGates.runCodeReview) {\n results.push(await this.runCodeReview(event));\n }\n\n return results;\n }\n\n /**\n * Run linter on changed files\n */\n private async runLinter(files: string[]): Promise<QualityGateResult> {\n const start = Date.now();\n\n try {\n if (!this.config.testFrameworks.lintCommand) {\n return {\n gate: 'linter',\n passed: true,\n output: 'No lint command configured',\n duration: Date.now() - start,\n };\n }\n\n const output = execSync(this.config.testFrameworks.lintCommand, {\n cwd: this.config.projectRoot,\n encoding: 'utf-8',\n timeout: 30000, // 30 second timeout\n });\n\n return {\n gate: 'linter',\n passed: true,\n output,\n duration: Date.now() - start,\n };\n } catch (error: any) {\n return {\n gate: 'linter',\n passed: false,\n output: error.stdout || error.message,\n duration: Date.now() - start,\n issues: this.parseLintErrors(error.stdout || error.message),\n };\n }\n }\n\n /**\n * Run tests\n */\n private async runTests(files: string[]): Promise<QualityGateResult> {\n const start = Date.now();\n\n try {\n if (!this.config.testFrameworks.testCommand) {\n return {\n gate: 'tests',\n passed: true,\n output: 'No test command configured',\n duration: Date.now() - start,\n };\n }\n\n const output = execSync(this.config.testFrameworks.testCommand, {\n cwd: this.config.projectRoot,\n encoding: 'utf-8',\n timeout: 120000, // 2 minute timeout\n });\n\n return {\n gate: 'tests',\n passed: true,\n output,\n duration: Date.now() - start,\n };\n } catch (error: any) {\n return {\n gate: 'tests',\n passed: false,\n output: error.stdout || error.message,\n duration: Date.now() - start,\n issues: this.parseTestFailures(error.stdout || error.message),\n };\n }\n }\n\n /**\n * Check test coverage\n */\n private async checkTestCoverage(files: string[]): Promise<QualityGateResult> {\n const start = Date.now();\n\n try {\n if (!this.config.testFrameworks.coverageCommand) {\n return {\n gate: 'coverage',\n passed: true,\n output: 'No coverage command configured',\n duration: Date.now() - start,\n };\n }\n\n const output = execSync(this.config.testFrameworks.coverageCommand, {\n cwd: this.config.projectRoot,\n encoding: 'utf-8',\n timeout: 120000,\n });\n\n // Parse coverage percentage (simplified)\n const coverageMatch = output.match(/(\\d+\\.?\\d*)%/);\n const coverage = coverageMatch ? parseFloat(coverageMatch[1]) : 0;\n const threshold = 80; // 80% coverage threshold\n\n return {\n gate: 'coverage',\n passed: coverage >= threshold,\n output,\n duration: Date.now() - start,\n issues:\n coverage < threshold\n ? [\n {\n type: 'coverage_low',\n file: 'overall',\n message: `Coverage ${coverage}% is below threshold ${threshold}%`,\n severity: 'warning' as const,\n },\n ]\n : undefined,\n };\n } catch (error: any) {\n return {\n gate: 'coverage',\n passed: false,\n output: error.stdout || error.message,\n duration: Date.now() - start,\n issues: [\n {\n type: 'coverage_low',\n file: 'overall',\n message: 'Coverage check failed',\n severity: 'error' as const,\n },\n ],\n };\n }\n }\n\n /**\n * Run code review using AI agent\n */\n private async runCodeReview(\n event: TaskCompletionEvent\n ): Promise<QualityGateResult> {\n const start = Date.now();\n\n try {\n // This would integrate with the code review agent\n const reviewPrompt = this.generateCodeReviewPrompt(event);\n\n // For now, simulate a review (in real implementation, call agent)\n const review = await this.callCodeReviewAgent(reviewPrompt, event.files);\n\n return {\n gate: 'code_review',\n passed: !review.issues || review.issues.length === 0,\n output: review.summary,\n duration: Date.now() - start,\n issues: review.issues,\n };\n } catch (error: any) {\n return {\n gate: 'code_review',\n passed: false,\n output: `Code review failed: ${error.message}`,\n duration: Date.now() - start,\n };\n }\n }\n\n /**\n * Generate code review prompt\n */\n private generateCodeReviewPrompt(event: TaskCompletionEvent): string {\n return `\nPlease review the following code changes:\n\nTask: ${event.frameName}\nFiles changed: ${event.files.join(', ')}\nChanges: +${event.changes.added}, -${event.changes.removed}, ~${event.changes.modified}\n\nFocus areas: ${this.config.reviewConfig.focusAreas.join(', ')}\n\nPlease check for:\n1. Security vulnerabilities\n2. Performance issues \n3. Code maintainability\n4. Correctness and logic errors\n5. Best practices adherence\n\nProvide specific, actionable feedback.\n`;\n }\n\n /**\n * Call code review agent (placeholder for actual implementation)\n */\n private async callCodeReviewAgent(\n prompt: string,\n files: string[]\n ): Promise<{\n summary: string;\n issues?: QualityIssue[];\n }> {\n // This would integrate with Claude Code's agent system\n // For now, return a mock review\n return {\n summary: `Reviewed ${files.length} files. Code quality looks good.`,\n issues: [],\n };\n }\n\n /**\n * Parse lint errors into structured issues\n */\n private parseLintErrors(output: string): QualityIssue[] {\n const issues: QualityIssue[] = [];\n\n // Simple parser for common lint formats\n const lines = output.split('\\n');\n for (const line of lines) {\n const match = line.match(\n /^(.+?):(\\d+):(\\d+):\\s*(error|warning):\\s*(.+)$/\n );\n if (match) {\n issues.push({\n type: 'lint_error',\n file: match[1],\n line: parseInt(match[2]),\n message: match[5],\n severity: match[4] as 'error' | 'warning',\n });\n }\n }\n\n return issues;\n }\n\n /**\n * Parse test failures into structured issues\n */\n private parseTestFailures(output: string): QualityIssue[] {\n const issues: QualityIssue[] = [];\n\n // Simple parser for test failures\n const lines = output.split('\\n');\n for (const line of lines) {\n if (line.includes('FAIL') || line.includes('\u2717')) {\n issues.push({\n type: 'test_failure',\n file: 'unknown',\n message: line.trim(),\n severity: 'error',\n });\n }\n }\n\n return issues;\n }\n\n /**\n * Block further work when quality gates fail\n */\n private async blockFurtherWork(results: QualityGateResult[]): Promise<void> {\n const failedGates = results.filter((r) => !r.passed);\n\n console.log('\uD83D\uDEAB Quality gates failed - blocking further work:');\n failedGates.forEach((gate) => {\n console.log(` ${gate.gate}: ${gate.output}`);\n if (gate.issues) {\n gate.issues.forEach((issue) => {\n console.log(\n ` - ${issue.severity}: ${issue.message} (${issue.file}:${issue.line || 0})`\n );\n });\n }\n });\n\n console.log('\\n\uD83D\uDD27 Fix these issues before continuing:');\n const allIssues = failedGates.flatMap((g) => g.issues || []);\n allIssues.forEach((issue, i) => {\n console.log(`${i + 1}. ${issue.message}`);\n });\n }\n\n /**\n * Record quality results in frame metadata\n */\n private async recordQualityResults(\n frameId: string,\n results: QualityGateResult[]\n ): Promise<void> {\n try {\n const frame = await this.frameManager.getFrame(frameId);\n if (frame) {\n frame.metadata = {\n ...frame.metadata,\n qualityGates: {\n timestamp: new Date().toISOString(),\n results,\n passed: results.every((r) => r.passed),\n totalDuration: results.reduce((sum, r) => sum + r.duration, 0),\n },\n };\n\n // Update frame with quality results\n await this.frameManager.updateFrame(frameId, frame);\n }\n } catch (error: unknown) {\n console.error('Failed to record quality results:', error);\n }\n }\n\n /**\n * Extract files from frame data\n */\n private extractFilesFromFrame(frameData: any): string[] {\n // Extract file paths from various possible locations\n const files: string[] = [];\n\n if (frameData.metadata?.files) {\n files.push(...frameData.metadata.files);\n }\n\n if (frameData.events) {\n frameData.events.forEach((event: any) => {\n if (event.type === 'file_change' && event.data?.file) {\n files.push(event.data.file);\n }\n });\n }\n\n return [...new Set(files)]; // Remove duplicates\n }\n\n /**\n * Calculate changes from frame data\n */\n private calculateChanges(frameData: any): {\n added: number;\n removed: number;\n modified: number;\n } {\n return {\n added: frameData.metadata?.linesAdded || 0,\n removed: frameData.metadata?.linesRemoved || 0,\n modified: frameData.metadata?.filesModified || 1,\n };\n }\n\n /**\n * Stop post-task hooks\n */\n async stop(): Promise<void> {\n this.isActive = false;\n this.removeAllListeners();\n console.log('\uD83D\uDED1 Post-task hooks stopped');\n }\n\n /**\n * Get current configuration\n */\n getConfig(): PostTaskConfig {\n return { ...this.config };\n }\n\n /**\n * Update configuration\n */\n updateConfig(updates: Partial<PostTaskConfig>): void {\n this.config = { ...this.config, ...updates };\n this.emit('config:updated', this.config);\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { fileURLToPath as __fileURLToPath } from 'url';
|
|
2
|
-
import { dirname as __pathDirname } from 'path';
|
|
3
|
-
const __filename = __fileURLToPath(import.meta.url);
|
|
4
|
-
const __dirname = __pathDirname(__filename);
|
|
5
|
-
class ClaudeCodeSubagentClient {
|
|
6
|
-
async executeSubagent(request) {
|
|
7
|
-
return {
|
|
8
|
-
success: true,
|
|
9
|
-
result: {
|
|
10
|
-
message: `Stub execution of ${request.type} agent`,
|
|
11
|
-
task: request.task
|
|
12
|
-
},
|
|
13
|
-
tokens: 100
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
export {
|
|
18
|
-
ClaudeCodeSubagentClient
|
|
19
|
-
};
|
|
20
|
-
//# sourceMappingURL=subagent-client-stub.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/integrations/claude-code/subagent-client-stub.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Stub implementation of ClaudeCodeSubagentClient for testing\n * Used when child_process is not available (e.g., in tests)\n */\n\nexport interface SubagentRequest {\n type: string;\n task: string;\n context: Record<string, any>;\n}\n\nexport interface SubagentResponse {\n success: boolean;\n result: any;\n error?: string;\n tokens?: number;\n}\n\nexport class ClaudeCodeSubagentClient {\n async executeSubagent(request: SubagentRequest): Promise<SubagentResponse> {\n // Stub implementation for testing\n return {\n success: true,\n result: {\n message: `Stub execution of ${request.type} agent`,\n task: request.task,\n },\n tokens: 100,\n };\n }\n}"],
|
|
5
|
-
"mappings": ";;;;AAkBO,MAAM,yBAAyB;AAAA,EACpC,MAAM,gBAAgB,SAAqD;AAEzE,WAAO;AAAA,MACL,SAAS;AAAA,MACT,QAAQ;AAAA,QACN,SAAS,qBAAqB,QAAQ,IAAI;AAAA,QAC1C,MAAM,QAAQ;AAAA,MAChB;AAAA,MACA,QAAQ;AAAA,IACV;AAAA,EACF;AACF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|